Ich kann keine vollständige Beschreibung über LL (*) Parser, wie ANTLR, im Internet finden.
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 ist ein Artikel (von Terence Parr, dem Autor von antlr ) über LL(*)
Grammatikanalyse: article mit einem schönen Beispiel dafür, was LL(*)
ist, aber nicht LL(k)
, für alle k
.
Eine weitere gute Referenz (und viel vollständiger) ist die "Definitive ANTLR-Referenz" , wieder von Terence Parr, und dem ursprünglichen Zeitschriftenartikel , der beschreibt, wie antlr funktioniert [pdf] .
Wann immer Sie dies sehen, wird in der Regel die Menge des Tokens vorausschauend betrachtet, um die Sprache analysieren zu können.
Dies ist die gleiche Sache für LR-Parser.
Also ist k die maximale Menge an Token, die der Parer vor einer Entscheidung holen 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 er nach dem tiefsten Baum sucht. Aus diesem Grund wird die linke Rekursion einen unendlich tiefen Baum bilden und den Parser zerbrechen.
AFAIK Die meisten Sprachen verwenden LR-Parser.
Tags und Links algorithm parsing antlr context-free-grammar