
% file: fsg2
% query: sentence([john, gives, mary, flowers])?


initial(q1).
final(q3).	final(q4).	final(q5).	final(q8).	final(q11).
transition(q1, Subject, q2) :- subject(Subject).
transition(q2, VI, q3) :- vi(VI).
transition(q2, VT, q4) :- vt(VT). 
transition(q2, VDT, q6) :- vdt(VDT).	% vdt: ditransitive verb
transition(q4, DO, q5) :- do(DO).	% do: direct object
transition(q6, IO, q7) :- io(IO).
transition(q7, DO, q8) :- do(DO).

subject(john).	subject(mary).	subject(mortimer).
vi(sleeps).	vi(reads).
vt(reads).	vt(writes).
vdt(gives).	vdt(tells).
do(a_book).	do(a_candle).	do(flowers).
io(mary).	io(john).

sentence(S) :-
    initial(Q),
    sentence(Q, S).
sentence(Q, [X|Xs]) :-
    transition(Q, X, Q1), sentence(Q1, Xs).
sentence(Q, []) :-
    final(Q).

