Il modo migliore per analizzare le regole grammaticali opzionali?

2

Ho iniziato a scrivere un parser scritto a mano solo per divertimento. Per regole semplici funziona, ma ho problemi con le regole grammaticali opzionali. Ho contrassegnato le regole facoltative con un punto interrogativo.

Ecco una semplice regola:

rule1:  "AA"? "AB"? "AC"? "AD"

Quindi la stringa AA, AB e AC è facoltativa, ma è necessario AD.

es .: "AAABAD" corrisponde, "AAAD" corrisponde, "AAAB" non corrisponde, "AD" corrisponde, ...

Ho bisogno di un algoritmo e non di uno strumento regex o qualcosa del genere. Posso risolvere questo problema con il metodo della forza bruta (quindi provando ogni possibile combinazione delle regole) ma penso che ci sia un modo migliore per farlo.

    
posta Industrial-antidepressant 01.11.2011 - 00:03
fonte

1 risposta

3

Normalmente il tuo lexer distinguerebbe "AA", da "AB", ecc. Se questo è un problema che posso elaborare.

Se il lexer lo fa, hai la grammatica parziale:

Regola1 → Regola "AA" 1B

Regola1 → Regola1B

Regola1B → "AB" Regola1C

Regola1B → Regola1C

Regola1C → "AC" "AD"

Regola1C → "ANNUNCIO"

Questo potrebbe non essere così efficiente, ma è relativamente chiaro. Credo che avrai bisogno di una discesa ricorsiva con il backtracking per questo però.

    
risposta data 01.11.2011 - 00:32
fonte

Leggi altre domande sui tag