From bcb4812f10e95df3b515decfe5535f91f711837b Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 12:32:42 +0200 Subject: [PATCH] (Som) Make relational nouns into Prep w/ possPrep --- src/somali/AdverbSom.gf | 17 ++++++++++++++++- src/somali/CatSom.gf | 7 +++++-- src/somali/NounSom.gf | 11 ++++++----- src/somali/ParadigmsSom.gf | 34 ++++++++++++++++++++++++++-------- src/somali/ResSom.gf | 16 +++++++++------- src/somali/StructuralSom.gf | 23 ++++++++++++----------- 6 files changed, 74 insertions(+), 34 deletions(-) diff --git a/src/somali/AdverbSom.gf b/src/somali/AdverbSom.gf index 689e58088..53d18f6dc 100644 --- a/src/somali/AdverbSom.gf +++ b/src/somali/AdverbSom.gf @@ -11,7 +11,22 @@ lin -- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs -- : Prep -> NP -> Adv ; - PrepNP prep np = prep ** {s = [] ; np = nplite np} ; + PrepNP prep np = prep ** { + s = [] ; + np = case prep.c2 of { -- isPoss of { + NoPrep => nplite emptyNP ; -- TODO check + _ => nplite np } ; + + dhex = case prep.c2 of { + NoPrep => [] ; + _ => prep.dhex ! Sg3 Masc } ; + + miscAdv = case prep.c2 of { + NoPrep => np.s ! Abs ++ prep.dhex ! np.a ; + _ => [] } + } ; + --ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ; + -- Adverbs can be modified by 'adadjectives', just like adjectives. diff --git a/src/somali/CatSom.gf b/src/somali/CatSom.gf index 842a3bf5f..2e6d6550f 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -84,7 +84,10 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { -- Constructed in StructuralSom. Conj = {s2 : State => Str ; s1 : Str ; n : Number } ; Subj = SS ; - Prep = ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ; + Prep = ResSom.Prep ** { + c2 : Preposition ; + berri, sii, miscAdv : Str ; + dhex : Agreement => Str } ; @@ -121,6 +124,6 @@ linref -- Cl = linCl ; VP = linVP VInf ; CN = linCN ; - Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ; + Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ! Sg3 Masc ; S = \s -> linBaseCl (s.s ! False) ; } diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index ffec0ca4d..22491a598 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -64,13 +64,14 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { True => glue predet.s det ; False => predet.s } ; - in np ** {s = \\c => - case of { - => np.empty ++ predetS ; - _ => np.s ! c ++ predetS} + in np ** { + s = \\c => + case of { + => np.empty ++ predetS ; + _ => np.s ! c ++ predetS} ; + isPron = False ; -- NP it loses its pronoun status when Predet is added } ; - -- A noun phrase can also be postmodified by the past participle of a -- verb, by an adverb, or by a relative clause diff --git a/src/somali/ParadigmsSom.gf b/src/somali/ParadigmsSom.gf index fb923596f..0f6f0f984 100644 --- a/src/somali/ParadigmsSom.gf +++ b/src/somali/ParadigmsSom.gf @@ -1,4 +1,4 @@ -resource ParadigmsSom = open CatSom, ResSom, ParamSom, Prelude in { +resource ParadigmsSom = open CatSom, ResSom, ParamSom, NounSom, Prelude in { oper @@ -104,17 +104,19 @@ oper mkPrep = overload { mkPrep : Str -> CatSom.Prep = \s -> - lin Prep ((ResSom.mkPrep s s s s s s) ** { - c2=noPrep ; sii,dhex,berri=[]}) ; + emptyPrep ** (ResSom.mkPrep s s s s s s) ; -- ** { +-- c2=noPrep ; sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ; mkPrep : (x1,_,_,_,_,x6 : Str) -> CatSom.Prep = \a,b,c,d,e,f -> - lin Prep ((ResSom.mkPrep a b c d e f) ** { - c2=noPrep ; sii,dhex,berri=[]}) ; + emptyPrep ** (ResSom.mkPrep a b c d e f) ; -- +-- c2=noPrep ; sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ; mkPrep : Preposition -> CatSom.Prep = \p -> - lin Prep ((prep p) ** {sii,dhex,berri=[]}) ; + emptyPrep ** (prep p) ; -- ** {sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ; mkPrep : CatSom.Prep -> (x1,x2,x3 : Str) -> CatSom.Prep = \p,s,t,u -> - p ** {berri = s ; sii = t ; dhex = u} ; + p ** {berri = s ; sii = t ; dhex = \\_ => u} ; } ; + possPrep : N -> CatSom.Prep ; -- Nouns like dhex that are used with possessive suffix to form adverbials + -- mkConj : (_,_ : Str) -> Number -> Conj = \s1,s2,num -> -- lin Conj { s = s1 ; s2 = s2 } ; @@ -125,7 +127,7 @@ oper berri = s ; c2 = noPrep ; np = {s = [] ; a = P3_Prep} ; - sii,dhex = [] + sii,dhex,miscAdv = [] } ; mkAdV : Str -> AdV = \s -> lin AdV {s = s} ; @@ -216,6 +218,22 @@ oper mkV3 : (sug : Str) -> (_,_ : Preposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ; mkV3 : V -> (_,_ : Preposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ; } ; + + possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** { + dhex = \\agr => + let qnt = PossPron (pronTable ! agr) ; + num = getNum agr ; + art = gda2da dhex.gda ! Sg ; + det = qnt.s ! art ! Abs ; -- this includes BIND + in dhex.s ! Def Sg ++ det + } ; + + emptyPrep : CatSom.Prep = lin Prep { + sii,berri,miscAdv = [] ; + dhex = \\_ => [] ; + s = \\_ => [] ; + c2 = noPrep ; + } ; -------------------------------------------------------------------------------- } diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 09a894845..d6fa912f9 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -672,7 +672,8 @@ oper BaseAdv : Type = { sii, -- sii, soo, wala, kada go inside VP. dhex, -- dhex, hoos, koor, dul, … go inside VP. - berri : Str -- e.g. "tomorrow"; goes before VP. + berri, -- AdV, e.g. "tomorrow"; goes before VP. + miscAdv : Str -- dump for any other kind of adverbial. } ; Adverb : Type = BaseAdv ** { @@ -690,8 +691,7 @@ oper obj2 : NPLite ; -- {s : Str ; a : PrepAgr} secObj : Str ; -- if two overt pronoun objects vComp : Str ; -- VV complement - miscAdv : Str ; -- dump for any other kind of adverb, that isn't - } ; -- in a closed class of particles or made with PrepNP. + } ; VPSlash : Type = VerbPhrase ; @@ -772,13 +772,14 @@ oper _ => vp ** adv'' } } where { - adv' : {sii,dhex,berri : Str} = { -- adv.np done with insertComp + adv' : {sii,dhex,berri,miscAdv : Str} = { -- adv.np done with insertComp sii = vp.sii ++ adv.sii ; dhex = vp.dhex ++ adv.dhex ; - berri = vp.berri ++ adv.berri } ; + berri = vp.berri ++ adv.berri ; + miscAdv = vp.miscAdv ++ adv.miscAdv} ; adv'' : {sii,dhex,berri,miscAdv : Str} -- adv.np inserted into miscAdv = adv' ** {dhex = (prepTable ! adv.c2).s ! adv.np.a ++ adv.dhex ; - miscAdv = adv.np.s} + miscAdv = adv.miscAdv ++ adv.np.s} } ; -------------------------------------------------------------------------------- -- Sentences etc. @@ -936,7 +937,8 @@ oper ++ adv.sii ++ (prepTable ! adv.c2).s ! adv.np.a ++ adv.dhex - ++ adv.np.s ; + ++ adv.np.s + ++ adv.miscAdv ; linBaseCl : BaseCl -> Str = \b -> b.beforeSTM ++ b.stm ++ b.afterSTM ; } diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index 6d3953dcb..e12a37140 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -55,11 +55,10 @@ lin or_Conj = {s2 = \\_ => "ama" ; s1 = [] ; n = Sg} ; -- mise with interrogativ --lin how8many_IDet = R.indefDet "" pl ; lin all_Predet = {s = "giddi" ; isPoss = True ; da = M GA} ; +--lin not_Predet = { s = "" } ; +--lin only_Predet = { s = "" } ; +lin most_Predet = {s = "badi" ; isPoss = True ; da = F DA} ; {- -lin not_Predet = { s = "" } ; -lin only_Predet = { s = "" } ; -lin most_Predet = { s = "" } ; - lin every_Det = R.defDet [] pl ** { s = mkVow } ; lin few_Det = R.indefDet "" pl ; @@ -67,12 +66,12 @@ lin many_Det = R.indefDet "" pl ; lin much_Det = R.indefDet "" sg ; -} lin somePl_Det = { + sp = \\_,_ => "qaar" ; + isPoss, isNum = False ; + st = Definite ; -- NB. Indefinite means actually only IndefArt. + n = Pl ; s = \\x,_ => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ; shortPoss = \\x => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ; - sp = \\_,_ => "qaarkood" ; - isPoss, isNum = False ; - n = Pl ; - st = Definite -- NB. Indefinite is really only reserved for IndefArt NumSg. } ; lin someSg_Det = somePl_Det ** { @@ -82,8 +81,7 @@ lin someSg_Det = somePl_Det ** { F x => \\_ => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ; shortPoss = table { M x => BIND ++ defStems ! M x ++ BIND ++ "a qaarkiis" ; - F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ; - sp = \\g,c => case g of {Fem => "qaarkeed" ; _ => "qaarkiis"} + F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } } ; @@ -115,7 +113,7 @@ lin above_Prep = mkPrep (mkPrep ka) [] [] "dul" ; -- lin after_Prep = mkPrep "" ; -- lin before_Prep = mkPrep "" ; -- lin behind_Prep = mkPrep "" ; --- lin between_Prep = mkPrep "" ; +lin between_Prep = possPrep dhex_N ; -- lin by8agent_Prep = mkPrep ; -- lin by8means_Prep = mkPrep ; -- lin during_Prep = mkPrep ; @@ -188,4 +186,7 @@ lin want_VV = mkV "" ; lin please_Voc = ss "" ; -} + +oper + dhex_N : N = let dhex : N = mkN "dhex" in dhex ** {gda = FM DA HA} ; }