Xtext:带有一元减号的歧义语法
Xtext: Ambiguous grammar with unary minus
谁能解释一下为什么这是歧义语法?
我有一个相当详尽的语法,并指出了我遇到的错误:
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
当我尝试 运行 时收到以下错误消息:
"Decision can match input such as "RULE_MINUS {RULE_MINUS, ......}" 使用多个选项:1、2
因此,该输入的备选方案 2 被禁用
你的语法有歧义,因为它可以被解析为两个不同的、同样有效的树。请考虑输入 1 - 2 - 3
。可以用两种方式阅读它(添加括号以强调模棱两可的优先顺序:
- 1 - ( 2 - 3 )
- (1 - 2) - 3
您需要将其修改为
UnaryExpression: MINUS Primary | Primary;
Primary: '(' Expressions ')' | Atom;
消除歧义。
谁能解释一下为什么这是歧义语法? 我有一个相当详尽的语法,并指出了我遇到的错误:
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
当我尝试 运行 时收到以下错误消息: "Decision can match input such as "RULE_MINUS {RULE_MINUS, ......}" 使用多个选项:1、2 因此,该输入的备选方案 2 被禁用
你的语法有歧义,因为它可以被解析为两个不同的、同样有效的树。请考虑输入 1 - 2 - 3
。可以用两种方式阅读它(添加括号以强调模棱两可的优先顺序:
- 1 - ( 2 - 3 )
- (1 - 2) - 3
您需要将其修改为
UnaryExpression: MINUS Primary | Primary;
Primary: '(' Expressions ')' | Atom;
消除歧义。