diff --git a/lib/resource-1.0/german/CatGer.gf b/lib/resource-1.0/german/CatGer.gf index fbcea6cac..15a57cf19 100644 --- a/lib/resource-1.0/german/CatGer.gf +++ b/lib/resource-1.0/german/CatGer.gf @@ -3,19 +3,20 @@ concrete CatGer of Cat = open ResGer, Prelude in { flags optimize=all_subs ; lincat + Text, Phr, Utt = {s : Str} ; Imp = {s : Polarity => Number => Str} ; S = {s : Order => Str} ; QS = {s : QForm => Str} ; --- RS = {s : Agr => Str} ; + RS = {s : GenNum => Str} ; Cl = {s : Tense => Anteriority => Polarity => Order => Str} ; Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Preposition} ; QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ; - RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ; + RCl = {s : Tense => Anteriority => Polarity => GenNum => Str} ; VP = ResGer.VP ; V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ; @@ -51,8 +52,8 @@ concrete CatGer of Cat = open ResGer, Prelude in { IDet = {s : Gender => Case => Str ; n : Number} ; IAdv = {s : Str} ; --- RP = {s : Case => Str ; a : RAgr} ; --- + RP = {s : GenNum => Case => Str ; a : RAgr} ; + -- Numeral = {s : CardOrd => Str ; n : Number} ; CAdv = {s : Str} ; diff --git a/lib/resource-1.0/german/LexGer.gf b/lib/resource-1.0/german/LexGer.gf index d72e61a87..d428fa98f 100644 --- a/lib/resource-1.0/german/LexGer.gf +++ b/lib/resource-1.0/german/LexGer.gf @@ -13,12 +13,14 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in { 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"} ; --- + son_N2 = mkN4 "Sohn" "Sohnes" "Söhne" "Söhnen" Masc ** + {c2 = {s = "von" ; c = Dat}} ; + way_N3 = mkN4 "Weg" "Weges" "Wege" "Wegen" Masc ** + {c2 = {s = "von" ; c = Dat} ; c3 = {s = "nach" ; c = Dat}} ; + warm_A = mkA "warm" "warm" "wärmer" "wärmst" ; --- close_A2 = regA "close" ** {c2 = "to"} ; --- + close_A2 = regA "eng" ** {c2 = {s = "zu" ; c = Dat}} ; + here_Adv = {s = "hier"} ; very_AdA = {s = "sehr"} ; always_AdV = {s = "immer"} ; diff --git a/lib/resource-1.0/german/NounGer.gf b/lib/resource-1.0/german/NounGer.gf index 195eabf50..500906652 100644 --- a/lib/resource-1.0/german/NounGer.gf +++ b/lib/resource-1.0/german/NounGer.gf @@ -79,9 +79,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in { n = Pl ; a = Strong } ; --- --- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ; --- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ; + + ComplN2 f x = { + s = \\_,n,c => f.s ! n ! c ++ appPrep f.c2 x.s ; + g = f.g + } ; + ComplN3 f x = { + s = \\n,c => f.s ! n ! c ++ appPrep f.c2 x.s ; + g = f.g ; + c2 = f.c3 + } ; AdjCN ap cn = let @@ -94,10 +101,19 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in { g = g } ; --- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ; --- --- SentCN cn s = {s = \\n,c => cn.s ! n ! c ++ conjThat ++ s.s} ; --- QuestCN cn qs = {s = \\n,c => cn.s ! n ! c ++ qs.s ! QIndir} ; + RelCN cn rs = { + s = \\a,n,c => cn.s ! a ! n ! c ++ rs.s ! gennum cn.g n ; + g = cn.g + } ; + + SentCN cn s = { + s = \\a,n,c => cn.s ! a ! n ! c ++ conjThat ++ s.s ! Sub ; + g = cn.g + } ; + QuestCN cn qs = { + s = \\a,n,c => cn.s ! a ! n ! c ++ qs.s ! QIndir ; + g = cn.g + } ; UseN n = { s = \\_ => n.s ; diff --git a/lib/resource-1.0/german/ParamGer.gf b/lib/resource-1.0/german/ParamGer.gf index 12eba9501..12db93a66 100644 --- a/lib/resource-1.0/german/ParamGer.gf +++ b/lib/resource-1.0/german/ParamGer.gf @@ -60,13 +60,14 @@ resource ParamGer = ParamX ** { -- The order of sentence is depends on whether it is used as a main -- clause, inverted, or subordinate. - param Order = Main | Inv | Sub ; + param + Order = Main | Inv | Sub ; + + +--2 For $Relative$ + + RAgr = RNoAg | RAg {n : Number ; p : Person} ; --- -----2 For $Relative$ --- --- RAgr = RNoAg | RAg {n : Number ; p : Person} ; --- ----2 For $Numeral$ -- -- CardOrd = NCard | NOrd ; @@ -84,6 +85,14 @@ resource ParamGer = ParamX ** { Pl => GPl } ; +-- Needed in $RelativeGer$. + + numGenNum : GenNum -> Number = \gn -> + case gn of { + GSg _ => Sg ; + GPl => Pl + } ; + agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c -> AMod a (gennum g n) c ; diff --git a/lib/resource-1.0/german/RelativeGer.gf b/lib/resource-1.0/german/RelativeGer.gf index 037d45903..d73e8a647 100644 --- a/lib/resource-1.0/german/RelativeGer.gf +++ b/lib/resource-1.0/german/RelativeGer.gf @@ -1,34 +1,45 @@ concrete RelativeGer of Relative = CatGer ** open ResGer in { --- --- flags optimize=all_subs ; --- --- lin --- --- RelCl cl = { --- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir --- } ; --- --- RelVP rp vp = { --- s = \\t,ant,b,ag => --- let --- agr = case rp.a of { --- RNoAg => ag ; --- RAg a => a --- } ; --- cl = mkClause (rp.s ! Nom) agr vp --- in --- cl.s ! t ! ant ! b ! ODir --- } ; --- --- RelSlash rp slash = { --- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir --- } ; --- --- FunRP p np rp = { --- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ; --- a = RAg np.a --- } ; --- --- IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ; --- + + flags optimize=all_subs ; + + lin + + RelCl cl = { + s = \\t,a,b,_ => "derart" ++ conjThat ++ cl.s ! t ! a ! b ! Sub + } ; + + RelVP rp vp = { + s = \\t,ant,b,gn => + let + agr = case rp.a of { + RNoAg => agrP3 (numGenNum gn) ; + RAg a => a + } ; + cl = mkClause (rp.s ! gn ! Nom) agr vp + in + cl.s ! t ! ant ! b ! Sub + } ; + + RelSlash rp slash = { + s = \\t,a,p,gn => + appPrep slash.c2 (rp.s ! gn) ++ slash.s ! t ! a ! p ! Sub + } ; + + FunRP p np rp = { + s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ; + a = RAg np.a + } ; + + IdRP = {s = relPron ; a = RNoAg} ; + + oper + relPron : GenNum => Case => Str = \\gn,c => + case of { + => "deren" ; + => "dessen" ; + => "denen" ; + => "deren" ; + _ => artDef ! gn ! c + } ; + } diff --git a/lib/resource-1.0/german/SentenceGer.gf b/lib/resource-1.0/german/SentenceGer.gf index 4b9811150..fddd4d81f 100644 --- a/lib/resource-1.0/german/SentenceGer.gf +++ b/lib/resource-1.0/german/SentenceGer.gf @@ -17,18 +17,19 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer in { verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext } ; --- SlashV2 np v2 = --- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ; --- --- SlashVVV2 np vv v2 = --- mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) ** --- {c2 = v2.c2} ; --- --- AdvSlash slash adv = { --- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ; --- c2 = slash.c2 --- } ; --- --- SlashPrep cl prep = cl ** {c2 = prep.s} ; --- + SlashV2 np v2 = + mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ; + + SlashVVV2 np vv v2 = + mkClause (np.s ! Nom) np.a + (insertObj (\\a => vv.part ++ v2.s ! VInf) (predV vv)) ** + {c2 = v2.c2} ; + + AdvSlash slash adv = { + s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ; + c2 = slash.c2 + } ; + + SlashPrep cl prep = cl ** {c2 = prep} ; + } diff --git a/lib/resource-1.0/german/UntensedGer.gf b/lib/resource-1.0/german/UntensedGer.gf index db8f6b7c5..7c5da4b1a 100644 --- a/lib/resource-1.0/german/UntensedGer.gf +++ b/lib/resource-1.0/german/UntensedGer.gf @@ -9,7 +9,7 @@ concrete UntensedGer of Untensed = CatGer ** open ResGer in { PosQCl cl = {s = cl.s ! Pres ! Simul ! Pos} ; NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ; --- PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ; --- NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ; --- + PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ; + NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ; + } diff --git a/lib/resource-1.0/german/log.txt b/lib/resource-1.0/german/log.txt index 302230fe7..8f06c11e8 100644 --- a/lib/resource-1.0/german/log.txt +++ b/lib/resource-1.0/german/log.txt @@ -98,3 +98,24 @@ QuestionGer: IDetCN (using NounGer.MkDet) > p -cat=QS -mcfg "welcher Hund geht" > p -cat=QS -mcfg "in welchem Hund geht er" +wc german/*.gfc +69407 total + +NounGer: ComplN2, ComplN3, SentCN, QuestCN +LexGer: N2, N3 +> p -cat=NP "der Sohn von dem Hund" +> p -cat=CN -mcfg "Hund ob er geht" + +SentenceGer: Slash rules +> p -cat=QS -mcfg "wem hilft er" + +CatGer: RP, RS, RCl +ParamGer: RAgr +RelativeGer: all (copied from Scand; tweaking betw GenNum, Agr also in CatGer) +UntensedGer: PosRCl, NegRCl +NounGer: RelCN +> p -cat=RCl -mcfg "der geht" | l -table +> p -cat=NP -mcfg "der Hund dem wir helfen wollen" | l -table + + +