include "Expr_with_exp.Grm" rule main replace [expression] E [expression] construct NewE [expression] E [resolveAddition] [resolveSubtraction] [resolveMultiplication] [resolveDivision] [resolveParentheses] [resolveExponential] where not NewE [= E] by NewE end rule rule resolveExponential replace [primary] exp '( x [number]', n [number]') by x [expon n] end rule function expon n [number] replace [number] x [number] where n [> 1] construct m [number] n [- 1] construct new_value [number] x [expon m] by x [* new_value] end function rule resolveAddition replace [expression] N1 [number] + N2 [number] by N1 [+ N2] end rule rule resolveSubtraction replace [expression] N1 [number] - N2 [number] by N1 [- N2] end rule rule resolveMultiplication replace [term] N1 [number] * N2 [number] by N1 [* N2] end rule rule resolveDivision replace [term] N1 [number] / N2 [number] by N1 [/ N2] end rule rule resolveParentheses replace [primary] ( N [number] ) by N end rule