Merge Reflexivity and Transitivity (untested)

This commit is contained in:
Inari Listenmaa
2020-09-12 18:24:07 +02:00
committed by Roman Suzi
parent 58cfa9e8dc
commit a793daaf11
6 changed files with 77 additions and 54 deletions

View File

@@ -144,8 +144,10 @@ oper
let imp : Agr=>Str = \\a => ((verbImperativeAgree v a).p1 ++ (verbImperativeAgree v a).p2) in let imp : Agr=>Str = \\a => ((verbImperativeAgree v a).p1 ++ (verbImperativeAgree v a).p2) in
let ppp : GenNum=>Str = \\gn => shortPastPassPart v gn in let ppp : GenNum=>Str = \\gn => shortPastPassPart v gn in
case v.asp of {Imperfective => "несовершенного вида" ; Perfective => "совершенного вида"} ++ "," ++ case v.asp of {Imperfective => "несовершенного вида" ; Perfective => "совершенного вида"} ++ "," ++
case v.refl of {Reflexive => "возвратный" ; NonReflexive => "невозвратный"} ++ "," ++ case v.refltran of {
case v.tran of {intransitive => "непереходный" ; Transitive => "переходный"} ++ "," ++ Refl => "возвратный" ;
Intrans => "непереходный" ;
Trans => "переходный"} ++ "," ++
heading2 (heading infinitive_Parameter) ++ heading2 (heading infinitive_Parameter) ++
frameTable ( frameTable (
tr (td v.inf ++ td v.infrefl) 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) ) ++ td (past ! Ag GPl P3) ++ td (pres ! Ag GPl P3) ++ td (fut ! Ag GPl P3) ++ td (imp ! Ag GPl P3) )
) ++ ) ++
heading2 ("краткие причастия прошедшего времени") ++ heading2 ("краткие причастия прошедшего времени") ++
case v.tran of { case v.refltran of {
Transitive => frameTable ( Trans => frameTable (
tr (th (heading masculine_Parameter) ++ th (heading feminine_Parameter) ++ th (heading neuter_Parameter) tr (th (heading masculine_Parameter) ++ th (heading feminine_Parameter) ++ th (heading neuter_Parameter)
++ th (heading plural_Parameter)) ++ ++ th (heading plural_Parameter)) ++
tr (td (ppp ! (GSg Masc)) ++ td (ppp ! (GSg Fem)) ++ td (ppp ! (GSg Neut)) ++ td (ppp ! GPl)) tr (td (ppp ! (GSg Masc)) ++ td (ppp ! (GSg Fem)) ++ td (ppp ! (GSg Neut)) ++ td (ppp ! GPl))
) ; ) ;
Intransitive => "-" _ => "-"
} ++ } ++
heading2 ("деепричастия") ++ heading2 ("деепричастия") ++
frameTable ( frameTable (

View File

@@ -184,8 +184,9 @@ oper
prtr="существуя"; --* prtr="существуя"; --*
ptr="существовав"; --* ptr="существовав"; --*
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Trans ;
tran=Transitive -- refl=NonReflexive;
-- tran=Transitive
} ; } ;
est_ell_V = est_V ** {prsg1, prsg2, prsg3, prpl1, prpl2, prpl3=""} ; est_ell_V = est_V ** {prsg1, prsg2, prsg3, prpl1, prpl2, prpl3=""} ;
be_ell_V = est_ell_V ** {inf=""} ; be_ell_V = est_ell_V ** {inf=""} ;
@@ -204,7 +205,8 @@ oper
prtr=["не существуя"]; --* prtr=["не существуя"]; --*
ptr=["не существовав"]; --* ptr=["не существовав"]; --*
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Trans ;
tran=Transitive -- refl=NonReflexive;
-- tran=Transitive
} ; } ;
} }

View File

@@ -972,9 +972,10 @@ oper
let ppp = makeVerbPassPastPart conjtype infs sg1 sg3.p1 past.psgm in let ppp = makeVerbPassPastPart conjtype infs sg1 sg3.p1 past.psgm in
let tr = makeVerbTransgressive conjtype infs pl3 past.psgm in { let tr = makeVerbTransgressive conjtype infs pl3 past.psgm in {
fut=NormalFuture ; fut=NormalFuture ;
refl=refl ;
asp=asp ; asp=asp ;
tran=tran ; refltran = reflTran refl tran ; -- from API params to internal
-- refl=refl ;
-- tran=tran ;
inf=inff.inf ; inf=inff.inf ;
infrefl=inff.infrefl ; infrefl=inff.infrefl ;
prsg1=presfut.prsg1 ; prsg1=presfut.prsg1 ;
@@ -1105,8 +1106,9 @@ oper
prtr=com + "тя"; prtr=com + "тя";
ptr=com + "тев"; ptr=com + "тев";
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
makeVerbBezhat6 : Aspect -> Transitivity -> Str -> VerbForms makeVerbBezhat6 : Aspect -> Transitivity -> Str -> VerbForms
@@ -1135,8 +1137,9 @@ oper
prtr=com + "жа"; -- * prtr=com + "жа"; -- *
ptr=com + "жав"; ptr=com + "жав";
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
makeVerbEst : Aspect -> Transitivity -> Str -> VerbForms makeVerbEst : Aspect -> Transitivity -> Str -> VerbForms
@@ -1165,8 +1168,9 @@ oper
prtr=com + "дя"; prtr=com + "дя";
ptr=com + "в"; ptr=com + "в";
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
makeVerbDat6 : Aspect -> Transitivity -> Str -> VerbForms makeVerbDat6 : Aspect -> Transitivity -> Str -> VerbForms
@@ -1194,8 +1198,9 @@ oper
prtr=com + "вая"; prtr=com + "вая";
ptr=com + "в"; ptr=com + "в";
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
makeVerbByt6 : Aspect -> Transitivity -> Str -> VerbForms makeVerbByt6 : Aspect -> Transitivity -> Str -> VerbForms
@@ -1224,8 +1229,9 @@ oper
prtr=com + "ывая"; prtr=com + "ывая";
ptr=com + "ыв"; ptr=com + "ыв";
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
makeVerbJti: Aspect -> Transitivity -> Str -> Str -> VerbForms makeVerbJti: Aspect -> Transitivity -> Str -> Str -> VerbForms
@@ -1255,7 +1261,8 @@ oper
prtr=com + "дя"; prtr=com + "дя";
ptr=[]; ptr=[];
asp=asp; asp=asp;
refl=refl; refltran = reflTran refl tran ;
tran=tran -- refl=refl;
-- tran=tran
} ; } ;
} }

View File

@@ -304,7 +304,7 @@ oper
= \a1,link,a2 -> lin A (mkCompoundA a1 link a2) ; = \a1,link,a2 -> lin A (mkCompoundA a1 link a2) ;
mkA : V -> Voice -> Tense -> A mkA : V -> Voice -> Tense -> A
= \v,voice,t -> = \v,voice,t ->
let refl = case v.refl of {Reflexive => "ся" ; _ => ""} in let refl = case v.refltran of {Refl => "ся" ; _ => ""} in
case <voice,t> of { case <voice,t> of {
<Pass,Past|Cond> => lin A ( --# notpresent TODO: check <Pass,Past|Cond> => lin A ( --# notpresent TODO: check
guessAdjectiveForms (v.ppps + "ый") ** { --# notpresent guessAdjectiveForms (v.ppps + "ый") ** { --# notpresent
@@ -487,4 +487,4 @@ oper
Second | SecondA => (Z.sg1StemFromVerb sg1) + "ит" ; Second | SecondA => (Z.sg1StemFromVerb sg1) + "ит" ;
_ => (Z.sg1StemFromVerb sg1) + "ет" _ => (Z.sg1StemFromVerb sg1) + "ет"
} in (guessVerbForms asp Transitive inf sg1 sg3) ** {lock_V=<>} ; } in (guessVerbForms asp Transitive inf sg1 sg3) ** {lock_V=<>} ;
} }

View File

@@ -18,8 +18,9 @@ param
Animacy = Animate | Inanimate ; -- одушевлённый / неодушевлённый Animacy = Animate | Inanimate ; -- одушевлённый / неодушевлённый
Voice = Act | Pass ; -- залог Voice = Act | Pass ; -- залог
Aspect = Imperfective | Perfective ; -- вид / аспект Aspect = Imperfective | Perfective ; -- вид / аспект
Reflexivity = Reflexive | NonReflexive ; -- возвратность Reflexivity = Reflexive | NonReflexive ; -- возвратность -- keep just for the API
Transitivity = Transitive | Intransitive ; -- возвратность 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 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 GenNum = GSg Gender | GPl ; -- The plural never makes a gender distinction
@@ -100,10 +101,18 @@ oper
: Str ; : Str ;
fut : SpecialFuture ; fut : SpecialFuture ;
asp : Aspect ; asp : Aspect ;
refl : Reflexivity ; refltran : ReflTran ;
tran : Transitivity -- refl : Reflexivity ;
} ; -- tran : Transitivity
} ;
ComplementCase : Type = {s : Str ; c : Case ; neggen : Bool ; hasPrep : Bool} ; ComplementCase : Type = {s : Str ; c : Case ; neggen : Bool ; hasPrep : Bool} ;
VerbForms2 : Type = VerbForms ** {c : ComplementCase} ; VerbForms2 : Type = VerbForms ** {c : ComplementCase} ;
VerbForms3 : Type = VerbForms ** {c : ComplementCase ; c2 : ComplementCase} ; VerbForms3 : Type = VerbForms ** {c : ComplementCase ; c2 : ComplementCase} ;
reflTran : Reflexivity -> Transitivity -> ReflTran = \r,t ->
case <r,t> of {
<Reflexive,_> => Refl ;
<_,Transitive> => Trans ;
<_,Intransitive> => Intrans
} ;
} }

View File

@@ -620,26 +620,25 @@ oper
guessVerbForms Imperfective Transitive inf (stem+"ю") (stem+"ет") ; guessVerbForms Imperfective Transitive inf (stem+"ю") (stem+"ет") ;
passivateNonReflexive : VerbForms -> VerbForms passivateNonReflexive : VerbForms -> VerbForms
= \vf -> vf ** {refl=Reflexive} ; = \vf -> vf ** {refltran=Refl} ;
passivate : VerbForms -> VerbForms passivate : VerbForms -> VerbForms
= \vf -> = \vf ->
case vf.refl of { case vf.refltran of {
Reflexive => vf ; Refl => vf ;
NonReflexive => passivateNonReflexive vf _ => passivateNonReflexive vf
} ; } ;
shortPastPassPart : VerbForms -> GenNum -> Str shortPastPassPart : VerbForms -> GenNum -> Str
= \vf,gn -> = \vf,gn ->
case vf.tran of { case vf.refltran of {
Intransitive => variants {} ; Trans => case <vf.fut,gn> of {
Transitive => case <vf.fut,gn> of {
<NormalFuture,GSg Masc> => vf.pppss ; <NormalFuture,GSg Masc> => vf.pppss ;
<NormalFuture,GSg Fem> => vf.pppss ++ BIND ++ "а" ; <NormalFuture,GSg Fem> => vf.pppss ++ BIND ++ "а" ;
<NormalFuture,GSg Neut> => vf.pppss ++ BIND ++ "о" ; <NormalFuture,GSg Neut> => vf.pppss ++ BIND ++ "о" ;
<NormalFuture,GPl> => vf.pppss ++ BIND ++ "ы" ; <NormalFuture,GPl> => vf.pppss ++ BIND ++ "ы" ;
_ => vf.pppss _ => vf.pppss } ;
} _ => variants {}
} ; } ;
copula : VerbForms copula : VerbForms
@@ -663,8 +662,9 @@ oper
prtr="будучи"; prtr="будучи";
ptr="быв"; ptr="быв";
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Intrans ;
tran=Intransitive -- refl=NonReflexive;
-- tran=Intransitive
} ; } ;
-- normal copula require Nom in Pres. So this is Ins-friendly substitute. -- normal copula require Nom in Pres. So this is Ins-friendly substitute.
@@ -729,8 +729,9 @@ oper
prtr="могши"; --* prtr="могши"; --*
ptr="могши"; ptr="могши";
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Intrans ;
tran=Intransitive -- refl=NonReflexive;
-- tran=Intransitive
} ; } ;
want : VerbForms want : VerbForms
@@ -754,8 +755,9 @@ oper
prtr="хотя"; prtr="хотя";
ptr="хотев"; ptr="хотев";
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Trans ;
tran=Transitive -- refl=NonReflexive;
-- tran=Transitive
} ; } ;
nullVerb : VerbForms nullVerb : VerbForms
@@ -768,8 +770,9 @@ oper
prtr, ptr =""; prtr, ptr ="";
fut=NullFuture ; fut=NullFuture ;
asp=Imperfective; asp=Imperfective;
refl=NonReflexive; refltran = Trans ;
tran=Transitive -- refl=NonReflexive;
-- tran=Transitive
} ; } ;
verbPastAgree : VerbForms -> Agr -> Str -> Str verbPastAgree : VerbForms -> Agr -> Str -> Str
@@ -781,13 +784,13 @@ oper
} ; } ;
verbReflAfterConsonant : VerbForms -> Str verbReflAfterConsonant : VerbForms -> Str
= \vf -> case vf.refl of {Reflexive => BIND ++ "ся" ; NonReflexive => ""} ; = \vf -> case vf.refltran of {Refl => BIND ++ "ся" ; _ => ""} ;
verbRefl : VerbForms -> Str verbRefl : VerbForms -> Str
= \vf -> case vf.refl of {Reflexive => BIND ++ "сь" ; NonReflexive => ""} ; = \vf -> case vf.refltran of {Refl => BIND ++ "сь" ; _ => ""} ;
verbInf : VerbForms -> Str 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 verbPresAgree : VerbForms -> Agr -> Str
= \vf,a -> case a of { = \vf,a -> case a of {
@@ -835,7 +838,7 @@ oper
= \vf,a -> case a of { = \vf,a -> case a of {
Ag (GSg Neut) (P1|P2|P3) => <"", (verbInf vf)> ; -- reused neuter for immediate imperative Ag (GSg Neut) (P1|P2|P3) => <"", (verbInf vf)> ; -- reused neuter for immediate imperative
Ag (GSg _) P1 => <"", (verbInf vf)> ; -- ? 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 (GSg x) P3 => <"пусть", verbFutAgree vf (Ag (GSg x) P3)> ; -- ?
Ag GPl P1 => <"", vf.ipl1 ++ verbReflAfterConsonant vf> ; Ag GPl P1 => <"", vf.ipl1 ++ verbReflAfterConsonant vf> ;
Ag GPl P2 => <"", vf.isg2 ++ BIND ++ "те" ++ (verbRefl 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 ++ "," ++ 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 ++ "," ++ imp ! Ag (GSg Masc) P2 ++ "," ++ imp ! Ag GPl P2 ++ ","
++ v.ptr ++ verbRefl v ++ v.ptr ++ verbRefl v
++ case v.tran of { ++ case v.refltran of {
Transitive => "," ++ ppp ! (GSg Masc) ++ "," ++ ppp ! (GSg Fem) ++ "," ++ ppp ! (GSg Neut) ++ "," ++ ppp ! GPl ; Trans => "," ++ ppp ! (GSg Masc) ++ "," ++ ppp ! (GSg Fem) ++ "," ++ ppp ! (GSg Neut) ++ "," ++ ppp ! GPl ;
_ => "" _ => ""
} ; } ;