Buoni libri sulla teoria dei parser?


9

Uno dei miei progetti Java è un fork di parboiled e, a differenza, diciamo, Antlr o JavaCC, i parser vengono generati in fase di esecuzione. Le grammatiche generate sono Grammatiche di espressione di analisi o PEG (ho sentito che un altro termine per loro è "packrat").

Mentre la generazione di runtime aggiunge complessità (generazione di bytecode coinvolta), un altro aspetto riguarda la stessa teoria del parser. Poiché purtroppo non ho solide basi in informatica, mi mancano le conoscenze teoriche per associare il codice esistente a concetti esistenti - in questo caso, parser.

Esiste un buon libro di consultazione sui parser che posso acquistare e leggere, o anche collegamenti su Internet, che può aiutarmi a costruire una tale "mappatura", tenendo conto delle mie scarse conoscenze teoriche?

Risposte:



3

Se vuoi conoscere la teoria dei parser, ti consiglio il volume 1 di questo libro classico:

Aho, Alfred V .; Ullman, Jeffrey D., La teoria dell'analisi, traduzione e compilazione , Prentice-Hall (1972).


Questa era un'enciclopedia sull'argomento al momento della pubblicazione. Ma da allora c'è stato un lavoro di ricerca.
babou,

1

Se non ti dispiace la differenza di lingua, il capitolo 8 del Perl di ordine superiore è interamente dedicato all'analisi, e in particolare costruisce un parser di discesa ricorsivo usando i combinatori di parser. È accessibile (se non hai paura di Perl) e disponibile a leggere gratuitamente se lo desideri. Mi ha aiutato a suscitare il mio interesse per l'analisi delle tecniche alcuni anni fa.


0

Mentre le tecniche di analisi sono un ottimo libro e ho letto alcune parti più volte, si concentra sull'analisi LR che non sarà interessante per te. Nel tuo caso particolare, stai osservando i PEG che sono una sorta di analisi discendente ricorsiva dall'alto verso il basso con backtracking basato sull'ordine delle alternative.

Vorrei suggerire di esaminare i combinatori di parser, che usano la stessa strategia. Ad esempio, è possibile controllare questo documento http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf che utilizza Haskell per creare combinatori di parser. Controllare la sezione in try cui incorporano il backtracking (Sezione 3.4).

In ogni caso, ciò che devi imparare è:

  • analisi di discendenza ricorsiva e grammatiche LL
  • lookahead fisso vs. lookahead infinito (fatto tramite backtracking)
  • strategie di backtracking
  • come gestire le regole ricorsive di sinistra
  • Memorizzazione dei risultati parziali per evitare comportamenti esponenziali
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.