首页 > 解决方案 > 我如何检查此语法中的歧义:-

问题描述

E->EE+/E(E)/id

检查给定的语法是否有歧义。另外,如果您能告诉我消除歧义的过程,那将很有帮助。

我尝试为它制作解析树,但无法弄清楚如何真正让它找到一个模棱两可的情况

标签: compiler-constructioncontext-free-grammarambiguity

解决方案


Bison 为该语法生成​​一个 LALR(1) 解析器,而没有任何解析器冲突。没有解析冲突的 LALR(1) 文法不会有歧义,因此您似乎不太可能找到歧义。

作为参考,我使用的野牛输入是:

%%
E: E E '+'
 | E '(' E ')'
 | 'i'

如果您使用-v标志处理它,bison 将生成一个包含完整状态机的报告文件。(有八个状态加上初始状态。)


推荐阅读