2010-05-31 14 views
9

Non riesco a trovare alcuna descrizione completa del parser LL (*), come ANTLR, su Internet.Come funzionano i parser LL (*)?

Mi chiedo quale sia la differenza tra un parser LL (k) e uno LL (*) e perché non possono supportare grammatiche recusrive a sinistra nonostante la loro flessibilità.

risposta

4

Ecco un articolo (da Terence Parr, autore di antlr) su LL(*) analisi grammaticale: article con un bel esempio di ciò che è, ma non LL(*)LL(k), per qualsiasi k.

Un altro buon riferimento (e molto più completo) è il "Definitive ANTLR Reference", ancora una volta da Terence Parr, e l'originale journal article che descrive come funziona antlr[pdf].

1

Quando si vede questo generalmente la quantità di token guarda avanti per analizzare la lingua.

Questa è la stessa cosa per il parser LR.

Quindi k è la massima montatura di token che il parer preleva prima di prendere una decisione. Si noti che più k è il più difficile sarà il parser a meno che non si usi un generatore (ANTLR, yacc, bison, ...).

Il parser LL utilizza un approccio dall'alto verso il basso che significa che cercherà l'albero più profondo. A causa di quella ricorsione a sinistra si formerà un albero infinitamente profondo e si romperà il parser.

AFAIK La maggior parte della lingua utilizza parser LR.