diff --git a/lib/src/russian/CatRus.gf b/lib/src/russian/CatRus.gf index cf0f76532..f6ee1d358 100644 --- a/lib/src/russian/CatRus.gf +++ b/lib/src/russian/CatRus.gf @@ -58,15 +58,14 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in { -- Gender parameter is due to multiple determiners (Numerals in Russian) -- like "mnogo" -- The determined noun has the case parameter specific for the determiner --- 'q' is for 'quantity', quantity determiners demand genitive for the noun - Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; q: Bool} ; - Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; q: Bool} ; + Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; size: Size} ; + Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; size: Size} ; -- Numeral - Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number} ; - Digits = {s : Str ; n : Number} ; ---- + Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number ; size: Size} ; + Digits = {s : Str ; n : Number ; size: Size} ; ---- -- Structural -- The conjunction has an inherent number, which is used when conjoining diff --git a/lib/src/russian/MorphoRus.gf b/lib/src/russian/MorphoRus.gf index f82c679b5..d3fed20ef 100644 --- a/lib/src/russian/MorphoRus.gf +++ b/lib/src/russian/MorphoRus.gf @@ -346,18 +346,18 @@ Paradigms: let i = iAfter stem in let o = oAfter stem in { s = table { - NF Sg Nom => stem ; - NF Sg Gen => stem+"а" ; - NF Sg Dat => stem+"у" ; - NF Sg Acc => stem ; - NF Sg Inst => stem+o+"м" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+i ; - NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+i ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom _ => stem ; + NF Sg Gen _ => stem+"а" ; + NF Sg Dat _ => stem+"у" ; + NF Sg Acc _ => stem ; + NF Sg Inst _ => stem+o+"м" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+i ; + NF Pl Gen _ => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; + NF Pl Dat _ => stem+"ам" ; + NF Pl Acc _ => stem+i ; + NF Pl Inst _ => stem+"ами" ; + NF Pl (Prepos _) _ => stem+"ах" }; g = Masc; anim = Inanimate }; -- 1. Hard regular neuter inanimate, e.g. pravilo. @@ -367,18 +367,18 @@ Paradigms: oper nRegHardNeut : Str ->CommNoun= \stem -> let o = oAfter stem in { s = table { - NF Sg Nom => stem+o ; - NF Sg Gen => stem+"а" ; - NF Sg Dat => stem+"у" ; - NF Sg Acc => stem+o ; - NF Sg Inst => stem+o+"м" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ; - NF Pl Gen => stem ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+"а" ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom _ => stem+o ; + NF Sg Gen _ => stem+"а" ; + NF Sg Dat _ => stem+"у" ; + NF Sg Acc _ => stem+o ; + NF Sg Inst _ => stem+o+"м" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+case stem of { _+"к" => "и" ; _ => "а" } ; + NF Pl Gen _ => stem ; + NF Pl Dat _ => stem+"ам" ; + NF Pl Acc _ => stem+"а" ; + NF Pl Inst _ => stem+"ами" ; + NF Pl (Prepos _) _ => stem+"ах" }; g = Neut; anim = Inanimate }; -- 1. Hard regular feminine inanimate, e.g. karta. @@ -389,77 +389,77 @@ Paradigms: let i = iAfter stem in let o = oAfter stem in { s = table { - NF Sg Nom => stem+"а" ; - NF Sg Gen => stem+i ; - NF Sg Dat => stem+"е" ; - NF Sg Acc => stem+"у" ; - NF Sg Inst => stem+o+"й" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+i ; - NF Pl Gen => stem ; - NF Pl Dat => stem+"ам" ; - NF Pl Acc => stem+i ; - NF Pl Inst => stem+"ами" ; - NF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom _ => stem+"а" ; + NF Sg Gen _ => stem+i ; + NF Sg Dat _ => stem+"е" ; + NF Sg Acc _ => stem+"у" ; + NF Sg Inst _ => stem+o+"й" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+i ; + NF Pl Gen _ => stem ; + NF Pl Dat _ => stem+"ам" ; + NF Pl Acc _ => stem+i ; + NF Pl Inst _ => stem+"ами" ; + NF Pl (Prepos _) _ => stem+"ах" }; g = Fem; anim = Inanimate }; -- 2. Soft regular masculine inanimate, e.g. vichr' oper nRegSoftMasc : Str ->CommNoun= \stem -> { s = table { - NF Sg Nom => stem+"ь"; - NF Sg Gen => stem+"я" ; - NF Sg Dat => stem+"ю" ; - NF Sg Acc => stem+"ь" ; - NF Sg Inst => stem+"ем" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom _ => stem+"ь"; + NF Sg Gen _ => stem+"я" ; + NF Sg Dat _ => stem+"ю" ; + NF Sg Acc _ => stem+"ь" ; + NF Sg Inst _ => stem+"ем" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+"и" ; + NF Pl Gen _ => stem+"ей" ; + NF Pl Dat _ => stem+"ям" ; + NF Pl Acc _ => stem+"и" ; + NF Pl Inst _ => stem+"ями" ; + NF Pl (Prepos _) _ => stem+"ях" }; g = Masc; anim = Inanimate }; -- 2. Soft regular neuter inanimate, e.g. more oper nRegSoftNeut : Str ->CommNoun= \stem -> { s = table { - NF Sg Nom => stem+"е"; - NF Sg Gen => stem+"я" ; - NF Sg Dat => stem+"ю" ; - NF Sg Acc => stem+"е" ; - NF Sg Inst => stem+"ем" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"я" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"я" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom _ => stem+"е"; + NF Sg Gen _ => stem+"я" ; + NF Sg Dat _ => stem+"ю" ; + NF Sg Acc _ => stem+"е" ; + NF Sg Inst _ => stem+"ем" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+"я" ; + NF Pl Gen _ => stem+"ей" ; + NF Pl Dat _ => stem+"ям" ; + NF Pl Acc _ => stem+"я" ; + NF Pl Inst _ => stem+"ями" ; + NF Pl (Prepos _) _ => stem+"ях" }; g = Neut; anim = Inanimate }; -- 2. Soft regular feminine inanimate, e.g. burya oper nRegSoftFem : Str ->CommNoun= \stem -> { s = table { - NF Sg Nom => stem+"я"; - NF Sg Gen => stem+"и" ; - NF Sg Dat => stem+"е" ; - NF Sg Acc => stem+"ю" ; - NF Sg Inst => stem+"ей" ; - NF Sg (Prepos _) => stem+"е" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ь" ; - NF Pl Dat => stem+"ям" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+"ями" ; - NF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom _ => stem+"я"; + NF Sg Gen _ => stem+"и" ; + NF Sg Dat _ => stem+"е" ; + NF Sg Acc _ => stem+"ю" ; + NF Sg Inst _ => stem+"ей" ; + NF Sg (Prepos _) _ => stem+"е" ; + NF Pl Nom _ => stem+"и" ; + NF Pl Gen _ => stem+"ь" ; + NF Pl Dat _ => stem+"ям" ; + NF Pl Acc _ => stem+"и" ; + NF Pl Inst _ => stem+"ями" ; + NF Pl (Prepos _) _ => stem+"ях" }; g = Fem; anim = Inanimate }; -- 6. Masc ending in -Vй (V = vowel) oper nDecl6Masc : Str ->CommNoun= \stem -> let n = nRegSoftMasc stem in { s = table { - NF Sg (Nom|Acc) => stem+"й"; - NF Pl Gen => stem+"ев" ; + NF Sg (Nom|Acc) _ => stem+"й"; + NF Pl Gen _ => stem+"ев" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -467,7 +467,7 @@ Paradigms: oper nDecl6Neut : Str ->CommNoun= \stem -> let n = nRegSoftNeut stem in { s = table { - NF Pl Gen => stem+"й" ; + NF Pl Gen _ => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -475,7 +475,7 @@ Paradigms: oper nDecl6Fem : Str ->CommNoun= \stem -> let n = nRegSoftFem stem in { s = table { - NF Pl Gen => stem+"й" ; + NF Pl Gen _ => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -483,7 +483,7 @@ Paradigms: oper nDecl7Masc : Str ->CommNoun= \stem -> let n = nDecl6Masc stem in { s = table { - NF Sg (Prepos _) => stem+"и" ; + NF Sg (Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -491,7 +491,7 @@ Paradigms: oper nDecl7Neut : Str ->CommNoun= \stem -> let n = nDecl6Neut stem in { s = table { - NF Sg (Prepos _) => stem+"и" ; + NF Sg (Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -499,7 +499,7 @@ Paradigms: oper nDecl7Fem : Str ->CommNoun= \stem -> let n = nDecl6Fem stem in { s = table { - NF Sg (Dat|Prepos _) => stem+"и" ; + NF Sg (Dat|Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -508,35 +508,35 @@ Paradigms: oper nDecl8 : Str ->CommNoun= \stem -> let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in { s = table { - NF Sg Nom => stem+"ь"; - NF Sg Gen => stem+"и" ; - NF Sg Dat => stem+"и" ; - NF Sg Acc => stem+"ь" ; - NF Sg Inst => stem+"ью" ; - NF Sg (Prepos _) => stem+"и" ; - NF Pl Nom => stem+"и" ; - NF Pl Gen => stem+"ей" ; - NF Pl Dat => stem+a+"м" ; - NF Pl Acc => stem+"и" ; - NF Pl Inst => stem+a+"ми" ; - NF Pl (Prepos _) => stem+a+"х" }; + NF Sg Nom _ => stem+"ь"; + NF Sg Gen _ => stem+"и" ; + NF Sg Dat _ => stem+"и" ; + NF Sg Acc _ => stem+"ь" ; + NF Sg Inst _ => stem+"ью" ; + NF Sg (Prepos _) _ => stem+"и" ; + NF Pl Nom _ => stem+"и" ; + NF Pl Gen _ => stem+"ей" ; + NF Pl Dat _ => stem+a+"м" ; + NF Pl Acc _ => stem+"и" ; + NF Pl Inst _ => stem+a+"ми" ; + NF Pl (Prepos _) _ => stem+a+"х" }; g = Fem; anim = Inanimate }; -- 9. Neut ending in -мя oper nDecl9 : Str ->CommNoun= \stem -> { s = table { - NF Sg Nom => stem+"мя"; - NF Sg Gen => stem+"мени" ; - NF Sg Dat => stem+"мени" ; - NF Sg Acc => stem+"мя" ; - NF Sg Inst => stem+"менем" ; - NF Sg (Prepos _) => stem+"мени" ; - NF Pl Nom => stem+"мена" ; - NF Pl Gen => stem+"мён" ; - NF Pl Dat => stem+"менам" ; - NF Pl Acc => stem+"мена" ; - NF Pl Inst => stem+"менами" ; - NF Pl (Prepos _) => stem+"менах" }; + NF Sg Nom _ => stem+"мя"; + NF Sg Gen _ => stem+"мени" ; + NF Sg Dat _ => stem+"мени" ; + NF Sg Acc _ => stem+"мя" ; + NF Sg Inst _ => stem+"менем" ; + NF Sg (Prepos _) _ => stem+"мени" ; + NF Pl Nom _ => stem+"мена" ; + NF Pl Gen _ => stem+"мён" ; + NF Pl Dat _ => stem+"менам" ; + NF Pl Acc _ => stem+"мена" ; + NF Pl Inst _ => stem+"менами" ; + NF Pl (Prepos _) _ => stem+"менах" }; g = Fem; anim = Inanimate }; -- 10. Masc in -oнoк @@ -551,8 +551,8 @@ Paradigms: oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y -> {s = table { - NF Sg c => x.s!(NF Sg c) ; - NF Pl c => y.s!(NF Pl c) + NF Sg c size => x.s!(NF Sg c size) ; + NF Pl c size => y.s!(NF Pl c size) } ; g = x.g ; anim = y.anim } ; @@ -560,18 +560,18 @@ Paradigms: -- Nouns inflected as adjectives. oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> { s = table { - NF Sg c => a.s!AF c Inanimate (GSg g) ; - NF Pl c => a.s!AF c Inanimate GPl }; + NF Sg c _ => a.s!AF c Inanimate (GSg g) ; + NF Pl c _ => a.s!AF c Inanimate GPl }; g = g; anim = Inanimate } ; -- Makes a noun animate. oper nAnimate : CommNoun -> CommNoun = \n -> { s = table { - NF Sg Acc => case n.g of { - Masc => n.s!(NF Sg Gen); - _ => n.s!(NF Sg Acc) + NF Sg Acc size => case n.g of { + Masc => n.s!(NF Sg Gen size); + _ => n.s!(NF Sg Acc size) }; - NF Pl Acc => n.s!(NF Pl Gen); + NF Pl Acc size => n.s!(NF Pl Gen size); sf => n.s!sf } ; g = n.g ; anim = Animate @@ -582,90 +582,90 @@ oper oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> {s = table - { NF Sg Nom => brat ; - NF Sg Gen => brat+"а" ; - NF Sg Dat => brat+"у" ; - NF Sg Acc => brat +"а"; - NF Sg Inst => brat+"ом" ; - NF Sg (Prepos _) => brat+"е" ; - NF Pl Nom => brat+"ья" ; - NF Pl Gen => brat+"ьев" ; - NF Pl Dat => brat+"ьям" ; - NF Pl Acc => brat +"ьев"; - NF Pl Inst => brat+"ьями" ; - NF Pl (Prepos _) => brat+"ьяах" + { NF Sg Nom _ => brat ; + NF Sg Gen _ => brat+"а" ; + NF Sg Dat _ => brat+"у" ; + NF Sg Acc _ => brat +"а"; + NF Sg Inst _ => brat+"ом" ; + NF Sg (Prepos _) _ => brat+"е" ; + NF Pl Nom _ => brat+"ья" ; + NF Pl Gen _ => brat+"ьев" ; + NF Pl Dat _ => brat+"ьям" ; + NF Pl Acc _ => brat +"ьев"; + NF Pl Inst _ => brat+"ьями" ; + NF Pl (Prepos _) _ => brat+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> {s = table - { NF Sg Nom => brat ; - NF Sg Gen => brat+"а" ; - NF Sg Dat => brat+"у" ; - NF Sg Acc => brat +"а"; - NF Sg Inst => brat+"ом" ; - NF Sg (Prepos _) => brat+"е" ; - NF Pl Nom => brat+"ья" ; - NF Pl Gen => brat+"ьев" ; - NF Pl Dat => brat+"ьям" ; - NF Pl Acc => brat +"ьев"; - NF Pl Inst => brat+"ьями" ; - NF Pl (Prepos _) => brat+"ьяах" + { NF Sg Nom _ => brat ; + NF Sg Gen _ => brat+"а" ; + NF Sg Dat _ => brat+"у" ; + NF Sg Acc _ => brat +"а"; + NF Sg Inst _ => brat+"ом" ; + NF Sg (Prepos _) _ => brat+"е" ; + NF Pl Nom _ => brat+"ья" ; + NF Pl Gen _ => brat+"ьев" ; + NF Pl Dat _ => brat+"ьям" ; + NF Pl Acc _ => brat +"ьев"; + NF Pl Inst _ => brat+"ьями" ; + NF Pl (Prepos _) _ => brat+"ьяах" } ; g = Masc ; anim = Animate } ; oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> { s = table - { NF Sg Nom => derev+"о" ; - NF Sg Gen => derev+"а" ; - NF Sg Dat => derev+"у" ; - NF Sg Acc => derev +"о"; - NF Sg Inst => derev+"ом" ; - NF Sg (Prepos _) => derev+"е" ; - NF Pl Nom => derev+"ья" ; - NF Pl Gen => derev+"ьев" ; - NF Pl Dat => derev+"ьям" ; - NF Pl Acc => derev +"ья" ; - NF Pl Inst => derev+"ьями" ; - NF Pl (Prepos _) => derev+"ьяах" + { NF Sg Nom _ => derev+"о" ; + NF Sg Gen _ => derev+"а" ; + NF Sg Dat _ => derev+"у" ; + NF Sg Acc _ => derev +"о"; + NF Sg Inst _ => derev+"ом" ; + NF Sg (Prepos _) _ => derev+"е" ; + NF Pl Nom _ => derev+"ья" ; + NF Pl Gen _ => derev+"ьев" ; + NF Pl Dat _ => derev+"ьям" ; + NF Pl Acc _ => derev +"ья" ; + NF Pl Inst _ => derev+"ьями" ; + NF Pl (Prepos _) _ => derev+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> { s = table { - NF _ Nom => mnog+"о" ; - NF _ Gen => mnog +"их"; - NF _ Dat => mnog+"им" ; - NF _ Acc => mnog+"о" ; - NF _ Inst => mnog+"ими" ; - NF _ (Prepos _) => mnog+"их" + NF _ Nom _ => mnog+"о" ; + NF _ Gen _ => mnog +"их"; + NF _ Dat _ => mnog+"им" ; + NF _ Acc _ => mnog+"о" ; + NF _ Inst _ => mnog+"ими" ; + NF _ (Prepos _) _ => mnog+"их" } ; g = Neut ; anim = Inanimate } ; oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> { s = table { - NF _ Nom => menshinstv+"а" ; - NF _ Gen => menshinstv; - NF _ Dat => menshinstv+"ам" ; - NF _ Acc => menshinstv+"ва" ; - NF _ Inst => menshinstv+"ами" ; - NF _ (Prepos _) => menshinstv+"вах" + NF _ Nom _ => menshinstv+"а" ; + NF _ Gen _ => menshinstv; + NF _ Dat _ => menshinstv+"ам" ; + NF _ Acc _ => menshinstv+"ва" ; + NF _ Inst _ => menshinstv+"ами" ; + NF _ (Prepos _) _ => menshinstv+"вах" } ; g = Neut ; anim = Inanimate } ; oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> {s = table { - NF _ Nom => bolshinstv+"о" ; - NF _ Gen => bolshinstv+"а" ; - NF _ Dat => bolshinstv+"у" ; - NF _ Acc => bolshinstv+"о" ; - NF _ Inst => bolshinstv+"ом" ; - NF _ (Prepos _) => bolshinstv+"е" + NF _ Nom _ => bolshinstv+"о" ; + NF _ Gen _ => bolshinstv+"а" ; + NF _ Dat _ => bolshinstv+"у" ; + NF _ Acc _ => bolshinstv+"о" ; + NF _ Inst _ => bolshinstv+"ом" ; + NF _ (Prepos _) _ => bolshinstv+"е" } ; g = Neut ; anim = Inanimate } ; @@ -677,18 +677,18 @@ oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> oper eEnd_Decl: Str -> CommNoun = \vs -> { s = table { - NF Sg Nom => vs+"е" ; - NF Sg Gen => vs+"ех" ; - NF Sg Dat => vs+"ем" ; - NF Sg Acc => vs+"ех" ; - NF Sg Inst => vs+"еми" ; - NF Sg (Prepos _) => vs+"ех" ; - NF Pl Nom => vs+"е" ; - NF Pl Gen => vs +"ех"; - NF Pl Dat => vs+"ем" ; - NF Pl Acc => vs+ "ех" ; - NF Pl Inst => vs+"еми" ; - NF Pl (Prepos _) => vs+"ех" + NF Sg Nom _ => vs+"е" ; + NF Sg Gen _ => vs+"ех" ; + NF Sg Dat _ => vs+"ем" ; + NF Sg Acc _ => vs+"ех" ; + NF Sg Inst _ => vs+"еми" ; + NF Sg (Prepos _) _ => vs+"ех" ; + NF Pl Nom _ => vs+"е" ; + NF Pl Gen _ => vs +"ех"; + NF Pl Dat _ => vs+"ем" ; + NF Pl Acc _ => vs+ "ех" ; + NF Pl Inst _ => vs+"еми" ; + NF Pl (Prepos _) _ => vs+"ех" } ; g = Neut ; anim = Inanimate } ; @@ -803,7 +803,7 @@ oper eEnd_Decl: Str -> CommNoun = \vs -> vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; extAdjFromSubst: CommNoun -> Adjective = \ vse -> - {s = \\af => vse.s ! NF (numAF af) (caseAF af) } ; + {s = \\af => vse.s ! NF (numAF af) (caseAF af) plg } ; oper totDet: Adjective = {s = table { diff --git a/lib/src/russian/NounRus.gf b/lib/src/russian/NounRus.gf index 6350faf46..f865a1157 100644 --- a/lib/src/russian/NounRus.gf +++ b/lib/src/russian/NounRus.gf @@ -6,23 +6,31 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { lin DetCN kazhduj okhotnik = { - s = \\c => case kazhduj.q of { - False => + s = \\c => case kazhduj.size of { + nom => case kazhduj.c of { Nom => kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n (extCase c) ; + okhotnik.s ! NF kazhduj.n (extCase c) nom ; _ => kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n kazhduj.c } ; - True => + okhotnik.s ! NF kazhduj.n kazhduj.c nom } ; + sgg => case kazhduj.c of { Nom => kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n Gen ; + okhotnik.s ! NF Sg Gen sgg; _ => kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n Gen } + okhotnik.s ! NF Pl kazhduj.c sgg } ; + plg => + case kazhduj.c of { + Nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Pl Gen plg ; + _ => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Pl kazhduj.c plg } }; n = kazhduj.n ; p = P3 ; @@ -86,8 +94,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { n = num.n ; g = quant.g; c = quant.c; --- q = notB (isNil (num.s ! Nom ! Masc)) - q = False; + size = quant.size } ; DetQuant quant num = { @@ -95,8 +102,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { n = num.n ; g = quant.g; c = quant.c; --- q = notB (isNil (num.s ! Nom ! Masc)) - q = False; + size = num.size } ; {- DetArtOrd quant num ord = { @@ -116,7 +122,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ; MassNP okhotnik = { - s = \\c => okhotnik.s ! NF Sg (extCase c) ; + s = \\c => okhotnik.s ! NF Sg (extCase c) nom ; n = Sg ; p = P3 ; pron = False; @@ -146,11 +152,11 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { anim = okhotnik.anim } ; -} - PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; q = False} ; + PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; size = nom} ; NumCard c = c ; - NumSg = {s = \\_,_,_ => [] ; n = Sg} ; - NumPl = {s = \\_,_,_ => [] ; n = Pl} ; + NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = sgg} ; + NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = plg} ; OrdNumeral numeral = variants {} ; ---- TODO; needed to compile Constructors OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors @@ -158,14 +164,14 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ; NumNumeral n = n ; - NumDigits n = {s = \\_,_,_ => n.s ; n = n.n} ; + NumDigits n = {s = \\_,_,_ => n.s ; n = n.n ; size = n.size } ; - AdNum adn num = {s = \\c,a,n => adn.s ++ num.s!c!a!n ; n = num.n} ; + AdNum adn num = {s = \\c,a,n => adn.s ++ num.s!c!a!n ; n = num.n ; size = num.size} ; OrdSuperl a = {s = a.s!Posit}; - DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; - IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; + DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; size = nom }; + IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; size = nom }; UseN noun = noun ; UseN2 noun = noun ; @@ -180,9 +186,9 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { ComplN2 f x = { s = \\nf => case x.pron of { - True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ; + True => x.s ! (case nf of {NF n c size => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ; False => f.s ! nf ++ f.c2.s ++ - x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) + x.s ! (case nf of {NF n c size => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) }; g = f.g ; anim = f.anim @@ -220,7 +226,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- later, in the chapter on verbs. AdjCN ap cn = { - s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gennum cn.g n)} ++ + s = \\nf => ap.s ! case nf of {NF Sg Gen sgg => AF Nom cn.anim GPl ; + NF n c size => AF c cn.anim (gennum cn.g n)} ++ cn.s ! nf ; g = cn.g ; anim = cn.anim @@ -246,14 +253,14 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { } ; RelCN idea x = { - s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gennum idea.g n)!c!idea.anim} ; + s = \\nf => idea.s ! nf ++ case nf of {NF n c size => x.s ! (gennum idea.g n)!c!idea.anim} ; g = idea.g ; anim = idea.anim } ; ---- AR 17/12/2008 ApposCN cn s = { - s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c => PF c No NonPoss}) ; + s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c size => PF c No NonPoss}) ; g = cn.g ; anim = cn.anim } ; diff --git a/lib/src/russian/NumeralRus.gf b/lib/src/russian/NumeralRus.gf index 14b17b940..67aaf4ba6 100644 --- a/lib/src/russian/NumeralRus.gf +++ b/lib/src/russian/NumeralRus.gf @@ -11,9 +11,9 @@ lincat Digit = {s : DForm => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub10 = {s : Place => DForm => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub100 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub1000 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; -lincat Sub1000000 = {s : Gender => Animacy => Case => Str} ; +lincat Sub1000000 = {s : Gender => Animacy => Case => Str ; size : Size} ; -lin num x = {s = \\ g,a,c => x.s ! g ! a ! c; n = Pl}; ---- n TODO ; Size? AR 18/12/2007 +lin num x = {s = \\ g,a,c => x.s ! g ! a ! c; n = Pl ; size = x.size}; lin n2 = {s = table {unit => \\ g, a, c => @@ -201,7 +201,7 @@ lin pot110 = lin pot111 = {s = \\ p => nadsat "один" ; size = plg} ; --- 11 lin pot1to19 d = - {s = table {_ => d.s ! teen} ; size = plg} ; + {s = table {_ => d.s ! teen} ; size = d.size} ; lin pot0as1 n = {s = table {p => n.s ! p ! unit} ; size = n.size} ; lin pot1 d = @@ -215,11 +215,11 @@ lin pot2 d = lin pot2plus d e = {s = \\ p, g, a, c => d.s ! p ! hund ! g ! a ! c ++ e.s ! indep ! g ! a ! c ; size = e.size} ; lin pot2as3 n = - {s = n.s ! indep} ; + {s = n.s ! indep ; size = n.size} ; lin pot3 n = - {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size} ; + {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ; size = n.size} ; lin pot3plus n m = - {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c} ; + {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c ; size = m.size} ; --- TODO --- raz/odin @@ -230,36 +230,39 @@ lin pot3plus n m = Dig = TDigit ; lin - IDig d = {s = d.s ; n = d.n} ; + IDig d = {s = d.s ; n = d.n ; size = d.size} ; IIDig d i = { s = d.s ++ i.s ; - n = Pl + n = Pl ; + size = i.size } ; - D_0 = mkDig "0" ; - D_1 = mk3Dig "1" "1" Sg ; ---- - D_2 = mkDig "2" ; - D_3 = mkDig "3" ; - D_4 = mkDig "4" ; - D_5 = mkDig "5" ; - D_6 = mkDig "6" ; - D_7 = mkDig "7" ; - D_8 = mkDig "8" ; - D_9 = mkDig "9" ; + D_0 = mk2Dig "0" plg ; + D_1 = mk4Dig "1" "1" Sg nom ; ---- + D_2 = mk2Dig "2" sgg ; + D_3 = mk2Dig "3" sgg ; + D_4 = mk2Dig "4" sgg ; + D_5 = mk2Dig "5" plg ; + D_6 = mk2Dig "6" plg ; + D_7 = mk2Dig "7" plg ; + D_8 = mk2Dig "8" plg ; + D_9 = mk2Dig "9" plg ; oper - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; - mkDig : Str -> TDigit = \c -> mk2Dig c (c + "o") ; + mk3Dig : Str -> Str -> Size -> TDigit = \c,o,size -> mk4Dig c o Pl size ; + mk2Dig : Str -> Size -> TDigit = \c,size -> mk3Dig c (c + "o") size ; - mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + mk4Dig : Str -> Str -> Number -> Size -> TDigit = \c,o,n,size -> { s = c ; ---- gender - n = n + n = n ; + size = size } ; TDigit = { n : Number ; - s : Str + s : Str ; + size : Size } ; } diff --git a/lib/src/russian/ParadigmsRus.gf b/lib/src/russian/ParadigmsRus.gf index 755b55b19..c67ad6be3 100644 --- a/lib/src/russian/ParadigmsRus.gf +++ b/lib/src/russian/ParadigmsRus.gf @@ -285,7 +285,7 @@ foreign = Foreign; -- +++ MG_UR: added +++ mkIndeclinableNoun = \s,g, anim -> { - s = table { NF _ _ => s } ; + s = table { NF _ _ _ => s } ; g = g ; anim = anim } ** {lock_N = <>}; @@ -296,19 +296,19 @@ foreign = Foreign; -- +++ MG_UR: added +++ nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> { s = table { - NF Sg Nom => nomSg ; - NF Sg Gen => genSg ; - NF Sg Dat => datSg ; - NF Sg Acc => accSg ; - NF Sg Inst => instSg ; - NF Sg (Prepos PrepOther) => preposSg ; - NF Sg (Prepos PrepVNa) => prepos2Sg ; - NF Pl Nom => nomPl ; - NF Pl Gen => genPl ; - NF Pl Dat => datPl ; - NF Pl Acc => accPl ; - NF Pl Inst => instPl ; - NF Pl (Prepos _) => preposPl + NF Sg Nom _ => nomSg ; + NF Sg Gen _ => genSg ; + NF Sg Dat _ => datSg ; + NF Sg Acc _ => accSg ; + NF Sg Inst _ => instSg ; + NF Sg (Prepos PrepOther) _ => preposSg ; + NF Sg (Prepos PrepVNa) _ => prepos2Sg ; + NF Pl Nom _ => nomPl ; + NF Pl Gen _ => genPl ; + NF Pl Dat _ => datPl ; + NF Pl Acc _ => accPl ; + NF Pl Inst _ => instPl ; + NF Pl (Prepos _) _ => preposPl } ; g = g ; anim = anim @@ -370,7 +370,7 @@ foreign = Foreign; -- +++ MG_UR: added +++ } ; Pl => mkProperNamePl ivan anim } ** {lock_PN =<>}; - nounPN n = {s=\\c => n.s! NF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; + nounPN n = {s=\\c => n.s! NF Sg c nom; anim=n.anim; g=n.g; lock_PN=<>}; -- On the top level, it is maybe $CN$ that is used rather than $N$, and -- $NP$ rather than $PN$. diff --git a/lib/src/russian/PhraseRus.gf b/lib/src/russian/PhraseRus.gf index f4e313288..e377335c3 100644 --- a/lib/src/russian/PhraseRus.gf +++ b/lib/src/russian/PhraseRus.gf @@ -17,7 +17,7 @@ concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in { UttNP np = {s = np.s ! PF Acc No NonPoss} ; UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ; UttAdv adv = adv ; - UttCN n = {s = n.s ! NF Sg Nom} ; + UttCN n = {s = n.s ! NF Sg Nom nom} ; UttCard n = {s = n.s ! Neut ! Inanimate ! Nom} ; UttAP ap = {s = ap.s ! AF Nom Inanimate (GSg Neut)} ; ---- gennum ? (AR) diff --git a/lib/src/russian/QuestionRus.gf b/lib/src/russian/QuestionRus.gf index 584385962..2af4a2a49 100644 --- a/lib/src/russian/QuestionRus.gf +++ b/lib/src/russian/QuestionRus.gf @@ -36,10 +36,10 @@ concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in { {s = \\pf => case kakoj.c of { Nom => kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n (extCase pf) ; + okhotnik.s ! NF kakoj.n (extCase pf) nom ; _ => kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n kakoj.c }; + okhotnik.s ! NF kakoj.n kakoj.c plg }; n = kakoj.n ; p = P3 ; pron = False; diff --git a/lib/src/russian/ResRus.gf b/lib/src/russian/ResRus.gf index e7d2fbc44..4554f6af2 100644 --- a/lib/src/russian/ResRus.gf +++ b/lib/src/russian/ResRus.gf @@ -31,6 +31,7 @@ param -- Anteriority = Simul | Anter ; ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; -- "naked infinitive" clauses +-- DetForm = NonNum | Few | Many ; -- A number of Russian nouns have common gender. They can -- denote both males and females: "умница" (a clever person), "инженер" (an engineer). @@ -77,7 +78,7 @@ oper -- For the sake of shorter description these parameters are -- combined in the type SubstForm. param - NForm = NF Number Case ; + NForm = NF Number Case Size ; -- Real parameter types (i.e. ones on which words and phrases depend) @@ -124,7 +125,9 @@ oper p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> - {s = \\cas => chelovek.s ! NF n (extCase cas) ; + {s = \\cas => chelovek.s ! NF n (extCase cas) (case n of { + Sg => nom ; + Pl => plg }); n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; anim = chelovek.anim } ; diff --git a/lib/src/russian/StructuralRus.gf b/lib/src/russian/StructuralRus.gf index ef955b1c1..a1bb5f545 100644 --- a/lib/src/russian/StructuralRus.gf +++ b/lib/src/russian/StructuralRus.gf @@ -14,7 +14,7 @@ lin above_Prep = { s = "над" ; c = Inst} ; after_Prep = { s = "после" ; c = Gen }; -- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; - all_Predet = vseDetPl ** { g = PNoGen; c = Nom; q = False} ; + all_Predet = vseDetPl ** { g = PNoGen; c = Nom; size = nom} ; almost_AdA = {s= "почти"} ; almost_AdN = {s= "почти"} ; although_Subj = ss "хотя" ; @@ -33,11 +33,11 @@ lin during_Prep = { s = ["в течение"] ; c = Gen}; either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; -- comma is not visible in GUI! - every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; q = False} ; + every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; size = nom} ; everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; everywhere_Adv = ss "везде" ; - few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; q = True}; + few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; size = plg}; --- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj for_Prep = { s = "для" ; c = Gen }; from_Prep = { s = "от" ; c = Gen }; @@ -54,19 +54,19 @@ lin in_Prep = { s = "в" ; c = Prepos PrepVNa } ; it_Pron = pronOno ; less_CAdv = {s="менее"; p=""} ; - many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; + many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; more_CAdv = {s="более"; p=""} ; - most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; + most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; -- inanimate, Sg: "большинство телефонов безмолству-ет" -- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ; -- animate, Pl: "большинство учащихся хорошо подготовлен-ы" - much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; -- same as previous + much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; -- same as previous must_VV = verbDolzhen ; no_Utt = ss ["Нет"] ; on_Prep = { s = "на" ; c = Prepos PrepVNa }; --- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; --AStaruyj : - only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; q = False }; + only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; size = nom }; or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ; otherwise_PConj = ss "иначе" ; part_Prep = { s = "" ; c = Nom}; -- missing in Russian @@ -76,17 +76,17 @@ lin she_Pron = pronOna ; so_AdA = ss "так"; somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>}); - someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; - somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; q = False} ; + someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ; + somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; size = nom} ; something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; somewhere_Adv = ss "где-нибудь" ; - that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; + that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ; there_Adv = ss "там" ; there7to_Adv = ss "туда" ; there7from_Adv = ss "оттуда" ; therefore_PConj = ss "следовательно" ; they_Pron = pronOni; - this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; + this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ; through_Prep = { s = "через" ; c = Acc }; to_Prep = { s = "к" ; c = Dat }; too_AdA = ss "слишком" ; diff --git a/lib/src/russian/SymbolRus.gf b/lib/src/russian/SymbolRus.gf index 9c507f166..4af44b317 100644 --- a/lib/src/russian/SymbolRus.gf +++ b/lib/src/russian/SymbolRus.gf @@ -9,21 +9,21 @@ lin FloatPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ; NumPN n = {s = table {_ => n.s ! Neut ! Inanimate ! Nom} ; g = Neut; anim = Inanimate } ; - CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) ++ i.s; + CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) nom ++ i.s; n = Sg ; p = P3 ; g = PGen cn.g ; anim = cn.anim ; pron = False } ; - CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) + CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) nom ++ n.s ! cn.g ! cn. anim ! (extCase cas) ; n = Sg ; p = P3 ; g = PGen cn.g ; anim = cn.anim ; pron = False } ; - CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas); + CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas) nom; n = Sg ; p = P3 ; g = PGen cn.g ; anim = cn.anim ; pron = False } ; SymbS sy = sy ; - SymbNum sy = { s = \\_,_,_=>sy.s; n=Pl }; + SymbNum sy = { s = \\_,_,_=>sy.s; n=Pl ; size = plg }; SymbOrd sy = { s = \\af => sy.s } ; diff --git a/lib/src/russian/VerbRus.gf b/lib/src/russian/VerbRus.gf index 916ad30c6..00cf4123c 100644 --- a/lib/src/russian/VerbRus.gf +++ b/lib/src/russian/VerbRus.gf @@ -87,19 +87,19 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { CompCN zloj ={ s= \\clf,gn,p => let num = numGenNum gn ; - zlojsg = zloj.s ! NF Sg Nom ; - zlojpl = zloj.s ! NF Pl Nom + zlojsg = zloj.s ! NF Sg Nom nom ; + zlojpl = zloj.s ! NF Pl Nom plg in case clf of { -- person is ignored ! - ClInfinit => "быть" ++ zloj.s ! NF Sg Inst ; + ClInfinit => "быть" ++ zloj.s ! NF Sg Inst nom ; ClImper => case gn of - { (GSg _) => "будь" ++ zloj.s ! NF Sg Inst ; - GPl => "будьте" ++ zloj.s ! NF Pl Inst + { (GSg _) => "будь" ++ zloj.s ! NF Sg Inst plg ; + GPl => "будьте" ++ zloj.s ! NF Pl Inst plg }; -- infinitive does not save GenNum, -- but indicative does for the sake of adjectival predication ! - ClIndic Present _ => zloj.s ! NF num Nom ; + ClIndic Present _ => zloj.s ! NF num Nom nom ; ClIndic PastRus _ => case gn of { (GSg Fem) => "была" ++ zlojsg ; (GSg Masc) => "был" ++ zlojsg ;