anchor.diff:      ;
   
   routinename
  -    : PERCENT? identifier '(' paramlist? ')' (SPACE+ comment)? CR
  +    : PERCENT? identifier LPAREN paramlist? RPAREN (SPACE+ comment)? CR
       ;
   
   paramlist
  -    : param (',' param)*
  +    : param (COMMA param)*
       ;
   
   param
  
positive.code:     ;
  
  arglist
      : arg (',' arg)*
      ;
  
  arg
      : identifier
      | NUM_INT
      | BANG
      | STRING_LITERAL
      | variable
      ;
  
  comment
      : ';' ~(CR)*
      ;
  
  identifier
  
negative.code:     : '!'
      ;
  
  
  LPAREN
      : '('
      ;
  
  RPAREN
      : ')'
      ;
  
  ADD
      : '+'
      ;
  
  SUBTRACT
      : '-'
      ;
  
  MULTIPLY
      : '*'
      ;
  
  DIVIDE
      : '/'
      ;
  
  IDENTIFIER
      : ('a'..'z' | 'A'..'Z')  ('a'..'z'|'A'..'Z'|'0'..'9')*
      ;
  