anchor.diff:  RB        : '}';
   
   AS    : '=';
  +EQ    : '==';
  +NE    : '!=';
  +NOT   : '!';
  +GT    : '>';
  +LT    : '<';
  +GE    : '>=';
  +LE    : '<=';
   MUL   : '*';
   DIV   : '/';
   PLUS  : '+';
   MINUS : '-';
  +AND   : '&&';
  +OR    : '||';
   
  +BOOLEAN:  'true' | 'false';
   ID  : (LETTER) (LETTER | NUMBER)*;
   INT : NUMBER+;
  +FLOAT:  NUMBER+ '.' NUMBER+;
   
   BLOCKCOMMENT : '/*' .*? '*/' -> skip;
   LINECOMMENT  : '//' .*? '\n' -> skip;
   WS           : [ \t\n\r]+ -> skip;
   
  -
  -
   //Parser
  -file : (funcDecl | varDecl)+ EOF?
  +fiile : (funcDecl | varDecl)+ EOF?
        ;
   
   varDecl : type ID ('=' expr)? ';'
           ;
   
  -type : TYPEINT                                   #FormTypeInt
  +tyype : TYPEINT                                  
  +     | TYPEFLOAT                                 
  +     | TYPEBOOLEAN                               
        ;
   
   funcDecl : type ID '(' paramTypeList? ')' block
  
positive.code: paramTypeList : paramType (',' paramType)*
                ;
  
  paramType : type ID
            ;
  
  block : '{' stat* '}'
  
negative.code: fragment LETTER    : [a-zA-Z];
  
  TYPEINT  : 'int';
  TYPEFLOAT  : 'float';
  TYPEBOOLEAN : 'boolean';
  
  IF     : 'if';
  ELSE   : 'else';
  RETURN : 'return';
  
  LP        : '(';
  