diff --git a/lib/resource-1.0/german/CatGer.gf b/lib/resource-1.0/german/CatGer.gf index 01fb351e7..7b172ccdc 100644 --- a/lib/resource-1.0/german/CatGer.gf +++ b/lib/resource-1.0/german/CatGer.gf @@ -20,31 +20,32 @@ concrete CatGer of Cat = open ResGer, Prelude, (R = ParamX) in { -- s2 : Agr => Str -- } ; -- --- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ; --- V2, VV, V2A = Verb ** {c2 : Str} ; --- V3 = Verb ** {c2, c3 : Str} ; --- --- AP = {s : Agr => Str ; isPre : Bool} ; --- Comp = {s : Agr => Str} ; + V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ; + V2, VV, V2A = Verb ** {c2 : Preposition} ; + V3 = Verb ** {c2, c3 : Preposition} ; + + AP = {s : AForm => Str ; isPre : Bool} ; + Comp = {s : Str} ; -- -- SC = {s : Str} ; -- --- A = {s : AForm => Str} ; --- A2 = {s : AForm => Str ; c2 : Str} ; --- --- Adv, AdV, AdA, AdS, AdN = {s : Str} ; --- Prep = {s : Str} ; --- --- Det, Quant = {s : Str ; n : Number} ; --- Predet, Num, Ord = {s : Str} ; --- + A = {s : Degree => AForm => Str} ; + A2 = {s : Degree => AForm => Str ; c2 : Preposition} ; + + Adv, AdV, AdA, AdS, AdN = {s : Str} ; + Prep = {s : Str ; c : Case} ; + + Det, Quant = {s : Gender => Case => Str ; n : Number ; a : Adjf} ; + Predet = {s : Number => Gender => Case => Str} ; + Num, Ord = {s : Gender => Case => Str} ; + CN = {s : Adjf => Number => Case => Str ; g : Gender} ; N = {s : Number => Case => Str ; g : Gender} ; --- PN = {s : Case => Str} ; --- Pron, NP = {s : Case => Str ; a : Agr} ; --- N2 = {s : Number => Case => Str} ** {c2 : Str} ; --- N3 = {s : Number => Case => Str} ** {c2,c3 : Str} ; --- + PN = {s : Case => Str} ; + Pron, NP = {s : Case => Str ; a : Agr} ; + N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Preposition} ; + N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Preposition} ; + -- IP = {s : Case => Str ; n : Number} ; -- IDet = {s : Str ; n : Number} ; -- IAdv = {s : Str} ; diff --git a/lib/resource-1.0/german/LexGer.gf b/lib/resource-1.0/german/LexGer.gf index c4841ddf1..f15918a3a 100644 --- a/lib/resource-1.0/german/LexGer.gf +++ b/lib/resource-1.0/german/LexGer.gf @@ -1,25 +1,27 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in { --- --- lin --- walk_V = regV "walk" ; --- help_V2 = regV "help" ** {c2 = []} ; --- show_V3 = regV "show" ** {c2 = [] ; c3 = "to"} ; + + lin + walk_V = mkV "gehen" "geht" "geh" "ging" "ginge" "gegangen" ; + help_V2 = mkV "helfen" "hilft" "hilf" "half" "hälfe" "geholfen" ** + {c2 = {s = [] ; c = Dat}} ; + show_V3 = regV "zeigen" ** + {c2 = {s = [] ; c = Acc} ; c3 = {s = [] ; c = Dat}} ; -- want_VV = regV "want" ** {c2 = "to"} ; --- claim_VS = regV "claim" ; --- ask_VQ = regV "ask" ; --- --- dog_N = regN "dog" ; + claim_VS = no_geV (regV "behaupten") ; + ask_VQ = regV "fragen" ; + + dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ; -- son_N2 = regN "son" ** {c2 = "of"} ; -- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ; -- --- warm_A = regA "warm" ; + warm_A = mkA "warm" "warm" "wärmer" "wärmst" ; -- close_A2 = regA "close" ** {c2 = "to"} ; -- --- here_Adv = {s = "here"} ; --- very_AdA = {s = "very"} ; --- always_AdV = {s = "always"} ; --- --- only_Predet = {s = "only"} ; + here_Adv = {s = "hier"} ; + very_AdA = {s = "sehr"} ; + always_AdV = {s = "immer"} ; + + only_Predet = {s = \\_,_,_ => "nur"} ; -- all_Predet = {s = "only"} ; -- this_Quant = {s = "this" ; n = Sg} ; -- these_Quant = {s = "these" ; n = Pl} ; diff --git a/lib/resource-1.0/german/ParamGer.gf b/lib/resource-1.0/german/ParamGer.gf index dafaf2127..48626b366 100644 --- a/lib/resource-1.0/german/ParamGer.gf +++ b/lib/resource-1.0/german/ParamGer.gf @@ -22,22 +22,21 @@ resource ParamGer = ParamX ** { 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 --- Agr = {n : Number ; p : Person} ; --- --- param --- Gender = Neutr | Masc | Fem ; --- + oper Agr = {n : Number ; p : Person} ; + +----2 For $Adjective$ + +-- The predicative form of adjectives is not inflected further. + + param + AForm = APred | AMod Adjf GenNum Case ; + + --2 For $Verb$ - VForm = + param VForm = VInf | VPresInd Number Person | VPresSubj Number Person @@ -47,20 +46,11 @@ resource ParamGer = ParamX ** { | VPresPart AForm | VPastPart AForm ; +-- The order of sentence is depends on whether it is used as a main +-- clause, inverted, or subordinate. ----- Only these five forms are needed for open-lexicon verbs. + Order = ODir | OQuest ; -- --- param --- VForm = VInf | VPres | VPast | VPPart | VPresPart ; --- ----- The order of sentence is needed already in $VP$. --- --- Order = ODir | OQuest ; --- --- -----2 For $Adjective$ --- --- AForm = AAdj Degree | AAdv ; -- ----2 For $Relative$ -- diff --git a/lib/resource-1.0/german/ResGer.gf b/lib/resource-1.0/german/ResGer.gf index 0a7046039..aeee5461d 100644 --- a/lib/resource-1.0/german/ResGer.gf +++ b/lib/resource-1.0/german/ResGer.gf @@ -35,7 +35,7 @@ resource ResGer = ParamGer ** open Prelude in { Noun : Type = {s : Number => Case => Str ; g : Gender} ; - mkNoun : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun = + mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun = \mann, mannen, manne, mannes, maenner, maennern, g -> { s = table { Sg => caselist mann mannen manne mannes ; @@ -47,17 +47,17 @@ resource ResGer = ParamGer ** open Prelude in { -- But we never need all the six forms at the same time. Often -- we need just two or four forms. - mkNoun4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen -> - mkNoun wein wein wein weines weine weinen ; + mkN4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen -> + mkN wein wein wein weines weine weinen ; - mkNoun2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen -> - mkNoun4 frau frau frauen frauen ; + mkN2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen -> + mkN4 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 -> + mkA : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best -> {s = table { Posit => adjForms gut gute ; Compar => adjForms besser besser ; @@ -65,8 +65,8 @@ resource ResGer = ParamGer ** open Prelude in { } } ; - regAdjective : Str -> Adjective = \blau -> - mkAdjective blau blau (blau + "er") (blau + "est") ; + regA : Str -> Adjective = \blau -> + mkA blau blau (blau + "er") (blau + "est") ; -- This auxiliary gives the forms in each degree. @@ -89,9 +89,21 @@ resource ResGer = ParamGer ** open Prelude in { AMod Weak GPl c => teur+"en" } ; +-- This is used e.g. when forming determiners. + + appAdj : Adjective -> Number => Gender => Case => Str = \adj -> + let + ad : GenNum -> Case -> Str = \gn,c -> + adj.s ! Posit ! AMod Strong gn c + in + \\n,g,c => case n of { + Sg => ad (GSg g) c ; + _ => ad GPl c + } ; + Verb : Type = {s : VForm => Str} ; - mkVerb : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben -> + mkV : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben -> let ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 -> case u of { @@ -109,7 +121,7 @@ resource ResGer = ParamGer ** open Prelude in { gebt = 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 ! Posit ; + gegebener = (regA gegeben).s ! Posit ; gabe = addE gab ; gibe = ifTok Str (Predef.dp 2 gib) "ig" "e" [] ++ addE gib in {s = table { @@ -126,7 +138,7 @@ resource ResGer = ParamGer ** open Prelude in { VPresSubj Sg P3 => geb + "e" ; VPresSubj Pl P2 => geb + "et" ; VPresSubj Pl _ => geben ; - VPresPart a => (regAdjective (geben + "d")).s ! Posit ! a ; + VPresPart a => (regA (geben + "d")).s ! Posit ! a ; VImpfInd Sg P1 => gab ; VImpfInd Sg P2 => gabe + "st" ; @@ -146,7 +158,7 @@ resource ResGer = ParamGer ** open Prelude in { -- Weak verbs, including "lächeln", "kümmern". - regVerb : Str -> Verb = \legen -> + regV : Str -> Verb = \legen -> let leg = case Predef.dp 2 legen of { "en" => Predef.tk 2 legen ; @@ -155,7 +167,16 @@ resource ResGer = ParamGer ** open Prelude in { lege = addE leg ; legte = lege + "te" in - mkVerb legen (lege+"t") leg legte legte ("ge"+lege+"t") ; + mkV legen (lege+"t") leg legte legte ("ge"+lege+"t") ; + +-- To eliminate the morpheme "ge". + + no_geV : Verb -> Verb = \verb -> { + s = table { + VPastPart a => Predef.drop 2 (verb.s ! VPastPart a) ; + v => verb.s ! v + } + } ; -- This function decides whether to add an "e" to the stem before "t". -- Examples: "töten - tötet", "kehren - kehrt", "lernen - lernt", "atmen - atmet". @@ -175,6 +196,10 @@ resource ResGer = ParamGer ** open Prelude in { in stem + e ; +-- Prepositions for complements indicate the complement case. + + Preposition : Type = {s : Str ; c : Case} ; + -- -- mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} = -- \i,me,my,n -> let who = mkNP i me my n P3 in {s = who.s ; n = n} ;