繁体   English   中英

将给定的有歧义的算术表达式语法转换为无歧义的 LL(1)

[英]Converting given ambiguous arithmetic expression grammar to unambiguous LL(1)

在这个学期,我有关于编译器的课程,我们目前正在学习语法 - 不同的语法和类型的解析器。 我遇到了一个我无法完全弄清楚的问题,或者至少我无法确保我做对了。 我已经做了2次尝试并找到了反例。 我得到了这个算术表达式的歧义语法:E → E+E | EE | E*E | 电/电 | E^E | -E | (E)| 身份证 | num ,其中 ^ 代表权力。

我想出了优先事项应该是什么。 最高优先级是括号,其次是幂,然后是一元减号,然后是乘法和除法,然后是加法和减法。 我被要求将其转换为等效的 LL(1) 语法 所以我写了这个:

  • E → E+A | EA | 一种
  • A → A*B | A/B |
  • B → -C | C
  • C → D^C | D
  • D → (E) | 身份证 | 数量

尽管它没有歧义,但这似乎不是与第一个语法等效的问题。 例如:给定的语法可以识别输入:--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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM