【发布时间】:2017-07-01 01:17:57
【问题描述】:
我正在尝试编写一个表达式语法,其中有 3 个运算符“+”、“-”和“/”。乘法运算符通过并置隐含,如下所示:
(1+2)(3+4 5)
语法如下:
S -> A ('+' A)*
A -> B ('-' B)*
B -> C ('/' C)*
C -> D ( D )*
D ->ID
|Num
|'(' S ')'
我正在使用使用 ANTLR 解析器的 Xtext,它说这在规则 C 上是递归的。如果我要将规则 4 更改为
C -> D ('\*' D)*
然后消除错误。我很困惑。需要帮助!
【问题讨论】:
-
什么是非终结符E?
-
对不起。那是一个错字。已编辑。
-
我不认为这是问题所在,但您的规则是多余的。例如。
S->A('+' A)*已经允许派生单个A,因此S->A是不必要的。其他所有人都一样。 -
好的。我删除了那些。我对解析很陌生。请多多包涵。
标签: parsing grammar left-recursion