anchor.diff:  	;
   
   enumDeclaration returns [EnumDeclaration d]
  -	:	classModifier* 'enum' Identifier superinterfaces? enumBody
  -	;
  -
  -enumBody
  -	:	'{' enumConstantList? ','? enumBodyDeclarations? '}'
  -	;
  -
  -enumConstantList
  -	:	enumConstant (',' enumConstant)*
  -	;
  -
  -enumConstant
  -	:	enumConstantModifier* Identifier ('(' argumentList? ')')? classBody?
  +    locals [List<Modifier> mods = new ArrayList<>();]
  +	:	(m = classModifier {$mods.add($m);})*
  +        'enum' id = Identifier il = superinterfaces?
  +        {$d = new EnumDeclaration($id.getText(), $il, $mods);}
  +        enumBody[d]
  +	;
  +
  +enumBody [EnumDeclaration d]
  +	:	'{' (enumConstantList[d])? ','? (enumBodyDeclarations[d])? '}'
  +	;
  +
  +enumConstantList [EnumDeclaration d]
  +	:	enumConstant[d] (',' enumConstant[d])*
  +	;
  +
  +enumConstant [EnumDeclaration d]
  +    locals [List<Modifier> mods = new ArrayList<>();]
  +	:	(enumConstantModifier {$mods.add($m);})*
  +        id = Identifier ('(' a = argumentList? ')')?
  +        {$d.addConstant(new EnumConstant($id.getText(), $mods, $a));}
  +        (classBody[d])?
   	;
   
   enumConstantModifier returns [Modifier m]
   	:	a = annotation {$m = $a;}
   	;
   
  -enumBodyDeclarations
  -	:	';' classBodyDeclaration*
  +enumBodyDeclarations [EnumDeclaration d]
  +	:	';' (classBodyDeclaration[d])*
   	;
   
   /*
  
positive.code:         {$s = new AnnotationStatement($t, $l);}
  	;
  
  elementValuePairList returns [List<NameValuePair> l]
      locals [List<NameValuePair> pairs = new ArrayList<>();]
  	:	(p1 = elementValuePair) {$pairs.add($p1);}
          (',' p = elementValuePair {$pairs.add($p);})*
          {$l = $pairs;}
  	;
  
  elementValuePair returns [NameValuePair p]
  	:	id = Identifier '=' v = elementValue
          {$p = new NameValuePair($id.getText(), $v);}
  	;
  
  elementValue returns [Expression e]
  
negative.code: 	|	s = StringLiteral
          {$e = new LiteralExpression($s.getText(), String);}
  	|	n = NullLiteral
          {$e = LiteralExpression.NULL;}
  	;
  
  /*
  