Solution
s --> np, vp.
np --> det, n.
np --> pn.
vp --> vi.
vp --> vt, np.
%% Lexicon
det(l(R, l(S, exists(X,'@'(R,X),'@'(S,X))))) --> [a].
det(l(R, l(S, exists(X,'@'(R,X),'@'(S,X))))) --> [the].
n(l(X,bride(X))) --> [bride].
n(l(X,nurse(X))) --> [nurse].
n(l(X,yakuza(X))) --> [yakuza].
n(l(X,whiskey(X))) --> [whiskey].
pn(l(P,'@'(P,bill))) --> [bill].
pn(l(P,'@'(P,gogo))) --> [gogo].
vi(l(X,whistle(X))) --> [whistles].
vi(l(X,fight(X))) --> [fights].
vt(l(X,l(Y,drink(Y,X)))) --> [drinks].
vt(l(X,l(Y,kill(Y,X)))) --> [kills].
Back to the exercise.