text: grammar Poly;
  options {
      output=AST;
      language=ObjC;
      }
  tokens { MULT; } // imaginary token
  
  poly: term ('+'^ term)*
      ;
  
  term: INT ID  -> ^(MULT[@"*"] INT ID)
      | INT exp -> ^(MULT[@"*"] INT exp)
      | exp
      | INT
  	| ID
      ;
  
  exp : ID '^'^ INT
      ;
      
  ID  returns [NSString *value]
      : 'a'..'z'+ ;
  
  INT  returns [NSString *value]
      : '0'..'9'+ ;
  
  WS	: (' '|'\t'|'\r'|'\n')+ { $channel=HIDDEN; } ;
  