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