anchor.diff:      |   closableBlockConstructorExpression
       |   listOrMapConstructorExpression
       |   stringConstructorExpression         // "foo $bar baz"; presented as multiple tokens
  -//deprecated    |   scopeEscapeExpression               // $x
       |   builtInType
  -    /*OBS*  //class names work fine as expressions
  -            // look for int.class and int[].class
  -    |   bt:builtInType!
  -        declaratorBrackets[bt]
  -        DOT^ nls! "class"
  -    *OBS*/
       ;
   
   // Note:  This is guaranteed to be an EXPR AST.
  
positive.code: // the basic element of an expression
  primaryExpression {Token first = LT(1);}
      :   IDENT
          /*OBS*  //keywords can follow dot in Groovy; no need for this special case
          ( options {greedy=true;} : DOT^ "class" )?
          *OBS*/
      |   constant
      |   newExpression
      |   "this"
  
negative.code: variableLengthParameterDeclaration!  {Token first = LT(1);}
      :   pm:parameterModifier t:typeSpec[false] TRIPLE_DOT! id:IDENT
  
          pd:declaratorBrackets[#t]
          {#variableLengthParameterDeclaration = #(create(VARIABLE_PARAMETER_DEF,"VARIABLE_PARAMETER_DEF",first,LT(1)),
                                                                                              pm, #(create(TYPE,"TYPE",first,LT(1)),t), id);}
      ;
  