From a793daaf1196bd28b9a17c8630c98f0057e131be Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Sat, 12 Sep 2020 18:24:07 +0200 Subject: [PATCH] Merge Reflexivity and Transitivity (untested) --- src/russian/DocumentationRusFunctor.gf | 12 ++++--- src/russian/ExtraRus.gf | 12 ++++--- src/russian/InflectionRus.gf | 37 +++++++++++-------- src/russian/ParadigmsRus.gf | 4 +-- src/russian/ParamRus.gf | 17 ++++++--- src/russian/ResRus.gf | 49 ++++++++++++++------------ 6 files changed, 77 insertions(+), 54 deletions(-) diff --git a/src/russian/DocumentationRusFunctor.gf b/src/russian/DocumentationRusFunctor.gf index b9e12c8c..d618e2a9 100644 --- a/src/russian/DocumentationRusFunctor.gf +++ b/src/russian/DocumentationRusFunctor.gf @@ -144,8 +144,10 @@ oper let imp : Agr=>Str = \\a => ((verbImperativeAgree v a).p1 ++ (verbImperativeAgree v a).p2) in let ppp : GenNum=>Str = \\gn => shortPastPassPart v gn in case v.asp of {Imperfective => "несовершенного вида" ; Perfective => "совершенного вида"} ++ "," ++ - case v.refl of {Reflexive => "возвратный" ; NonReflexive => "невозвратный"} ++ "," ++ - case v.tran of {intransitive => "непереходный" ; Transitive => "переходный"} ++ "," ++ + case v.refltran of { + Refl => "возвратный" ; + Intrans => "непереходный" ; + Trans => "переходный"} ++ "," ++ heading2 (heading infinitive_Parameter) ++ frameTable ( tr (td v.inf ++ td v.infrefl) @@ -179,13 +181,13 @@ oper ++ td (past ! Ag GPl P3) ++ td (pres ! Ag GPl P3) ++ td (fut ! Ag GPl P3) ++ td (imp ! Ag GPl P3) ) ) ++ heading2 ("краткие причастия прошедшего времени") ++ - case v.tran of { - Transitive => frameTable ( + case v.refltran of { + Trans => frameTable ( tr (th (heading masculine_Parameter) ++ th (heading feminine_Parameter) ++ th (heading neuter_Parameter) ++ th (heading plural_Parameter)) ++ tr (td (ppp ! (GSg Masc)) ++ td (ppp ! (GSg Fem)) ++ td (ppp ! (GSg Neut)) ++ td (ppp ! GPl)) ) ; - Intransitive => "-" + _ => "-" } ++ heading2 ("деепричастия") ++ frameTable ( diff --git a/src/russian/ExtraRus.gf b/src/russian/ExtraRus.gf index 764e1a8e..8175c416 100644 --- a/src/russian/ExtraRus.gf +++ b/src/russian/ExtraRus.gf @@ -184,8 +184,9 @@ oper prtr="существуя"; --* ptr="существовав"; --* asp=Imperfective; - refl=NonReflexive; - tran=Transitive + refltran = Trans ; + -- refl=NonReflexive; + -- tran=Transitive } ; est_ell_V = est_V ** {prsg1, prsg2, prsg3, prpl1, prpl2, prpl3=""} ; be_ell_V = est_ell_V ** {inf=""} ; @@ -204,7 +205,8 @@ oper prtr=["не существуя"]; --* ptr=["не существовав"]; --* asp=Imperfective; - refl=NonReflexive; - tran=Transitive + refltran = Trans ; + -- refl=NonReflexive; + -- tran=Transitive } ; -} \ No newline at end of file +} diff --git a/src/russian/InflectionRus.gf b/src/russian/InflectionRus.gf index 801f2046..e00c9d81 100644 --- a/src/russian/InflectionRus.gf +++ b/src/russian/InflectionRus.gf @@ -972,9 +972,10 @@ oper let ppp = makeVerbPassPastPart conjtype infs sg1 sg3.p1 past.psgm in let tr = makeVerbTransgressive conjtype infs pl3 past.psgm in { fut=NormalFuture ; - refl=refl ; asp=asp ; - tran=tran ; + refltran = reflTran refl tran ; -- from API params to internal + -- refl=refl ; + -- tran=tran ; inf=inff.inf ; infrefl=inff.infrefl ; prsg1=presfut.prsg1 ; @@ -1105,8 +1106,9 @@ oper prtr=com + "тя"; ptr=com + "тев"; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; makeVerbBezhat6 : Aspect -> Transitivity -> Str -> VerbForms @@ -1135,8 +1137,9 @@ oper prtr=com + "жа"; -- * ptr=com + "жав"; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; makeVerbEst : Aspect -> Transitivity -> Str -> VerbForms @@ -1165,8 +1168,9 @@ oper prtr=com + "дя"; ptr=com + "в"; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; makeVerbDat6 : Aspect -> Transitivity -> Str -> VerbForms @@ -1194,8 +1198,9 @@ oper prtr=com + "вая"; ptr=com + "в"; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; makeVerbByt6 : Aspect -> Transitivity -> Str -> VerbForms @@ -1224,8 +1229,9 @@ oper prtr=com + "ывая"; ptr=com + "ыв"; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; makeVerbJti: Aspect -> Transitivity -> Str -> Str -> VerbForms @@ -1255,7 +1261,8 @@ oper prtr=com + "дя"; ptr=[]; asp=asp; - refl=refl; - tran=tran + refltran = reflTran refl tran ; + -- refl=refl; + -- tran=tran } ; -} \ No newline at end of file +} diff --git a/src/russian/ParadigmsRus.gf b/src/russian/ParadigmsRus.gf index f93ed825..00fd5472 100644 --- a/src/russian/ParadigmsRus.gf +++ b/src/russian/ParadigmsRus.gf @@ -304,7 +304,7 @@ oper = \a1,link,a2 -> lin A (mkCompoundA a1 link a2) ; mkA : V -> Voice -> Tense -> A = \v,voice,t -> - let refl = case v.refl of {Reflexive => "ся" ; _ => ""} in + let refl = case v.refltran of {Refl => "ся" ; _ => ""} in case of { => lin A ( --# notpresent TODO: check guessAdjectiveForms (v.ppps + "ый") ** { --# notpresent @@ -487,4 +487,4 @@ oper Second | SecondA => (Z.sg1StemFromVerb sg1) + "ит" ; _ => (Z.sg1StemFromVerb sg1) + "ет" } in (guessVerbForms asp Transitive inf sg1 sg3) ** {lock_V=<>} ; -} \ No newline at end of file +} diff --git a/src/russian/ParamRus.gf b/src/russian/ParamRus.gf index 9317064d..3e9f2969 100644 --- a/src/russian/ParamRus.gf +++ b/src/russian/ParamRus.gf @@ -18,8 +18,9 @@ param Animacy = Animate | Inanimate ; -- одушевлённый / неодушевлённый Voice = Act | Pass ; -- залог Aspect = Imperfective | Perfective ; -- вид / аспект - Reflexivity = Reflexive | NonReflexive ; -- возвратность + Reflexivity = Reflexive | NonReflexive ; -- возвратность -- keep just for the API Transitivity = Transitive | Intransitive ; -- возвратность + ReflTran = Refl | Trans | Intrans ; -- this is what's inside VerbForms Mood = Infinitive | Sbjv | Imperative | Ind ; -- SBJV and COND will be treated as same for now GenNum = GSg Gender | GPl ; -- The plural never makes a gender distinction @@ -100,10 +101,18 @@ oper : Str ; fut : SpecialFuture ; asp : Aspect ; - refl : Reflexivity ; - tran : Transitivity - } ; + refltran : ReflTran ; + -- refl : Reflexivity ; + -- tran : Transitivity + } ; ComplementCase : Type = {s : Str ; c : Case ; neggen : Bool ; hasPrep : Bool} ; VerbForms2 : Type = VerbForms ** {c : ComplementCase} ; VerbForms3 : Type = VerbForms ** {c : ComplementCase ; c2 : ComplementCase} ; + + reflTran : Reflexivity -> Transitivity -> ReflTran = \r,t -> + case of { + => Refl ; + <_,Transitive> => Trans ; + <_,Intransitive> => Intrans + } ; } diff --git a/src/russian/ResRus.gf b/src/russian/ResRus.gf index 02dd347f..d3581c83 100644 --- a/src/russian/ResRus.gf +++ b/src/russian/ResRus.gf @@ -620,26 +620,25 @@ oper guessVerbForms Imperfective Transitive inf (stem+"ю") (stem+"ет") ; passivateNonReflexive : VerbForms -> VerbForms - = \vf -> vf ** {refl=Reflexive} ; + = \vf -> vf ** {refltran=Refl} ; passivate : VerbForms -> VerbForms = \vf -> - case vf.refl of { - Reflexive => vf ; - NonReflexive => passivateNonReflexive vf + case vf.refltran of { + Refl => vf ; + _ => passivateNonReflexive vf } ; shortPastPassPart : VerbForms -> GenNum -> Str = \vf,gn -> - case vf.tran of { - Intransitive => variants {} ; - Transitive => case of { + case vf.refltran of { + Trans => case of { => vf.pppss ; => vf.pppss ++ BIND ++ "а" ; => vf.pppss ++ BIND ++ "о" ; => vf.pppss ++ BIND ++ "ы" ; - _ => vf.pppss - } + _ => vf.pppss } ; + _ => variants {} } ; copula : VerbForms @@ -663,8 +662,9 @@ oper prtr="будучи"; ptr="быв"; asp=Imperfective; - refl=NonReflexive; - tran=Intransitive + refltran = Intrans ; + -- refl=NonReflexive; + -- tran=Intransitive } ; -- normal copula require Nom in Pres. So this is Ins-friendly substitute. @@ -729,8 +729,9 @@ oper prtr="могши"; --* ptr="могши"; asp=Imperfective; - refl=NonReflexive; - tran=Intransitive + refltran = Intrans ; + -- refl=NonReflexive; + -- tran=Intransitive } ; want : VerbForms @@ -754,8 +755,9 @@ oper prtr="хотя"; ptr="хотев"; asp=Imperfective; - refl=NonReflexive; - tran=Transitive + refltran = Trans ; + -- refl=NonReflexive; + -- tran=Transitive } ; nullVerb : VerbForms @@ -768,8 +770,9 @@ oper prtr, ptr =""; fut=NullFuture ; asp=Imperfective; - refl=NonReflexive; - tran=Transitive + refltran = Trans ; + -- refl=NonReflexive; + -- tran=Transitive } ; verbPastAgree : VerbForms -> Agr -> Str -> Str @@ -781,13 +784,13 @@ oper } ; verbReflAfterConsonant : VerbForms -> Str - = \vf -> case vf.refl of {Reflexive => BIND ++ "ся" ; NonReflexive => ""} ; + = \vf -> case vf.refltran of {Refl => BIND ++ "ся" ; _ => ""} ; verbRefl : VerbForms -> Str - = \vf -> case vf.refl of {Reflexive => BIND ++ "сь" ; NonReflexive => ""} ; + = \vf -> case vf.refltran of {Refl => BIND ++ "сь" ; _ => ""} ; verbInf : VerbForms -> Str - = \vf -> case vf.refl of {Reflexive => vf.infrefl ; NonReflexive => vf.inf} ; + = \vf -> case vf.refltran of {Refl => vf.infrefl ; _ => vf.inf} ; verbPresAgree : VerbForms -> Agr -> Str = \vf,a -> case a of { @@ -835,7 +838,7 @@ oper = \vf,a -> case a of { Ag (GSg Neut) (P1|P2|P3) => <"", (verbInf vf)> ; -- reused neuter for immediate imperative Ag (GSg _) P1 => <"", (verbInf vf)> ; -- ? - Ag (GSg _) P2 => <"", case vf.refl of {NonReflexive=>vf.isg2; Reflexive=>vf.isg2refl}> ; + Ag (GSg _) P2 => <"", case vf.refltran of {Refl=>vf.isg2refl; _=>vf.isg2}> ; Ag (GSg x) P3 => <"пусть", verbFutAgree vf (Ag (GSg x) P3)> ; -- ? Ag GPl P1 => <"", vf.ipl1 ++ verbReflAfterConsonant vf> ; Ag GPl P2 => <"", vf.isg2 ++ BIND ++ "те" ++ (verbRefl vf)> ; @@ -1611,8 +1614,8 @@ oper ++ past ! Ag (GSg Masc) P1 ++ "," ++ past ! Ag (GSg Fem) P1 ++ "," ++ past ! Ag (GSg Neut) P1 ++ "," ++ past ! Ag GPl P1 ++ "," ++ imp ! Ag (GSg Masc) P2 ++ "," ++ imp ! Ag GPl P2 ++ "," ++ v.ptr ++ verbRefl v - ++ case v.tran of { - Transitive => "," ++ ppp ! (GSg Masc) ++ "," ++ ppp ! (GSg Fem) ++ "," ++ ppp ! (GSg Neut) ++ "," ++ ppp ! GPl ; + ++ case v.refltran of { + Trans => "," ++ ppp ! (GSg Masc) ++ "," ++ ppp ! (GSg Fem) ++ "," ++ ppp ! (GSg Neut) ++ "," ++ ppp ! GPl ; _ => "" } ;