anchor.diff:      |    (  powerExpressionNotPlusMinus[lc_stmt] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
       ;
   
  -// math power operator (**) (level 3)
  -powerExpression[int lc_stmt]
  -    :   unaryExpression[lc_stmt] (STAR_STAR^ nls! unaryExpression[0])*
  -    ;
  -
  -// math power operator (**) (level 3)
  -// (without ++(prefix)/--(prefix)/+(unary)/-(unary))
  -// The different rules are needed to avoid ambiguous selection
  -// of alternatives.
  -powerExpressionNotPlusMinus[int lc_stmt]
  -    :   unaryExpressionNotPlusMinus[lc_stmt] (STAR_STAR^ nls! unaryExpression[0])*
  -    ;
  -
  -// ++(prefix)/--(prefix)/+(unary)/-(unary) (level 2)
  +// ++(prefix)/--(prefix)/+(unary)/-(unary) (level 3)
   unaryExpression[int lc_stmt]
       :   INC^ nls! unaryExpression[0]
       |   DEC^ nls! unaryExpression[0]
  
positive.code:         )
      ;
  
  // qualified names, array expressions, method invocation, post inc/dec
  postfixExpression[int lc_stmt]
      :
          pathExpression[lc_stmt]
  
negative.code:     |   unaryExpressionNotPlusMinus[lc_stmt]
      ;
  
  // math power operator (**) (level 2)
  powerExpression[int lc_stmt]
      :   unaryExpression[lc_stmt] (STAR_STAR^ nls! unaryExpression[0])*
      ;
  
  // math power operator (**) (level 2)
  // (without ++(prefix)/--(prefix)/+(unary)/-(unary))
  // The different rules are needed to avoid ambiguous selection
  // of alternatives.
  powerExpressionNotPlusMinus[int lc_stmt]
      :   unaryExpressionNotPlusMinus[lc_stmt] (STAR_STAR^ nls! unaryExpression[0])*
      ;
  
  // ~(BNOT)/!(LNOT)/(type casting) (level 1)
  unaryExpressionNotPlusMinus[int lc_stmt]
      :   BNOT^ nls! unaryExpression[0]
      |   LNOT^ nls! unaryExpression[0]
      |   (   // subrule allows option to shut off warnings
              options {
  