2010-05-31 10 views
9

Ich kann keine vollständige Beschreibung über LL (*) Parser, wie ANTLR, im Internet finden.Wie funktionieren LL (*) Parser?

Ich frage mich, was ist der Unterschied zwischen einem LL (k) Parser und einem LL (*) und warum sie links-recusive Grammatiken trotz ihrer Flexibilität nicht unterstützen können. Hier

Antwort

4

ist ein Artikel (von Terence Parr, der Autor von antlr) über LL(*) Grammatikanalyse: article mit einem schönen Beispiel dafür, was ist LL(*) aber nicht LL(k), für jeden k.

Eine weitere gute Referenz (und vieles mehr vollständig) ist die "Definitive ANTLR Reference", wieder von Terence Parr, und die ursprünglichen journal article beschreibt, wie antlr[pdf] funktioniert.

1

Wann immer Sie dies sehen, es in der Regel die Menge der Token voraussehen, um die Sprache zu analysieren.

Dies ist das gleiche für LR-Parser.

So k ist die maximale Menge an Token, die der Parer vor einer Entscheidung abrufen wird. Beachten Sie, dass je höher k ist, desto schwieriger wird der Parser, es sei denn, Sie verwenden einen Generator (ANTLR, yacc, bison, ...).

LL-Parser verwenden einen Top-Down-Ansatz, der bedeutet, dass es nach dem tiefsten Baum suchen wird. Aus diesem Grund macht die linke Rekursion einen unendlich tiefen Baum und bricht den Parser.

AFAIK Die meisten der Sprache verwenden LR-Parser.