This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/dcgs/sentences.lgt

54 lines
993 B
Plaintext
Raw Normal View History

% Categories allows us to neatly organize the different "kinds"
% of words on this example: determiners, nouns, and verbs
:- category(determiners).
:- private(determiner//0). % private category non-terminals become private
% non-terminals of the objects importing the category
determiner --> [the].
determiner --> [a].
:- end_category.
:- category(nouns).
:- private(noun//0).
noun --> [boy].
noun --> [girl].
:- end_category.
:- category(verbs).
:- private(verb//0).
verb --> [likes].
verb --> [hates].
:- end_category.
:- object(sentence,
implements(parsep),
imports(determiners, nouns, verbs)).
parse(List, true) :-
phrase(sentence, List).
parse(_, false).
sentence --> noun_phrase, verb_phrase.
noun_phrase --> ::determiner, ::noun. % the ::/1 control construct is used to call grammar
noun_phrase --> ::noun. % rules encapsulated on the imported categories
verb_phrase --> ::verb.
verb_phrase --> ::verb, noun_phrase.
:- end_object.