これは右再帰文法である:左回帰と右回帰は同じ構文解析ツリーを生成するかどうか?
<assign> -> <id> = <exp>
<id> -> A | B | C
<exp> -> <term> + <exp> | <temp>
<term> -> <factor> * <term> | <factor>
<factor> -> (<exp>) | <id>
これは左再帰の文法である:
<assign> -> <id> = <exp>
<id> -> A | B | C
<exp> -> <exp> + <term> | <term>
<term> -> <term> * <factor> | <factor>
<factor> -> (<exp>) | <id>
それらの文法は文字列B + C + Aで同じ構文解析ツリーを生成しますか? 次の画像は左回帰です。
しかし、私はそれは、ノードの位置の間で少し異なっている、右再帰のための解析木を描きます。私がやっていることが正しいのか分かりません。だから私は、左回帰と右回帰が2つの異なる解析木を生成するか、同じ解析木でなければならないのだろうか。この問題を明確にするのを助けてください。ありがとう。
両方の文法が異なるので、私は異なる構文解析木を期待します。右の再帰は、追加ノードと右ノードの単一拡張をスワップします(この説明に従うことができるかどうかはわかりません:))。 – hochl
注:入力した画像は、文字列A = B + C + Aです。 –
修正済み。ありがとうSQLPolice – kp2349