pg          :=  expr
expr        :=  term ([+-] term)*
term        :=  factor ([*/]? factor)*
factor      :=  [+-]? pow
pow         :=  atomic (^ atomic)*
atomic      :=  Int
            |   Flt
            |   paren_expr
            |   Func paren_expr
paren_expr  :=  LeftParen expr RightParen