Five operators, +, -, *, /, ^. The +, -, *, and / operators should be left associative. The ^ operator should be right associative. The ^ operator should have highest precedence and +,- should have the lowest precedence. Exp ::= Exp '+' Term // left recursion means left associative | Exp '-' Term | Term Term ::= Term '*' Factor | Term '/' Factor | Factor Factor ::= Base '^' Factor // right recursion means right associative | Base Base ::= '(' Exp ')' | Integer | Variable Remove the left recursion so that we can write a recursive descent parser. Exp ::= Term ( '+' Term | '-' Term )* Term ::= Factor ( '*' Factor | '/' Factor )* Factor ::= Base [ '^' Factor ] Base ::= '(' Exp ')' | Integer | Variable