% Programmtext aus DCG II Folien translate((LHS --> RHS), (Head :- Body)) :- left_hand_side(LHS, Start, End, Head), right_hand_side(RHS, Start, End, Body). left_hand_side(NT, Start, End, Head) :- atom(NT), Head =.. [NT,Start,End]. right_hand_side([T], Start, End, 'C'(Start,T,End)). right_hand_side((S1,S2), Start, End, (Body1, Body2)) :- right_hand_side(S1, Start, Middle, Body1), right_hand_side(S2, Middle, End, Body2). right_hand_side(S, Start, End, Body) :- atom(S), Body =.. [S,Start,End]. s(s(NP,VP)) --> np(NP,nom,Num), vp(VP,Num). vp(v(V),Num) --> v(V,Num). np(np(Det,N),Kas,Num) --> det(Det,Gen,Kas,Num), n(N,Gen,Kas,Num). n(n(katze),fem,Kas,sg) --> [katze]. v(v(schlaeft),sg) --> [schlaeft]. v(v(schlafen),pl) --> [schlafen]. det(det(die),fem,nom,sg) --> [die]. det(det(der),fem,gen,sg) --> [der].