0

コンパイラに以下の文法を使用するとしましょう

 S -> a | aB

左因数分解を実行すると、次のようになります (e はイプシロン)

 S -> aC
 C -> B | e 

次に、最終的に次のようになるイプシロンを削除したい

 S -> a | aC
 C -> B

再び左因数分解を実行する必要があるように見えることに注意してください。そうすることで、無限に左因数分解とイプシロンの削除を行ったり来たりします。私は何か間違ったことをしていますか??

コンパイラの文法で左因数分解とイプシロンの両方を削除する必要がありますか?

4

1 に答える 1

0

ほとんどの場合、どちらの変換も行う必要はありません。実際、一部の文法では、左因数分解によって LALR(1) パーサー ジェネレーターのシフト縮小競合が発生します。

于 2012-12-01T05:22:26.663 に答える