diff --git a/lib/resource-1.0/english/CatEng.gf b/lib/resource-1.0/english/CatEng.gf index 4a92bdf53..7035790dd 100644 --- a/lib/resource-1.0/english/CatEng.gf +++ b/lib/resource-1.0/english/CatEng.gf @@ -1,4 +1,4 @@ -concrete CatEng of Cat = open ResEng, Prelude, (R = ParamX) in { +concrete CatEng of Cat = open ResEng, Prelude in { lincat Text, Phr, Utt = {s : Str} ; diff --git a/lib/resource-1.0/german/CatGer.gf b/lib/resource-1.0/german/CatGer.gf index 5658cef04..af68a5a05 100644 --- a/lib/resource-1.0/german/CatGer.gf +++ b/lib/resource-1.0/german/CatGer.gf @@ -1,11 +1,13 @@ -concrete CatGer of Cat = open ResGer, Prelude, (R = ParamX) in { +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 : Str} ; + + S = {s : Order => Str} ; -- QS = {s : QForm => Str} ; -- RS = {s : Agr => Str} ; @@ -16,12 +18,12 @@ concrete CatGer of Cat = open ResGer, Prelude, (R = ParamX) in { -- RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ; VP = ResGer.VP ; - V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ; + V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ; V2, VV, V2A = Verb ** {c2 : Preposition} ; V3 = Verb ** {c2, c3 : Preposition} ; AP = {s : AForm => Str ; isPre : Bool} ; - Comp = {s : Str} ; + Comp = {s : Agr => Str} ; -- -- SC = {s : Str} ; -- diff --git a/lib/resource-1.0/german/LexGer.gf b/lib/resource-1.0/german/LexGer.gf index bd12be157..b0fc6c717 100644 --- a/lib/resource-1.0/german/LexGer.gf +++ b/lib/resource-1.0/german/LexGer.gf @@ -1,5 +1,7 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in { + flags optimize = values ; + lin walk_V = mkV "gehen" "geht" "geh" "ging" "ginge" "gegangen" VSein ; help_V2 = mkV "helfen" "hilft" "hilf" "half" "hälfe" "geholfen" VHaben ** diff --git a/lib/resource-1.0/german/ResGer.gf b/lib/resource-1.0/german/ResGer.gf index 480e33e99..45568b41f 100644 --- a/lib/resource-1.0/german/ResGer.gf +++ b/lib/resource-1.0/german/ResGer.gf @@ -97,10 +97,7 @@ resource ResGer = ParamGer ** open Prelude in { let ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 -> case u of { - "s" => b1 ; - "x" => b1 ; - "z" => b1 ; - "ß" => b1 ; + "s" | "x" | "z" | "ß" => b1 ; _ => b2 } ; en = Predef.dp 2 geben ; @@ -171,6 +168,11 @@ resource ResGer = ParamGer ** open Prelude in { Preposition : Type = {s : Str ; c : Case} ; +-- To apply a preposition to a complement. + + appPrep : Preposition -> (Case => Str) -> Str = \prep,arg -> + prep.s ++ arg ! prep.c ; + -- Pronouns and articles -- Here we define personal and relative pronouns. -- All personal pronouns, except "ihr", conform to the simple @@ -368,6 +370,23 @@ resource ResGer = ParamGer ** open Prelude in { Neg => "nicht" } ; +-- Extending a verb phrase with new constituents. + + insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n2 = \\a => vp.n2 ! a ++ obj ! a ; + a2 = vp.a2 ; + ext = vp.ext + } ; + + insertAdv : Str -> VP -> VP = \adv,vp -> { + s = vp.s ; + a1 = vp.a1 ; + n2 = vp.n2 ; + a2 = vp.a2 ++ adv ; + ext = vp.ext + } ; -- For $Sentence$. @@ -380,12 +399,13 @@ resource ResGer = ParamGer ** open Prelude in { let verb = vp.s ! agr ! VPFinite t a ; neg = vp.a1 ! b ; - compl = vp.n2 ! agr ++ vp.a2 ++ vp.ext + obj = vp.n2 ! agr ++ vp.a2 ++ vp.ext ; + compl = neg ++ obj ++ verb.inf ; in case o of { - Main => subj ++ verb.fin ++ neg ++ verb.inf ++ compl ; - Inv => verb.fin ++ subj ++ neg ++ verb.inf ++ compl ; - Sub => subj ++ neg ++ compl ++ verb.inf ++ verb.fin + Main => subj ++ verb.fin ++ compl ; + Inv => verb.fin ++ subj ++ compl ; + Sub => subj ++ compl ++ verb.fin } } ; diff --git a/lib/resource-1.0/german/UntensedGer.gf b/lib/resource-1.0/german/UntensedGer.gf index 7d44620ab..ee3d77295 100644 --- a/lib/resource-1.0/german/UntensedGer.gf +++ b/lib/resource-1.0/german/UntensedGer.gf @@ -1,11 +1,11 @@ concrete UntensedGer of Untensed = CatGer ** open ResGer in { --- --- flags optimize=all_subs ; --- --- lin --- PosCl cl = {s = cl.s ! Pres ! Simul ! Pos ! ODir} ; --- NegCl cl = {s = cl.s ! Pres ! Simul ! Neg ! ODir} ; --- + + flags optimize=all_subs ; + + lin + PosCl cl = {s = cl.s ! Pres ! Simul ! Pos} ; + NegCl cl = {s = cl.s ! Pres ! Simul ! Neg} ; + -- PosQCl cl = {s = cl.s ! Pres ! Simul ! Pos} ; -- NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ; -- diff --git a/lib/resource-1.0/german/VerbGer.gf b/lib/resource-1.0/german/VerbGer.gf index 3985fd9fe..604129948 100644 --- a/lib/resource-1.0/german/VerbGer.gf +++ b/lib/resource-1.0/german/VerbGer.gf @@ -4,11 +4,11 @@ concrete VerbGer of Verb = CatGer ** open ResGer in { lin UseV = predV ; + ComplV2 v np = + insertObj (\\_ => appPrep v.c2 np.s) (predV v) ; + ComplV3 v np np2 = + insertObj (\\_ => appPrep v.c2 np.s ++ appPrep v.c3 np2.s) (predV v) ; --- ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ; --- ComplV3 v np np2 = --- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ; --- -- ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ; -- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ; -- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ; @@ -17,8 +17,13 @@ concrete VerbGer of Verb = CatGer ** open ResGer in { -- ComplV2A v np ap = -- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ; -- --- UseComp comp = insertObj comp.s (predAux auxBe) ; --- + + UseComp comp = insertObj comp.s (predV sein_V) ; + + CompAP ap = {s = \\_ => ap.s ! APred} ; + CompNP np = {s = \\_ => np.s ! Nom} ; + CompAdv a = {s = \\_ => a.s} ; + -- AdvVP vp adv = insertObj (\\_ => adv.s) vp ; ------ AdVVP adv vp = insertAdV adv.s vp ; -- @@ -27,11 +32,7 @@ concrete VerbGer of Verb = CatGer ** open ResGer in { -- PassV2 v = {s = \\_ => v.s ! VPPart} ; -- -- UseVV, UseVS, UseVQ = \vv -> {s = vv.s ; c2 = []} ; -- no "to" --- --- CompAP ap = ap ; --- CompNP np = {s = \\_ => np.s ! Acc} ; --- CompAdv a = {s = \\_ => a.s} ; --- + -- EmbedS s = {s = conjThat ++ s.s} ; -- EmbedQS qs = {s = qs.s ! QIndir} ; -- EmbedVP vp = {s = infVP vp (agrP3 Sg)} ; --- agr diff --git a/lib/resource-1.0/german/log.txt b/lib/resource-1.0/german/log.txt new file mode 100644 index 000000000..0a7edf3cb --- /dev/null +++ b/lib/resource-1.0/german/log.txt @@ -0,0 +1,66 @@ +Steps of building the German implementation. + +4/1/2006 + +ParamGer: Case, Gender, Adjf +CatGer: N, CN +ResGer: mkNoun, mkN2, mkN4 +> cc mkN2 "Stube" "Stuben" Fem + +ResGer: mkA, mkV, regA, regV +> cc regV "machen" + +CatGer: V*, A* +LexGer: N*, A*, V* +> l -table walk_V + +NounGer: determiner rules, UseN +ParamGer: gennum, adjAgr +ResGer: pronForms +> p -cat=NP "der Hund" | l -table + + +5/1 + +LexGer: Pron, Det +> p "mein Hund" + +AdjectiveGer: PositA, ComparA, AdAP +> p -cat=NP "ein warmer Hund" | l -table +> p -cat=NP -lexer=literals "alle meine 3 sehr warmen Hünde" + +ResGer: predV, mkClause, aux verbs +VerbGer: UseV +SentenceGer: PredVP +> l -table PredVP (UsePron i_Pron) (UseV walk_V) +("ich nicht gegangen hatte" etc) + +ParamGer: VAux +ResGer: added aux : VAux to Verb and mkV +LexGer: mkV updates +> l -table PredVP (UsePron i_Pron) (UseV walk_V) +("ich nicht gegangen war" etc, now correct) + + +ResGer: appPrep, insertObj, insertAdv +VerbGer: ComplV2, ComplV3 +SentenceGer: PosCl, NegCl +> p -cat=S -mcfg "ich zeige ihn meinem warmen Hund" + +wc *.gfc +122385 total + 70667 CatGer.gfc (largest) +add flags optimize=all_subs to this module: + 5781 CatGer.gfc + 57499 total + +VerbGer: UseComp, Comp* +> p -cat=Cl -mcfg "ich bin ein Hund" | l -table + + +vg +(see complex figure) +i english/TestEng.gf +vg +(see complex symmetric figure) +