German verbs

This commit is contained in:
aarne
2006-01-04 15:18:40 +00:00
parent 5f1cd79b9b
commit 06e2ad7af2
2 changed files with 145 additions and 15 deletions

View File

@@ -18,6 +18,15 @@ resource ParamGer = ParamX ** {
Adjf = Strong | Weak ;
-- Gender distinctions are only made in the singular.
GenNum = GSg Gender | GPl ;
-- The predicative form of adjectives is not inflected further.
AForm = APred | AMod Adjf GenNum Case ;
---- Agreement of $NP$ is a record. We'll add $Gender$ later.
--
-- oper
@@ -26,8 +35,19 @@ resource ParamGer = ParamX ** {
-- param
-- Gender = Neutr | Masc | Fem ;
--
----2 For $Verb$
--
--2 For $Verb$
VForm =
VInf
| VPresInd Number Person
| VPresSubj Number Person
| VImper Number
| VImpfInd Number Person
| VImpfSubj Number Person
| VPresPart AForm
| VPastPart AForm ;
---- Only these five forms are needed for open-lexicon verbs.
--
-- param

View File

@@ -48,23 +48,133 @@ resource ResGer = ParamGer ** open Prelude in {
-- we need just two or four forms.
mkNoun4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
mkNoun wein wein wein weines weine weinen ;
mkNoun wein wein wein weines weine weinen ;
mkNoun2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen ->
mkNoun frau frau frau frau frauen frauen ;
mkNoun4 frau frau frauen frauen ;
-- Adjectives need four forms: two for the positive and one for the other degrees.
Adjective : Type = {s : Degree => AForm => Str} ;
mkAdjective : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
{s = table {
Posit => adjForms gut gute ;
Compar => adjForms besser besser ;
Superl => adjForms best best
}
} ;
regAdjective : Str -> Adjective = \blau ->
mkAdjective blau blau (blau + "er") (blau + "est") ;
-- This auxiliary gives the forms in each degree.
adjForms : (x1,x2 : Str) -> AForm => Str = \teuer,teur ->
table {
APred => teuer ;
AMod Strong (GSg Masc) c =>
caselist (teur+"er") (teur+"en") (teur+"em") (teur+"es") ! c ;
AMod Strong (GSg Fem) c =>
caselist (teur+"e") (teur+"e") (teur+"er") (teur+"er") ! c ;
AMod Strong (GSg Neut) c =>
caselist (teur+"es") (teur+"es") (teur+"em") (teur+"es") ! c ;
AMod Strong GPl c =>
caselist (teur+"e") (teur+"e") (teur+"en") (teur+"er") ! c ;
AMod Weak (GSg g) c => case <g,c> of {
<_,Nom> => teur+"e" ;
<Masc,Acc> => teur+"en" ;
<_,Acc> => teur+"e" ;
_ => teur+"en" } ;
AMod Weak GPl c => teur+"en"
} ;
Verb : Type = {s : VForm => Str} ;
mkVerb : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben ->
let
ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 ->
case u of {
"s" => b1 ;
"x" => b1 ;
"z" => b1 ;
"ß" => b1 ;
_ => b2
} ;
en = Predef.dp 2 geben ;
geb = case Predef.tk 1 en of {
"e" => Predef.tk 2 geben ;
_ => Predef.tk 1 geben
} ;
gebt = geb + (adde geb) + "t" ;
gebte = ifTok Tok (Predef.dp 1 gab) "e" gab (gab + "e") ;
gibst = ifSibilant (Predef.dp 1 gib) (gib + "t") (gib + "st") ;
gegebener = (regAdjective gegeben).s ;
in {s = table {
VInf => geben ;
VInd Sg P1 => geb + "e" ;
VInd Sg P2 => gibst ;
VInd Sg P3 => gibt ;
VInd Pl P2 => gebt ;
VInd Pl _ => geben ; -- the famous law
VImp Sg => gib + (impe gib) ;
VImp Pl => gebt ;
VSubj Sg P1 => geb + "e" ;
VSubj Sg P2 => geb + "est" ;
VSubj Sg P3 => geb + "e" ;
VSubj Pl P2 => geb + "et" ;
VSubj Pl _ => geben ;
VPresPart a => (regAdjective (geben + "d")).s ! a ;
VImpfInd Sg P1 => gab ;
VImpfInd Sg P2 => gab + (adde gab) + "st" ;
VImpfInd Sg P3 => gab ;
VImpfInd Pl P2 => gab + (adde gab) + "t" ;
VImpfInd Pl _ => gebte + "n" ;
VImpfSubj Sg P1 => gaebe ;
VImpfSubj Sg P2 => gaebe + "st" ;
VImpfSubj Sg P3 => gaebe ;
VImpfSubj Pl P2 => gaebe + "t" ;
VImpfSubj Pl _ => gaebe + "n" ;
VPart a => gegebener ! a
}
} ;
-- Weak verbs:
regVerb : Str -> Verb = \legen ->
let
leg = Predef.tk 2 legen ;
legte = leg + "te" ;
in
mkVerb legen (leg+(adde leg)+"t") leg legte legte ("ge"+leg+"t") ;
adde : Str -> Str = \stem ->
let
eVowelorLiquid : Str -> Str = \u ->
case u of {
"l" | "r" | "a" | "o" | "u" | "e" | "i" | "ü" | "ä" | "ö" => "e" ;
_ => []
} ;
eConsonantmn : Str -> Str -> Str = \nl,l ->
case l of {
"m" | "n" => eVowelorLiquid nl ;
_ => []
} ;
nl = init (Predef.dp 2 stem) ;
l = last stem ;
e = case l of {
"d" | t => "e" ;
_ => eConsonantmn nl l
} ;
in
e ;
--
-- mkAdjective : (_,_,_,_ : Str) -> {s : AForm => Str} =
-- \good,better,best,well -> {
-- s = table {
-- AAdj Posit => good ;
-- AAdj Compar => better ;
-- AAdj Superl => best ;
-- AAdv => well
-- }
-- } ;
--
-- mkVerb : (_,_,_,_,_ : Str) -> {s : VForm => Str} =
-- \go,goes,went,gone,going -> {
-- s = table {