diff --git a/src/estonian/ConjunctionEst.gf b/src/estonian/ConjunctionEst.gf index db865f8fc..330bb50b5 100644 --- a/src/estonian/ConjunctionEst.gf +++ b/src/estonian/ConjunctionEst.gf @@ -1,4 +1,4 @@ -concrete ConjunctionEst of Conjunction = +concrete ConjunctionEst of Conjunction = CatEst ** open ResEst, Coordination, Prelude in { flags optimize=all_subs ; coding=utf8; @@ -9,16 +9,14 @@ concrete ConjunctionEst of Conjunction = ConjAdv = conjunctDistrSS ; + ConjCN = conjunctDistrTable NForm ; + ConjNP conj ss = conjunctDistrTable NPForm conj ss ** { a = conjAgr (Ag conj.n P3) ss.a ; -- P3 is the maximum isPron = False } ; --- ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ** { - ConjAP conj ss = conjunctDistrTableAdj conj ss ** { - infl = ss.s2.infl ; ---- was: True, which is of wrong type. AR 1/2/2014 - lock_AP = <> - } ; + ConjAP conj ss = conjunctDistrTableAdj conj ss ; ConjRS conj ss = conjunctDistrTable Agr conj ss ** { c = ss.c @@ -30,80 +28,78 @@ concrete ConjunctionEst of Conjunction = ConsS = consrSS comma ; BaseAdv = twoSS ; ConsAdv = consrSS comma ; + BaseCN = twoTable NForm ; + ConsCN = consrTable NForm comma ; BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a} ; ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a} ; BaseAP x y = twoTableAdj x y ; ConsAP xs x = consrTableAdj comma x xs ; --- BaseAP x y = twoTable2 Bool NForm x y ; --- ConsAP xs x = consrTable2 Bool NForm comma xs x ; BaseRS x y = twoTable Agr x y ** {c = y.c} ; ConsRS xs x = consrTable Agr comma xs x ** {c = xs.c} ; lincat [S] = {s1,s2 : Str} ; [Adv] = {s1,s2 : Str} ; + [CN] = {s1,s2 : NForm => Str} ; [NP] = {s1,s2 : NPForm => Str ; a : Agr} ; - [AP] = {s1,s2 : {s : Bool => NForm => Str ; infl : Infl }} ; + [AP] = {s1,s2 : {s : Bool => NForm => Str ; infl : Infl }} ; [RS] = {s1,s2 : Agr => Str ; c : NPForm} ; - + oper --Modified from prelude/Coordination.gf generic functions twoTableAdj : (_,_ : AP) -> [AP] = \x,y -> lin ListAP { - s1 = x ; - s2 = y ; - lock_ListAP = <> - } ; - + s1 = x ; + s2 = y + } ; + consrTableAdj : Str -> [AP] -> {s : Bool => NForm => Str ; infl : Infl} -> [AP] = \c,xs,x -> let - ap1 = xs.s1 ; - ap2 = xs.s2 - in - lin ListAP {s1 = + ap1 = xs.s1 ; + ap2 = xs.s2 + in + lin ListAP {s1 = {s = \\isMod,nf => - case isMod of { - True => case of { - <(Participle|Invariable),(Participle|Invariable)> => - ap1.s ! isMod ! (NCase Sg Nom) ++ c ++ ap2.s ! isMod ! (NCase Sg Nom) ; --valmis ja täis kassid - <(Participle|Invariable),Regular> => - ap1.s ! isMod ! (NCase Sg Nom) ++ c++ ap2.s ! isMod ! nf ; --valmis ja suured kassid - => - ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! (NCase Sg Nom) ; --suured ja valmis kassid - _ => ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! nf --suured ja mustad kassid - } ; - False => ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! nf --kassid on valmid ja suured - } ; - infl = Regular ; - lock_AP = <> } ; + case isMod of { + True => case of { + <(Participle|Invariable),(Participle|Invariable)> => + ap1.s ! isMod ! (NCase Sg Nom) ++ c ++ ap2.s ! isMod ! (NCase Sg Nom) ; --valmis ja täis kassid + <(Participle|Invariable),Regular> => + ap1.s ! isMod ! (NCase Sg Nom) ++ c++ ap2.s ! isMod ! nf ; --valmis ja suured kassid + => + ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! (NCase Sg Nom) ; --suured ja valmis kassid + _ => ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! nf --suured ja mustad kassid + } ; + False => ap1.s ! isMod ! nf ++ c ++ ap2.s ! isMod ! nf --kassid on valmid ja suured + } ; + infl = Regular } ; s2 = x ; lock_ListAP = <> - } ; + } ; + - conjunctDistrTableAdj : ConjunctionDistr -> [AP] -> AP = \or,xs -> let ap1 = xs.s1 ; - ap2 = xs.s2 ; + ap2 = xs.s2 ; in lin AP {s = \\isMod,nf => - case isMod of { - True => case of { - <(Participle|Invariable),(Participle|Invariable)> => - or.s1 ++ ap1.s ! isMod ! (NCase Sg Nom) ++ - or.s2 ++ ap2.s ! isMod ! (NCase Sg Nom) ; - <(Participle|Invariable),Regular> => - or.s1 ++ ap1.s ! isMod ! (NCase Sg Nom) ++ - or.s2 ++ ap2.s ! isMod ! nf ; - => - or.s1 ++ ap1.s ! isMod ! nf ++ - or.s2 ++ ap2.s ! isMod ! (NCase Sg Nom) ; - _ => or.s1 ++ ap1.s ! isMod ! nf ++ or.s2 ++ ap2.s ! isMod ! nf - } ; - False => or.s1 ++ ap1.s ! isMod ! nf ++ or.s2 ++ ap2.s ! isMod ! nf - } ; - infl = Regular ; - lock_AP = <> - } ; + case isMod of { + True => case of { + <(Participle|Invariable),(Participle|Invariable)> => + or.s1 ++ ap1.s ! isMod ! (NCase Sg Nom) ++ + or.s2 ++ ap2.s ! isMod ! (NCase Sg Nom) ; + <(Participle|Invariable),Regular> => + or.s1 ++ ap1.s ! isMod ! (NCase Sg Nom) ++ + or.s2 ++ ap2.s ! isMod ! nf ; + => + or.s1 ++ ap1.s ! isMod ! nf ++ + or.s2 ++ ap2.s ! isMod ! (NCase Sg Nom) ; + _ => or.s1 ++ ap1.s ! isMod ! nf ++ or.s2 ++ ap2.s ! isMod ! nf + } ; + False => or.s1 ++ ap1.s ! isMod ! nf ++ or.s2 ++ ap2.s ! isMod ! nf + } ; + infl = Regular + } ; } diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index 94ed42b7d..78269ad62 100644 --- a/src/somali/ParamSom.gf +++ b/src/somali/ParamSom.gf @@ -168,7 +168,9 @@ param param Preposition = U | Ku | Ka | La | NoPrep ; - PrepositionPlus = P Preposition | Passive ; -- Hack: RGL only supports V2s as passive, so I can reuse V2's preposition slot for passives as well, and save >200 parameters. (Don't ask.) + PrepositionPlus = P Preposition + | Passive ; -- Hack: RGL only supports V2s as passive, so I can reuse V2's preposition slot for passives as well, and save >200 parameters. (Don't ask.) + PrepCombination = Ugu | Uga | Ula | Kaga | Kula | Kala | Single PrepositionPlus ; @@ -194,7 +196,7 @@ oper z => z } ; pp2prep : PrepositionPlus -> Preposition = \pp -> - case pp of {P p => p ; Passive => NoPrep} ; + case pp of {P p => p ; _ => NoPrep} ; -------------------------------------------------------------------------------- -- Verbs diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index b983f3119..7d677ccc2 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -639,6 +639,7 @@ oper obj2 : {s : Str ; a : AgreementPlus} ; secObj : Str ; -- if two overt pronoun objects vComp : Str ; -- VV complement + refl : Str ; -- reflexive is put here, if the verb has an obj2. miscAdv : Str ; -- dump for any other kind of adverb, that isn't } ; -- in a closed class of particles or made with PrepNP. @@ -647,7 +648,7 @@ oper useV : Verb -> VerbPhrase = \v -> v ** { comp = \\_ => <[],[]> ; pred = NoPred ; - vComp,berri,miscAdv = [] ; + vComp,berri,miscAdv,refl = [] ; c2 = P NoPrep ; c3 = NoPrep ; obj2 = {s = [] ; a = Unassigned} ; @@ -667,13 +668,19 @@ oper comp = \\agr => let cmp = vps.comp ! agr in {p1 = np.s ++ cmp.p1 ; -- if object is a noun, it will come before verb in the sentence. -- if object is a pronoun, np.s is empty. - p2 = cmp.p2 ++ compl np.a vps} -- object combines with the preposition of the verb. + p2 = cmp.p2 ++ vps.refl ++ compl np.a vps} -- object combines with the preposition of the verb. } ; compl : AgreementPlus -> VerbPhrase -> Str = \a,vp -> let agr = case a of {IsPron x => x ; _ => Pl3} ; in prepCombTable ! agr ! combine vp.c2 vp.c3 ; + insertRefl : VPSlash -> VPSlash = \vps -> + case of { +

=> vps ** {refl = "is"} ; -- not bound + _ => vps ** {refl = "is" ++ BIND} + } ; + insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np -> let noun : Str = case of { => np.s ! Abs ; @@ -760,7 +767,7 @@ oper } where { vp = case vps.c2 of { Passive => complSlash (insertComp vps np) ; - _ => complSlash vps } ; + _ => complSlash vps } ; subj = case vps.c2 of {Passive => impersNP ; _ => np} ; } ; diff --git a/src/somali/VerbSom.gf b/src/somali/VerbSom.gf index 512459a20..1c20a6e48 100644 --- a/src/somali/VerbSom.gf +++ b/src/somali/VerbSom.gf @@ -11,6 +11,9 @@ lin -- : V2 -> VP ; -- be loved PassV2 = ResSom.passV2 ; + -- : VPSlash -> VP ; + ReflVP = ResSom.insertRefl ; + -- : VV -> VP -> VP ; ComplVV vv vp = useV vv ** { -- check Sayeed p. 169 vComp = infVP vp @@ -67,14 +70,8 @@ lin post = vps.post ; iobj = np ** { s = np.s ! Dat } } ; ---2 Other ways of forming verb phrases - --- Verb phrases can also be constructed reflexively and from --- copula-preceded complements. - - -- : VPSlash -> VP ; - ReflVP vps = ; -} + -- : Comp -> VP ; UseComp comp = UseCopula ** comp ;