anchor.diff:  	: '+' | '-';
   
   operatorMulDivMod
  -	: '*' | '/' | '%';
  +	: '*' | '/' | '%' | '//';
  +
  +operatorBitwise
  +	: '&' | '|' | '~' | '<<' | '>>';
   
   operatorUnary
  -    : 'not' | '#' | '-';
  +    : 'not' | '#' | '-' | '~';
   
   operatorPower
       : '^';
  
positive.code:     ;
  
  exp
      : 'nil' | 'false' | 'true' | number | string		
  	| '...'											
  	| functiondef								
      | prefixexp										
  	| tableconstructor								
  	| <assoc=right> exp operatorPower exp			
  	| operatorUnary exp								
  	| exp operatorMulDivMod exp		
  	| exp operatorAddSub exp						
  	| <assoc=right> exp operatorStrcat exp			
  	| exp operatorComparison exp					
  	| exp operatorAnd exp							
  	| exp operatorOr exp	
  	;
  
  var
      : (NAME | '(' exp ')' varSuffix) varSuffix*
      ;
  
  prefixexp
      : varOrExp nameAndArgs*
      ;
  
  functioncall
      : varOrExp nameAndArgs+
      ;
  
  varOrExp
      : var | '(' exp ')'
      ;
  
  nameAndArgs
      : (':' NAME)? args
      ;
  
  varSuffix
      : nameAndArgs* ('[' exp ']' | '.' NAME)
      ;
  
  /*
  
negative.code:     | '\\' '\r'? '\n'
      | DecimalEscape
      | HexEscape
      | UtfEscape
      ;
      
  fragment
  