コンパイラ設計のダングリングelse問題の場合、あいまいさを取り除く前にそれを因数分解したままにする理由はありますか?
CFG を LL(1) 文法に変換しているので、私の教授は、最初に再帰を除去し、次に左因子を除去し、文法からあいまいさを除去するように求めています。しかし、私が読んだことによると、あいまいさは通常最初に排除されます。左因数分解後にあいまいさを取り除く方法がわかりません。
これは、因数分解を残した後の結果です。
S -> i E t S S' | other
S' -> e S | epsilon
しかし、私が理解しているように、あいまいさを取り除くには文法を書き直す必要があるため、文法は常にこのようになりますよね?
S -> U | M
M -> i E t M e M | other
U -> i E t U'
U' -> M e U | S
または、それを行う別の方法はありますか?私が見る限り、これはぶら下がっている他からあいまいさを取り除く唯一の方法です。