/* A calculator in DCG for the following CFG :
    E -> T | E + T | E - T
    T -> F | T * F | T / F
    F -> number | ( E )
*/

:-table e/3, t/3.

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

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

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

