From db4f31047e772391de1cf327fd938bde17e77a85 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Thu, 18 Jul 2019 20:49:59 +0300 Subject: [PATCH 1/3] (Som) Add reflexives --- src/somali/ParamSom.gf | 6 ++++-- src/somali/ResSom.gf | 13 ++++++++++--- src/somali/VerbSom.gf | 11 ++++------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/somali/ParamSom.gf b/src/somali/ParamSom.gf index 94ed42b7..78269ad6 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 b983f311..7d677ccc 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 512459a2..1c20a6e4 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 ; From 89217ee9ccc878a11be61077c1a266afff31b15f Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 19 Jul 2019 10:21:29 +0300 Subject: [PATCH 2/3] (Est) Add [CN] and {Base,Cons,Conj}CN --- src/estonian/ConjunctionEst.gf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/estonian/ConjunctionEst.gf b/src/estonian/ConjunctionEst.gf index db865f8f..05d8c44e 100644 --- a/src/estonian/ConjunctionEst.gf +++ b/src/estonian/ConjunctionEst.gf @@ -9,6 +9,8 @@ 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 @@ -30,6 +32,8 @@ 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 ; @@ -42,6 +46,7 @@ concrete ConjunctionEst of Conjunction = 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 }} ; [RS] = {s1,s2 : Agr => Str ; c : NPForm} ; From 54870ec67838ae3c6866fff6db477e514d5e49c5 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 19 Jul 2019 10:22:07 +0300 Subject: [PATCH 3/3] (Est) Minor cleanup+formatting --- src/estonian/ConjunctionEst.gf | 99 ++++++++++++++++------------------ 1 file changed, 45 insertions(+), 54 deletions(-) diff --git a/src/estonian/ConjunctionEst.gf b/src/estonian/ConjunctionEst.gf index 05d8c44e..330bb50b 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; @@ -16,11 +16,7 @@ concrete ConjunctionEst of Conjunction = 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 @@ -38,8 +34,6 @@ concrete ConjunctionEst of Conjunction = 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} ; @@ -48,67 +42,64 @@ concrete ConjunctionEst of Conjunction = [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 + } ; }