anchor.diff:  
   statement		: if_statement
   				| for_loop
  +				| while_loop
   				| expression ';'
  -				| 'return' expression ';'
  +				| keyword expression ';'
   				;
   
   if_statement	: 'if' expression block ('else if' expression block)* ('else' block)? ;
   
  -for_loop		: 'for' (definition | ID) 'in' expression (expression ';' | block) ;
  +for_loop		: 'for' (definition | name) 'in' expression (expression ';' | block) ;
  +
  +while_loop		: 'while' expression (expression ';' | block) ;
   
   expression		: definition
   				| assignment
  
positive.code: 				| invocation
  				| lambda
  				| atom
  				| ID
  				| expression operand expression
  				| unary_operand expression
  				| '(' expression ')'
  				| table_definition
  				| meta_definition
  				| table_access
  				;
  
  definition		: type ID ;
  
  assignment		: ID ':=' expression 
  				| table_access ':=' expression
  				;
  
  definition_assignment : type ID ':=' expression ;
  
  invocation		: ID '(' expression_list? ')' ;
  
  lambda			: '(' argument_list? ')' '->' ( '(' type_list ')' | type )? (block | ':' expression) ;
  
  
negative.code: 
  argument_list	: definition (',' definition)* ;
  
  table_access	: name '[' STRING ']' ;
  
  type_list		: type (',' type)* ;
  
  