anchor.diff:  //
   // You should have received a copy of the GNU General Public License
   // along with this program.  If not, see <http://www.gnu.org/licenses/>.
  +// Copied from https://solidity.readthedocs.io/en/latest/grammar.html
   
   grammar Solidity;
   
   sourceUnit
  -  : (pragmaDirective | importDirective | contractDefinition)* EOF ;
  +  : (pragmaDirective | importDirective | structDefinition | enumDefinition | contractDefinition)* EOF ;
   
   pragmaDirective
     : 'pragma' pragmaName pragmaValue ';' ;
  
positive.code:   : ( 'return' | 'address' | 'byte' | identifier ) ( '(' assemblyExpression? ( ',' assemblyExpression )* ')' )? ;
  
  assemblyLocalDefinition
    : 'let' assemblyIdentifierOrList ( ':=' assemblyExpression )? ;
  
  assemblyAssignment
    : assemblyIdentifierOrList ':=' assemblyExpression ;
  
  assemblyIdentifierOrList
    : identifier | '(' assemblyIdentifierList ')' ;
  
  assemblyIdentifierList
    : identifier ( ',' identifier )* ;
  
negative.code:   : identifier ( '.' identifier )* ;
  
  mapping
    : 'mapping' '(' (elementaryTypeName | userDefinedTypeName) '=>' typeName ')' ;
  
  functionTypeName
    : 'function' parameterList modifierList returnParameters? ;
  
  storageLocation
    : 'memory' | 'storage' | 'calldata';
  