Dies ist die richtige Rekursion Grammatik:Linke Rekursion und rechte Rekursion erzeugen denselben Syntaxbaum oder nicht?
<assign> -> <id> = <exp>
<id> -> A | B | C
<exp> -> <term> + <exp> | <temp>
<term> -> <factor> * <term> | <factor>
<factor> -> (<exp>) | <id>
Dies ist Linksrekursion Grammatik:
<assign> -> <id> = <exp>
<id> -> A | B | C
<exp> -> <exp> + <term> | <term>
<term> -> <term> * <factor> | <factor>
<factor> -> (<exp>) | <id>
Wird jene Grammatik den gleichen Parse-Baum für String B + C + A produziert? Das folgende Bild ist für die linke Rekursion.
jedoch zeichne ich der Parse-Baum für die rechte Rekursion, es zwischen der Position der Knoten sind ein bisschen anders. Ich weiß nicht, ob das, was ich tue, richtig ist. Ich frage mich also, ob Left Recursion und Right Recursion zwei verschiedene Parse-Bäume erzeugen oder der gleiche Parse-Baum sein sollten. Bitte helfen Sie dieses Problem zu klären. Vielen Dank.
da beide Grammatiken unterschiedlich sind, würde ich andere Parsebäume erwarten. Die richtige Rekursion würde die Addition und die einzelne Erweiterung auf dem rechten Knoten tauschen (nicht sicher, ob Sie dieser Erklärung folgen können :)). – hochl
Hinweis: Das von Ihnen angegebene Bild gilt für die Zeichenfolge "A = B + C + A". –
behoben. Danke SQLPolice – kp2349