Sto giocando con la creazione di un parser in PHP per il mio gusto di BNF , per abbinare le stringhe alla grammatica in questa variante BNF. È ancora un lavoro in corso e soggetto a modifiche (potrei persino finire per passare al supporto ABNF o EBNF , invece della mia variante), ma sta procedendo abbastanza bene.
Ora, perdonami se configuro la nomenclatura qui, ma credo che ciò che ho creato finora possa essere chiamato un parser LL (1) (o forse sarebbe meglio chiamarlo un lexer), nel senso che valuta la fonte un personaggio alla volta, senza retrocedere.
Nella mia variante BNF una regola di produzione è terminata da una nuova riga. Ma una cosa, tra le altre cose, che una grammatica definita nella mia variante BNF non consente ancora, è di avere regole di produzione su più righe. Sicuramente non è una necessità, ma sarebbe un piacere avere, per migliorare la leggibilità delle regole grammaticali.
Tuttavia, sto lottando per trovare un modo per analizzare una regola del genere, senza tornare indietro. Credo che potrei decidere di avere, per esempio, un punto e virgola come carattere di chiusura per una regola di produzione. Ma solo per curiosità: dovrebbe, in linea di principio, essere in grado di disambiguare le linee nuove come se fossero parte di una regola o la fine di una regola, senza tornare indietro? O semplicemente non è possibile?
Per tua considerazione, ecco una piccola grammatica di esempio (non esaustiva) nella mia variante BNF:
<DIGIT> ::= "0"-"9"
<ALPHAHI> ::= "A"-"Z"
<ALPHALO> ::= "a"-"z"
<ALPHA> ::= <ALPHAHI> |
<ALPHALO>
<ALPHANUM> ::= <ALPHA> |
<DIGIT>