この演習に問題があります:
λ計算の次のあいまいな文法をGとします。
E → v | λv.E | EE | (E)
ここで、Eは単一の非終端記号、λv.EはEの変数vに関する抽象化を表し、EEはアプリケーションを表します。
- L(G ')= L(G)となるようなLL(1)文法G'を定義し、次の通常の規則を課すことでGのあいまいさを解決します。
- 抽象化は正しい連想です。
- アプリケーションは関連付けられたままです。
- アプリケーションは、抽象化よりも優先されます。
- G 'のLL(1)解析テーブルと、文字列の解析時に取得された解析ツリーを表示します
λv1. λv2. v1v2v1
。
あいまいさの設定の優先順位と関連付けを排除し、次の文法を取得しました。
E -> EF | F
F -> λv.G | G
G -> (E) | v
これはLL(1)ではありません。これは、生成E -> EF
が再帰的に行われるためです。しかし、私が得るその生産から左再帰を排除します:
E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v
これは要件1.2に準拠していません。
私はインターネットで解決策を探しましたが、左再帰を維持しながら左結合性を維持することは不可能のようです。
ただし、この演習は数年前にコンパイラの試験に出たので、正解があるはずです。
ご協力ありがとうございました。