解决转移/减少冲突

时间:2017-11-23 11:37:41

标签: parsing compiler-construction grammar context-free-grammar lr

我目前正在使用以下语法,我被问到是否是SLR(1)。语法是:

E -> E + A + A | E - A + A | E + A - A | E - A - A | T .
T -> T + A | T - A | A .
A -> A * B | A / B | B .
B -> ( E ) | x .

语法是ambigius并且在github中使用grammophone软件的帮助(http://mdaines.github.io/grammophone/#/只是将语法复制粘贴到编辑部分)我在板的第2行找到了shift / reduce的冲突当+-来临时。现在接下来的问题是修复语法,使其成为SLR(1)。我怎样才能做到这一点 ??我在网上搜索,我找不到答案。抱歉我的英语不好。

编辑:

语法最初是

E->E+E+E|E-E-E|E+E-E|E-E+E
E->E+E|E-E|E*E|E/E
E->(E)|x

并且练习告诉您*/具有同等优先级但高于+- +-同等重要。鉴于那些你必须将给定的语法改为另一个是SLR(1)。我能想出的就是第一个。制作来自左到右,我们无法删除任何规则。

0 个答案:

没有答案