在这个学期,我有编译器课程,我们正在学习语法 - 不同的语法和解析器类型。我遇到了一个我无法弄清楚的问题,或者至少我无法确定我是否正确地做到了。我已经做了2次尝试并且发现了反例。 算术表达式给出了这种模糊的语法: E→E + E | E-E | E * E | E / E | E ^ E | -E | (E)| id | num,其中^代表权力。
我想出了优先事项应该是什么。最高优先级是括号,然后是幂,接着是一元减号,然后是乘法和除法,然后是加法和减法。我被要求将其转换为等效的LL(1)语法。所以我写了这个:
对于第一个问题,似乎问题不是等效语法,尽管它不含糊。例如:给定语法可以识别输入: - 5 ,而我的语法不能。我怎样才能确保我覆盖所有案件?我应该如何修改我的语法以与给定的语法等效?提前谢谢。
编辑:另外,我当然会消除左递归并留下因子来制作这个LL(1),但首先我要弄清楚我上面提到的这个主要部分。
答案 0 :(得分:1)
这是适用于您案件的
E = E+A | E-A | A
A = A*C | A/C | C
C = C^B | B
B = -B | D
D = (E) | id | num
作为旁注:还要注意你的任务的要求,因为some applications可能会为权力二元运算符赋予一元减运算符更高的优先级。