Data struct: - expression - matrix - complex - polynomial State Data struct: - function - variable 1. ( ) 2. ^ 3. * / % ** 4. + - expr ::= (+ | -) | term ::= (* | / | % | **)? | -- default to '*' factor ::= '^' | base ::= '(' ')' | ( | | ) imag ::= '*'? 'i' real ::= [0-9]+ matrix ::= '[' ( ';')* ']' line ::= '[' ( ',')* ']' func ::= [a-zA-Z]+ '(' ')' var ::= [a-zA-Z]+ endpoint ::= ( | ) '='