anchor.diff:  NOT_EQ_1     : '<>';
   NOT_EQ_2     : '!=';
   
  -COMMA  : ',';
  -COLON  : ':';
  -
  +
  +ADD_ASSIGN : '+=';
  +SUB_ASSIGN : '-=';
  +MULT_ASSIGN : '*=';
  +AT_ASSIGN : '@=';
  +DIV_ASSIGN : '/=';
  +MOD_ASSIGN : '%=';
  +AND_ASSIGN : '&=';
  +OR_ASSIGN : '|=';
  +XOR_ASSIGN : '^=';
  +LEFT_SHIFT_ASSIGN : '<<=';
  +RIGHT_SHIFT_ASSIGN : '>>=';
  +POWER_ASSIGN : '**=';
  +IDIV_ASSIGN : '//=';
   
   NAME
       : ID_START ID_CONTINUE*;
  
positive.code: factor
      : op='+' factor    # unaryExpr
      | op='-' factor    # unaryExpr
      | '(' expr ')'     # parenExpr
      | funcinvoke       # funcInvokExpr
      | atom             # atomExpr
      ;
  
  atom
      : NAME
      | number
      | string+
      | NONE
  
negative.code:  *
   */
  
  if_stmt:
      IF test ':' suite if_elif* if_else?;
  
  if_elif:
      ELIF test ':' suite;
  
  if_else:
      ELSE ':' suite;
  
  while_stmt
      : WHILE test ':' suite //( ELSE ':' suite )?
  