/* Sample English Grammar in DCG       */
/* Copyright (C) 1993 Yuji Matsumoto   */
% ȥåץΡɤ
:- sax_top_node_category(_, sentence/1).

% 繽¤§
sentence(VP) -->
	np(NP, Agr),
	vp(VP, NP, Agr).

vp(V, Sbj, Agr) -->
	v(V, Sbj, Agr).
vp(V, Sbj, Agr) -->
	v(V, Sbj, NP, Agr),
	np(NP, _).
vp(V, Sbj, Agr) -->
	v(V, Sbj, NP1, NP2, Agr),
	np(NP1, _),
	np(NP2, _).
vp(PP, Sbj, Agr) -->
	vp(V, Sbj, Agr),
	pp(PP, V).

np(N, Agr) -->
	det(Agr),
	n(N, Agr).
np(N, Agr) -->
	n(N, Agr), {Agr = not_sngl3rd}.
np(PP, Agr) -->
	np(NP, Agr),
	pp(PP, NP).

pp(P, Comp) -->
	p(P, Comp, NP),
	np(NP, _).

% Ѳ
v(V, Sbj, sngl3rd) -->
	v(V, Sbj, not_sngl3rd),
	suff_s_v.
v(V, Sbj, Obj, sngl3rd) -->
	v(V, Sbj, Obj, not_sngl3rd),
	suff_s_v.
v(V, Sbj, Obj, Obj2, sngl3rd) -->
	v(V, Sbj, Obj, Obj2, not_sngl3rd),
	suff_s_v.

v(V, Sbj, _) -->
	v(V, Sbj, not_sngl3rd),
	suff_ed.
v(V, Sbj, Obj, _) -->
	v(V, Sbj, Obj, not_sngl3rd),
	suff_ed.
v(V, Sbj, Obj, Obj2, _) -->
	v(V, Sbj, Obj, Obj2, not_sngl3rd),
	suff_ed.

n(N, not_sngl3rd) -->
	n(N, sngl3rd),
	suff_s_n.

% 
det(sngl3rd) --> [a].

det(_) --> [the].

np(i, not_sngl3rd) --> [i].

np(john, sngl3rd) --> [john].

np(tokyo, sngl3rd) --> [tokyo].

n(girl, sngl3rd) --> [girl].

n(telescope, sngl3rd) --> [telescope].

n(window, sngl3rd) --> [window].

n(leaf, sngl3rd) --> [leaf].

v(run(S), S, not_sngl3rd) --> [run].

v(see(S,O), S, O, not_sngl3rd) --> [see].

v(leave(S,O), S, O, not_sngl3rd) --> [leave].

v(open(S,O), S, O, not_sngl3rd) --> [open].

v(give(S,O,O2), S, O, O2, not_sngl3rd) --> [give].

v(run(S), S, _) --> [ran].

v(see(S,O), S, O, _) --> [saw].

v(leave(S,O), S, O, _) --> [left].

v(give(S,O,O2), S, O, O2, _) --> [gave].

p(with(X,Y), X, Y) --> [with].

% ܼ
suff_s_n --> [s].

suff_s_v --> [s].

suff_ed --> [ed].
