Relativsätze
Relativsätze - in einer DCG
%Regeln
s --> np(nom,Num,MoeglicheRs1), vp(Num,MoeglicheRs2),
{append(MoeglicheRs1,MoeglicheRs2,MoeglicheRs)},
optionaler_rs(MoeglicheRs).
optionaler_rs(_) --> [].
optionaler_rs(MoeglicheMerkmale) -->
{moegliche_rs_merkmale(MoeglicheMerkmale,Num,Gen)},
rs(Num,Gen).
%Relativsätze erhalten Numerus und Genus von der NP, zu der sie gehören
%Kasus wird vom Verb des Relativsatzes dem Relativpronomen zugewiesen
rs(Num,Gen) --> rp(nom,Num,Gen), vi(Num).
rs(Num,Gen) --> rp(nom,Num,Gen), np(akk,_,_), vt(Num).
rs(Num,Gen) --> rp(akk,Num,Gen), np(nom,NumV,_), vt(NumV).
np(Kas,Num,[rs(Num,Gen)]) --> art(Kas,Num,Gen), n(Kas,Num,Gen).
np(Kas,Num,[]) --> art(Kas,Num,Gen), n(Kas,Num,Gen),rs(Num,Gen).
vp(Num,[]) --> vi(Num).
vp(Num,MoeglicheRs) --> vt(Num), np(akk,_,MoeglicheRs).
%Hilfsprädikat
moegliche_rs_merkmale([rs(Num,Gen)|_],Num,Gen).
moegliche_rs_merkmale([_|Rrsmm],Num,Gen) :-
moegliche_rs_merkmale(Rrsmm,Num,Gen).
%lexikonregeln
vi(sing) --> [weint].
vi(sing) --> [lacht].
vt(sing) --> [entdeckt].
art(nom,sing,mask) --> [der].
art(akk,sing,mask) --> [den].
n(nom,sing,mask) --> [astronom].
n(akk,sing,mask) --> [planeten].
rp(nom,sing,mask) --> [der].
rp(akk,sing,mask) --> [den].
Kurs-Startseite