"Decision can match input such as ""?"在 xText 中" using multiple alternatives: 1, 2"



我正在使用xText为新语言编写新的eclipse插件。但是当我尝试生成代码时,Antlr 给我这个警告:

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( 语法对于具有内部 OperatorExpression 的 OperatorExpression 仍然不明确(例如++x?(,2( x?将不再匹配。

相关内容

  • 没有找到相关文章

最新更新