From 469718230a9f2d1ba4f231500a76164141c90381 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 30 Jul 2019 16:38:57 +0200 Subject: [PATCH 1/5] (Som) WIP: add FocusObj --- src/somali/ExtendSom.gf | 8 +++++++- src/somali/ResSom.gf | 26 ++++++++++++++------------ src/somali/SentenceSom.gf | 5 ++++- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/somali/ExtendSom.gf b/src/somali/ExtendSom.gf index e696a76d9..e1bc68168 100644 --- a/src/somali/ExtendSom.gf +++ b/src/somali/ExtendSom.gf @@ -7,7 +7,13 @@ concrete ExtendSom of Extend = CatSom lin -- : NP -> SSlash -> Utt ; -- her I love -- Sayeed p. 189- - FocusObj np sslash = + FocusObj np sslash = -- FIXME: preposition disappears in negative sentences + let ss = sslash.s ! False ; + ssSub = sslash.s ! True ; -- the negative particle is the same as subordinate, but verb forms come from main clause + obj = case np.isPron of { + True => np.empty ++ (pronTable ! np.a).sp ; + False => np.s ! Abs } + in {s = ssSub.beforeSTM ++ "waxa" ++ ssSub.stm ++ ss.afterSTM ++ obj} ; -- FocusAdv : Adv -> S -> Utt ; -- today I will sleep -- FocusAdV : AdV -> S -> Utt ; -- never will I sleep diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 799bfba9b..bc7c1bff0 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -798,13 +798,14 @@ oper _ => o -- object pronoun, prepositions and negation all contract } ; - stm : Str = case cltyp of { - Subord => if_then_Pol p [] "aan" ++ subjpron ; -- if we form a ClSlash, no sentence type marker; negation with aan (Sayeed p. 210) - Question => "ma" ; -- TODO find out how negative questions work + stm : {p1,p2 : Str} = case cltyp of { + Subord => {p1 = if_then_Pol p [] "aan" ; -- if we form a ClSlash, no sentence type marker; negation with aan (Sayeed p. 210) + p2 = if_then_Pol p subjpron []} ; + Question => {p1 = "ma" ; p2 = []} ; -- TODO find out how negative questions work Statement => case of { - => "waa" ; + => {p1 = "waa" ; p2 = []} ; _ => stmarkerNoContr ! subj.a ! p }} ; - in wordOrder subjnoun subjpron stm obj pred vp ; + in (wordOrder subjnoun subjpron stm obj pred vp) ; } where { vp = case isPassive vps of { True => complSlash (insertComp vps np) ; @@ -812,13 +813,14 @@ oper subj = case isPassive vps of {True => impersNP ; _ => np} } ; - wordOrder : (sn,sp,stm : Str) -> {p1,p2 : Str} -> {fin,inf : Str} -> VerbPhrase -> BaseCl = + wordOrder : (sn,sp : Str) -> (stm,obj : {p1,p2 : Str}) -> {fin,inf : Str} -> VerbPhrase -> BaseCl = \subjnoun,subjpron,stm,obj,pred,vp -> { beforeSTM = vp.berri -- AdV ++ subjnoun -- subject if it's a noun ++ obj.p1 ; -- object if it's a noun - stm = stm ; -- sentence type marker + possible subj. pronoun - afterSTM = obj.p2 -- object if it's a pronoun + stm = stm.p1 ; -- sentence type marker + afterSTM = stm.p2 -- possible subj. pronoun + ++ obj.p2 -- object if it's a pronoun ++ vp.sii -- restricted set of particles ++ vp.dhex -- restricted set of nouns/adverbials ++ vp.secObj -- "second object" @@ -866,10 +868,10 @@ oper let stm = if_then_Pol b "w" "m" in stm + subjpron ! a ; - stmarkerNoContr : Agreement => Polarity => Str = \\a,p => + stmarkerNoContr : Agreement => Polarity => {p1,p2 : Str} = \\a,p => case p of { - Pos => "waa" ++ subjpron ! a ; - Neg => "ma" } ; + Pos => {p1 = "waa" ; p2 = subjpron ! a} ; + Neg => {p1 = "ma" ; p2 = []} } ; subjpron : Agreement => Str = table { Sg1|Pl1 Excl => "aan" ; @@ -885,7 +887,7 @@ oper oper linVP : VForm -> VerbPhrase -> Str = \vf,vp -> let inf = {inf = vp.s ! vf ; fin=[]} ; - wo = wordOrder [] [] [] (vp.comp ! Pl3) inf vp ; + wo = wordOrder [] [] {p1,p2=[]} (vp.comp ! Pl3) inf vp ; in wo.beforeSTM ++ wo.afterSTM ; linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ; diff --git a/src/somali/SentenceSom.gf b/src/somali/SentenceSom.gf index e0ef4c1e2..0c926b57e 100644 --- a/src/somali/SentenceSom.gf +++ b/src/somali/SentenceSom.gf @@ -27,7 +27,10 @@ lin -} -- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen - --UseSlash t p cls = {s = \\b => t.s ++ p.s ++ cls.s ! b ! t.t ! t.a ! p.p} ; + UseSlash t p cls = {s = \\b => + let sent = cls.s ! b ! t.t ! t.a ! p.p in + sent ** {beforeSTM = t.s ++ p.s ++ sent.beforeSTM} + } ; --2 Imperatives -- : VP -> Imp ; From 773417511aa5ed88136962e6ff6c7d3a0d51f693 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 30 Jul 2019 17:01:33 +0200 Subject: [PATCH 2/5] (Som) Fix bug in RelNP with pronouns --- src/somali/ExtendSom.gf | 4 +--- src/somali/NounSom.gf | 5 +++-- src/somali/ResSom.gf | 26 +++++++++++++++----------- src/somali/StructuralSom.gf | 2 +- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/somali/ExtendSom.gf b/src/somali/ExtendSom.gf index e1bc68168..50be82b1e 100644 --- a/src/somali/ExtendSom.gf +++ b/src/somali/ExtendSom.gf @@ -10,9 +10,7 @@ lin FocusObj np sslash = -- FIXME: preposition disappears in negative sentences let ss = sslash.s ! False ; ssSub = sslash.s ! True ; -- the negative particle is the same as subordinate, but verb forms come from main clause - obj = case np.isPron of { - True => np.empty ++ (pronTable ! np.a).sp ; - False => np.s ! Abs } + obj = objpron np ! Abs ; in {s = ssSub.beforeSTM ++ "waxa" ++ ssSub.stm ++ ss.afterSTM ++ obj} ; -- FocusAdv : Adv -> S -> Utt ; -- today I will sleep diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index df94864c0..73eee4cb7 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -70,7 +70,8 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : NP -> RS -> NP ; -- Paris, which is here RelNP np rs = np ** { - s = \\c => np.s ! c ++ rs.s ! npgender np ! c + s = \\c => objpron np ! c ++ rs.s ! npgender np ! c ; + isPron = False ; } ; -- Determiners can form noun phrases directly. @@ -198,7 +199,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { True => qnt.shortPoss ! art ; _ => qnt.s ! sg n2.gda ! Abs } ; noun = case np.isPron of { - True => (pronTable ! np.a).sp ; -- long subject pronoun + True => (pronTable ! np.a).sp ! Abs ; -- long subject pronoun False => np.s ! Abs } in noun ++ cn.s ! Def num ++ BIND ++ det ; isPoss = True} ; diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index bc7c1bff0..6f4e7ebee 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -145,9 +145,13 @@ oper let pagr : PrepAgr = agr2pagr np.a in case of { => {s = np.s ! Abs ; a = pagr} ; - -- => {s = np.empty ++ (pronTable ! np.a).sp ; a = pagr} ; -- uncomment if you want to add long object pronoun for 3rd person object + -- => {s = objpron np ! Abs ; a = pagr} ; -- uncomment if you want to add long object pronoun for 3rd person object _ => {s = np.empty ; a = pagr} } ; -- no long object for other pronouns + objpron : NounPhrase -> Case => Str = \np -> case np.isPron of { + True => \\c => np.empty ++ (pronTable ! np.a).sp ! c ; + False => np.s} ; + useN : Noun -> CNoun ** BaseNP = \n -> n ** { mod = \\_,_ => [] ; hasMod = False ; a = Sg3 (gender n) ; isPron,isPoss = False ; @@ -175,61 +179,61 @@ oper sp : GenNum => Str ; -- independent forms, e.g. M:kayga F:tayda Pl:kuwayga short : DefArticle => Str -- short possessive suffix: e.g. family members, my/your name } ; - sp : Str ; + sp : Case => Str ; } ; pronTable : Agreement => Pronoun = table { Sg1 => { s = table {Nom => "aan" ; Abs => "i"} ; - a = Sg1 ; isPron = True ; sp = "aniga" ; + a = Sg1 ; isPron = True ; sp = table {Nom => "anigu" ; _ =>"aniga"} ; empty = [] ; poss = {s = quantTable "ayg" "ayd" ; short = quantTable "ay" ; sp = gnTable "ayg" "ayd" "uwayg"} } ; Sg2 => { s = table {Nom => "aad" ; Abs => "ku"} ; - a = Sg2 ; isPron = True ; sp ="adiga" ; + a = Sg2 ; isPron = True ; sp = table {Nom => "adigu" ; _ => "adiga"} ; empty = [] ; poss = {s = quantTable "aag" "aad" ; short = quantTable "aa" ; sp = gnTable "aag" "aad" "uwaag"} } ; Sg3 Masc => { s = table {Nom => "uu" ; Abs => []} ; - a = Sg3 Masc ; isPron = True ; sp ="isaga" ; + a = Sg3 Masc ; isPron = True ; sp = table {Nom => "isagu" ; _ => "isaga"} ; empty = [] ; poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"} } ; Sg3 Fem => { s = table {Nom => "ay" ; Abs => []} ; - a = Sg3 Fem ; isPron = True ; sp = "iyada" ; + a = Sg3 Fem ; isPron = True ; sp = table {Nom => "iyadu" ; _ => "iyada"} ; empty = [] ; poss = {s, short = quantTable "eed" ; sp = gnTable "eed" "eed" "uweed"} } ; Pl1 Excl => { s = table {Nom => "aan" ; Abs => "na"} ; - a = Pl1 Excl ; isPron = True ; sp ="annaga" ; + a = Pl1 Excl ; isPron = True ; sp = table {Nom => "annagu" ; _ => "annaga"} ; empty = [] ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl1 Incl => { s = table {Nom => "aynu" ; Abs => "ina"} ; - a = Pl1 Incl ; isPron = True ; sp ="innaga" ; + a = Pl1 Incl ; isPron = True ; sp = table {Nom => "innagu" ; _ => "innaga"} ; empty = [] ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl2 => { s = table {Nom => "aad" ; Abs => "idin"} ; - a = Pl2 ; isPron = True ; sp ="idinka" ; + a = Pl2 ; isPron = True ; sp = table {Nom => "idinku" ; _ => "idinka"} ; empty = [] ; poss = {s = quantTable "iinn" ; short = quantTable "iin" ; sp = gnTable "iinn" "iinn" "uwiinn"} } ; Pl3 => { s = table {Nom => "ay" ; Abs => []} ; - a = Pl3 ; isPron = True ; sp = "iyaga" ; + a = Pl3 ; isPron = True ; sp = table {Nom => "iyagu" ; _ => "iyaga"} ; empty = [] ; poss = {s, short = quantTable "ood" ; sp = gnTable "ood" "ood" "uwood"} } ; Impers => { s = table {Nom => "la" ; Abs => "la"} ; - a = Impers ; isPron = True ; sp = "" ; + a = Impers ; isPron = True ; sp = \\_ => "" ; empty = [] ; poss = {s, short = quantTable "??" ; sp = gnTable "??" "??" "??"} } diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index eda485d25..1cf7b3159 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -118,7 +118,7 @@ lin with_Prep = mkPrep la ; -- Pron -- Pronouns are closed class, no constructor in ParadigmsSom. - it_Pron = he_Pron ** {s = \\_ => [] ; sp = [] ; a = Impers} ; + it_Pron = he_Pron ** {s = \\_ => [] ; sp = \\_ => [] ; a = Impers} ; i_Pron = pronTable ! Sg1 ; youPol_Pron, youSg_Pron = pronTable ! Sg2 ; From bba53fc48b1d31935d23c91f8b51d17c737ea60e Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 30 Jul 2019 17:13:05 +0200 Subject: [PATCH 3/5] (Som) Fix bug in UttVP+RelVP --- src/somali/ParamSom.gf | 8 ++++++++ src/somali/ResSom.gf | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index 4127eeea9..b9b7a2f3e 100644 --- a/src/somali/ParamSom.gf +++ b/src/somali/ParamSom.gf @@ -164,6 +164,14 @@ oper _ => P3_Prep } ; + pagr2agr : PrepAgr -> Agreement = \a -> case a of { + Sg1_Prep => Sg1 ; + Sg2_Prep => Sg2 ; + Pl1_Prep i => Pl1 i ; + Pl2_Prep => Pl2 ; + _ => Pl3 + } ; + isP3 = overload { isP3 : Agreement -> Bool = \agr -> case agr of {Sg3 _ | Pl3 => True ; _ => False} ; diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 6f4e7ebee..8ce23004f 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -890,8 +890,9 @@ oper oper linVP : VForm -> VerbPhrase -> Str = \vf,vp -> - let inf = {inf = vp.s ! vf ; fin=[]} ; - wo = wordOrder [] [] {p1,p2=[]} (vp.comp ! Pl3) inf vp ; + let vp' = complSlash vp ; + inf = {inf = vp.s ! vf ; fin=[]} ; + wo = wordOrder [] [] {p1,p2=[]} (vp'.comp ! pagr2agr vp.obj2.a) inf vp' ; in wo.beforeSTM ++ wo.afterSTM ; linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ; From 60508533d24c00707682026d57898e85d30544c1 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 30 Jul 2019 17:17:54 +0200 Subject: [PATCH 4/5] (Som) Minor fixes --- src/somali/LexiconSom.gf | 2 +- src/somali/RelativeSom.gf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/somali/LexiconSom.gf b/src/somali/LexiconSom.gf index faee825e3..81d098b7a 100644 --- a/src/somali/LexiconSom.gf +++ b/src/somali/LexiconSom.gf @@ -52,7 +52,7 @@ lin bread_N = mkN "rooti" ; --masc/fem -- lin brown_A = mkA "" ; -- lin burn_V = mkV "" ; -- lin butter_N = mkN "" ; -lin buy_V2 = mkV2 "iibsa" ; +lin buy_V2 = mkV2 "iibso" ; ---- -- C diff --git a/src/somali/RelativeSom.gf b/src/somali/RelativeSom.gf index 7aada0f7a..625b7bec1 100644 --- a/src/somali/RelativeSom.gf +++ b/src/somali/RelativeSom.gf @@ -9,8 +9,8 @@ lin {- -- Sayeed p. 95-96 + ch 8 Reduced present general in relative clauses; as absolutive -1/2SG/3SG M/2PL/3PL sugá -- same as imperative (TODO check if for all conjugations) -3 SG F sugtá -- not yet in the grammar +1/2SG/3SG M/2PL/3PL sugá (VRel Masc) +3 SG F sugtá (VRel Fem) 1PL sugná -- not yet in the grammar (18) (a) nimánka buugágga keená men-the books-the bring From 4d79df8406160de4b2ce61e9841cd6bec0406260 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 31 Jul 2019 17:50:50 +0200 Subject: [PATCH 5/5] (Som) WIP: Conjunctions --- src/somali/CatSom.gf | 4 +-- src/somali/ConjunctionSom.gf | 50 ++++++++++++++++++++++-------------- src/somali/NounSom.gf | 4 ++- src/somali/ParamSom.gf | 6 +++++ src/somali/PhraseSom.gf | 2 +- src/somali/ResSom.gf | 22 ++++++++-------- src/somali/StructuralSom.gf | 4 +-- 7 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/somali/CatSom.gf b/src/somali/CatSom.gf index 62c671c08..f0da1e000 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -82,7 +82,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { --2 Structural words -- Constructed in StructuralSom. - Conj = { s1,s2 : Str ; n : Number } ; + Conj = {s2 : State => Str ; s1 : Str ; n : Number } ; Subj = SS ; Prep = ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ; @@ -96,7 +96,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { V, -- TODO: eventually proper lincats VV, -- verb-phrase-complement verb e.g. "want" - VS, -- sentence-complement verb e.g. "claim" + VS, -- sentence-complement verb e.g. "claim" -- TODO: VPs that have VS use waxa as stm? see Nilsson p. 68 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/ConjunctionSom.gf b/src/somali/ConjunctionSom.gf index 5038ed4e3..35a3d3227 100644 --- a/src/somali/ConjunctionSom.gf +++ b/src/somali/ConjunctionSom.gf @@ -37,17 +37,17 @@ lin ConsAdv, ConsAdV, ConsIAdv = consrSS comma ; ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ; -{- ---RS depends on agreement, otherwise exactly like previous. + +--RS depends on gender and case, otherwise exactly like previous. lincat - [RS] = {s1,s2 : Agr => Str } ; + [RS] = {s1,s2 : Gender => Case => Str} ; lin - BaseRS x y = twoTable Agr x y ; - ConsRS xs x = consrTable Agr comma xs x ; - ConjRS co xs = conjunctDistrTable Agr co xs ; - + BaseRS x y = twoTable2 Gender Case x y ; + ConsRS xs x = consrTable2 Gender Case comma xs x ; + ConjRS co xs = conjunctDistrTable2' Gender Case co xs ; +{- lincat [S] = {} ; @@ -80,11 +80,11 @@ lin BaseDAP x y = x ** { pref2 = y.pref } ; ConsDAP xs x = xs ** { pref2 = x.pref } ; ConjDet conj xs = xs ** { pref = conj.s1 ++ xs.pref ++ conj.s2 ++ xs.pref2 } ; - +-} -- Noun phrases lincat - [NP] = { s1,s2 : Case => Str } ** NPLight ; + [NP] = {s1,s2 : Case => Str} ** BaseNP ; lin BaseNP x y = twoTable Case x y ** consNP x y ; @@ -93,24 +93,36 @@ lin oper - --NP without the s field; just to avoid copypaste and make things easier to change - NPLight : Type = { } ; + ConjDistr : Type = {s2 : State => Str ; s1 : Str} ; - consNP : NPLight -> NPLight -> NPLight = \x,y -> - x ** { agr = conjAgr x.agr (getNum y.agr) } ; + conjunctDistrSS : ConjDistr -> ListX -> SS = \or,xs -> + ss (or.s1 ++ xs.s1 ++ or.s2 ! Indefinite ++ xs.s2) ; - conjNP : NPLight -> Conj -> NPLight = \xs,conj -> - xs ** { agr = conjAgr xs.agr conj.nbr } ; + conjunctDistrTable' : + (P : PType) -> ConjDistr -> ListTable P -> {s : P => Str} = \P,or,xs -> + {s = table P {p => or.s1 ++ xs.s1 ! p ++ or.s2 ! Indefinite ++ xs.s2 ! p}} ; + + conjunctDistrTable2' : + (P,Q : PType) -> ConjDistr -> ListTable2 P Q -> {s : P => Q => Str} = + \P,Q,or,xs -> + {s = + table P {p => table Q {q => or.s1 ++ xs.s1 ! p ! q ++ or.s2 ! Indefinite ++ xs.s2 ! p ! q}}} ; -- Like conjunctTable from prelude/Coordination.gf, -- but forces the first argument into absolutive. - conjunctNPTable : Conj -> ListTable Case -> {s : Case => Str} = \co,xs -> - { s = table { cas => co.s1 ++ xs.s1 ! Abs ++ co.s2 ++ xs.s2 ! cas } } ; + conjunctNPTable : ConjDistr -> ({s1,s2 : Case => Str} ** BaseNP) -> {s : Case => Str ; st : State} = \co,xs -> xs ** + {s = -- TODO if xs is a pronoun, make them use (pronTable ! xs.a).sp + table { cas => co.s1 ++ xs.s1 ! Abs ++ co.s2 ! xs.st ++ xs.s2 ! cas}} ; - conjAgr : Agr -> Number -> Agr = \a,n -> + consNP : BaseNP -> BaseNP -> BaseNP = \x,y -> + x ** { agr = conjAgr x.agr (getNum y.agr) } ; + + conjNP : BaseNP -> Conj -> BaseNP = \xs,conj -> + xs ** { agr = conjAgr xs.agr conj.nbr } ; + + conjAgr : Agreement -> Number -> Agreement = \a,n -> case n of { Pl => plAgr a ; _ => a } ; conjNbr : Number -> Number -> Number = \n,m -> case n of { Pl => Pl ; _ => m } ; --} } diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index 73eee4cb7..2a80642c6 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -9,6 +9,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : Det -> CN -> NP DetCN det cn = useN cn ** { s = sTable ; + st = det.st ; a = getAgr det.n (gender cn) } where { sTable : Case => Str = \\c => let nfc : {nf : NForm ; c : Case} = @@ -45,11 +46,12 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { UsePN pn = pn ** { s = \\c => pn.s ; isPron = False ; + st = Definite ; empty = [] ; } ; -- : Pron -> NP ; - UsePron pron = pron ; + UsePron pron = pron ** {st = Definite} ; -- : Predet -> NP -> NP ; -- only the man PredetNP predet np = np ** { diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index b9b7a2f3e..85e1f5894 100644 --- a/src/somali/ParamSom.gf +++ b/src/somali/ParamSom.gf @@ -156,6 +156,12 @@ oper getNum : Agreement -> Number = \a -> case a of { Sg1|Sg2|Sg3 _ => Sg ; _ => Pl } ; + plAgr : Agreement -> Agreement = \agr -> + case agr of { Sg1 => Pl1 Excl ; + Sg2 => Pl2 ; + Sg3 _ => Pl3 ; + agr => agr } ; + agr2pagr : Agreement -> PrepAgr = \a -> case a of { Sg1 => Sg1_Prep ; Sg2 => Sg2_Prep ; diff --git a/src/somali/PhraseSom.gf b/src/somali/PhraseSom.gf index 5300d63a4..f3740b04b 100644 --- a/src/somali/PhraseSom.gf +++ b/src/somali/PhraseSom.gf @@ -23,7 +23,7 @@ concrete PhraseSom of Phrase = CatSom ** open Prelude, ResSom in { UttInterj i = i ; NoPConj = {s = []} ; - PConjConj conj = { s = conj.s1 ++ conj.s2 } ; + PConjConj conj = {s = conj.s1 ++ conj.s2 ! Indefinite} ; NoVoc = {s = []} ; VocNP np = { s = "," ++ np.s ! Abs } ; --TODO: vocative exists diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 8ce23004f..cb64f32b0 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -134,6 +134,7 @@ oper BaseNP : Type = { a : Agreement ; isPron : Bool ; + st : State ; empty : Str ; } ; @@ -155,7 +156,7 @@ oper useN : Noun -> CNoun ** BaseNP = \n -> n ** { mod = \\_,_ => [] ; hasMod = False ; a = Sg3 (gender n) ; isPron,isPoss = False ; - empty = [] ; + empty = [] ; st = Indefinite } ; emptyNP : NounPhrase = { @@ -163,6 +164,7 @@ oper a = Pl3 ; isPron = False ; empty = [] ; + st = Indefinite } ; impersNP : NounPhrase = emptyNP ** { @@ -186,55 +188,55 @@ oper Sg1 => { s = table {Nom => "aan" ; Abs => "i"} ; a = Sg1 ; isPron = True ; sp = table {Nom => "anigu" ; _ =>"aniga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s = quantTable "ayg" "ayd" ; short = quantTable "ay" ; sp = gnTable "ayg" "ayd" "uwayg"} } ; Sg2 => { s = table {Nom => "aad" ; Abs => "ku"} ; a = Sg2 ; isPron = True ; sp = table {Nom => "adigu" ; _ => "adiga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s = quantTable "aag" "aad" ; short = quantTable "aa" ; sp = gnTable "aag" "aad" "uwaag"} } ; Sg3 Masc => { s = table {Nom => "uu" ; Abs => []} ; a = Sg3 Masc ; isPron = True ; sp = table {Nom => "isagu" ; _ => "isaga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"} } ; Sg3 Fem => { s = table {Nom => "ay" ; Abs => []} ; a = Sg3 Fem ; isPron = True ; sp = table {Nom => "iyadu" ; _ => "iyada"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s, short = quantTable "eed" ; sp = gnTable "eed" "eed" "uweed"} } ; Pl1 Excl => { s = table {Nom => "aan" ; Abs => "na"} ; a = Pl1 Excl ; isPron = True ; sp = table {Nom => "annagu" ; _ => "annaga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl1 Incl => { s = table {Nom => "aynu" ; Abs => "ina"} ; a = Pl1 Incl ; isPron = True ; sp = table {Nom => "innagu" ; _ => "innaga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s = quantTable "eenn" ; short = quantTable "een" ; sp = gnTable "eenn" "eenn" "uweenn"} } ; Pl2 => { s = table {Nom => "aad" ; Abs => "idin"} ; a = Pl2 ; isPron = True ; sp = table {Nom => "idinku" ; _ => "idinka"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s = quantTable "iinn" ; short = quantTable "iin" ; sp = gnTable "iinn" "iinn" "uwiinn"} } ; Pl3 => { s = table {Nom => "ay" ; Abs => []} ; a = Pl3 ; isPron = True ; sp = table {Nom => "iyagu" ; _ => "iyaga"} ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s, short = quantTable "ood" ; sp = gnTable "ood" "ood" "uwood"} } ; Impers => { s = table {Nom => "la" ; Abs => "la"} ; a = Impers ; isPron = True ; sp = \\_ => "" ; - empty = [] ; + empty = [] ; st = Definite ; poss = {s, short = quantTable "??" ; sp = gnTable "??" "??" "??"} } } ; diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index 1cf7b3159..992c405e1 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -38,8 +38,8 @@ lin there_Adv = ss "" ; ------- -- Conj -lin and_Conj = {s1 = "oo" ; s2 = [] ; n = Pl} ; -lin or_Conj = {s1 = "ama" ; s2 = [] ; n = Sg} ; -- mise with interrogatives +lin and_Conj = {s2 = table {Definite => "ee" ; Indefinite => "oo"} ; s1 = [] ; n = Pl} ; +lin or_Conj = {s2 = \\_ => "ama" ; s1 = [] ; n = Sg} ; -- mise with interrogatives -- lin if_then_Conj = mkConj -- lin both7and_DConj = mkConj "" "" pl ; -- lin either7or_DConj = mkConj "" "" pl ;