A grammar is specified by setting the flag macro_expansion to on and by compiling clauses using the DCG operator -->.
   [eclipse]: sh('cat gram.pl').
   sentence --> noun_phrase, verb_phrase.
   noun_phrase --> article, noun.
   verb_phrase --> verb | verb, noun_phrase.
   article --> [the].
   noun --> [compiler].
   noun --> [program].
   verb --> [compiles].
   yes.
   [eclipse]: [gram].
   /home/user/gram.pl        compiled 732 bytes in 0.37 seconds
   yes.
   [eclipse]: phrase(sentence,[the,compiler,compiles]).
   yes.
   [eclipse]: phrase(sentence,[the,compiler,compiles,the,program]).
   yes.
   [eclipse]: phrase(sentence, X).
   X = [the, compiler, compiles]     More? (;)
   X = [the, compiler, compiles, the, compiler]     More? (;)
   X = [the, compiler, compiles, the, program]     More? (;)
   X = [the, program, compiles]     More? (;)
   X = [the, program, compiles, the, compiler]     More? (;)
   X = [the, program, compiles, the, program]
   yes.
   [eclipse]:
Fail:
   phrase(sentence, [not, a, sentence]).
Error:
   phrase(X, [what, time, is, it]).    (Error 4).
   phrase("sentence", X).              (Error 5).
   phrase(123, X).                     (Error 5).