
s([s|A])--> (np(B), vp(C)), {append([B], [C], A)}.

np([np|A])-->
    (det(B), n(C)), {append([B], [C], A)}.

vp([vp|A])--> v(B), {A=[B]};
    ((v(C), np(D)), {append([C], [D], E)}), {A=E}.  

det([det|A])-->[der],{A=[der]}
    ;[das], {A=[das]}.

n([n|A])-->['Programmierer'],{A=['Programmierer']}
    ;['Programm'], {A=['Programm']}.  

v([v, steht])-->[steht].
v([v, schrieb])-->[schrieb].

