Ich konnte Unterstützung für die Grammatik meines Parsers für abwechselnde Zeichen hinzufügen (z. B. ababa
oder baba
), indem Sie mit this question folgen.Parse-Grammatik abwechselnd und wiederholen
Ich versuche nun, das zu erweitern, indem ich Wiederholungen von Zeichen erlaube.
Zum Beispiel würde ich gerne auch abaaabab
und aababaaa
unterstützen können. In meinem speziellen Fall ist nur die a
erlaubt zu wiederholen, aber eine Lösung, die das Wiederholen von b
's erlaubt, wäre auch nützlich.
die Regeln von der anderen Frage Gegeben:
expr ::= A | B
A ::= "a" B | "a"
B ::= "b" A | "b"
... ich versuchte es erstreckt Wiederholungen zu unterstützen, etwa so:
expr ::= A | B
# support 1 or more "a"
A_one_or_more = A_one_or_more "a" | "a"
A ::= A_one_or_more B | A_one_or_more
B ::= "b" A | "b"
... aber das Grammatik ist mehrdeutig. Ist es möglich, dass dies eindeutig gemacht wird, und wenn ja, könnte mir jemand helfen, es zu disambiguieren?
Ich verwende die lemon parser, die ein LALR (1) Parser ist.
Vielen Dank für Ihre ausführliche Antwort. Es macht absolut Sinn, aber leider fehlen meine Fähigkeiten in diesem Bereich, so dass es mir schwer fällt, meine Ambiguität zu lösen. Ich werde mich weiter mit meinem speziellen Problem beschäftigen und hoffentlich kann ich es lösen. Danke nochmal! – JesseBuesking
@JesseBuesking: Sie können eine bessere Antwort erhalten, wenn Sie eine genauere Frage stellen. Von deinem Kommentar zu der anderen Antwort, ich nehme an, dass deine Grammatik nicht wirklich so aussieht wie die, nach der du fragst. Ich stehe jedoch zu meiner Aussage, dass es am besten ist, einige Syntaxdiagramme zu zeichnen, um Ihr Denken zu klären. – rici