anchor.diff:  ;
   
   
  +primary:'nil' 
  +       | 'true' 
  +       | 'false' 
  +       |int_literal 
  +       | real_literal 
  +       | string_literal
  +       | idn 
  +       | (idn (constant (',' constant)*)) 
  +       | (primary '.' name) 
  +       | (primary expression?)
  +       | invocation 
  +       | (type_spec '$' field (',' field)*)
  +        | (type_spec '$' '[' (expression ':')? (expression (',' expression)* ']')  )
  +| (type_spec '$' '[' constant (',' constant)* ']') 
  +| ('force' type_spec?)
  +| ('up' '(' expression ')' ) 
  +| ('down' '(' expression ')' ) ;
  +
   
   idn:
   STRING;
  
positive.code: 
  
  
  tag_arm: 'tag' name (',' name)*  ( '(' idn : type_spec ')') ? ':' body;
  
  when_handler : ('when' name (',' name)* (decl (',' decl)*)? ':' body)
                 | 'when' name (',' name)* '(' '*' ')' ':' body);
  
  others_handler: 'others' ('(' idn : type_spec ')')? ':' body;
  
  
  body : equate* statement*;
  
negative.code: 
  statement: decl
           | (idn ':' type_spec ':=' expression)
           | (decl (',' decl)* ':=' invocation)
            | (idn (',' idn)* ':=' invocation)
  |  (idn (',' idn)* ':=' expression (',' expression)*)
  | (primary '.' name ':=' expression)
  