/* An evaluator for expressions 

E.g.
| ?- e(V,['(',1,'+',2,')','*',3],[])
V = 9 ?
*/

:- table e/3, t/3.

e(V) --> e(V1), ['+'], t(V2), {V is V1+V2}.
e(V) --> e(V1), [ '-'], t(V2), {V is V1-V2}.
e(V) --> t(V).

t(V) --> t(V1), ['*'], f(V2), {V is V1*V2}.
t(V) --> t(V1), ['/'], f(V2), {V is V1/V2}.
t(V) --> f(V).

f(X) --> [X], {number(X)}.
f(V) --> ['('], e(V), [')'].



