web-dev-qa-db-ja.com

文法を同じ言語を認識するLL(1)文法に変換する

コンパイラ試験について次のサンプルの質問があり、解決策を確認したいと思います。

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 | ε
2
TomSelleck

閉じますが、完全ではありません。

「a + b + c」という文を考えてみます。ここで、a、b、cはすべてIDです。

元の文法は、E + T再帰のおかげで、これを認識します。

文法は「a + b」を認識し、再発しないためにクラッシュします。

[後で追加]ここで、「a(b; c; d; e)」について考えてみましょう。同様の理由で、「a(b; c」の後に文法がクラッシュします。

2
John R. Strohm