anchor.diff:  
   statement
       :   block                                                                                               #blockStmtAlt
  -    |   IF expressionInPar nls tb=statement ((nls | sep) ELSE nls fb=statement)?                              #ifElseStmtAlt
  +    |   IF expressionInPar nls tb=statement ((nls | sep) ELSE nls fb=statement)?                            #ifElseStmtAlt
       |   loopStatement                                                                                       #loopStmtAlt
   
       |   tryCatchStatement                                                                                   #tryCatchStmtAlt
   
       |   switchStatement                                                                                     #switchStmtAlt
  -    |   SYNCHRONIZED expressionInPar nls block                                                                #synchronizedStmtAlt
  +    |   SYNCHRONIZED expressionInPar nls block                                                              #synchronizedStmtAlt
       |   RETURN expression?                                                                                  #returnStmtAlt
       |   THROW expression                                                                                    #throwStmtAlt
   
  
positive.code: rparen
      :   RPAREN
      |
          // !!!Error Alternatives
          ~LPAREN
          { require(false, "Missing ')'", -1); }
      ;
  
  nls
      :   NL*
      ;
  
negative.code:  *  The brackets may also be empty, as in T[].  This is how Groovy names array types.
   */
  indexPropertyArgs
      :   QUESTION? LBRACK expressionList[true]? rbrack
      ;
  
  namedPropertyArgs
      :   LBRACK mapEntryList rbrack
      ;
  
  primary
  