Left Factoring
とはどう違いLeft Recursion
ますか?Left factoring
これは予測的なトップダウン解析手法であることを理解しています。しかし、この2つの用語を聞くと混乱します。
7 に答える
これは、使用されている2つの用語を見た方法です。
- 左再帰: 1 つまたは複数のプロダクションが、その間に消費されるトークンなしで、それ自体から到達できる場合。
- 左因数分解: 変換のプロセスで、文法を左再帰形式から同等の非左再帰形式に変換します。
左係数 :
与えられた文法を次のようにします: A-->ab1 | ab2 | ab3
1)すべてのプロダクションに共通の接頭辞があることがわかります。ここでプロダクションを選択した場合、バックトラックする必要がないことは確認されていません.
2) 生成を選択することができず、正しい構文木を作成することによって目的の文字列に到達することが保証されるため、非決定論的です。しかし、決定論的であり、バックトラックなしで可能な任意の文字列に変換するのに十分な柔軟性を残す方法で文法を書き直すと、次のようになります。
A --> aA'、A' --> b1 | b2| b3
文字列 ab2 の解析ツリーを作成するように求められた場合、バック トラッキングは必要ありません。A' を取得するときはいつでも正しい生成を選択できるため、正しい構文木を生成します。
左再帰:
あ --> あぁ | b ここで、最初の生成を選択すると、A の左の子が常に A になることは明らかです。これは左再帰です。この文法から生成された文字列は : ba* です。これは文法にあり得ないためです ... 次のように記述して左再帰を削除します。
A --> bA' A' --> E | aA' これで、左再帰がなくなり、 ba* を生成することもできます。
左再帰:= 左手の非終端記号が右の非終端記号と同じ場合。例: A->A&|B & はアルファです。このプロダクションを like に書き換えて、左のリカージョンを削除できます。
A->BA' A'->&A'|€</p>
左因子平均積は非決定論的であってはなりません。. 例: A->&A|&B|&C