anchor.diff:  throwStatement : 'throw' ';' ;
   variableDefinition : variableDeclaration ( '=' expression )? ';';
   
  -elementaryTypename
  +elementaryTypeName
       : 'address' | 'bool' | 'string' | 'var'
       | Int | Uint | Byte | Fixed | Ufixed
       ;
  
positive.code:     | enumDefinition
      ;
  
  stateVariableDeclaration : typename ( 'public' | 'internal' | 'private' | 'constant' )* Identifier ('=' expression)? ';' ;
  usingForDeclaration : 'using' Identifier 'for' ('*' | typename) ';' ;
  structDefinition : 'struct' Identifier '{'
                       ( variableDeclaration ';' (variableDeclaration ';')* )? '}' ;
  modifierDefinition : 'modifier' Identifier parameterList? block ;
  
negative.code: enumDefinition
      : 'enum' Identifier '{' enumValue? (',' enumValue)* '}' ;
  
  indexedParameterList : '(' ( typeName 'indexed'? Identifier? (',' typeName 'indexed'? Identifier?)* )? ')' ;
  parameterList :        '(' ( typeName            Identifier? (',' typeName            Identifier?)* )? ')' ;
  typeNameList :         '(' ( typeName (',' typeName )* )? ')' ;
  
  variableDeclaration
      : ( typeName Identifier )
      | ( typeName '(' Identifier (',' Identifier)+ ')' )
      ;
  
  typeName
      : elementaryTypeName
      | Identifier storageLocation?
      | mapping
      | typeName '[' expression? ']' storageLocation?
      | functionTypeName
      ;
  
  mapping : 'mapping' '(' elementaryTypeName '=>' typeName ')' ;
  functionTypeName : 'function' typeNameList ( 'internal' | 'external' | 'constant' | 'payable' )*
                     ( 'returns' typeNameList )? ;
  storageLocation : 'memory' | 'storage' ;
  
  block : '{' statement* '}' ;
  