Xtext:使用交叉引用的语法谓词



我在理解如何使用语法谓词方面有困难。

我的语法是:

Rule:
    'terminalOne' (name=ID ':')?
    (field='terminalTwo' | myReference=[Something])? (anotherField=RuleTwo TOK_SEMI);

产生非ll(*)冲突。

我试着把'=>'放在前面:

(anotherField=RuleTwo TOK_SEMI)

但这似乎没有帮助。

我如何用语法谓词解决它?

谢谢。

我做了一些缩短(你的左保理方式看起来很不寻常)

RuleA:
    'terminalA' (name=ID ':')?
    ((->fieldA=ID passedParams+=AdditiveExpression (',' passedParams+=AdditiveExpression)*)
    |
    ((fieldB='t' | fieldC='q')? (fieldD=AdditiveExpression ";")));

AdditiveExpression returns BExpression :
    RuleB
    ({BBinaryOpExpression.leftExpr=current} functionName=("+" | "-") rightExpr=RuleB)*
    ;
RuleB returns BExpression
    : PostopExpression 
    | RuleC
    ; 
RuleC returns BExpression : {BUnaryOpExpression} 
    functionName="-" expr=UnaryOrPrimaryExpression
    ;
PostopExpression returns BExpression :
    PrimaryExpression ({BUnaryPostOpExpression.expr=current} functionName = ("++"))?
    ;
PrimaryExpression returns BExpression:
    c=constant
  | myID=ID '(' myFieldB+=AdditiveExpression (',' myFieldB+=AdditiveExpression)* ')'
    | myP=ID (operator+='['intvalue=INT operator+=']')?
    | operator+='(' additiveExpression=AdditiveExpression operator+=')'
    | operator+='someOperator' operator+='(' additiveExpression=AdditiveExpression operator+=')';

constant:
    booleanValue='FALSE'
    | booleanValue='TRUE'
    | integerValue=INT;

最新更新