token Num=''; token Plus='+' Minus='-' Star='*' Slash='/' Pow='^'; token LPar='(' RPar=')'; token Whitespace; skip Whitespace; right '^'; start calc; calc: expr; expr: expr '^' expr @binary_expr | ('-' | '+') expr @unary_expr | expr ('*' | '/') expr @binary_expr | expr ('+' | '-') expr @binary_expr | Num @literal_expr | '(' expr ')' @paren_expr ;