anchor.diff:    ;
   
   atom
  -  : ID ('(' (expr (',' expr)*)? ')')?                                           -> ^(ID ^(ARGS expr*)?)
  +  : ID (args^)?
   
     | '(' instruction (';' instruction)* ')'                                      -> ^(INSTRUCTIONS instruction+)
   
  
positive.code: options {
    k = 1;
    output = AST;
  }
  
  tokens {
    INSTRUCTIONS; LET; WHILE; FOR; IF; BREAK; RETURN;
    DECLARATIONS; VAR_DECLARATION; FUNC_DECLARATION; PARAMS; PARAM;
    EXPR; ASSIGNE; OR; AND; COMP; MULT; ADD;
    ARGS; STR; INT; NEG; NIL;
  }
  
  
  
negative.code:   | INTEGER                                                                     -> ^(INT INTEGER)
    | '-' atom                                                                    -> ^(NEG atom)
    | 'nil'                                                                       -> ^(NIL)
    ;
  
  
  args
    : '(' (expr (',' expr)*)? ')'                                                 -> ^(FUNC_CALL ^(ARGS expr+))
    ;
  
  
  