% Rgeln f"ur einfache Sätze mit Adverbialen (Tempus = praes,praet)

% mit intransitivem Verb und Verbstellungen ve, vz, vl (erst/zweit/letzt)

s([def],[Temp,Mod,ve]) -->               % def = Aussagesatz
    v([[nom]],[Pers,Num,Mod,Temp]),      
    np([Pers,_Gen,Num],[nom]),
    ([] ; advp([_Art],[]) ). 

s([def],[Temp,Mod,vz]) -->               % def = Aussagesatz
    np([Pers,_Gen,Num],[nom]),
    v([[nom]],[Pers,Num,Mod,Temp]),      
    ([] ; advp([_Art],[]) ).             % opt.Adverb inkl 'nicht'
s([def],[Temp,Mod,vz]) --> % def = Aussagesatz
    advp([Art],[]), { Art \= neg },      % Adverb: 'nicht' ausnehmen!
    v([[nom]],[Pers,Num,Mod,Temp]),      % Verb mit Objekt-NP
    np([Pers,_Gen,Num],[nom]),
    ( [] ; advp([Art2],[]), { Art \= Art2 }).

s([def],[Temp,Mod,vl]) -->               % def = Aussagesatz
    np([Pers,_Gen,Num],[nom]),
    ([] ; advp([_Art],[]) ),             % opt.Adverb inkl 'nicht'
    v([[nom]],[Pers,Num,Mod,Temp]).


% Satzregeln mit transitivem Verb:

s([def],[Temp,Mod,ve]) --> % Konditionalsatz (Verb an erster Stelle)
    v([[nom,Kas]],[Pers,Num,Mod,Temp]),
    np([Pers,_Gen,Num],[nom]),
    ( [] ; advp([Art1],[]), { Art1 \= neg } ),
    np([_Pers2,_Gen2,_Num2],[Kas]),
    ([] ; advp([Art2],[]), { Art2 \= Art1 } ).


s([def],[Temp,Mod,vz]) -->      % def = Aussagesatz
    np([Pers,_Gen,Num],[nom]),
    v([[nom,Kas]],[Pers,Num,Mod,Temp]),      % Verb mit Objekt-NP
    ([], {Art1=(-)} ; advp([Art1],[]), { Art1 \= neg } ),
    np([_Pers2,_Gen2,_Num2],[Kas]),
    ([] ; advp([Art2],[]), { Art2 \= Art1 } ).

s([def],[Temp,Mod,vz]) -->      % def = Aussagesatz
    advp([Art1],[]),        % Advp im Vorfeld
    { Art1 \= neg },
    v([[nom,Kas]],[Pers,Num,Mod,Temp]),      % Verb mit Objekt-NP
    np([Pers,_Gen,Num],[nom]),
    np([_Pers2,_Gen2,_Num2],[Kas]),
    ([] ; advp([Art2],[]), { Art2 \= Art1 } ).


s([def],[Temp,Mod,vl]) -->      % untergeordneter Aussagesatz
    np([Pers,_Gen,Num],[nom]),
    ( [] ; advp([Art1],[]) ),
    np([_Pers2,_Gen2,_Num2],[Kas]),
    ([] ; advp([Art2],[]), { Art2 \= Art1 } ).
    v([[nom,Kas]],[Pers,Num,Mod,Temp]).


% TODO: 2-stellige Verben mit Präpositionalobjekt:

s([def],[Temp,Mod,vz]) --> % def = Aussagesatz 
    np([Pers,_Gen,Num],[nom]),
    v([[nom,Prep,Kas]],[Pers,Num,Mod,Temp]), % Verb mit Objekt-PP    
    ( [] ; advp([Art1],[]) ),
    { praeposition(Prep,Kas) },
    [Prep], 
    np([_Pers2,_Gen2,_Num2],[Kas]),
    ([] ; advp([Art2],[]), { Art2 \= Art1 } ).

s([ob],[-,Mod,vl]) -->
    [ob], s([def],[_Tmp,Mod,vl]).


% Relativsaetze: man braucht s([rel(Gen,Num)],Form) ! 

% Form anpassen: in (np -> det,n,srel) hat srel die Form [Mod]
s([rel(Gen,Num)],[Mod]) -->
    s([rel(Gen,Num)],[Temp,Mod,vl]),
    { Temp=praes ; Temp=praet ; Temp=(-) }.

% TODO: Adverbiale einbauen:

s([rel(Gen,Num)],[Temp,Mod,vl]) --> % Relativsatz mit RelPron.nom
    pron([rel],[Pers,Gen,Num,nom]),
    { Pers = 3 },
    np([_Pers2,_Gen2,_Num2],[Kas]),
    { Temp = praes ; Temp = praet },
    v([[nom,Kas]],[Pers,Num,Mod,Temp]).

s([rel(Gen2,Num2)],[Temp,Mod,vl]) --> % Relativsatz mit RelPron =/= nom
    { Temp = praes ; Temp = praet },
    pron([rel],[3,Gen2,Num2,Kas]),
    np([Pers,_Gen,Num],[nom]),
    v([[nom,Kas]],[Pers,Num,Mod,Temp]).

