%% np --> det, n.
np(Baum) --> det(BaumDet), n(BaumN),
    { Baum = [np, BaumDet,BaumN] }.

%% det --> [der] ; [das].
det(Baum) --> [der], { Baum = [det, [der]] } ; 
              [das], { Baum = [det, [das]] }.

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