%		Parses and evaluates arithmetic expressions
%		'dcg' must be loaded first.

dcg!

expr(Z) -->	term1(X), ['+'], expr(Y), {Z is X + Y}.
expr(Z) -->	term1(X), ['-'], expr(Y), {Z is X - Y}.
expr(X) -->	term1(X).

term1(Z) -->	number(X), ['*'], term1(Y), {Z is X * Y}.
term1(Z) -->	number(X), ['/'], term1(Y), {Z is X / Y}.
term1(Z) -->	number(Z).

number(C) --> ['+'], number(C).
number(C) --> ['-'], number(X), {C is -X}.
number(X) --> [C], {integer(C) , X is C}.
