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 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 (

View File

@@ -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
} ;
}

View File

@@ -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
} ;
}

View File

@@ -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 <voice,t> of {
<Pass,Past|Cond> => lin A ( --# notpresent TODO: check
guessAdjectiveForms (v.ppps + "ый") ** { --# notpresent

View File

@@ -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 <r,t> of {
<Reflexive,_> => Refl ;
<_,Transitive> => Trans ;
<_,Intransitive> => Intrans
} ;
}

View File

@@ -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 <vf.fut,gn> of {
case vf.refltran of {
Trans => case <vf.fut,gn> of {
<NormalFuture,GSg Masc> => vf.pppss ;
<NormalFuture,GSg Fem> => vf.pppss ++ BIND ++ "а" ;
<NormalFuture,GSg Neut> => vf.pppss ++ BIND ++ "о" ;
<NormalFuture,GPl> => 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 ;
_ => ""
} ;