【发布时间】:2015-01-15 00:48:58
【问题描述】:
有人能解释一下为什么这是模棱两可的语法吗? 我有一个相当复杂的语法,并且已经确定了我对此的错误:
Expressions:
AdditionOrSubtraction;
AdditionOrSubtraction:
UnaryExpression ((PLUS | MINUS) UnaryExpression)*
;
UnaryExpression:
MINUS Expressions
| Atom
;
Atom returns Expression:
INT
;
我查看了 java 规范,它给出了类似的表达式: http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-MultiplicativeExpression
我已经简化并显示在下面:
MultiplicativeExpression:
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
UnaryExpression:
+ UnaryExpression
- UnaryExpression
Literal
Literal:
IntegerLiteral
当我尝试运行它时收到以下错误消息: “决策可以使用多种选择来匹配诸如“RULE_MINUS {RULE_MINUS, ......}”之类的输入:1、2 因此,该输入禁用了备选方案 2"
【问题讨论】:
-
你能把它翻译成简单的语法,比如
A -> AB、B -> aB、A -> aa。我希望你熟悉抽象语法,否则这个评论对你来说没有多大意义。我可以告诉你为什么它会模棱两可,但我不知道这种语言的语法和结构。
标签: parsing antlr antlr3 xtext