我正在尝试编写一个使用Flex for scanner和一个名为PGen的特殊工具来定义语法的简单编译器。
现在,我正试图解决悬而未决的明确语法。 我搜索过这个。
这是一个悬挂其他问题的语法:
S → if E then S
| if E then S else S
| OTHER
这是解决此问题的语法(通过slides from 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时,我再次遇到了悬空的问题。
任何人都可以帮我找一个明确的LL1语法来嵌套if?
我读过in a Q&A on Stack Overflow这个语法不能成为LL1。但我无法意识到如何解决这种模糊性。