compiler-construction - 我如何检查此语法中的歧义:-
问题描述
E->EE+/E(E)/id
检查给定的语法是否有歧义。另外,如果您能告诉我消除歧义的过程,那将很有帮助。
我尝试为它制作解析树,但无法弄清楚如何真正让它找到一个模棱两可的情况
解决方案
Bison 为该语法生成一个 LALR(1) 解析器,而没有任何解析器冲突。没有解析冲突的 LALR(1) 文法不会有歧义,因此您似乎不太可能找到歧义。
作为参考,我使用的野牛输入是:
%%
E: E E '+'
| E '(' E ')'
| 'i'
如果您使用-v
标志处理它,bison 将生成一个包含完整状态机的报告文件。(有八个状态加上初始状态。)