
% simple DCG syntax checker for statements of the form
%    Var = Expr
%
% where
%    Var can be x, y, or z
%    Expr can be a Var
%               or Var Op Expr
%    Op can be +, -, *, or /
%
% assumes the statement is provided as a list of atoms,
% e.g.  x = y * z is checked using
%       ok(['x', '=', 'y', '*', 'z']).

ok(L) :- phrase(stmt, L, []).

stmt --> var, ['='], expr.
var --> ['x'] ; ['y'] ; ['z'].
op --> ['+'] ; ['-'] ; ['/'] ; ['*'].
expr --> var.
expr --> var, op, expr.

% --------- test cases ---------
t1 :- L = ['x', '=', 'y', '+', 'z', '*', x],
      ok(L), format("~w is ok~n", [L]).

