% Parser in BH-Grammar-rule Notation
% gramdcg9.pl

:-op(1100, xfx, --->).
:-op(1100, xfx, ===>).

 s ---> [np(X, Y), vp(X, Y)].
 np(X, Y) ---> [pro(X, Y)].
 np(3, X) ---> [det(X), n(X)].
 vp(X, Y) ---> [vi(X, Y)].
 vp(X, Y) ---> [vbe(X, Y), adj].

 det(sing) ===> [this].
 det(plu)  ===> [these].
 det(X)    ===> [the].

 n(sing) ===> [knight].
 n(plu)  ===> [knights].
 n(X)    ===> [sheep].

 pro(1, sing) ===> [i].
 pro(1, plu)  ===> [we].
 pro(2, X)    ===> [you].
 pro(3, sing) ===> [it].
 pro(3, plu)  ===> [they].

 adj ===> [tipsy].

 vbe(1, sing) ===> [am].
 vbe(1, plu)  ===> [are].
 vbe(2, X)    ===> [are].
 vbe(3, plu)  ===> [are].
 vbe(3, sing) ===> [is].

 vi(X, Y)    ===> [slept].
 vi(1, X)    ===> [sleep].
 vi(2, X)    ===> [sleep].
 vi(3, plu)  ===> [sleep].
 vi(3, sing) ===> [sleeps].