[英]Converting given ambiguous arithmetic expression grammar to unambiguous LL(1)
在这个学期,我有关于编译器的课程,我们目前正在学习语法 - 不同的语法和类型的解析器。 我遇到了一个我无法完全弄清楚的问题,或者至少我无法确保我做对了。 我已经做了2次尝试并找到了反例。 我得到了这个算术表达式的歧义语法:E → E+E | EE | E*E | 电/电 | E^E | -E | (E)| 身份证 | num ,其中 ^ 代表权力。
我想出了优先事项应该是什么。 最高优先级是括号,其次是幂,然后是一元减号,然后是乘法和除法,然后是加法和减法。 我被要求将其转换为等效的 LL(1) 语法。 所以我写了这个:
尽管它没有歧义,但这似乎不是与第一个语法等效的问题。 例如:给定的语法可以识别输入:--5而我的语法不行。 我怎样才能确保我涵盖了所有情况? 我应该如何修改我的语法以与给定的语法等效? 提前致谢。
编辑:另外,我当然会消除左递归和左因子分解来制作这个 LL(1),但首先我需要弄清楚我上面问的这个主要部分。
这是一个应该适用于您的情况
E = E+A | E-A | A
A = A*C | A/C | C
C = C^B | B
B = -B | D
D = (E) | id | num
作为旁注:还要注意您的任务的要求,因为某些应用程序可能会为一元减运算符分配更高的优先级,而不是幂二元运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.