コンパイラ試験について次のサンプルの質問があり、解決策を確認したいと思います。
Convert the following grammar into an LL(1) grammar which recognises the same
language:
E -> E + T
E -> T
T -> id
T -> id()
T -> id(L)
L -> E;L
L -> E
私の答えのために私は持っています
E -> T E'
E' -> + T | ε
T -> id
T -> id()
T -> id(L)
L -> E L'
L' -> ;E | ε
誰かが答えを確認できますか?
編集
わかりました、それは似ているでしょうか...
E -> T E'
E' -> + E | ε
T -> id
T -> id()
T -> id(L)
L -> E L'
L' -> ;E | ε
閉じますが、完全ではありません。
「a + b + c」という文を考えてみます。ここで、a、b、cはすべてIDです。
元の文法は、E + T再帰のおかげで、これを認識します。
文法は「a + b」を認識し、再発しないためにクラッシュします。
[後で追加]ここで、「a(b; c; d; e)」について考えてみましょう。同様の理由で、「a(b; c」の後に文法がクラッシュします。