Flex for Scanner と PGen という特別なツールを使用して文法を定義する簡単なコンパイラを作成しようとしています。
今、私は他にぶら下がっているための明確な文法を解決しようとしています. 私はこれを検索しました。
これは、else 問題がぶら下がっている文法です。
S → if E then S
| if E then S else S
| OTHER
これは、この問題を解決する文法です ( Berkeley のスライドを使用):
S → MIF /* all then are matched */
| UIF /* some then are unmatched */
MIF → if E then MIF else MIF
| OTHER
UIF → if E then S
| if E then MIF else UIF
しかし、この文法はまだ LL1 ではなく、あいまいです。
このあいまいさを解消してLL1にしようとしたところ、再びダングリングelseの問題に直面しました。
ネストされたifの明確なLL1文法を見つけるのを手伝ってくれる人はいますか?
この文法は LL1 にならないというStack Overflow の Q&A を読みました。しかし、このあいまいさをどのように解決できるかわかりません。