anchor.diff:     : name (',' name)* type_spec
      ;
   
  +statement
  +   : decl
  +   | (idn ':' type_spec ':=' expression)
  +   | (decl (',' decl)* ':=' invocation)
  +   | (idn (',' idn)* ':=' invocation)
  +   | (idn (',' idn)* ':=' expression (',' expression)*)
  +   | (primary '.' name ':=' expression)
  +   | invocation
  +   | ('while' expression 'do' body 'end')
  +   | ('for' (decl (',' decl)*)? 'in' invocation 'do' body 'end')
  +   | ('for' (idn (',' idn)*)? 'in' invocation 'do' body 'end')
  +   | ('if' expression 'then' body ('elseif' expression 'then' body)* ('else' body)? 'end')
  +   | ('tagcase' expression tag_arm* ('others' ':' body)? 'end')
  +   | ('return' (expression (',' expression)*)?)
  +   | ('yeild' (expression (',' expression)*)?)
  +   | ('signal' name (expression (',' expression)*)?)
  +   | ('exit' name (expression (',' expression)*)?)
  +   | 'break'
  +   | 'continue'
  +   | ('begin' body 'end')
  +   | (statement 'resignal' name (',' name)*)
  +   | (statement 'except' when_handler* others_handler? 'end')
  +   ;
  +
   tag_arm
      : 'tag' name (',' name)* ('(' idn ':' type_spec ')')? ':' body
      ;
  
positive.code:    ;
  
  
  NUMBER
     : [0-9] +
     ;
  
  
  COMMENT
     : ';' ~ [\r\n]*
     ;
  
  
  EOL
     : '\r'? '\n'
     ;
  
  
  
negative.code:    | ('down' '(' expression ')')
     ;
  
  invocation
     : primary '(' expression (',' expression)* ')'
     ;
  
  field
     : name (',' name)* ':' expression
     ;
  
  idn
     : STRING
     ;
  