Xtext:使用带交叉引用的句法谓词

Xtext: Using syntactic predicates with cross-reference

我无法理解如何使用句法谓词。

我的语法是:

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;