% Stammformenlexikon und Erzeugung der Vollform aus Stammform+Merkmale

% -------- Finite Verbformen: [Pers,Num,Temp,Mod] ----------

formen(vfin,[Pers,Num,Temp,Mod]) :-
    person(Pers), numerus(Num), tempus(Temp), modus(Mod).

formen(vfin,[Pers,Num,Temp,Mod]) :-
    person(Pers), numerus(Num), tempus(Temp), modus(Mod).

% Fehlt: Einschraenkung bei es-Subjekt, Imperativ im sg und pl.

% --- Definition der Merkmalbereiche der Formmerkmale: [Person,Numerus,Tempus,Modus]

person(1).
person(2).
person(3).

numerus(sg).   % Singular
numerus(pl).   % Plural

tempus(praes). % Praesens
tempus(praet). % Praeteritum

modus(ind).    % Indikativ
modus(konj).   % Konjunktiv

% verbflexion_slex(Stammform+,Konjugationsklasse+,Formmerkmale?,Vollform-).

/* Konjugationsklassen:
   - regelmaessig, kein betontes Praefix:           rg(-)
   - regelmaessig, betontes(=abtrennbares) Praefix: rg(Praef)
   - unregelmaessig, bet.Praefix, Ablautfolge:      urg(Praef,Vokaltripel,Stammlautposition)

*/

verbflexion_slex(Konjugationsklasse,Stammform) :-
	form(vfin,Formmerkmale),
	konjugiere(Konjugationsklasse,Stammform,Formmerkmale,Vollform),
	write(Formmerkmale),write(': '),write(Vollform),nl,
	fail.          % weitere Formmerkmale und Stammformen suchen
verbflexion_slex(_,_). % fertig.


% ---------------------- Regelmaessige Konjugation (Finite Verbformen ) --------

% konjugiere(Konjugationsklasse+,Infinitiv+,[Pers,Num,Temp,Mod]+,Vollform-)

konjugiere(rg(_Praefix),Infinitiv,[Pers,Num,Temp,Mod],Vfinit) :-  
  	concat(Stamm,'en',Infinitiv),
  	(dentalstamm(Stamm)
        -> konjugation(rge,[Pers,Num,Temp,Mod],Endung)  % Konjugationstabellen s.u.
        ;  konjugation(rg, [Pers,Num,Temp,Mod],Endung)
        ),
 	concat(Stamm,Endung,Vfinit).

dentalstamm(Stamm) :- 
	concat(_,'d',Stamm) ; concat(_,'t',Stamm).

% ---------------- Konjugationstabelle fuer regelm.Konjugation -----------

konjugation(rg,[1,sg,praes,ind], 'e').
konjugation(rg,[1,sg,praes,konj],'e').
konjugation(rg,[1,sg,praet,ind], 'te').
konjugation(rg,[1,sg,praet,konj],'te').

konjugation(rg,[1,plur,praes,ind], 'en').
konjugation(rg,[1,plur,praes,konj],'en').
konjugation(rg,[1,plur,praet,ind], 'ten').
konjugation(rg,[1,plur,praet,konj],'ten').

konjugation(rg,[2,sg,praes,ind], 'st').
konjugation(rg,[2,sg,praes,konj],'est').
konjugation(rg,[2,sg,praet,ind], 'test').
konjugation(rg,[2,sg,praet,konj],'test').

konjugation(rg,[2,plur,praes,ind], 't').
konjugation(rg,[2,plur,praes,konj],'et').
konjugation(rg,[2,plur,praet,ind], 'tet').
konjugation(rg,[2,plur,praet,konj],'tet').

konjugation(rg,[3,sg,praes,ind], 't').
konjugation(rg,[3,sg,praes,konj],'e').
konjugation(rg,[3,sg,praet,ind], 'te').
konjugation(rg,[3,sg,praet,konj],'te').

konjugation(rg,[3,plur,praes,ind], 'en').
konjugation(rg,[3,plur,praes,konj],'en').
konjugation(rg,[3,plur,praet,ind], 'ten').
konjugation(rg,[3,plur,praet,konj],'ten').

% ---- mit e-Erweiterung:

konjugation(rge,[1,sg,praes,ind], 'e').
konjugation(rge,[1,sg,praes,konj],'e').
konjugation(rge,[1,sg,praet,ind], 'ete').
konjugation(rge,[1,sg,praet,konj],'ete').

konjugation(rge,[1,plur,praes,ind], 'en').
konjugation(rge,[1,plur,praes,konj],'en').
konjugation(rge,[1,plur,praet,ind], 'eten').
konjugation(rge,[1,plur,praet,konj],'eten').

konjugation(rge,[2,sg,praes,ind], 'est').
konjugation(rge,[2,sg,praes,konj],'est').
konjugation(rge,[2,sg,praet,ind], 'etest').
konjugation(rge,[2,sg,praet,konj],'etest').

konjugation(rge,[2,plur,praes,ind], 'et').
konjugation(rge,[2,plur,praes,konj],'et').
konjugation(rge,[2,plur,praet,ind], 'etet').
konjugation(rge,[2,plur,praet,konj],'etet').

konjugation(rge,[3,sg,praes,ind], 'et').
konjugation(rge,[3,sg,praes,konj],'e').
konjugation(rge,[3,sg,praet,ind], 'ete').
konjugation(rge,[3,sg,praet,konj],'ete').

konjugation(rge,[3,plur,praes,ind], 'en').
konjugation(rge,[3,plur,praes,konj],'en').
konjugation(rge,[3,plur,praet,ind], 'eten').
konjugation(rge,[3,plur,praet,konj],'eten').

% ------------------- Unregelmaessige Konjugation (Finite Verbformen ) --------

