anchor.diff:      CTRL_DEF (variableDefinition | functionDefinition);
   
   variableDefinition :
  -    type ID TAB_SUFFIX? expression SEMICOLON;
  +    type identifier TAB_SUFFIX? expression SEMICOLON;
   
   value :
       VAL_STRING | VAL_INT | VAL_FLOAT;
  
positive.code:     atomicExpression | (BRACKET_PAREN_OP expression BRACKET_PAREN_CLOSE);
  
  atomicExpression:
      value | ID | functionInvocation;
  
  functionInvocation:
      functionHeader;
  
  assigment :
      ID (BRACKET_SQUARE_OP VAL_INT BRACKET_SQUARE_CLOSE)? EQUAL expression;
  
  functionDefinition :
      functionHeader bodyBlock;
  
  functionHeader :
      ID BRACKET_PAREN_OP ((expression) (COMMA expression)*)? BRACKET_PAREN_CLOSE;
  
  type:
      (INT | FLOAT | STRING) TAB_SUFFIX?;
  
  operator :
      OP_PLUS | OP_MINUS | OP_DIVIDE | OP_MULTIPLY | OP_COMPARE | OP_COMPARE_NEG | OP_AND | OP_OR;
  
negative.code: INT                     :   'int';
  FLOAT                   :   'float';
  STRING                  :   'string';
  VOID                    :   'void';
  TAB_SUFFIX              :   '[]';
  
  // control sequences
  CTRL_IMPORT             :   'import';
  CTRL_MODULE             :   'module';
  CTRL_DEF                :   'def';
  CTRL_RETURN             :   'return';
  CTRL_IF                 :   'if';
  