diff --git a/lib/resource-1.0/german/CatGer.gf b/lib/resource-1.0/german/CatGer.gf index af68a5a05..cab2a2652 100644 --- a/lib/resource-1.0/german/CatGer.gf +++ b/lib/resource-1.0/german/CatGer.gf @@ -19,7 +19,8 @@ concrete CatGer of Cat = open ResGer, Prelude in { VP = ResGer.VP ; V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ; - V2, VV, V2A = Verb ** {c2 : Preposition} ; + VV = Verb ** {part : Str} ; + V2, V2A = Verb ** {c2 : Preposition} ; V3 = Verb ** {c2, c3 : Preposition} ; AP = {s : AForm => Str ; isPre : Bool} ; diff --git a/lib/resource-1.0/german/LexGer.gf b/lib/resource-1.0/german/LexGer.gf index b0fc6c717..a69ee016b 100644 --- a/lib/resource-1.0/german/LexGer.gf +++ b/lib/resource-1.0/german/LexGer.gf @@ -8,7 +8,7 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in { {c2 = {s = [] ; c = Dat}} ; show_V3 = regV "zeigen" ** {c2 = {s = [] ; c = Acc} ; c3 = {s = [] ; c = Dat}} ; --- want_VV = regV "want" ** {c2 = "to"} ; + want_VV = auxVV wollen_V ; claim_VS = no_geV (regV "behaupten") ; ask_VQ = regV "fragen" ; diff --git a/lib/resource-1.0/german/ResGer.gf b/lib/resource-1.0/german/ResGer.gf index 45568b41f..76ca127fa 100644 --- a/lib/resource-1.0/german/ResGer.gf +++ b/lib/resource-1.0/german/ResGer.gf @@ -365,11 +365,25 @@ resource ResGer = ParamGer ** open Prelude in { aux = VSein } ; + wollen_V : Verb = + let + wollen = mkV "wollen" "will" "woll" "wollte" "wollte" "gewollen" VHaben + in + {s = table { + VPresInd Sg P1 => "will" ; + VPresInd Sg P2 => "willst" ; + v => wollen.s ! v + } ; + aux = VHaben + } ; + negation : Polarity => Str = table { Pos => [] ; Neg => "nicht" } ; + auxVV : Verb -> Verb ** {part : Str} = \v -> v ** {part = []} ; + -- Extending a verb phrase with new constituents. insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> { @@ -388,6 +402,32 @@ resource ResGer = ParamGer ** open Prelude in { ext = vp.ext } ; + insertExtrapos : Str -> VP -> VP = \ext,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n2 = vp.n2 ; + a2 = vp.a2 ; + ext = vp.ext ++ ext + } ; + + s = \\a => table { + VPFinite t Anter => case t of { + Pres | Past => vf (hat t a) vpart ; + Fut => vf (wird a) (vpart ++ haben) ; + Cond => vf (wuerde a) (vpart ++ haben) + } ; + VPImperat => vf (verb.s ! VImper a.n) [] ; + VPInfinit Simul => vf [] vinf ; + VPInfinit Anter => vf [] (vpart ++ haben) + } ; + a1 : Polarity => Str = negation ; + n2 : Agr => Str = \\_ => [] ; + a2 : Str = [] ; + ext : Str = [] + } ; + + + -- For $Sentence$. Clause : Type = { @@ -399,166 +439,29 @@ resource ResGer = ParamGer ** open Prelude in { let verb = vp.s ! agr ! VPFinite t a ; neg = vp.a1 ! b ; - obj = vp.n2 ! agr ++ vp.a2 ++ vp.ext ; + obj = vp.n2 ! agr ++ vp.a2 ; compl = neg ++ obj ++ verb.inf ; + extra = vp.ext ; in case o of { - Main => subj ++ verb.fin ++ compl ; - Inv => verb.fin ++ subj ++ compl ; - Sub => subj ++ compl ++ verb.fin + Main => subj ++ verb.fin ++ compl ++ extra ; + Inv => verb.fin ++ subj ++ compl ++ extra ; + Sub => subj ++ compl ++ verb.fin ++ extra } } ; + conjThat : Str = "daß" ; + + reflPron : Agr => Str = table { + {n = Sg ; p = P1} => "mich" ; + {n = Sg ; p = P2} => "dich" ; + {n = Sg ; p = P3} => "sich" ; -- + {n = Pl ; p = P1} => "uns" ; + {n = Pl ; p = P2} => "euch" ; + {n = Pl ; p = P3} => "sich" + } ; --- VerbForms : Type = --- Tense => Anteriority => Polarity => Order => Agr => {fin, inf : Str} ; --- --- VP : Type = { --- s : VerbForms ; --- s2 : Agr => Str --- } ; --- --- predV : Verb -> VP = \verb -> { --- s = \\t,ant,b,ord,agr => --- let --- inf = verb.s ! VInf ; --- fin = presVerb verb agr ; --- past = verb.s ! VPast ; --- part = verb.s ! VPPart ; --- vf : Str -> Str -> {fin, inf : Str} = \x,y -> --- {fin = x ; inf = y} ; --- in --- case of { --- => vf fin [] ; --- => vf (does agr) inf ; --- => vf (doesnt agr) inf ; --- => vf (have agr) part ; --- => vf (havent agr) part ; --- => vf past [] ; --- => vf "did" inf ; --- => vf "didn't" inf ; --- => vf "had" part ; --- => vf "hadn't" part ; --- => vf "will" inf ; --- => vf "won't" inf ; --- => vf "will" ("have" ++ part) ; --- => vf "won't" ("have" ++ part) ; --- => vf "would" inf ; --- => vf "wouldn't" inf ; --- => vf "would" ("have" ++ part) ; --- => vf "wouldn't" ("have" ++ part) --- } ; --- s2 = \\_ => [] --- } ; --- --- predAux : Aux -> VP = \verb -> { --- s = \\t,ant,b,ord,agr => --- let --- inf = verb.inf ; --- fin = verb.pres ! b ! agr ; --- past = verb.past ! b ! agr ; --- part = verb.ppart ; --- vf : Str -> Str -> {fin, inf : Str} = \x,y -> --- {fin = x ; inf = y} ; --- in --- case of { --- => vf fin [] ; --- => vf (have agr) part ; --- => vf (havent agr) part ; --- => vf past [] ; --- => vf "had" part ; --- => vf "hadn't" part ; --- => vf "will" inf ; --- => vf "won't" inf ; --- => vf "will" ("have" ++ part) ; --- => vf "won't" ("have" ++ part) ; --- => vf "would" inf ; --- => vf "wouldn't" inf ; --- => vf "would" ("have" ++ part) ; --- => vf "wouldn't" ("have" ++ part) --- } ; --- s2 = \\_ => [] --- } ; --- --- insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> { --- s = vp.s ; --- s2 = \\a => vp.s2 ! a ++ obj ! a --- } ; --- ---- This is not functional. --- --- insertAdV : Str -> VP -> VP = \adv,vp -> { --- s = vp.s ; --- s2 = vp.s2 --- } ; --- --- presVerb : {s : VForm => Str} -> Agr -> Str = \verb -> --- agrVerb (verb.s ! VPres) (verb.s ! VInf) ; --- --- infVP : VP -> Agr -> Str = \vp,a -> --- (vp.s ! Fut ! Simul ! Neg ! ODir ! a).inf ++ vp.s2 ! a ; --- --- agrVerb : Str -> Str -> Agr -> Str = \has,have,agr -> --- case agr of { --- {n = Sg ; p = P3} => has ; --- _ => have --- } ; --- --- have = agrVerb "has" "have" ; --- havent = agrVerb "hasn't" "haven't" ; --- does = agrVerb "does" "do" ; --- doesnt = agrVerb "doesn't" "don't" ; --- --- Aux = {pres,past : Polarity => Agr => Str ; inf,ppart : Str} ; --- --- auxBe : Aux = { --- pres = \\b,a => case of { --- => "am" ; --- => ["am not"] ; --- am not I --- _ => agrVerb (posneg b "is") (posneg b "are") a --- } ; --- past = \\b,a => agrVerb (posneg b "was") (posneg b "were") a ; --- inf = "be" ; --- ppart = "been" --- } ; --- --- posneg : Polarity -> Str -> Str = \p,s -> case p of { --- Pos => s ; --- Neg => s + "n't" --- } ; --- --- conjThat : Str = "that" ; --- --- reflPron : Agr => Str = table { --- {n = Sg ; p = P1} => "myself" ; --- {n = Sg ; p = P2} => "yourself" ; --- {n = Sg ; p = P3} => "itself" ; -- --- {n = Pl ; p = P1} => "ourselves" ; --- {n = Pl ; p = P2} => "yourselves" ; --- {n = Pl ; p = P3} => "themselves" --- } ; --- --- For $Sentence$. --- --- Clause : Type = { --- s : Tense => Anteriority => Polarity => Order => Str --- } ; --- --- mkClause : Str -> Agr -> VP -> Clause = --- \subj,agr,vp -> { --- s = \\t,a,b,o => --- let --- verb = vp.s ! t ! a ! b ! o ! agr ; --- compl = vp.s2 ! agr --- in --- case o of { --- ODir => subj ++ verb.fin ++ verb.inf ++ compl ; --- OQuest => verb.fin ++ subj ++ verb.inf ++ compl --- } --- } ; --- --- -- For $Numeral$. -- -- mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = diff --git a/lib/resource-1.0/german/VerbGer.gf b/lib/resource-1.0/german/VerbGer.gf index 604129948..5cc4cd2c7 100644 --- a/lib/resource-1.0/german/VerbGer.gf +++ b/lib/resource-1.0/german/VerbGer.gf @@ -9,8 +9,11 @@ concrete VerbGer of Verb = CatGer ** open ResGer in { ComplV3 v np np2 = insertObj (\\_ => appPrep v.c2 np.s ++ appPrep v.c3 np2.s) (predV v) ; --- ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ; --- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ; + ComplVV v vp = + insertObj (\\a => v.part ++ (vp.s ! a ! VPInfinit Simul).inf) (predV v) ; + ComplVS v s = + insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ; + -- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ; -- -- ComplVA v ap = insertObj (ap.s) (predV v) ; diff --git a/lib/resource-1.0/german/log.txt b/lib/resource-1.0/german/log.txt index 0a7edf3cb..e16b42923 100644 --- a/lib/resource-1.0/german/log.txt +++ b/lib/resource-1.0/german/log.txt @@ -57,10 +57,20 @@ add flags optimize=all_subs to this module: VerbGer: UseComp, Comp* > p -cat=Cl -mcfg "ich bin ein Hund" | l -table - -vg +> vg (see complex figure) -i english/TestEng.gf -vg +> i english/TestEng.gf +> vg (see complex symmetric figure) +ResGer: wollen_V, auxVV, insertExtrapos +VerbGer: ComplVS +> p -cat=Cl -mcfg "ich behaupte daß wir gehen" | l -table +(gets OK with proper extrapos) +VerbGer: ComplVV + = insertObj (\\a => v.part ++ (vp.s ! a ! VPInfinit Simul).inf) (predV v) ; +> p -cat=Cl "ich will gehen" | l -table + Pres Anter Pos Main : ich habe gehen gewollen + Pres Anter Pos Inv : habe ich gehen gewollen + Pres Anter Pos Sub : ich gehen gewollen habe +(Thus "double infinitives" don't get right.)