diff --git a/src/somali/CatSom.gf b/src/somali/CatSom.gf index 2c6a090f3..384fab360 100644 --- a/src/somali/CatSom.gf +++ b/src/somali/CatSom.gf @@ -9,7 +9,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { S = ResSom.Sentence ; QS = SS ; - RS = {s : Gender => Case => Str} ; + RS = {s : State => Gender => Case => Str} ; -- relative sentence. Tense and polarity fixed, -- but agreement may depend on the CN/NP it modifies. diff --git a/src/somali/ConjunctionSom.gf b/src/somali/ConjunctionSom.gf index 122f17dca..c5d6e93cd 100644 --- a/src/somali/ConjunctionSom.gf +++ b/src/somali/ConjunctionSom.gf @@ -38,14 +38,15 @@ lin ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ; ---RS depends on gender and case, otherwise exactly like previous. +-- RS depends on state, gender and case, otherwise exactly like previous. +-- RS can modify CNs, which are open for state, number and case, and have inherent gender. lincat - [RS] = {s1,s2 : Gender => Case => Str} ; + [RS] = {s1,s2 : State => Gender => Case => Str} ; lin - 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 ; + BaseRS = twoTable3 State Gender Case ; + ConsRS = consrTable3 State Gender Case comma ; + ConjRS = conjunctRSTable State Gender Case ; {- lincat @@ -118,6 +119,12 @@ oper 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}} ; + conjunctRSTable : ConjDistr -> {s1,s2 : State => Gender => Case => Str} -> RS = \co,xs -> lin RS (xs ** { + s = \\st,g,c => co.s1 + ++ xs.s1 ! st ! g ! c + ++ co.s2 ! st + ++ xs.s2 ! st ! g ! c + }) ; np2objpron : NounPhrase -> NounPhrase = \np -> np ** { s = objpron np diff --git a/src/somali/NounSom.gf b/src/somali/NounSom.gf index 8d21a618a..46bc36167 100644 --- a/src/somali/NounSom.gf +++ b/src/somali/NounSom.gf @@ -73,9 +73,17 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { -- : NP -> Adv -> NP ; -- Paris today ; boys, such as .. --AdvNP,ExtAdvNP = \np,adv -> np ** {} ; --adverbs are complicated - -- : NP -> RS -> NP ; -- Paris, which is here + -- : NP -> RS -> NP ; -- Paris, which is here + {- NB. technically, if the RS has undergone ConjRS, it could contain both + restrictive and appositive relative clauses. Quote Sayeed p.215-216: + "When multiple relative clauses occur, this formal distinction is + maintained, since in the only context both can occur, on nouns with + determiners, restrictives are joined by ee while appositives employ oo." + In practice, we don't care--it's impossible to know on the RGL level + which RS are restrictive and which appositive, as it is semantic. + -} RelNP np rs = np ** { - s = \\c => objpron np ! c ++ rs.s ! npgender np ! c ; + s = \\c => objpron np ! c ++ "oo" ++ rs.s ! Indefinite ! npgender np ! c ; isPron = False ; } ; @@ -237,7 +245,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in { mod = \\st,n,c => --what to do with subject case if there's both adj and RS? cn.mod ! st ! n ! Abs ++ andConj st cn.hasMod - ++ rs.s ! gender cn ! c ; + ++ rs.s ! st ! gender cn ! c ; hasMod = True ; } ; diff --git a/src/somali/SentenceSom.gf b/src/somali/SentenceSom.gf index 0c926b57e..3de1f3891 100644 --- a/src/somali/SentenceSom.gf +++ b/src/somali/SentenceSom.gf @@ -62,7 +62,7 @@ lin UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ; -- : Temp -> Pol -> RCl -> RS ; - UseRCl t p cl = {s = \\g,c => t.s ++ p.s ++ cl.s ! g ! c ! t.t ! t.a ! p.p} ; + UseRCl t p cl = {s = \\st,g,c => t.s ++ p.s ++ cl.s ! g ! c ! t.t ! t.a ! p.p} ; -- AdvS : Adv -> S -> S ; -- then I will go home -- ExtAdvS : Adv -> S -> S ; -- next week, I will go home diff --git a/src/somali/unittest/cl.gftest b/src/somali/unittest/cl.gftest index 4e55ab60a..c4ef5bf9b 100644 --- a/src/somali/unittest/cl.gftest +++ b/src/somali/unittest/cl.gftest @@ -1,3 +1,5 @@ +-- Restrictive relative clauses (RelCN) + -- LangEng: the books that the men buy LangSom: buugaag BIND ta niman BIND ku iibsadaan Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN book_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumPl) (UseN man_N)) (SlashV2a buy_V2))))))) NoVoc @@ -13,3 +15,21 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQ -- LangEng: the books that the men buy are these LangSom: buugaag BIND ta niman BIND ku iibsadaan waa kuwan Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (RelCN (UseN book_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumPl) (UseN man_N)) (SlashV2a buy_V2)))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumPl))))))) NoVoc + +-- Appositive relative clauses (RelNP) + +-- LangEng: he , that the men see +LangSom: isaga oo niman BIND ku arkaan +Lang: PhrUtt NoPConj (UttNP (RelNP (UsePron he_Pron) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumPl) (UseN man_N)) (SlashV2a see_V2)))))) NoVoc + +-- LangEng: he , that sees the men +LangSom: isaga oo niman BIND ka arka +Lang: PhrUtt NoPConj (UttNP (RelNP (UsePron he_Pron) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN man_N))))))) NoVoc + +-- LangEng: he , that the men see , is this +LangSom: isagu oo niman BIND ku arkaan waa kan +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (RelNP (UsePron he_Pron) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (DetCN (DetQuant DefArt NumPl) (UseN man_N)) (SlashV2a see_V2))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumSg))))))) NoVoc + +--LangEng: he , that sees the men , is this +LangSom: isagu oo niman BIND ka arkaa waa kan +Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (RelNP (UsePron he_Pron) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant DefArt NumPl) (UseN man_N)))))) (UseComp (CompNP (DetNP (DetQuant this_Quant NumSg))))))) NoVoc