2017-12-03 3 views
0

私はLL(1)パーサ右結合の文法を処理する方法を見つけようとしています。たとえば、左の連想文法の場合、E->+TE' first()とfollow()は円滑に動作し、簡単に生成されたテーブルを解析します。しかし、右回帰文法の場合には、例えば、E->T^E/Tのパージングテーブルのような電源が適切に生成されていないなどの場合。私はリソースを探していますが、権限のような正しい結合性を避けるあらゆる例が見つかりました。誰でも私に答えを与えることができますか?はどのようにLL(1)パーサハンドル右連想文法

答えて

3

LLアルゴリズムは右回帰を全く処理しません。実際に、言い換えれば、左結合文法は右結合文法に変わり、意味論的規則で構文木を変形することによって左連想は復元される必要があります。したがって、プロダクションが実際に右結合である場合、ツリーの後処理を必要とせずに同じ文法を使用できます。

E->T^E/Tの問題は正しい再帰ではありません。問題は、2つの右辺が同じ非終端記号で始まり、予測不可能になることです。この解は左ファクタリングであり、E-> T(^ T)* `を生成する。

+0

ありがとうございました。私は完全にその点を逃した。 – Mahin

関連する問題