我目前正在使用以下语法,我被问到是否是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)。我能想出的就是第一个。制作来自左到右,我们无法删除任何规则。