Parsing &引用;决策可以匹配输入,例如''&引用;使用多个备选方案:1,2“;在xText中
我正在使用xText为一种新语言编写一个新的eclipse插件。但当我尝试生成代码Antlr时,请给出以下警告:Parsing &引用;决策可以匹配输入,例如''&引用;使用多个备选方案:1,2“;在xText中,parsing,eclipse-plugin,antlr,context-free-grammar,xtext,Parsing,Eclipse Plugin,Antlr,Context Free Grammar,Xtext,我正在使用xText为一种新语言编写一个新的eclipse插件。但当我尝试生成代码Antlr时,请给出以下警告: Decision can match input such as "'?'" using multiple alternatives: 1, 2 我确信,在评论了大量代码之后,问题在于以下代码片段: ... Expression: operatorExpr=OperatorExpr (condExpr=CondExpr)? |exprPrimary=ExprPr
Decision can match input such as "'?'" using multiple alternatives: 1, 2
我确信,在评论了大量代码之后,问题在于以下代码片段:
...
Expression:
operatorExpr=OperatorExpr (condExpr=CondExpr)?
|exprPrimary=ExprPrimary (condExpr=CondExpr)?
;
CondExpr:
'?'
;
ExprPrimary:
Identifier
;
OperatorExpr:
'+' expression=Expression
;
...
如何解决警告问题?如果您有以下表达式:
+x?
,则可以通过两种方式对其进行分析:
Expression
-> operatorExpr : OperatorExpr
-> +
-> expression : Expression
-> exprPrimary : ExprPrimary = x
-> condExpr : ?
Expression
-> operatorExpr : OperatorExpr
-> +
-> expression : Expression
-> exprPrimary : ExprPrimary = x
-> condExpr : ?
condExpr可以设置在顶部表达式或内部表达式
为了解决这个问题,您可以在主规则中只保留第二个condExpr。无论如何,这是xtext解决歧义的默认方式(意味着使用当前语法,它将选择第二次解析)
如果使用另一种方法,只保留第一个condExpr,则会遇到两个问题:1)运算符表达式与内部运算符表达式的语法仍然不明确(++x?
),以及2)x?
将不再匹配