From bcb4812f10e95df3b515decfe5535f91f711837b Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 12:32:42 +0200 Subject: [PATCH 1/7] (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} ; } From 935530fad7ce4d5009a890abc77981539ea7bf47 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 12:49:01 +0200 Subject: [PATCH 2/7] (Som) Fix bug in PassV2 --- src/somali/ResSom.gf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index d6fa912f9..255b911f7 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -712,7 +712,7 @@ oper c2 = combine v3.c2 v3.c3 ; } ; - passV2 : Verb2 -> VerbPhrase = \v2 -> passVP (useV v2) ; + passV2 : Verb2 -> VerbPhrase = \v2 -> passVP (useVc v2) ; passVP : VerbPhrase -> VerbPhrase = \vp -> vp ** { c2 = case vp.c2 of { From e5f597979b5f193218576a0d836d821e5cbd3d64 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 13:35:49 +0200 Subject: [PATCH 3/7] (Som) Add new prepositions and unit tests --- src/somali/StructuralSom.gf | 11 ++++------- src/somali/unittest/vp.gftest | 8 ++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index e12a37140..b71aca044 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -110,24 +110,24 @@ oper -- Prep lin above_Prep = mkPrep (mkPrep ka) [] [] "dul" ; --- lin after_Prep = mkPrep "" ; +-- lin after_Prep = mkPrep "" -- lin before_Prep = mkPrep "" ; -- lin behind_Prep = mkPrep "" ; -lin between_Prep = possPrep dhex_N ; +lin between_Prep = possPrep (nUl "dhex") ; -- lin by8agent_Prep = mkPrep ; -- lin by8means_Prep = mkPrep ; -- lin during_Prep = mkPrep ; -- lin except_Prep = mkPrep ; -- lin for_Prep = mkPrep ; -- lin from_Prep = mkPrep "" ; --- lin in8front_Prep = mkPrep "" ; +lin in8front_Prep = possPrep (nUl "hor") ; lin in_Prep = mkPrep ku ; lin on_Prep = mkPrep ku ; -- lin part_Prep = mkPrep ; -- lin possess_Prep = mkPrep ; -- lin through_Prep = mkPrep ; -- lin to_Prep = mkPrep ; --- lin under_Prep = mkPrep "" ; +lin under_Prep = possPrep (nUl "hoos") ; lin with_Prep = mkPrep la ; -- lin without_Prep = mkPrep ; @@ -186,7 +186,4 @@ lin want_VV = mkV "" ; lin please_Voc = ss "" ; -} - -oper - dhex_N : N = let dhex : N = mkN "dhex" in dhex ** {gda = FM DA HA} ; } diff --git a/src/somali/unittest/vp.gftest b/src/somali/unittest/vp.gftest index 6b32ac525..fb69b2865 100644 --- a/src/somali/unittest/vp.gftest +++ b/src/somali/unittest/vp.gftest @@ -73,3 +73,11 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_P -- LangEng: you can't jump above me LangSom: iga BIND ma dul boodi karto Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PNeg (PredVP (UsePron youSg_Pron) (AdvVP (ComplVV can_VV (UseV jump_V)) (PrepNP above_Prep (UsePron i_Pron)))))) NoVoc + +-- LangEng: I am taught in front of the house +LangSom: waa laygu baraa guri BIND ga hor BIND tiis BIND a +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N))))))) NoVoc + +-- LangEng: I am taught in front of my mother +LangSom: waa laygu baraa hooya BIND day hor BIND teed BIND a +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2))))))) NoVoc \ No newline at end of file From d077965a6b8fc17f6edba20457509fc92d0b2a80 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 16:00:14 +0200 Subject: [PATCH 4/7] (Som) Fix Preps formed from nouns with possessives --- src/somali/AdverbSom.gf | 19 +++++++------------ src/somali/CatSom.gf | 7 ++++--- src/somali/LexiconSom.gf | 6 +++--- src/somali/ParadigmsSom.gf | 16 ++++++++-------- src/somali/ResSom.gf | 23 +++++++++++++---------- src/somali/StructuralSom.gf | 4 +++- src/somali/unittest/vp.gftest | 11 ++++++++++- 7 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/somali/AdverbSom.gf b/src/somali/AdverbSom.gf index 53d18f6dc..6dc9f5954 100644 --- a/src/somali/AdverbSom.gf +++ b/src/somali/AdverbSom.gf @@ -12,21 +12,16 @@ lin -- : Prep -> NP -> Adv ; PrepNP prep np = prep ** { - s = [] ; - np = case prep.c2 of { -- isPoss of { - NoPrep => nplite emptyNP ; -- TODO check - _ => nplite np } ; +-- s = [] ; - dhex = case prep.c2 of { - NoPrep => [] ; - _ => prep.dhex ! Sg3 Masc } ; + np = case prep.isPoss of { + True => nplite emptyNP ; + False => nplite np } ; - miscAdv = case prep.c2 of { - NoPrep => np.s ! Abs ++ prep.dhex ! np.a ; - _ => [] } + miscAdv = case prep.isPoss of { + True => np.s ! Abs ++ prep.miscAdv ! np.a ; + False => prep.miscAdv ! Sg3 Masc } } ; - --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 2e6d6550f..a9d30a23e 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -85,9 +85,10 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { Conj = {s2 : State => Str ; s1 : Str ; n : Number } ; Subj = SS ; Prep = ResSom.Prep ** { + isPoss : Bool ; c2 : Preposition ; - berri, sii, miscAdv : Str ; - dhex : Agreement => Str } ; + berri, sii, dhex : Str ; + miscAdv : Agreement => Str } ; @@ -124,6 +125,6 @@ linref -- Cl = linCl ; VP = linVP VInf ; CN = linCN ; - Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ! Sg3 Masc ; + Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.miscAdv ! Sg3 Masc ; S = \s -> linBaseCl (s.s ! False) ; } diff --git a/src/somali/LexiconSom.gf b/src/somali/LexiconSom.gf index 197b4ab47..0681a24cb 100644 --- a/src/somali/LexiconSom.gf +++ b/src/somali/LexiconSom.gf @@ -63,7 +63,7 @@ lin car_N = mkN "baabuur" masc ; -- lin carpet_N = mkN "" ; lin cat_N = mkN "bisad" ; -- lin ceiling_N = mkN "" ; --- lin chair_N = mkN "" ; +lin chair_N = mkN "kursi" ; -- lin cheese_N = mkN "" ; -- lin child_N = mkN "" ; -- lin church_N = mkN "" ; @@ -211,7 +211,7 @@ lin language_N = mkN "af" ; -- lin lie_V = mkV "" ; -- lin like_V2 = mkV2 "" ; -- lin listen_V2 = mkV2 "" ; --- lin live_V = mkV "" ; +lin live_V = copula ** {sii = "nool"} ; -- lin liver_N = mkN "" ; -- lin long_A = mkA "" ; -- lin lose_V2 = mkV2 "" ; @@ -304,7 +304,7 @@ lin salt_N = mkN "cusbo" ; -- lin school_N = mkN "" ; -- lin science_N = mkN "" ; -- lin scratch_V2 = mkV2 "" ; --- lin sea_N = mkN "" ; +lin sea_N = mkN "bad" fem ; lin see_V2 = mkV2 "ark" ; -- lin seed_N = mkN "" ; -- lin seek_V2 = mkV2 "" ; diff --git a/src/somali/ParadigmsSom.gf b/src/somali/ParadigmsSom.gf index 0f6f0f984..bb7891e57 100644 --- a/src/somali/ParadigmsSom.gf +++ b/src/somali/ParadigmsSom.gf @@ -105,14 +105,12 @@ oper mkPrep = overload { mkPrep : Str -> CatSom.Prep = \s -> 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 -> emptyPrep ** (ResSom.mkPrep a b c d e f) ; -- --- c2=noPrep ; sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ; mkPrep : Preposition -> CatSom.Prep = \p -> - emptyPrep ** (prep p) ; -- ** {sii,berri=[] ; dhex = \\_=> [] ; isPoss=False}) ; + emptyPrep ** (prep p) ; 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 @@ -220,19 +218,21 @@ oper } ; possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** { - dhex = \\agr => + miscAdv = \\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 + in dhex.s ! Def Sg ++ det ; + isPoss = True } ; emptyPrep : CatSom.Prep = lin Prep { - sii,berri,miscAdv = [] ; - dhex = \\_ => [] ; + sii,berri,dhex = [] ; + miscAdv = \\_ => [] ; s = \\_ => [] ; c2 = noPrep ; + isPoss = False } ; -------------------------------------------------------------------------------- diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 255b911f7..5c0251469 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -247,7 +247,7 @@ oper s = \\_ => [] ; -- the string `la' comes from Passive (: PrepCombination) a = Impers ; isPron = True ; sp = \\_ => "" ; empty = [] ; st = Definite ; - poss = {s, short = quantTable "??" ; sp = gnTable "??" "??" "??"} + poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"} } } ; @@ -467,10 +467,11 @@ oper Verb : Type = BaseVerb ** { sii : Str ; -- closed class of particles: sii, soo, kala, wada (Saeed 171) dhex : Str ; -- closed class of adverbials: hoos, kor, dul, dhex, … + isCopula : Bool ; } ; Verb2 : Type = Verb ** {c2 : Preposition} ; Verb3 : Type = Verb2 ** {c3 : Preposition} ; - + VerbS : Type = Verb ; -- TODO: VPs that have VS use waxa as stm? see Nilsson p. 68 -- Saeed page 79: -- "… the reference form is the imperative singular form @@ -566,6 +567,7 @@ oper } ; sii, dhex = [] ; + isCopula = False ; } ; ------------------------- @@ -637,7 +639,8 @@ oper VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ; VPres _ _ _ => nonExist -- use presCopula instead } ; - sii, dhex = [] + sii, dhex = [] ; + isCopula = True } ; have_V : Verb = @@ -697,7 +700,7 @@ oper useV : Verb -> VerbPhrase = \v -> v ** { comp = \\_ => <[],[]> ; - pred = NoPred ; + pred = case v.isCopula of {True => Copula ; _ => NoPred} ; vComp,berri,miscAdv,refl = [] ; c2 = Single NoPrep ; obj2 = {s = [] ; a = P3_Prep} ; @@ -840,10 +843,10 @@ oper _ => stmarkerNoContr ! subj.a ! p }} ; in (wordOrder subjnoun subjpron stm obj pred vp) ; } where { - vp = case isPassive vps of { + vp : VerbPhrase = case isPassive vps of { True => complSlash (insertComp vps np) ; _ => complSlash vps } ; - subj = case isPassive vps of {True => impersNP ; _ => np} + subj : NounPhrase = case isPassive vps of {True => impersNP ; _ => np} } ; wordOrder : (sn,sp : Str) -> (stm,obj : {p1,p2 : Str}) -> {fin,inf : Str} -> VerbPhrase -> BaseCl = @@ -863,7 +866,7 @@ oper ++ vp.miscAdv } ; ---- NB. Only used if there are several adverbs. ---- Primary places for adverbs are obj, sii or dhex. - VFun : Type = Tense -> Anteriority -> Polarity -> Agreement -> Verb + VFun : Type = Tense -> Anteriority -> Polarity -> Agreement -> BaseVerb -> {fin : Str ; inf : Str} ; vf : ClType -> VFun = \clt -> case clt of { @@ -882,13 +885,13 @@ oper } where { agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ; - pastV : Verb -> Str = \v -> + pastV : BaseVerb -> Str = \v -> case p of { Neg => v.s ! VNegPast Simple ; Pos => v.s ! VPast Simple (agr2vagr agr) } ; - presV : Verb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ; + presV : BaseVerb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ; - condNegV : Verb -> Str = \v -> case agr of { + condNegV : BaseVerb -> Str = \v -> case agr of { Sg2|Sg3 Fem |Pl2 => v.s ! VNegCond SgFem ; Pl1 _ => v.s ! VNegCond PlInv ; diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index b71aca044..62f295036 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -127,7 +127,9 @@ lin on_Prep = mkPrep ku ; -- lin possess_Prep = mkPrep ; -- lin through_Prep = mkPrep ; -- lin to_Prep = mkPrep ; -lin under_Prep = possPrep (nUl "hoos") ; +lin under_Prep = + let hoos : CatSom.Prep = possPrep (nUl "hoos") + in hoos ** {c2 = Ku} ; lin with_Prep = mkPrep la ; -- lin without_Prep = mkPrep ; diff --git a/src/somali/unittest/vp.gftest b/src/somali/unittest/vp.gftest index fb69b2865..d766f8e3e 100644 --- a/src/somali/unittest/vp.gftest +++ b/src/somali/unittest/vp.gftest @@ -80,4 +80,13 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_P -- LangEng: I am taught in front of my mother LangSom: waa laygu baraa hooya BIND day hor BIND teed BIND a -Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2))))))) NoVoc \ No newline at end of file +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2))))))) NoVoc + +-- LangEng: I see a cat under the chair +LangSom: bisad waa aan ku arkaa kursi BIND ga hoos BIND tiis BIND a +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))) (PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN chair_N))))))) NoVoc + +-- LangEng: my mother lives under the sea +LangSom: hooya BIND day waa ku nool tahay bad BIND da hoos BIND teed BIND a +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2)) (AdvVP (UseV live_V) (PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN sea_N))))))) NoVoc + From d2b49b1936b0d122c1e80f9db804cf31a5bb14ff Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 16:36:41 +0200 Subject: [PATCH 5/7] (Som) Add ProgrVP --- src/somali/IdiomSom.gf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/somali/IdiomSom.gf b/src/somali/IdiomSom.gf index 2c2214095..db6b84759 100644 --- a/src/somali/IdiomSom.gf +++ b/src/somali/IdiomSom.gf @@ -31,7 +31,13 @@ concrete IdiomSom of Idiom = CatSom ** open Prelude, ResSom, VerbSom in { ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris -} -- : VP -> VP ; - --ProgrVP vp = vp ** { } ; + ProgrVP vp = vp ** { + s = table { + VPres _ agr pol => vp.s ! VPres Progressive agr pol ; + VPast _ agr => vp.s ! VPast Progressive agr ; + VNegPast _ => vp.s ! VNegPast Progressive ; + x => vp.s ! x } + } ; {- TODO: Saeed p. 92 optative From fef2d75ca6acebec3197251fb8f3df6598f2b5cf Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 16:38:33 +0200 Subject: [PATCH 6/7] (Som) Add ComplVS --- src/somali/CatSom.gf | 6 +++--- src/somali/ResSom.gf | 10 ++++------ src/somali/VerbSom.gf | 12 ++++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/somali/CatSom.gf b/src/somali/CatSom.gf index a9d30a23e..d180619da 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -98,9 +98,9 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { -- additional lexicon modules. V, - -- TODO: eventually proper lincats - VV, -- verb-phrase-complement verb e.g. "want" - VS, -- sentence-complement verb e.g. "claim" -- TODO: VPs that have VS use waxa as stm? see Nilsson p. 68 + VV, -- verb-phrase-complement verb e.g. "want" -- TODO: VPs that have sentential complement use waxa as stm? see Nilsson p. 68 + VS, -- sentence-complement verb e.g. "claim" + -- TODO: eventually different lincats VQ, -- question-complement verb e.g. "wonder" VA, -- adjective-complement verb e.g. "look" V2V, -- verb with NP and V complement e.g. "cause" diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 5c0251469..a3449b6ae 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -463,7 +463,6 @@ oper BaseVerb : Type = { s : VForm => Str ; } ; - Verb : Type = BaseVerb ** { sii : Str ; -- closed class of particles: sii, soo, kala, wada (Saeed 171) dhex : Str ; -- closed class of adverbials: hoos, kor, dul, dhex, … @@ -471,7 +470,6 @@ oper } ; Verb2 : Type = Verb ** {c2 : Preposition} ; Verb3 : Type = Verb2 ** {c3 : Preposition} ; - VerbS : Type = Verb ; -- TODO: VPs that have VS use waxa as stm? see Nilsson p. 68 -- Saeed page 79: -- "… the reference form is the imperative singular form @@ -742,9 +740,9 @@ oper } ; insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np -> - insertCompAgrPlus vp (nplite np) ; + insertCompLite vp (nplite np) ; - insertCompAgrPlus : VPSlash -> NPLite -> VerbPhrase = \vp,nplite -> + insertCompLite : VPSlash -> NPLite -> VerbPhrase = \vp,nplite -> case vp.obj2.a of { -- If the old object is 3rd person (or nonexistent), we replace its agreement. -- We keep both old and new string (=noun, if there was one) in obj2.s. @@ -768,8 +766,8 @@ oper NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow" _ => case vp.c2 of { -- if free complement slots, introduce adv.np with insertComp - Single NoPrep => insertCompAgrPlus (vp ** {c2 = Single adv.c2}) adv.np ** adv' ; - Single p => insertCompAgrPlus (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ; + Single NoPrep => insertCompLite (vp ** {c2 = Single adv.c2}) adv.np ** adv' ; + Single p => insertCompLite (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ; -- if complement slots are full, just insert strings. _ => vp ** adv'' diff --git a/src/somali/VerbSom.gf b/src/somali/VerbSom.gf index 22feebdd0..e8238be48 100644 --- a/src/somali/VerbSom.gf +++ b/src/somali/VerbSom.gf @@ -1,4 +1,4 @@ -concrete VerbSom of Verb = CatSom ** open ResSom, Prelude in { +concrete VerbSom of Verb = CatSom ** open ResSom, AdverbSom, Prelude in { lin @@ -20,10 +20,14 @@ lin vComp = vp.vComp ++ vp.s ! VInf ; pred = NoPred ; } ; -{- - -- : VS -> S -> VP ; - ComplVS vs s = ; + -- : VS -> S -> VP ; + ComplVS vs s = + let vps = useV vs ; + subord = SubjS {s="in"} s ; + in vps ** {obj2 = {s = subord.berri ; a = P3_Prep}} ; + +{- -- : VQ -> QS -> VP ; ComplVQ vq qs = ; From a1f7c55b3365c528bedb2b2b2e596eab462b1635 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 27 Aug 2019 16:39:33 +0200 Subject: [PATCH 7/7] (Som) Words + new unit test for VS + minor cleanup --- src/somali/AdverbSom.gf | 3 --- src/somali/LexiconSom.gf | 6 +++--- src/somali/unittest/vp.gftest | 7 +++++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/somali/AdverbSom.gf b/src/somali/AdverbSom.gf index 6dc9f5954..0c3f5ad57 100644 --- a/src/somali/AdverbSom.gf +++ b/src/somali/AdverbSom.gf @@ -12,12 +12,9 @@ lin -- : Prep -> NP -> Adv ; PrepNP prep np = prep ** { --- s = [] ; - np = case prep.isPoss of { True => nplite emptyNP ; False => nplite np } ; - miscAdv = case prep.isPoss of { True => np.s ! Abs ++ prep.miscAdv ! np.a ; False => prep.miscAdv ! Sg3 Masc } diff --git a/src/somali/LexiconSom.gf b/src/somali/LexiconSom.gf index 0681a24cb..fbee1a844 100644 --- a/src/somali/LexiconSom.gf +++ b/src/somali/LexiconSom.gf @@ -1,5 +1,5 @@ concrete LexiconSom of Lexicon = CatSom ** - open ParadigmsSom,ResSom in { + open ParadigmsSom, ResSom in { ---- -- A @@ -74,7 +74,7 @@ lin city_N = mkN "magaalo" ; -- lin cloud_N = mkN "" ; -- lin coat_N = mkN "" ; -- lin cold_A = mkA "" ; --- lin come_V = etorri_V ; +lin come_V = mkV "iman" ; -- lin computer_N = mkN "" ; -- lin correct_A = mkA "" ; -- lin count_V2 = mkV2 "" ; @@ -193,7 +193,7 @@ lin jump_V = mkV "bood" ; -- lin knee_N = mkN "" ; -- lin know_V2 = mkV2 "" ; -- lin know_VQ = mkVQ "" ; --- lin know_VS = mkVS "" ; +lin know_VS = mkV "ogaan" ; -- copula ** {sii = "og"} ; ---- diff --git a/src/somali/unittest/vp.gftest b/src/somali/unittest/vp.gftest index d766f8e3e..3425f89d8 100644 --- a/src/somali/unittest/vp.gftest +++ b/src/somali/unittest/vp.gftest @@ -63,6 +63,13 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSla LangSom: hilib cusbo waa lagu dari karaa Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplVV can_VV (ComplSlash (Slash3V3 add_V3 (MassNP (UseN meat_N))) (MassNP (UseN salt_N))))))) NoVoc +-------------------------------------------------------------------------------- +-- Other complements + +--LangEng: we knew that he is coming +LangSom: in uu imanayo waa aynu ogaannay +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron we_Pron) (ComplVS know_VS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (ProgrVP (UseV come_V)))))))) NoVoc + -------------------------------------------------------------------------------- -- Adverbials