Kann mich jemand aufklären, warum ein rekursiver Abstiegsparser mit Backtracking, der die Produktionen und S → a a (in dieser Reihenfolge) versucht, die durch die Grammatik S → a S a | gebildete Sprache nicht erkennt a a .
Es scheint nur Wörter aus der Sprache zu analysieren n ≥ 1 } .
Ich habe einen solchen Parser mit diesem ABNF-Parser-Generator mit der Produktionsregel generiert, S = "a" S "a" / "aa"
und der Parser erkennt das Wort aaaaaa
beispielsweise nicht.
Ich würde erwarten, dass die Produktion bis die Verkettung der Endknoten des Analysebaums von links mit 7 beginnt , und dann den Analysebaum hinaufgehen und stattdessen die Produktion S → a a auswählen, bis der Baum aussieht so was:a
S
/ | \
a S a
/ | \
a S a
/ \
a a
aaaaaa
.
aaaaaa
sollte analysiert werden und nicht. Aber aaaa
analysiert. Sie haben anscheinend Recht mit Potenzen von 2. Das Ding muss abgehört werden. es analysiert nur aa
mit S = "aa" / "a" [S] "a"
. Können Sie verfolgen, was der Parser tut?