====== Dcg ====== {{tag>DCG linguistics}} ===== Description ===== A DCG handling the syntax and meaning of a small subset of natural language. **Source**: PROLOG programming for artificial intelligence, 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7. ===== Download ===== Program source code: {{dcg.pl}} ===== Listing ===== % Figure 17.6 A DCG handling the syntax and meaning of a small % subset of natural language. :- op( 100, xfy, and). :- op( 150, xfy, =>). sentence( S) --> noun_phrase( X, P, S), verb_phrase( X, P). noun_phrase( X, P, S) --> determiner( X, P12, P, S), noun( X, P1), rel_clause( X, P1, P12). noun_phrase( X, P, P) --> proper_noun( X). verb_phrase( X, P) --> trans_verb( X, Y, P1), noun_phrase( Y, P1, P). verb_phrase( X, P) --> intrans_verb( X, P). rel_clause( X, P1, P1 and P2) --> [that], verb_phrase( X, P2). rel_clause( X, P1, P1) --> []. determiner( X, P1, P, all( X, P1 => P)) --> [every]. determiner( X, P1, P, exists( X, P1 and P)) --> [a]. noun( X, man(X)) --> [man]. noun( X, woman(X)) --> [woman]. proper_noun( john) --> [john]. proper_noun( annie) --> [annie]. proper_noun( monet) --> [monet]. trans_verb( X, Y, likes( X, Y)) --> [ likes]. trans_verb( X, Y, admires( X, Y)) --> [admires]. intrans_verb( X, paints(X)) --> [paints]. % Some tests test1( M) :- sentence( M, [john,paints],[]). test2( M) :- sentence( M, [a, man, paints], []). test3( M) :- sentence( M, [every,man,that,paints,admires,monet],[]). test4( M) :- sentence( M, [annie,admires,every,man,that,paints],[]). test5( M) :- sentence( M, [every,woman,that,admires,a,man,that,paints,likes,monet],[]). ===== Comments =====