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; } ;