anchor.diff:  unaryExpression[int lc_stmt]
       :   INC^ nls! unaryExpression[0]
       |   DEC^ nls! unaryExpression[0]
  -    |   MINUS^   {#MINUS.setType(UNARY_MINUS);}   nls! unaryExpression[0]
  -    |   PLUS^    {#PLUS.setType(UNARY_PLUS);}     nls! unaryExpression[0]
  +    |   MINUS^   {#MINUS.setType(UNARY_MINUS);}   nls! unaryExpression[0] 
  +    |   PLUS^    {#PLUS.setType(UNARY_PLUS);}     nls! unaryExpression[0] 
       |   unaryExpressionNotPlusMinus[lc_stmt]
       ;
   
  
positive.code: 
  // multiplication/division/modulo (level 4)
  multiplicativeExpression[int lc_stmt]
      :    ( INC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
      |    ( DEC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
      |    ( MINUS^ {#MINUS.setType(UNARY_MINUS);} nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
      |    ( PLUS^ {#PLUS.setType(UNARY_PLUS);} nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
      |    (  powerExpression[lc_stmt] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
      ;
  
  // math power operator (**) (level 3)
  powerExpression[int lc_stmt]
      :   unaryExpressionNotPlusMinus[lc_stmt] (STAR_STAR^ nls! unaryExpression[0])*
      ;
  
  
negative.code:  */
  pathExpression[int lc_stmt]
          { AST prefix = null; }
      :	
          pre:primaryExpression!
          { prefix = #pre; }
  
  