% "Learn Prolog Now!"  Exercise 2.3
% Rewritten using Definite Clause Grammar rules
% Parsing and extracting a verb from the sentence

sentence(t(S,V,O)) --> subject(S), verb(V), object(O).
sentence(t(S,V)) --> subject(S), verb(V).
subject(s(N)) --> article, noun(N).
object(o(X,N)) --> number(X), noun(N).
article --> [a] | [every].
noun(c) --> [criminal].
noun(d) --> [dog]|[dogs].
verb(e) --> [eats].
verb(l) --> [likes].
number(X) --> [X], {integer(X)}.

% Use, for example, as follows:
% ?- sentence(T, [a,criminal,likes,5,dogs],[]).
% T = t(s(c), l, o(5, d)) 