From c8a424c0237d39c21200664fa8a2312656f7d352 Mon Sep 17 00:00:00 2001 From: Hans Leiss Date: Fri, 4 Aug 2023 20:34:02 +0200 Subject: [PATCH] Implementation of prep+DefArt-gluing independent of |PCase| finished --- src/german/AllGer.gf | 2 +- src/german/ExtendGer.gf | 24 ++++++++++++------------ src/german/NounGer.gf | 25 +++++++------------------ src/german/ParadigmsGer.gf | 16 ++++++++++------ src/german/StructuralGer.gf | 3 +-- src/german/SymbolGer.gf | 8 +------- 6 files changed, 32 insertions(+), 46 deletions(-) diff --git a/src/german/AllGer.gf b/src/german/AllGer.gf index ad643b202..83e6751f5 100644 --- a/src/german/AllGer.gf +++ b/src/german/AllGer.gf @@ -5,5 +5,5 @@ concrete AllGer of AllGerAbs = IrregGer, ---- ExtendGer, ---- to replace ExtraGer ExtraGer - -- ** open ExtendGer in {} ---- to force compilation HL 7/22 todo: ListNP' in ExtendGer + ** open ExtendGer in {} ---- to force compilation ; diff --git a/src/german/ExtendGer.gf b/src/german/ExtendGer.gf index bf6757c7c..bf9255550 100644 --- a/src/german/ExtendGer.gf +++ b/src/german/ExtendGer.gf @@ -7,6 +7,7 @@ concrete ExtendGer of Extend = VPS, ListVPS, VPI, ListVPI, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, + GenModNP, CardCNCard ] with @@ -24,9 +25,9 @@ concrete ExtendGer of Extend = VPS = {s : Order => Agr => Str} ; [VPS] = {s1,s2 : Order => Agr => Str} ; -lin + lin - InOrderToVP vp = {s = "um" ++ useInfVP False vp} ; + InOrderToVP vp = {s = "um" ++ useInfVP False vp} ; BaseVPI = twoTable Bool ; ConsVPI = consrTable Bool comma ; @@ -43,7 +44,7 @@ lin PredVPS np vpi = let - subj = np.s ! NPC Nom ++ bigNP np ; + subj = np.s ! False ! Nom ++ bigNP np ; agr = np.a ; in { s = \\o => @@ -114,31 +115,30 @@ lin ConjVPS = conjunctDistrTable2 Order Agr ; UseDAP det = { - s = \\c => det.sp ! Neutr ! c ; + s = \\b,c => det.sp ! Neutr ! c ; a = agrP3 det.n ; w = case det.isDef of { True => WLight ; _ => WHeavy } ; rc, ext = [] } ; UseDAPMasc det = { - s = \\c => det.sp ! Masc ! c ; + s = \\_,c => det.sp ! Masc ! c ; a = agrP3 det.n ; w = WLight ; rc, ext = [] } ; UseDAPFem det = { - s = \\c => det.sp ! Fem ! c ; + s = \\_,c => det.sp ! Fem ! c ; a = agrP3 det.n ; w = WLight ; rc, ext = [] } ; -lin - CardCNCard card cn = { - s = \\g,c => - (Grammar.DetCN (Grammar.DetQuant Grammar.IndefArt (Grammar.NumCard card)) cn).s ! NPC c ; - n = Pl - } ; + CardCNCard card cn = { + s = \\g,c => + (Grammar.DetCN (Grammar.DetQuant Grammar.IndefArt (Grammar.NumCard card)) cn).s ! False ! c ; + n = Pl + } ; } diff --git a/src/german/NounGer.gf b/src/german/NounGer.gf index b3785fe28..c70f19f03 100644 --- a/src/german/NounGer.gf +++ b/src/german/NounGer.gf @@ -4,17 +4,18 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { flags optimize=all_subs ; -- Remark: np.isLight makes ResGer.insertObjNP expensive, for ComplSlash, SlashVP +-- np.isLight = True and np.isPron = True are now part of np.w + + -- HL 21.7.2022: the dropping of DefArt in Prep+DefArt works by selecting from + -- np.s via b = det.hasDefArt = True the forms without det.s and from prep.s + -- the preposition glued with definite article singular, depending on gender, case. lin DetCN det cn = { s = \\b,c => det.s ! b ! cn.g ! c ++ cn.s ! (adjfCase det.a c) ! det.n ! c ++ cn.adv ; a = agrgP3 cn.g det.n ; -- isLight = det.isDef ; -- ich sehe den Mann nicht vs. ich sehe nicht einen Mann - -- isPron = False ; -- HL 6/2019 (but:) sehe (die|einige) Männer nicht - -- don't see a|no man = sehe keinen Mann - -- w = case det.isDef of { True => WLight ; _ => WHeavy } ; - -- Would be clearer with w:Weight and hasDefArt:Bool with |NP|=|Agr|*3*2 = 108 - -- instead of the more efficient w:Weigth' with |NP|=|Agr|*4 = 18*4 = 54 + -- HL 6/2019 (but:) sehe (die|einige) Männer nicht; don't see a|no man = sehe keinen Mann w = case det.isDef of { True => case det.hasDefArt of { True => WDefArt ; _ => WLight } ; _ => WHeavy } ; @@ -25,7 +26,6 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { DetNP det = { -- more genders in ExtraGer -- HL: der+er,den+en ; der drei,den drei+en s = \\b,c => det.sp ! b ! Neutr ! c ; a = agrP3 det.n ; - -- isLight = det.isDef ; -- isPron = False ; -- HL 6/2019: don't apply pronoun switch: ich gebe ihr das vs. ich gebe es ihr w = case det.isDef of { True => WLight ; _ => WHeavy } ; rc, ext = [] @@ -71,15 +71,6 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { w = WHeavy } ; - -- HL 21.7.2022: the dropping of DefArt in Prep+DefArt via hasDefArt works by splitting the - -- np.s into det':Str and cn:Str and (det.s ! g ! n) into {quant:Str; num:Str}, so that in - -- PrepNP in_Prep np we can replace "in" + "das" by "im" to get - -- PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (warme Meer)) => im warmen Meer - -- But parsing "im warmen Meer" results in a - -- PrepNP in_Prep (DetCN (DetQuant ? NumSg) (AdjCN ... )) - -- because (DetQuant.s!g!c).quant is ignored, but the .num is part of (np.s!c).p2. - -- To avoid the metavariable ?, we have to made Det.s and NP.s depend on t:PrepType = isPrep. - DetQuantOrd quant num ord = let n = num.n ; @@ -167,9 +158,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in { MassNP cn = { s = \\_,c => cn.s ! Strong ! Sg ! c ++ cn.adv ; a = agrgP3 cn.g Sg ; - -- isLight = True ; -- ich trinke Bier nicht vs. ich trinke kein Bier - -- isPron = False ; - w = WLight ; + w = WLight ; -- ich trinke Bier nicht vs. ich trinke kein Bier rc = cn.rc ! Sg ; ext = cn.ext ; hasDefArt = False diff --git a/src/german/ParadigmsGer.gf b/src/german/ParadigmsGer.gf index 05de970a4..3f03c4009 100644 --- a/src/german/ParadigmsGer.gf +++ b/src/german/ParadigmsGer.gf @@ -197,13 +197,15 @@ mkN : overload { datPrep : Prep ; -- no string, just dative case genPrep : Prep ; -- no string, just genitive case --- A couple of common prepositions (the first two always with the dative). +-- A couple of common prepositions (the first three always with the dative). - von_Prep : Prep ; -- von + dative, with contraction vom - zu_Prep : Prep ; -- zu + dative, with contractions zum, zur - anDat_Prep : Prep ; -- an + dative, with contraction am - inDat_Prep : Prep ; -- in + dative, with contraction im - inAcc_Prep : Prep ; -- in + accusative, with contraction ins + von_Prep : Prep ; -- von + dative, with contraction vom + zu_Prep : Prep ; -- zu + dative, with contractions zum, zur + bei_Prep : Prep ; -- bei + dative, with contraction beim + anDat_Prep : Prep ; -- an + dative, with contraction am + inDat_Prep : Prep ; -- in + dative, with contraction im + inAcc_Prep : Prep ; -- in + accusative, with contraction ins + aufAcc_Prep : Prep ; -- auf + accusative, with contraction aufs --2 Verbs @@ -522,10 +524,12 @@ mkV2 : overload { --von_Prep = mkPrep "von" dative ; von_Prep = mkPrep "von" "vom" "von der" "vom" dative ; zu_Prep = mkPrep "zu" "zum" "zur" "zum" dative ; + bei_Prep = mkPrep "bei" "beim" "bei der" "beim" dative ; inDat_Prep = mkPrep "in" "im" "in der" "im" dative ; inAcc_Prep = mkPrep "in" "in den" "in die" "ins" accusative ; anDat_Prep = mkPrep "an" "am" "an der" "am" dative ; anAcc_Prep = mkPrep "an" "an den" "an die" "ans" accusative ; + aufAcc_Prep = mkPrep "auf" "auf den" "auf die" "aufs" accusative ; mk6V geben gibt gib gab gaebe gegeben = let diff --git a/src/german/StructuralGer.gf b/src/german/StructuralGer.gf index d62ee06e2..b45077a56 100644 --- a/src/german/StructuralGer.gf +++ b/src/german/StructuralGer.gf @@ -73,8 +73,7 @@ concrete StructuralGer of Structural = CatGer ** only_Predet = {s = \\_,_,_ => "nur" ; c = noCase ; a = PAgNone} ; no_Utt = ss "nein" ; ---b no_Phr = ss "nein" ; --- on_Prep = mkPrep "auf" P.dative ; - on_Prep = P.mkPrep "auf" "auf den" "auf die" "aufs" P.accusative ; -- test HL 7/2022 + on_Prep = mkPrep "auf" P.dative ; or_Conj = {s1 = [] ; s2 = "oder" ; n = Sg} ; otherwise_PConj = ss "sonst" ; part_Prep = P.von_Prep ; -- obsolete, use PartNP cn np diff --git a/src/german/SymbolGer.gf b/src/german/SymbolGer.gf index b6a840b4f..49b31cde0 100644 --- a/src/german/SymbolGer.gf +++ b/src/german/SymbolGer.gf @@ -11,18 +11,12 @@ lin CNIntNP cn i = { s = \\b,c => cn.s ! Weak ! Sg ! Nom ++ i.s ; a = agrP3 Sg ; - -- isPron = False ; - -- isLight = True ; w = WLight ; ext,rc = [] -- added } ; CNSymbNP det cn xs = let g = cn.g in { - s = \\b,c => det.s ! b ! g ! c ++ --- (let k = (prepC c).c in cn.s ! adjfCase det.a k ! det.n ! k) ++ xs.s ; - (let k = c in cn.s ! adjfCase det.a k ! det.n ! k) ++ xs.s ; + s = \\b,c => det.s ! b ! g ! c ++ cn.s ! adjfCase det.a c ! det.n ! c ++ xs.s ; a = agrP3 det.n ; - -- isPron = False ; - -- isLight = True ; w = WLight ; ext,rc = [] -- added } ;