diff --git a/next-lib/src/bulgarian/DiffBul.gf b/next-lib/src/bulgarian/DiffBul.gf index 6d94154a5..55cf8c963 100644 --- a/next-lib/src/bulgarian/DiffBul.gf +++ b/next-lib/src/bulgarian/DiffBul.gf @@ -12,4 +12,10 @@ instance DiffBul of DiffSlavic = open CommonSlavic, Prelude in { | NFVocative ; + oper + Agr = {gn : GenNum ; p : Person} ; + + agrP3 : GenNum -> Agr = \gn -> + {gn = gn; p = P3} ; + } \ No newline at end of file diff --git a/next-lib/src/bulgarian/ResBul.gf b/next-lib/src/bulgarian/ResBul.gf index 263a8dbb2..bb92432e8 100644 --- a/next-lib/src/bulgarian/ResBul.gf +++ b/next-lib/src/bulgarian/ResBul.gf @@ -22,13 +22,6 @@ instance ResBul of ResSlavic = ParamX, DiffBul, CommonSlavic ** open Prelude in param Role = RSubj | RObj Case | RVoc ; - GenNum = GSg Gender | GPl ; - --- Agreement of $NP$ is a record. We'll add $Gender$ later. - - oper - Agr = {gn : GenNum ; p : Person} ; - param -- The plural never makes a gender distinction. @@ -87,9 +80,6 @@ instance ResBul of ResSlavic = ParamX, DiffBul, CommonSlavic ** open Prelude in --2 Transformations between parameter types oper - agrP3 : GenNum -> Agr = \gn -> - {gn = gn; p = P3} ; - conjGenNum : GenNum -> GenNum -> GenNum = \a,b -> case of { => GSg g ; @@ -101,18 +91,6 @@ instance ResBul of ResSlavic = ParamX, DiffBul, CommonSlavic ** open Prelude in p = conjPerson a.p b.p } ; - gennum : Gender -> Number -> GenNum = \g,n -> - case n of { - Sg => GSg g ; - Pl => GPl - } ; - - numGenNum : GenNum -> Number = \gn -> - case gn of { - GSg _ => Sg ; - GPl => Pl - } ; - aform : GenNum -> Species -> Role -> AForm = \gn,spec,role -> case gn of { GSg g => case of { diff --git a/next-lib/src/russian/CatRus.gf b/next-lib/src/russian/CatRus.gf index 317921d4a..ea0050f7e 100644 --- a/next-lib/src/russian/CatRus.gf +++ b/next-lib/src/russian/CatRus.gf @@ -22,8 +22,7 @@ concrete CatRus of Cat = CommonX ** CatSlavic with (ResSlavic = ResRus) ** open -- Question QCl = {s :Polarity => ClForm => QForm => Str}; - IP = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; anim : Animacy ; pron: Bool} ; + IP = {s : PronForm => Str; a : Agr; anim : Animacy} ; IComp = {s : Str} ; IDet = Adjective ** {n: Number; g: PronGen; c: Case} ; IQuant = {s : Number => AdjForm => Str; g: PronGen; c: Case} ; -- AR 16/6/2008 @@ -44,10 +43,8 @@ concrete CatRus of Cat = CommonX ** CatSlavic with (ResSlavic = ResRus) ** open -- Noun - NP = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; anim : Animacy ; pron: Bool} ; - Pron = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; pron: Bool} ; + NP = {s : PronForm => Str; a : Agr; anim : Animacy} ; + Pron = {s : PronForm => Str; a : Agr} ; -- Determiners (only determinative pronouns -- (or even indefinite numerals: "много" (many)) in Russian) are inflected diff --git a/next-lib/src/russian/ConjunctionRus.gf b/next-lib/src/russian/ConjunctionRus.gf index 25423b2bb..0377fe36c 100644 --- a/next-lib/src/russian/ConjunctionRus.gf +++ b/next-lib/src/russian/ConjunctionRus.gf @@ -11,11 +11,13 @@ concrete ConjunctionRus of Conjunction = ConjAdv = conjunctDistrSS ; - ConjNP c xs = - conjunctDistrTable PronForm c xs ** {n = conjNumber c.n xs.n ; - p = xs.p ; pron = xs.pron ; anim = xs.anim ; - g = xs.g } ; - + ConjNP c xs = conjunctDistrTable PronForm c xs ** { + a = {n = conjNumber c.n xs.a.n; + p = xs.a.p; + g = xs.a.g + }; + anim = xs.anim + } ; ConjAP c xs = conjunctDistrTable AdjForm c xs ** {p = xs.p} ; @@ -27,20 +29,26 @@ concrete ConjunctionRus of Conjunction = ConsAdv = consrSS comma ; - ConsNP x xs = - consTable PronForm comma xs x ** - {n = conjNumber xs.n x.n ; g = conjPGender x.g xs.g ; - anim = conjAnim x.anim xs.anim ; - p = conjPerson xs.p x.p; pron = conjPron xs.pron x.pron} ; + ConsNP x xs = consTable PronForm comma xs x ** { + a = {n = conjNumber xs.a.n x.a.n; + g = conjPGender x.a.g xs.a.g; + p = conjPerson xs.a.p x.a.p + }; + anim = conjAnim x.anim xs.anim + } ; ConsAP x xs = consTable AdjForm comma xs x ** {p = andB xs.p x.p} ; BaseAP x y = twoTable AdjForm x y ** {p = andB x.p y.p} ; - BaseNP x y = twoTable PronForm x y ** {n = conjNumber x.n y.n ; - g = conjPGender x.g y.g ; p = conjPerson x.p y.p ; - pron = conjPron x.pron y.pron ; anim = conjAnim x.anim y.anim } ; + BaseNP x y = twoTable PronForm x y ** { + a = {n = conjNumber x.a.n y.a.n; + g = conjPGender x.a.g y.a.g; + p = conjPerson x.a.p y.a.p + }; + anim = conjAnim x.anim y.anim + } ; @@ -50,8 +58,7 @@ concrete ConjunctionRus of Conjunction = [Adv] = {s1,s2 : Str} ; -- The structure is the same as for sentences. The result is either always plural -- or plural if any of the components is, depending on the conjunction. - [NP] = { s1,s2 : PronForm => Str ; g: PronGen ; - anim : Animacy ; n : Number ; p : Person ; pron : Bool } ; + [NP] = {s1,s2 : PronForm => Str; a : Agr; anim : Animacy} ; -- The structure is the same as for sentences. The result is a prefix adjective -- if and only if all elements are prefix. [AP] = {s1,s2 : AdjForm => Str ; p : Bool} ; @@ -76,14 +83,6 @@ oper -- conjPerson : Person -> Person -> Person = \_,p -> -- p ; --- For pron, we let the latter argument win - "Маша или моя мама" (Nominative case) --- but - "моей или Машина мама" (Genetive case) both corresponds to --- "Masha's or my mother"), which is actually not exactly correct, since --- different cases should be used - "Машина или моя мама". - - conjPron : Bool -> Bool -> Bool = \_,p -> - p ; - -- For gender in a similar manner as for person: -- Needed for adjective predicates like: -- "Маша или Оля - красивая", "Антон или Олег - красивый", diff --git a/next-lib/src/russian/DiffRus.gf b/next-lib/src/russian/DiffRus.gf index a29690e86..a1d2dafff 100644 --- a/next-lib/src/russian/DiffRus.gf +++ b/next-lib/src/russian/DiffRus.gf @@ -6,4 +6,12 @@ instance DiffRus of DiffSlavic = open CommonSlavic, Prelude in { NForm = NF Number Case ; + PronGen = PGen Gender | PNoGen ; + + oper + Agr = {n : Number; p : Person; g : PronGen} ; + + agrP3 : Number -> PronGen -> Agr = \n,g -> + {n = n; p = P3; g = g} ; + } \ No newline at end of file diff --git a/next-lib/src/russian/IdiomRus.gf b/next-lib/src/russian/IdiomRus.gf index d2db6c33c..a398e54ad 100644 --- a/next-lib/src/russian/IdiomRus.gf +++ b/next-lib/src/russian/IdiomRus.gf @@ -7,9 +7,9 @@ concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus, MorphoRus in { lin ExistNP = \bar -> {s =\\b,clf => case b of - {Pos => verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3) + {Pos => verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.a.g) Sg P3) ++ bar.s ! PF Nom No NonPoss; - Neg => "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.g) Sg P3) + Neg => "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen bar.a.g) Sg P3) ++ bar.s ! PF Nom No NonPoss } } ; @@ -17,8 +17,8 @@ concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus, MorphoRus in { ExistIP Kto = let { kto = Kto.s ! (PF Nom No NonPoss) } in {s = \\b,clf,_ => case b of - {Pos => kto ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.g) Sg P3) ; - Neg => kto ++ "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.g) Sg P3) + {Pos => kto ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.a.g) Sg P3) ; + Neg => kto ++ "не" ++ verbSuchestvovat.s ! (getActVerbForm clf (pgen2gen Kto.a.g) Sg P3) } } ; @@ -29,16 +29,16 @@ concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus, MorphoRus in { CleftNP np rs = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>"не"}; - gn = case np.n of {Pl => APl; _=> ASg (pgen2gen np.g)} + gn = case np.a.n of {Pl => GPl; _=> GSg (pgen2gen np.a.g)} in "это" ++ ne ++ np.s ! (PF Nom No NonPoss) ++ rs.s ! gn !Nom!Animate }; - ImpPl1 vp = {s= "давайте" ++ vp.s! (ClIndic Future Simul)! APl ! P1}; + ImpPl1 vp = {s= "давайте" ++ vp.s! (ClIndic Future Simul)! GPl ! P1}; ImpersCl vp = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>"не"} in - ne ++ vp.s! clf! (ASg Neut) ! P3 }; + ne ++ vp.s! clf! (GSg Neut) ! P3 }; -- No direct correspondance in Russian. Usually expressed by infinitive: -- "Если очень захотеть, можно в космос улететь" @@ -50,7 +50,7 @@ concrete IdiomRus of Idiom = CatRus ** open Prelude, ResRus, MorphoRus in { GenericCl vp = {s= \\ b, clf => let ne= case b of {Pos =>[]; Neg =>"не"} in - "ты" ++ ne ++ vp.s! clf! (ASg Masc) ! P2 }; + "ты" ++ ne ++ vp.s! clf! (GSg Masc) ! P2 }; ProgrVP vp = vp ; diff --git a/next-lib/src/russian/MorphoRus.gf b/next-lib/src/russian/MorphoRus.gf index cd019d346..0c844e428 100644 --- a/next-lib/src/russian/MorphoRus.gf +++ b/next-lib/src/russian/MorphoRus.gf @@ -40,31 +40,31 @@ oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun = { s = table { PF c _ NonPoss => nonPoss.s!c ; PF c _ (Poss gn) => case of { - => mo + "ё" ; - => mo + "й" ; - => mo + "его" ; - => mo + "ему" ; - => mo + "его" ; - => mo + "им" ; - => mo + "ём" ; + => mo + "ё" ; + => mo + "й" ; + => mo + "его" ; + => mo + "ему" ; + => mo + "его" ; + => mo + "им" ; + => mo + "ём" ; - => mo + "я" ; - => mo + "ей" ; - => mo + "ей" ; - => mo + "ю" ; - => mo + "ей" ; - => mo + "ей" ; + => mo + "я" ; + => mo + "ей" ; + => mo + "ей" ; + => mo + "ю" ; + => mo + "ей" ; + => mo + "ей" ; - => mo + "и" ; - => mo + "их" ; - => mo + "им" ; - => mo + "их" ; - => mo + "им" ; - => mo + "их" + => mo + "и" ; + => mo + "их" ; + => mo + "им" ; + => mo + "их" ; + => mo + "им" ; + => mo + "их" } } ; - g = PNoGen ; n = Sg ; p = pers ; pron = True + a = {g = PNoGen; n = Sg; p = pers}; } ; oper pronNAfterPrep : Pronoun -> Pronoun = \p -> @@ -73,7 +73,7 @@ oper pronNAfterPrep : Pronoun -> Pronoun = \p -> x@(("е"|"ё"|"и")+_) => "н"+x; x => x }; pf => p.s!pf }; - g = p.g ; n = p.n ; p = p.p ; pron = p.pron + a = p.a; } ; oper pronOn : Pronoun = pronNAfterPrep @@ -85,7 +85,7 @@ oper pronOn : Pronoun = pronNAfterPrep PF Inst _ _ => "им" ; PF (Prepos _) _ _ => "ём" } ; - g = PGen Masc ; n = Sg ; p = P3 ; pron = True + a = agrP3 Sg (PGen Masc) } ; oper pronOna : Pronoun = pronNAfterPrep @@ -95,7 +95,7 @@ oper pronOna : Pronoun = pronNAfterPrep PF (Gen|Acc) _ _ => "её" ; PF (Dat|Inst|Prepos _) _ _ => "ей" } ; - g = PGen Fem ; n = Sg ; p = P3 ; pron = True + a = agrP3 Sg (PGen Fem) } ; oper pronOno: Pronoun = @@ -103,7 +103,7 @@ oper pronOno: Pronoun = PF Nom _ NonPoss => "оно" ; pf => pronOn.s!pf } ; - g = PGen Neut ; n = Sg ; p = P3 ; pron = True + a = agrP3 Sg (PGen Neut) } ; oper pronMuVu : Str -> Str -> Person -> Pronoun = @@ -116,29 +116,29 @@ oper pronMuVu : Str -> Str -> Person -> Pronoun = PF Inst _ NonPoss => na + "ми" ; PF (Prepos _) _ NonPoss => na + "с" ; - PF Nom _ (Poss (ASg Masc)) => na + "ш" ; - PF Nom _ (Poss (ASg Neut)) => na + "ше" ; - PF Gen _ (Poss (ASg (Masc | Neut))) => na + "шего" ; - PF Dat _ (Poss (ASg (Masc | Neut))) => na + "шему" ; - PF Acc _ (Poss (ASg (Masc | Neut))) => na + "шего" ; - PF Inst _ (Poss (ASg (Masc | Neut))) => na + "шим" ; - PF (Prepos _) _ (Poss (ASg (Masc | Neut))) => na + "шем" ; + PF Nom _ (Poss (GSg Masc)) => na + "ш" ; + PF Nom _ (Poss (GSg Neut)) => na + "ше" ; + PF Gen _ (Poss (GSg (Masc | Neut))) => na + "шего" ; + PF Dat _ (Poss (GSg (Masc | Neut))) => na + "шему" ; + PF Acc _ (Poss (GSg (Masc | Neut))) => na + "шего" ; + PF Inst _ (Poss (GSg (Masc | Neut))) => na + "шим" ; + PF (Prepos _) _ (Poss (GSg (Masc | Neut))) => na + "шем" ; - PF Nom _ (Poss (ASg Fem)) => na + "ша" ; - PF Gen _ (Poss (ASg Fem)) => na + "шей" ; - PF Dat _ (Poss (ASg Fem)) => na + "шей" ; - PF Acc _ (Poss (ASg Fem)) => na + "шу" ; - PF Inst _ (Poss (ASg Fem)) => na + "шею" ; - PF (Prepos _) _ (Poss (ASg Fem)) => na + "шей" ; + PF Nom _ (Poss (GSg Fem)) => na + "ша" ; + PF Gen _ (Poss (GSg Fem)) => na + "шей" ; + PF Dat _ (Poss (GSg Fem)) => na + "шей" ; + PF Acc _ (Poss (GSg Fem)) => na + "шу" ; + PF Inst _ (Poss (GSg Fem)) => na + "шею" ; + PF (Prepos _) _ (Poss (GSg Fem)) => na + "шей" ; - PF Nom _ (Poss APl) => na + "ши" ; - PF Gen _ (Poss APl) => na + "ших" ; - PF Dat _ (Poss APl) => na + "шим" ; - PF Acc _ (Poss APl) => na + "ших" ; - PF Inst _ (Poss APl) => na + "шими" ; - PF (Prepos _) _ (Poss APl) => na + "ших" + PF Nom _ (Poss GPl) => na + "ши" ; + PF Gen _ (Poss GPl) => na + "ших" ; + PF Dat _ (Poss GPl) => na + "шим" ; + PF Acc _ (Poss GPl) => na + "ших" ; + PF Inst _ (Poss GPl) => na + "шими" ; + PF (Prepos _) _ (Poss GPl) => na + "ших" }; - g = PNoGen ; n = Pl ; p = pers ; pron = True + a = {g = PNoGen; n = Pl; p = pers} } ; oper pronMu: Pronoun = pronMuVu "мы" "на" P1; @@ -153,7 +153,7 @@ oper pronOni: Pronoun = pronNAfterPrep PF (Gen|Acc|Prepos _) _ _ => "их" ; PF Inst _ _ => "ими" } ; - g = PNoGen ; n = Pl ; p = P3 ; pron = True + a = agrP3 Pl PNoGen } ; oper pronKto: Pronoun = @@ -165,10 +165,7 @@ oper pronKto: Pronoun = PF Inst _ _ => "кем" ; PF (Prepos _) _ _ => "ком" } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False + a = agrP3 Sg (PGen Masc) } ; oper pronChto: Pronoun = @@ -180,18 +177,12 @@ oper pronChto: Pronoun = PF Inst _ _ => "чем" ; PF (Prepos _) _ _ => "чём" } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False + a = agrP3 Sg (PGen Masc) } ; oper pron_add_to : Pronoun -> Pronoun = \p -> { s = \\pf => (p.s!pf) + "-то" ; - g = p.g ; - n = p.n ; - p = p.p ; - pron = p.pron + a = p.a } ; oper pronKtoTo : Pronoun = pron_add_to pronKto ; @@ -207,11 +198,8 @@ oper pronEti: Pronoun = PF Inst _ _ => "этими" ; PF (Prepos _) _ _ => "этих" } ; - n = Pl; - p = P3; - g= PGen Fem ; - anim = Animate ; - pron = False + a = agrP3 Pl (PGen Fem) ; + anim = Animate } ; oper pronTe: Pronoun = @@ -223,11 +211,8 @@ oper pronTe: Pronoun = PF Inst _ _ => "теми" ; PF (Prepos _) _ _ => "тех" } ; - n = Pl; - p = P3; - g=PGen Fem ; - anim = Animate ; - pron = False + a = agrP3 Pl (PGen Fem) ; + anim = Animate } ; @@ -242,8 +227,7 @@ oper pronTe: Pronoun = -- } ; -- g = PGen Masc; -- n = Sg ; --- p = P3 ; --- pron = False +-- p = P3 -- } ; -- --oper pronNichto: Pronoun = @@ -257,8 +241,7 @@ oper pronTe: Pronoun = -- } ; -- g = PGen Masc; -- n = Sg ; --- p = P3 ; --- pron = False +-- p = P3 -- } ; -- @@ -271,10 +254,7 @@ oper pronVseInanimate: Pronoun = PF Inst _ _ => "всем" ; PF (Prepos _) _ _ => "всём" } ; - g = PGen Neut; - n = Sg ; - p = P3 ; - pron = False + a = agrP3 Sg (PGen Neut) } ; @@ -560,8 +540,8 @@ Paradigms: -- Nouns inflected as adjectives. oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> { s = table { - NF Sg c => a.s!AF c Inanimate (ASg g) ; - NF Pl c => a.s!AF c Inanimate APl }; + 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. @@ -734,66 +714,66 @@ oper eEnd_Decl: Str -> CommNoun = \vs -> True => "о" ; False => oAfter stem } in { s = table { - AF Nom _ (ASg Masc) => stem + case endStress of { + AF Nom _ (GSg Masc) => stem + case endStress of { True => "ой"; False => iAfter stem + "й" } ; - AF Nom _ (ASg Neut) => stem + o+"е"; - AF Gen _ (ASg (Masc|Neut)) => stem + o+"го"; - AF Dat _ (ASg (Masc|Neut)) => stem + o+"му"; - AF Acc Inanimate (ASg Masc) => stem + i+"й"; - AF Acc Animate (ASg Masc) => stem + o+"го"; - AF Acc _ (ASg Neut) => stem + o+"е"; - AF Inst _ (ASg (Masc|Neut)) => stem + i+"м"; - AF (Prepos _) _ (ASg (Masc|Neut)) => stem + o+"м"; + AF Nom _ (GSg Neut) => stem + o+"е"; + AF Gen _ (GSg (Masc|Neut)) => stem + o+"го"; + AF Dat _ (GSg (Masc|Neut)) => stem + o+"му"; + AF Acc Inanimate (GSg Masc) => stem + i+"й"; + AF Acc Animate (GSg Masc) => stem + o+"го"; + AF Acc _ (GSg Neut) => stem + o+"е"; + AF Inst _ (GSg (Masc|Neut)) => stem + i+"м"; + AF (Prepos _) _ (GSg (Masc|Neut)) => stem + o+"м"; - AF Nom _ (ASg Fem) => stem + "ая"; - AF Acc _ (ASg Fem) => stem + "ую"; - AF _ _ (ASg Fem) => stem + o+"й"; + AF Nom _ (GSg Fem) => stem + "ая"; + AF Acc _ (GSg Fem) => stem + "ую"; + AF _ _ (GSg Fem) => stem + o+"й"; - AF Nom _ APl => stem + i+"е"; - AF Acc Inanimate APl => stem + i+"е"; - AF Acc Animate APl => stem + i+"х"; - AF Gen _ APl => stem + i+"х"; - AF Inst _ APl => stem + i+"ми"; - AF Dat _ APl => stem + i+"м"; - AF (Prepos _) _ APl => stem + i+"х"; + AF Nom _ GPl => stem + i+"е"; + AF Acc Inanimate GPl => stem + i+"е"; + AF Acc Animate GPl => stem + i+"х"; + AF Gen _ GPl => stem + i+"х"; + AF Inst _ GPl => stem + i+"ми"; + AF Dat _ GPl => stem + i+"м"; + AF (Prepos _) _ GPl => stem + i+"х"; - AFShort (ASg Masc) => stem; - AFShort (ASg Fem) => stem + "а"; - AFShort (ASg Neut) => stem + o ; - AFShort APl => stem + i; + AFShort (GSg Masc) => stem; + AFShort (GSg Fem) => stem + "а"; + AFShort (GSg Neut) => stem + o ; + AFShort GPl => stem + i; AdvF => stem + o } } ; oper aRegSoft : Str -> Adjective = \stem -> { s = table { - AF Nom _ (ASg Masc) => stem + "ий" ; - AF Nom _ (ASg Neut) => stem + "ее"; - AF Gen _ (ASg (Masc|Neut)) => stem + "его"; - AF Dat _ (ASg (Masc|Neut)) => stem + "ему"; - AF Acc Inanimate (ASg Masc) => stem + "ий"; - AF Acc Animate (ASg Masc) => stem + "его"; - AF Acc _ (ASg Neut) => stem + "ее"; - AF Inst _ (ASg (Masc|Neut)) => stem + "им"; - AF (Prepos _) _ (ASg (Masc|Neut)) => stem + "ем"; + AF Nom _ (GSg Masc) => stem + "ий" ; + AF Nom _ (GSg Neut) => stem + "ее"; + AF Gen _ (GSg (Masc|Neut)) => stem + "его"; + AF Dat _ (GSg (Masc|Neut)) => stem + "ему"; + AF Acc Inanimate (GSg Masc) => stem + "ий"; + AF Acc Animate (GSg Masc) => stem + "его"; + AF Acc _ (GSg Neut) => stem + "ее"; + AF Inst _ (GSg (Masc|Neut)) => stem + "им"; + AF (Prepos _) _ (GSg (Masc|Neut)) => stem + "ем"; - AF Nom _ (ASg Fem) => stem + "яя"; - AF Acc _ (ASg Fem) => stem + "юю"; - AF _ _ (ASg Fem) => stem + "ей"; + AF Nom _ (GSg Fem) => stem + "яя"; + AF Acc _ (GSg Fem) => stem + "юю"; + AF _ _ (GSg Fem) => stem + "ей"; - AF Nom _ APl => stem + "ие"; - AF Acc Inanimate APl => stem + "ие"; - AF Acc Animate APl => stem + "их"; - AF Gen _ APl => stem + "их"; - AF Inst _ APl => stem + "ими"; - AF Dat _ APl => stem + "им"; - AF (Prepos _) _ APl => stem + "их"; + AF Nom _ GPl => stem + "ие"; + AF Acc Inanimate GPl => stem + "ие"; + AF Acc Animate GPl => stem + "их"; + AF Gen _ GPl => stem + "их"; + AF Inst _ GPl => stem + "ими"; + AF Dat _ GPl => stem + "им"; + AF (Prepos _) _ GPl => stem + "их"; - AFShort (ASg Masc) => stem; -- FIXME: add e if stem ends in consonant + n - AFShort (ASg Fem) => stem + "я"; - AFShort (ASg Neut) => stem + "е" ; - AFShort APl => stem + "и" ; + AFShort (GSg Masc) => stem; -- FIXME: add e if stem ends in consonant + n + AFShort (GSg Fem) => stem + "я"; + AFShort (GSg Neut) => stem + "е" ; + AFShort GPl => stem + "и" ; AdvF => stem + "е" } } ; @@ -807,176 +787,176 @@ oper eEnd_Decl: Str -> CommNoun = \vs -> oper totDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "тот"; - AF Nom _ (ASg Fem) => "та"; - AF Nom _ (ASg Neut) => "то"; - AF Nom _ APl => "те"; - AF Acc Inanimate (ASg Masc) => "тот"; - AF Acc Animate (ASg Masc) => "того"; - AF Acc _ (ASg Fem) => "ту"; - AF Acc _ (ASg Neut) => "то"; - AF Acc Inanimate APl => "те"; - AF Acc Animate APl => "тех"; - AF Gen _ (ASg Masc) => "того"; - AF Gen _ (ASg Fem) => "той"; - AF Gen _ (ASg Neut) => "того"; - AF Gen _ APl => "тех"; - AF Inst _ (ASg Masc) => "тем"; - AF Inst _ (ASg Fem) => "той"; - AF Inst _ (ASg Neut) => "тем"; - AF Inst _ APl => "теми"; - AF Dat _ (ASg Masc) => "тому"; - AF Dat _ (ASg Fem) => "той"; - AF Dat _ (ASg Neut) => "тому"; - AF Dat _ APl => "тем"; - AF (Prepos _) _ (ASg Masc) => "том"; - AF (Prepos _) _ (ASg Fem) => "той"; - AF (Prepos _) _ (ASg Neut) => "том"; - AF (Prepos _) _ APl => "тех" ; - AFShort (ASg Masc) => "тот"; - AFShort (ASg Fem) => "та"; - AFShort (ASg Neut) => "то"; - AFShort APl => "те"; + AF Nom _ (GSg Masc) => "тот"; + AF Nom _ (GSg Fem) => "та"; + AF Nom _ (GSg Neut) => "то"; + AF Nom _ GPl => "те"; + AF Acc Inanimate (GSg Masc) => "тот"; + AF Acc Animate (GSg Masc) => "того"; + AF Acc _ (GSg Fem) => "ту"; + AF Acc _ (GSg Neut) => "то"; + AF Acc Inanimate GPl => "те"; + AF Acc Animate GPl => "тех"; + AF Gen _ (GSg Masc) => "того"; + AF Gen _ (GSg Fem) => "той"; + AF Gen _ (GSg Neut) => "того"; + AF Gen _ GPl => "тех"; + AF Inst _ (GSg Masc) => "тем"; + AF Inst _ (GSg Fem) => "той"; + AF Inst _ (GSg Neut) => "тем"; + AF Inst _ GPl => "теми"; + AF Dat _ (GSg Masc) => "тому"; + AF Dat _ (GSg Fem) => "той"; + AF Dat _ (GSg Neut) => "тому"; + AF Dat _ GPl => "тем"; + AF (Prepos _) _ (GSg Masc) => "том"; + AF (Prepos _) _ (GSg Fem) => "той"; + AF (Prepos _) _ (GSg Neut) => "том"; + AF (Prepos _) _ GPl => "тех" ; + AFShort (GSg Masc) => "тот"; + AFShort (GSg Fem) => "та"; + AFShort (GSg Neut) => "то"; + AFShort GPl => "те"; AdvF => "то" } } ; oper odinDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "один"; - AF Nom _ (ASg Fem) => "одна"; - AF Nom _ (ASg Neut) => "одно"; - AF Nom _ APl => "одни"; - AF Acc Inanimate (ASg Masc) => "один"; - AF Acc Animate (ASg Masc) => "одного"; - AF Acc _ (ASg Fem) => "одну"; - AF Acc _ (ASg Neut) => "одно"; - AF Acc Inanimate APl => "одни"; - AF Acc Animate APl => "одних"; - AF Gen _ (ASg Masc) => "одного"; - AF Gen _ (ASg Fem) => "одной"; - AF Gen _ (ASg Neut) => "одного"; - AF Gen _ APl => "одних"; - AF Inst _ (ASg Masc) => "одним"; - AF Inst _ (ASg Fem) => "одной"; - AF Inst _ (ASg Neut) => "одним"; - AF Inst _ APl => "одними"; - AF Dat _ (ASg Masc) => "одному"; - AF Dat _ (ASg Fem) => "одной"; - AF Dat _ (ASg Neut) => "одному"; - AF Dat _ APl => "одним"; - AF (Prepos _) _ (ASg Masc) => "одном"; - AF (Prepos _) _ (ASg Fem) => "одной"; - AF (Prepos _) _ (ASg Neut) => "одном"; - AF (Prepos _) _ APl => "одних"; - AFShort (ASg Masc) => "один"; - AFShort (ASg Fem) => "одна"; - AFShort (ASg Neut) => "одно"; - AFShort APl => "одни"; + AF Nom _ (GSg Masc) => "один"; + AF Nom _ (GSg Fem) => "одна"; + AF Nom _ (GSg Neut) => "одно"; + AF Nom _ GPl => "одни"; + AF Acc Inanimate (GSg Masc) => "один"; + AF Acc Animate (GSg Masc) => "одного"; + AF Acc _ (GSg Fem) => "одну"; + AF Acc _ (GSg Neut) => "одно"; + AF Acc Inanimate GPl => "одни"; + AF Acc Animate GPl => "одних"; + AF Gen _ (GSg Masc) => "одного"; + AF Gen _ (GSg Fem) => "одной"; + AF Gen _ (GSg Neut) => "одного"; + AF Gen _ GPl => "одних"; + AF Inst _ (GSg Masc) => "одним"; + AF Inst _ (GSg Fem) => "одной"; + AF Inst _ (GSg Neut) => "одним"; + AF Inst _ GPl => "одними"; + AF Dat _ (GSg Masc) => "одному"; + AF Dat _ (GSg Fem) => "одной"; + AF Dat _ (GSg Neut) => "одному"; + AF Dat _ GPl => "одним"; + AF (Prepos _) _ (GSg Masc) => "одном"; + AF (Prepos _) _ (GSg Fem) => "одной"; + AF (Prepos _) _ (GSg Neut) => "одном"; + AF (Prepos _) _ GPl => "одних"; + AFShort (GSg Masc) => "один"; + AFShort (GSg Fem) => "одна"; + AFShort (GSg Neut) => "одно"; + AFShort GPl => "одни"; AdvF => "одно" } } ; oper etotDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "этот"; - AF Nom _ (ASg Fem) => "эта"; - AF Nom _ (ASg Neut) => "это"; - AF Nom _ APl => "эти"; - AF Acc Inanimate (ASg Masc) => "этот"; - AF Acc Animate (ASg Masc) => "этого"; - AF Acc _ (ASg Fem) => "эту"; - AF Acc _ (ASg Neut) => "это"; - AF Acc Inanimate APl => "эти"; - AF Acc Animate APl => "этих"; - AF Gen _ (ASg Masc) => "этого"; - AF Gen _ (ASg Fem) => "этой"; - AF Gen _ (ASg Neut) => "этого"; - AF Gen _ APl => "этих"; - AF Inst _ (ASg Masc) => "этим"; - AF Inst _ (ASg Fem) => "этой"; - AF Inst _ (ASg Neut) => "этим"; - AF Inst _ APl => "этими"; - AF Dat _ (ASg Masc) => "этому"; - AF Dat _ (ASg Fem) => "этой"; - AF Dat _ (ASg Neut) => "этому"; - AF Dat _ APl => "этим"; - AF (Prepos _) _ (ASg Masc) => "этом"; - AF (Prepos _) _ (ASg Fem) => "этой"; - AF (Prepos _) _ (ASg Neut) => "этом"; - AF (Prepos _) _ APl => "этих"; - AFShort (ASg Masc) => "этот"; - AFShort (ASg Fem) => "эта"; - AFShort (ASg Neut) => "это"; - AFShort APl => "эти"; + AF Nom _ (GSg Masc) => "этот"; + AF Nom _ (GSg Fem) => "эта"; + AF Nom _ (GSg Neut) => "это"; + AF Nom _ GPl => "эти"; + AF Acc Inanimate (GSg Masc) => "этот"; + AF Acc Animate (GSg Masc) => "этого"; + AF Acc _ (GSg Fem) => "эту"; + AF Acc _ (GSg Neut) => "это"; + AF Acc Inanimate GPl => "эти"; + AF Acc Animate GPl => "этих"; + AF Gen _ (GSg Masc) => "этого"; + AF Gen _ (GSg Fem) => "этой"; + AF Gen _ (GSg Neut) => "этого"; + AF Gen _ GPl => "этих"; + AF Inst _ (GSg Masc) => "этим"; + AF Inst _ (GSg Fem) => "этой"; + AF Inst _ (GSg Neut) => "этим"; + AF Inst _ GPl => "этими"; + AF Dat _ (GSg Masc) => "этому"; + AF Dat _ (GSg Fem) => "этой"; + AF Dat _ (GSg Neut) => "этому"; + AF Dat _ GPl => "этим"; + AF (Prepos _) _ (GSg Masc) => "этом"; + AF (Prepos _) _ (GSg Fem) => "этой"; + AF (Prepos _) _ (GSg Neut) => "этом"; + AF (Prepos _) _ GPl => "этих"; + AFShort (GSg Masc) => "этот"; + AFShort (GSg Fem) => "эта"; + AFShort (GSg Neut) => "это"; + AFShort GPl => "эти"; AdvF => "это" } } ; oper vesDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "весь"; - AF Nom _ (ASg Fem) => "вся"; - AF Nom _ (ASg Neut) => "всё"; - AF Nom _ APl => "все"; - AF Acc Animate (ASg Masc) => "весь"; - AF Acc Inanimate (ASg Masc) => "всего"; - AF Acc _ (ASg Fem) => "всю"; - AF Acc _ (ASg Neut) => "всё"; - AF Acc Inanimate APl => "все"; - AF Acc Animate APl => "всех"; - AF Gen _ (ASg Masc) => "всего"; - AF Gen _ (ASg Fem) => "всей"; - AF Gen _ (ASg Neut) => "всего"; - AF Gen _ APl => "всех"; - AF Inst _ (ASg Masc) => "всем"; - AF Inst _ (ASg Fem) => "всей"; - AF Inst _ (ASg Neut) => "всем"; - AF Inst _ APl => "всеми"; - AF Dat _ (ASg Masc) => "ему"; - AF Dat _ (ASg Fem) => "ей"; - AF Dat _ (ASg Neut) => "ему"; - AF Dat _ APl => "всем"; - AF (Prepos _) _ (ASg Masc) => "всём"; - AF (Prepos _) _ (ASg Fem) => "всей"; - AF (Prepos _) _ (ASg Neut) => "всём"; - AF (Prepos _) _ APl => "всех" ; - AFShort (ASg Masc) => "весь"; - AFShort (ASg Fem) => "вся"; - AFShort (ASg Neut) => "всё"; - AFShort APl => "все"; + AF Nom _ (GSg Masc) => "весь"; + AF Nom _ (GSg Fem) => "вся"; + AF Nom _ (GSg Neut) => "всё"; + AF Nom _ GPl => "все"; + AF Acc Animate (GSg Masc) => "весь"; + AF Acc Inanimate (GSg Masc) => "всего"; + AF Acc _ (GSg Fem) => "всю"; + AF Acc _ (GSg Neut) => "всё"; + AF Acc Inanimate GPl => "все"; + AF Acc Animate GPl => "всех"; + AF Gen _ (GSg Masc) => "всего"; + AF Gen _ (GSg Fem) => "всей"; + AF Gen _ (GSg Neut) => "всего"; + AF Gen _ GPl => "всех"; + AF Inst _ (GSg Masc) => "всем"; + AF Inst _ (GSg Fem) => "всей"; + AF Inst _ (GSg Neut) => "всем"; + AF Inst _ GPl => "всеми"; + AF Dat _ (GSg Masc) => "ему"; + AF Dat _ (GSg Fem) => "ей"; + AF Dat _ (GSg Neut) => "ему"; + AF Dat _ GPl => "всем"; + AF (Prepos _) _ (GSg Masc) => "всём"; + AF (Prepos _) _ (GSg Fem) => "всей"; + AF (Prepos _) _ (GSg Neut) => "всём"; + AF (Prepos _) _ GPl => "всех" ; + AFShort (GSg Masc) => "весь"; + AFShort (GSg Fem) => "вся"; + AFShort (GSg Neut) => "всё"; + AFShort GPl => "все"; AdvF => "полностью" } } ; oper uy_j_EndDecl : Str -> Adjective = \s ->{s = table { - AF Nom _ (ASg Masc) => s+ "ый"; - AF Nom _ (ASg Fem) => s + "ая"; - AF Nom _ (ASg Neut) => s + "ое"; - AF Nom _ APl => s + "ые"; - AF Acc Inanimate (ASg Masc) => s + "ый"; - AF Acc Animate (ASg Masc) => s + "ого"; - AF Acc _ (ASg Fem) => s + "ую"; - AF Acc _ (ASg Neut) => s + "ое"; - AF Acc Inanimate APl => s + "ые"; - AF Acc Animate APl => s + "ых"; - AF Gen _ (ASg Masc) => s + "ого"; - AF Gen _ (ASg Fem) => s + "ой"; - AF Gen _ (ASg Neut) => s + "ого"; - AF Gen _ APl => s + "ых"; - AF Inst _ (ASg Masc) => s + "ым"; - AF Inst _ (ASg Fem) => s + "ой"; - AF Inst _ (ASg Neut) => s + "ым"; - AF Inst _ APl => s + "ыми"; - AF Dat _ (ASg Masc) => s + "ому"; - AF Dat _ (ASg Fem) => s + "ой"; - AF Dat _ (ASg Neut) => s + "ому"; - AF Dat _ APl => s + "ым"; - AF (Prepos _) _ (ASg Masc) => s + "ом"; - AF (Prepos _) _ (ASg Fem) => s + "ой"; - AF (Prepos _) _ (ASg Neut) => s + "ом"; - AF (Prepos _) _ APl => s + "ых"; - AFShort (ASg Masc) => s; - AFShort (ASg Fem) => s + "а"; - AFShort (ASg Neut) => s + "о" ; - AFShort APl => s + "ы"; + AF Nom _ (GSg Masc) => s+ "ый"; + AF Nom _ (GSg Fem) => s + "ая"; + AF Nom _ (GSg Neut) => s + "ое"; + AF Nom _ GPl => s + "ые"; + AF Acc Inanimate (GSg Masc) => s + "ый"; + AF Acc Animate (GSg Masc) => s + "ого"; + AF Acc _ (GSg Fem) => s + "ую"; + AF Acc _ (GSg Neut) => s + "ое"; + AF Acc Inanimate GPl => s + "ые"; + AF Acc Animate GPl => s + "ых"; + AF Gen _ (GSg Masc) => s + "ого"; + AF Gen _ (GSg Fem) => s + "ой"; + AF Gen _ (GSg Neut) => s + "ого"; + AF Gen _ GPl => s + "ых"; + AF Inst _ (GSg Masc) => s + "ым"; + AF Inst _ (GSg Fem) => s + "ой"; + AF Inst _ (GSg Neut) => s + "ым"; + AF Inst _ GPl => s + "ыми"; + AF Dat _ (GSg Masc) => s + "ому"; + AF Dat _ (GSg Fem) => s + "ой"; + AF Dat _ (GSg Neut) => s + "ому"; + AF Dat _ GPl => s + "ым"; + AF (Prepos _) _ (GSg Masc) => s + "ом"; + AF (Prepos _) _ (GSg Fem) => s + "ой"; + AF (Prepos _) _ (GSg Neut) => s + "ом"; + AF (Prepos _) _ GPl => s + "ых"; + AFShort (GSg Masc) => s; + AFShort (GSg Fem) => s + "а"; + AFShort (GSg Neut) => s + "о" ; + AFShort GPl => s + "ы"; AdvF => s +"о" } } ; @@ -984,32 +964,32 @@ oper uy_j_EndDecl : Str -> Adjective = \s ->{s = table { {- -- Commented out since I don't know what the short forms are oper ti_j_EndDecl : Str -> Adjective = \s ->{s = table { - AF Nom _ (ASg Masc) => s+"ий"; - AF Nom _ (ASg Fem) => s+"ья"; - AF Nom _ (ASg Neut) => s+"ье"; - AF Nom _ APl => s+"ьи"; - AF Acc Inanimate (ASg Masc) => s+"ий"; - AF Acc Animate (ASg Masc) => s+"ьего"; - AF Acc _ (ASg Fem) => s+"ью"; - AF Acc _ (ASg Neut) => s+"ье"; - AF Acc Inanimate APl => s+"ьи"; - AF Acc Animate APl => s+"ьих"; - AF Gen _ (ASg Masc) => s+"ьего"; - AF Gen _ (ASg Fem) => s+"ьей"; - AF Gen _ (ASg Neut) => s+"ьего"; - AF Gen _ APl => s+"ьих"; - AF Inst _ (ASg Masc) => s+"ьим"; - AF Inst _ (ASg Fem) => s+"ьей"; - AF Inst _ (ASg Neut) => s+"ьим"; - AF Inst _ APl => s+"ьими"; - AF Dat _ (ASg Masc) => s+"ьему"; - AF Dat _ (ASg Fem) => s+"ьей"; - AF Dat _ (ASg Neut) => s+"ьему"; - AF Dat _ APl => s+"ьим"; - AF (Prepos _) _ (ASg Masc) => s+"ьем"; - AF (Prepos _) _ (ASg Fem) => s+"ьей"; - AF (Prepos _) _ (ASg Neut) => s+"ьем"; - AF (Prepos _) _ APl => s+"ьих"; + AF Nom _ (GSg Masc) => s+"ий"; + AF Nom _ (GSg Fem) => s+"ья"; + AF Nom _ (GSg Neut) => s+"ье"; + AF Nom _ GPl => s+"ьи"; + AF Acc Inanimate (GSg Masc) => s+"ий"; + AF Acc Animate (GSg Masc) => s+"ьего"; + AF Acc _ (GSg Fem) => s+"ью"; + AF Acc _ (GSg Neut) => s+"ье"; + AF Acc Inanimate GPl => s+"ьи"; + AF Acc Animate GPl => s+"ьих"; + AF Gen _ (GSg Masc) => s+"ьего"; + AF Gen _ (GSg Fem) => s+"ьей"; + AF Gen _ (GSg Neut) => s+"ьего"; + AF Gen _ GPl => s+"ьих"; + AF Inst _ (GSg Masc) => s+"ьим"; + AF Inst _ (GSg Fem) => s+"ьей"; + AF Inst _ (GSg Neut) => s+"ьим"; + AF Inst _ GPl => s+"ьими"; + AF Dat _ (GSg Masc) => s+"ьему"; + AF Dat _ (GSg Fem) => s+"ьей"; + AF Dat _ (GSg Neut) => s+"ьему"; + AF Dat _ GPl => s+"ьим"; + AF (Prepos _) _ (GSg Masc) => s+"ьем"; + AF (Prepos _) _ (GSg Fem) => s+"ьей"; + AF (Prepos _) _ (GSg Neut) => s+"ьем"; + AF (Prepos _) _ GPl => s+"ьих"; AdvF => s + "ье" } } ; @@ -1094,72 +1074,72 @@ oper PresentVerb : Type = PresentVF => Str ; oper presentConjDolzhen: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF APl _ => del + "ны" ; - PRF (ASg Masc) _ => del + sgP1End ; - PRF (ASg Fem) _ => del + "на" ; - PRF (ASg Neut) _ => del + "но" + PRF GPl _ => del + "ны" ; + PRF (GSg Masc) _ => del + sgP1End ; + PRF (GSg Fem) _ => del + "на" ; + PRF (GSg Neut) _ => del + "но" }; -- +++ MG_UR: changed! +++ oper presentConjMixed: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "чу" - PRF (ASg _) P2 => del+ "чешь" ; - PRF (ASg _) P3 => del+ "чет" ; - PRF APl P1 => del+ "тим" ; - PRF APl P2 => del+ "тите" ; - PRF APl P3 => del+ "тят" + PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "чу" + PRF (GSg _) P2 => del+ "чешь" ; + PRF (GSg _) P3 => del+ "чет" ; + PRF GPl P1 => del+ "тим" ; + PRF GPl P2 => del+ "тите" ; + PRF GPl P3 => del+ "тят" }; -- +++ MG_UR: changed! (+ д) +++ oper presentConj2: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "жу" - PRF (ASg _) P2 => del+ "дишь" ; - PRF (ASg _) P3 => del+ "дит" ; - PRF APl P1 => del+ "дим" ; - PRF APl P2 => del+ "дите" ; - PRF APl P3 => del+ "дят" + PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "жу" + PRF (GSg _) P2 => del+ "дишь" ; + PRF (GSg _) P3 => del+ "дит" ; + PRF GPl P1 => del+ "дим" ; + PRF GPl P2 => del+ "дите" ; + PRF GPl P3 => del+ "дят" }; oper presentConj2a: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "жу" - PRF (ASg _) P2 => del+ "ишь" ; - PRF (ASg _) P3 => del+ "ит" ; - PRF APl P1 => del+ "им" ; - PRF APl P2 => del+ "ите" ; - PRF APl P3 => del+ "ят" + PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "жу" + PRF (GSg _) P2 => del+ "ишь" ; + PRF (GSg _) P3 => del+ "ит" ; + PRF GPl P1 => del+ "им" ; + PRF GPl P2 => del+ "ите" ; + PRF GPl P3 => del+ "ят" }; oper presentConj1E: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ёшь" ; - PRF (ASg _) P3 => del+ "ёт" ; - PRF APl P1 => del+ "ём" ; - PRF APl P2 => del+ "ёте" ; - PRF APl P3 => del+ sgP1End + "т" + PRF (GSg _) P1 => del+ sgP1End ; + PRF (GSg _) P2 => del+ "ёшь" ; + PRF (GSg _) P3 => del+ "ёт" ; + PRF GPl P1 => del+ "ём" ; + PRF GPl P2 => del+ "ёте" ; + PRF GPl P3 => del+ sgP1End + "т" }; oper presentConj1: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ешь" ; - PRF (ASg _) P3 => del+ "ет" ; - PRF APl P1 => del+ "ем" ; - PRF APl P2 => del+ "ете" ; - PRF APl P3 => del+ sgP1End + "т" + PRF (GSg _) P1 => del+ sgP1End ; + PRF (GSg _) P2 => del+ "ешь" ; + PRF (GSg _) P3 => del+ "ет" ; + PRF GPl P1 => del+ "ем" ; + PRF GPl P2 => del+ "ете" ; + PRF GPl P3 => del+ sgP1End + "т" }; oper presentConj1Moch: Str -> Str -> Str -> PresentVerb = \del, sgP1End, altRoot -> table { - PRF (ASg _) P1 => del + sgP1End ; - PRF (ASg _) P2 => altRoot + "ешь" ; - PRF (ASg _) P3 => altRoot + "ет" ; - PRF APl P1 => altRoot + "ем" ; - PRF APl P2 => altRoot + "ете" ; - PRF APl P3 => del+ sgP1End + "т" + PRF (GSg _) P1 => del + sgP1End ; + PRF (GSg _) P2 => altRoot + "ешь" ; + PRF (GSg _) P3 => altRoot + "ет" ; + PRF GPl P1 => altRoot + "ем" ; + PRF GPl P2 => altRoot + "ете" ; + PRF GPl P3 => del+ sgP1End + "т" }; -- "PastVerb" takes care of the past tense conjugation. @@ -1168,29 +1148,29 @@ param PastVF = PSF GenNum ; oper PastVerb : Type = PastVF => Str ; oper pastConj: Str -> PastVerb = \del -> table { - PSF (ASg Masc) => del ; - PSF (ASg Fem) => del +"а" ; - PSF (ASg Neut) => del+"о" ; - PSF APl => del+ "и" + PSF (GSg Masc) => del ; + PSF (GSg Fem) => del +"а" ; + PSF (GSg Neut) => del+"о" ; + PSF GPl => del+ "и" }; oper pastConjDolzhen: Str -> PastVerb = \del -> table { - PSF (ASg Masc) => ["был "] + del + "ен" ; - PSF (ASg Fem) => ["была "] + del + "на" ; - PSF (ASg Neut) => ["было "] + del + "но" ; - PSF APl => ["были "] + del + "ны" + PSF (GSg Masc) => ["был "] + del + "ен" ; + PSF (GSg Fem) => ["была "] + del + "на" ; + PSF (GSg Neut) => ["было "] + del + "но" ; + PSF GPl => ["были "] + del + "ны" }; -- further class added by Magda Gerritsen and Ulrich Real oper presentConjForeign: Str -> Str -> PresentVerb = \del, sgP1End -> table { - PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "ю" - PRF (ASg _) P2 => del+ "ешь" ; - PRF (ASg _) P3 => del+ "ет" ; - PRF APl P1 => del+ "ем" ; - PRF APl P2 => del+ "ете" ; - PRF APl P3 => del+ "ют" + PRF (GSg _) P1 => del+ sgP1End ; -- sgP1End "ю" + PRF (GSg _) P2 => del+ "ешь" ; + PRF (GSg _) P3 => del+ "ет" ; + PRF GPl P1 => del+ "ем" ; + PRF GPl P2 => del+ "ете" ; + PRF GPl P3 => del+ "ют" }; -- "verbDecl" sorts out verbs according to the aspect and voice parameters. @@ -1242,19 +1222,19 @@ oper mkVerbImperfective : Str -> Str -> PresentVerb -> PastVerb -> Verbum = VIMP _ P1 => "давайте" ++ add_sya vox inf ; VIMP Sg P2 => add_sya vox imper ; VIMP Pl P2 => add_sya vox (imper+"те") ; - VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (ASg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF APl P3)) ; + VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P3)) ; + VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы"; - VIND (ASg _) (VPresent p) => add_sya vox (presentFuture ! (PRF (ASg Masc) p)); - VIND APl (VPresent p) => add_sya vox (presentFuture ! (PRF APl p)); - VIND (ASg _) (VFuture P1) => "буду" ++ add_sya vox inf ; - VIND (ASg _) (VFuture P2) => "будешь" ++ add_sya vox inf ; - VIND (ASg _) (VFuture P3) => "будет" ++ add_sya vox inf ; - VIND APl (VFuture P1) => "будем" ++ add_sya vox inf ; - VIND APl (VFuture P2) => "будете" ++ add_sya vox inf ; - VIND APl (VFuture P3) => "будут" ++ add_sya vox inf ; + VIND (GSg _) (VPresent p) => add_sya vox (presentFuture ! (PRF (GSg Masc) p)); + VIND GPl (VPresent p) => add_sya vox (presentFuture ! (PRF GPl p)); + VIND (GSg _) (VFuture P1) => "буду" ++ add_sya vox inf ; + VIND (GSg _) (VFuture P2) => "будешь" ++ add_sya vox inf ; + VIND (GSg _) (VFuture P3) => "будет" ++ add_sya vox inf ; + VIND GPl (VFuture P1) => "будем" ++ add_sya vox inf ; + VIND GPl (VFuture P2) => "будете" ++ add_sya vox inf ; + VIND GPl (VFuture P3) => "будут" ++ add_sya vox inf ; VIND gn VPast => add_sya vox (past ! (PSF gn)) } } ; asp = Imperfective @@ -1264,19 +1244,19 @@ oper mkVerbPerfective: Str -> Str -> PresentVerb -> PastVerb -> Verbum = \inf, imper, presentFuture, past -> { s = table { VFORM vox vf => case vf of { VINF => add_sya vox inf ; - VIMP Sg P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF (ASg Masc) P1)); - VIMP Pl P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF APl P1)); + VIMP Sg P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P1)); + VIMP Pl P1 => "давайте" ++ add_sya vox (presentFuture ! (PRF GPl P1)); VIMP Sg P2 => add_sya vox imper ; VIMP Pl P2 => add_sya vox (imper+"те") ; - VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (ASg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF APl P3)) ; + VIMP Sg P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF (GSg Masc) P3)) ; + VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы" ; - VIND (ASg _) (VPresent _) => nonExist ; - VIND APl (VPresent P1) => nonExist ; - VIND APl (VPresent P2) => nonExist ; - VIND APl (VPresent P3) => nonExist ; + VIND (GSg _) (VPresent _) => nonExist ; + VIND GPl (VPresent P1) => nonExist ; + VIND GPl (VPresent P2) => nonExist ; + VIND GPl (VPresent P3) => nonExist ; VIND gn (VFuture p) => add_sya vox (presentFuture ! (PRF gn p)) ; VIND gn VPast => add_sya vox (past ! (PSF gn)) } } ; diff --git a/next-lib/src/russian/NounRus.gf b/next-lib/src/russian/NounRus.gf index 2e86d33ab..65ea54584 100644 --- a/next-lib/src/russian/NounRus.gf +++ b/next-lib/src/russian/NounRus.gf @@ -8,51 +8,41 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { DetCN kazhduj okhotnik = { s = \\c => case kazhduj.c of { Nom => - kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++ + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ okhotnik.s ! NF kazhduj.n (extCase c) ; _ => - kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++ + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ okhotnik.s ! NF kazhduj.n kazhduj.c }; - n = kazhduj.n ; - p = P3 ; - pron = False; - g = case kazhduj.g of { PNoGen => (PGen okhotnik.g); _ => kazhduj.g }; + a = agrP3 kazhduj.n (case kazhduj.g of {PNoGen => PGen okhotnik.g; _ => kazhduj.g}); anim = okhotnik.anim } ; UsePN masha = { - s = \\c => masha.s ! (extCase c) ; - p = P3; g = PGen masha.g ; anim = masha.anim ; - n = Sg; nComp = Sg; pron = False} ; + s = \\c => masha.s ! (extCase c); + a = agrP3 Sg (PGen masha.g); + anim = masha.anim; + nComp = Sg + } ; UsePron p = p ** {anim = Inanimate}; PredetNP pred np = { - s = \\pf => pred.s! (AF (extCase pf) np.anim (gNum (pgen2gen np.g) np.n))++ np.s ! pf ; - n = np.n; - p = np.p; - g = np.g; - anim = np.anim; - pron = np.pron + s = \\pf => pred.s! (AF (extCase pf) np.anim (gennum (pgen2gen np.a.g) np.a.n))++ np.s ! pf ; + a = np.a; + anim = np.anim } ; PPartNP np v2 = { s = \\pf => np.s ! pf ++ v2.s ! VFORM Act VINF ; -- no participles in the Verbum type as they behave as adjectives - n = np.n; - p = np.p; - g = np.g; - anim = np.anim; - pron = np.pron + a = np.a; + anim = np.anim } ; AdvNP np adv = { s = \\pf => np.s ! pf ++ adv.s ; - n = np.n; - p = np.p; - g = np.g; - anim = np.anim; - pron = np.pron + a = np.a; + anim = np.anim } ; -- 1.4 additions AR 17/6/2008 @@ -62,11 +52,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { g = Neut ; ---- anim = Inanimate ; in { - s = \\c => kazhduj.s ! AF (extCase c) anim (gNum g kazhduj.n) ; - n = kazhduj.n ; - p = P3 ; - pron = False; - g = case kazhduj.g of { PNoGen => (PGen g); _ => kazhduj.g }; + s = \\c => kazhduj.s ! AF (extCase c) anim (gennum g kazhduj.n) ; + a = agrP3 kazhduj.n (case kazhduj.g of {PNoGen => (PGen g); _ => kazhduj.g}) ; anim = anim } ; @@ -102,36 +89,27 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { MassNP okhotnik = { s = \\c => okhotnik.s ! NF Sg (extCase c) ; - n = Sg ; - p = P3 ; - pron = False; - g = PGen okhotnik.g ; + a = agrP3 Sg (PGen okhotnik.g) ; anim = okhotnik.anim } ; DetArtSg kazhduj okhotnik = { s = \\c => -- art case always Nom (AR 17/6/2008) - kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g Sg) ++ + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Sg) ++ okhotnik.s ! Sg ! (extCase c) ; - n = Sg ; - p = P3 ; - pron = False; - g = case kazhduj.g of { PNoGen => (PGen okhotnik.g); _ => kazhduj.g }; + a = agrP3 Sg (case kazhduj.g of {PNoGen => PGen okhotnik.g; _ => kazhduj.g}) ; anim = okhotnik.anim } ; DetArtPl kazhduj okhotnik = { s = \\c => -- art case always Nom (AR 17/6/2008) - kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g Pl) ++ + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Pl) ++ okhotnik.s ! Pl ! (extCase c) ; - n = Pl ; - p = P3 ; - pron = False; - g = case kazhduj.g of { PNoGen => (PGen okhotnik.g); _ => kazhduj.g }; + n = agrP3 Pl (case kazhduj.g of {PNoGen => PGen okhotnik.g; _ => kazhduj.g}) ; anim = okhotnik.anim } ; - PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gNum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ; + PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ; NumCard c = c ; NumSg = {s = \\_,_ => [] ; n = Sg} ; @@ -164,11 +142,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- of the readings is meaningful. ComplN2 f x = { - s = \\nf => case x.pron of { - True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gNum 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 (gNum f.g n))}) - }; + s = \\nf => f.s ! nf ++ f.c2.s ++ + x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) ; g = f.g ; anim = f.anim } ; @@ -189,7 +164,7 @@ 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 (gNum cn.g n)} ++ + s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gennum cn.g n)} ++ cn.s ! nf ; g = cn.g ; anim = cn.anim @@ -215,7 +190,7 @@ 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 ! (gNum idea.g n)!c!idea.anim} ; + s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gennum idea.g n)!c!idea.anim} ; g = idea.g ; anim = idea.anim } ; diff --git a/next-lib/src/russian/ParadigmsRus.gf b/next-lib/src/russian/ParadigmsRus.gf index 17171cfdf..f1fe284e9 100644 --- a/next-lib/src/russian/ParadigmsRus.gf +++ b/next-lib/src/russian/ParadigmsRus.gf @@ -433,9 +433,9 @@ foreign = Foreign; -- +++ MG_UR: added +++ oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb = \sgP1, sgP2, sgP3, plP1, plP2, plP3 -> table { - PRF (ASg _) P1 => sgP1 ; - PRF (ASg _) P2 => sgP2 ; - PRF (ASg _) P3 => sgP3 ; + PRF (GSg _) P1 => sgP1 ; + PRF (GSg _) P2 => sgP2 ; + PRF (GSg _) P3 => sgP3 ; PRF APl P1 => plP1 ; PRF APl P2 => plP2 ; PRF APl P3 => plP3 diff --git a/next-lib/src/russian/PhraseRus.gf b/next-lib/src/russian/PhraseRus.gf index 7a13e3c32..0cf86c881 100644 --- a/next-lib/src/russian/PhraseRus.gf +++ b/next-lib/src/russian/PhraseRus.gf @@ -15,7 +15,7 @@ concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in { UttIP ip = {s = ip.s ! PF Nom No NonPoss} ; --- Acc also UttIAdv iadv = iadv ; UttNP np = {s = np.s ! PF Acc No NonPoss} ; - UttVP vp = {s = vp.s ! ClInfinit ! ASg Masc! P3} ; + UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ; UttAdv adv = adv ; NoPConj = {s = []} ; diff --git a/next-lib/src/russian/QuestionRus.gf b/next-lib/src/russian/QuestionRus.gf index 369a29089..86633b5f0 100644 --- a/next-lib/src/russian/QuestionRus.gf +++ b/next-lib/src/russian/QuestionRus.gf @@ -29,21 +29,18 @@ concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in { AdvIP ip adv = { s = \\c => ip.s ! c ++ adv.s ; - n = ip.n; p=ip.p; g=ip.g; anim=ip.anim; pron=ip.pron + a = ip.a; anim=ip.anim } ; IdetCN kakoj okhotnik = {s = \\pf => case kakoj.c of { Nom => - kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++ + kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ okhotnik.s ! NF kakoj.n (extCase pf) ; _ => - kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++ + kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ okhotnik.s ! NF kakoj.n kakoj.c }; - n = kakoj.n ; - p = P3 ; - pron = False; - g = kakoj.g ; + a = agrP3 kakoj.n kakoj.g ; anim = okhotnik.anim } ; @@ -51,10 +48,7 @@ concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in { IdetIP kakoj = let anim = Inanimate in {s = \\pf => kakoj.s ! AF (extCase pf) anim (pgNum kakoj.g kakoj.n) ; - n = kakoj.n ; - p = P3 ; - pron = False; - g = kakoj.g ; + a = agrP3 kakoj.n kakoj.g ; anim = anim } ; diff --git a/next-lib/src/russian/ResRus.gf b/next-lib/src/russian/ResRus.gf index 78e6cb81f..1ddcc6590 100644 --- a/next-lib/src/russian/ResRus.gf +++ b/next-lib/src/russian/ResRus.gf @@ -46,19 +46,6 @@ param -- (a big house - big houses). -- The plural never makes a gender distinction. - GenNum = ASg Gender | APl ; - - -- Coercions between the compound gen-num type and gender and number: -oper - gNum : Gender -> Number -> GenNum = \g,n -> - case n of - { Sg => case g of - { Fem => ASg Fem ; - Masc => ASg Masc ; - Neut => ASg Neut } ; - Pl => APl - } ; - -- The Possessive parameter is introduced in order to describe -- the possessives of personal pronouns, which are used in the @@ -88,14 +75,11 @@ param param PronForm = PF Case AfterPrep Possessive; -oper Pronoun = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; pron: Bool} ; +oper Pronoun = {s : PronForm => Str; a : Agr} ; -- Gender is not morphologically determined for first -- and second person pronouns. -param PronGen = PGen Gender | PNoGen ; - -- The following coercion is useful: oper @@ -113,24 +97,25 @@ oper CommNoun = {s : NForm => Str ; g : Gender ; anim : Animacy } ; - NounPhrase : Type = { s : PronForm => Str ; n : Number ; - p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; + NounPhrase : Type = {s : PronForm => Str; a : Agr; anim : Animacy} ; mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> {s = \\cas => chelovek.s ! NF n (extCase cas) ; - n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; + a = agrP3 n (PGen chelovek.g); anim = chelovek.anim } ; det2NounPhrase : Adjective -> NounPhrase = \eto -> - {s = \\pf => eto.s ! (AF (extCase pf) Inanimate (ASg Neut)); n = Sg ; g = PGen Neut ; pron = False ; p = P3 ; anim = Inanimate } ; + {s = \\pf => eto.s ! AF (extCase pf) Inanimate (GSg Neut); a = agrP3 Sg (PGen Neut); anim = Inanimate} ; - pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = \ona, anim, num -> - {s = ona.s ; n = num ; g = ona.g ; - pron = ona.pron; p = ona.p ; anim = anim } ; - + pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = + \ona, anim, num -> { + s = ona.s; + a = {n = num; p = ona.a.p; g = ona.a.g}; + anim = anim + } ; -- Agreement of $NP$ is a record. We'll add $Gender$ later. -- oper Agr = {n : Number ; p : Person} ; @@ -232,8 +217,8 @@ Prep =>"себе"}; let { ya = Ya.s ! (mkPronForm Nom No NonPoss); khorosho = tebyaNeVizhu.s2; - vizhu = tebyaNeVizhu.s ! clf !(gNum (pgen2gen Ya.g) Ya.n)! Ya.p; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n + vizhu = tebyaNeVizhu.s ! clf !(gennum (pgen2gen Ya.a.g) Ya.a.n)! Ya.a.p; + tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.a.g) ! Ya.a.n } in ya ++ khorosho ++ vizhu ++ tebya; @@ -253,19 +238,19 @@ param oper getActVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Act (VIND (gNum g n) (VFuture p)); - ClIndic PastRus _ => VFORM Act (VIND (gNum g n) VPast); - ClIndic Present _ => VFORM Act (VIND (gNum g n) (VPresent p)); - ClCondit => VFORM Act (VSUB (gNum g n)); + { ClIndic Future _ => VFORM Act (VIND (gennum g n) (VFuture p)); + ClIndic PastRus _ => VFORM Act (VIND (gennum g n) VPast); + ClIndic Present _ => VFORM Act (VIND (gennum g n) (VPresent p)); + ClCondit => VFORM Act (VSUB (gennum g n)); ClInfinit => VFORM Act VINF ; ClImper => VFORM Act (VIMP n p) }; getPassVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Pass (VIND (gNum g n) (VFuture p)); - ClIndic PastRus _ => VFORM Pass (VIND (gNum g n) VPast); - ClIndic Present _ => VFORM Pass (VIND (gNum g n) (VPresent p)); - ClCondit => VFORM Pass (VSUB (gNum g n)); + { ClIndic Future _ => VFORM Pass (VIND (gennum g n) (VFuture p)); + ClIndic PastRus _ => VFORM Pass (VIND (gennum g n) VPast); + ClIndic Present _ => VFORM Pass (VIND (gennum g n) (VPresent p)); + ClCondit => VFORM Pass (VSUB (gennum g n)); ClInfinit => VFORM Pass VINF ; ClImper => VFORM Pass (VIMP n p) }; @@ -295,19 +280,19 @@ oper sam: Refl= pgNum : PronGen -> Number -> GenNum = \g,n -> case n of - { Sg => ASg (pgen2gen g) ; -- assuming pronoun "I" is a male - Pl => APl + { Sg => GSg (pgen2gen g) ; -- assuming pronoun "I" is a male + Pl => GPl } ; - -- _ => variants {ASg Masc ; ASg Fem} } ; + -- _ => variants {GSg Masc ; GSg Fem} } ; -- "variants" version cause "no term variants" error during linearization oper numGNum : GenNum -> Number = \gn -> - case gn of { APl => Pl ; _ => Sg } ; + case gn of { GPl => Pl ; _ => Sg } ; oper genGNum : GenNum -> Gender = \gn -> - case gn of { ASg Fem => Fem; ASg Masc => Masc; _ => Neut } ; + case gn of { GSg Fem => Fem; GSg Masc => Masc; _ => Neut } ; oper numAF: AdjForm -> Number = \af -> case af of { AdvF => Sg; AFShort gn => numGNum gn; AF _ _ gn => (numGNum gn) } ; diff --git a/next-lib/src/russian/SentenceRus.gf b/next-lib/src/russian/SentenceRus.gf index b0379d771..cf2b64637 100644 --- a/next-lib/src/russian/SentenceRus.gf +++ b/next-lib/src/russian/SentenceRus.gf @@ -15,9 +15,9 @@ concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in { _ => (mkPronForm Nom No NonPoss) }); ne = case b of {Pos=>""; Neg=>"не"}; - vizhu = tebyaNeVizhu.s ! clf ! (pgNum Ya.g Ya.n)! Ya.p; + vizhu = tebyaNeVizhu.s ! clf ! (pgNum Ya.a.g Ya.a.n)! Ya.a.p; khorosho = tebyaNeVizhu.s2 ; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n + tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.a.g) ! Ya.a.n } in if_then_else Str tebyaNeVizhu.negBefore @@ -29,7 +29,7 @@ concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in { PredSCVP sc vp = { s = \\b,clf => let { ne = case b of {Pos=>""; Neg=>"не"}; - vizhu = vp.s ! clf ! (ASg Neut)! P3; + vizhu = vp.s ! clf ! (GSg Neut)! P3; tebya = vp.s3 ! Neut ! Sg } in @@ -58,7 +58,7 @@ concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in { --- AR 3/11/2007 SlashVS ivan vidit tuUlubaeshsya = { s=\\b,clf => ivan.s ! PF Nom No NonPoss ++ - vidit.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ++ + vidit.s! (getActVerbForm clf (pgen2gen ivan.a.g) ivan.a.n ivan.a.p) ++ [", что"] ++ tuUlubaeshsya.s ; s2=tuUlubaeshsya.s2; c=tuUlubaeshsya.c @@ -73,14 +73,14 @@ concrete SentenceRus of Sentence = CatRus ** open Prelude, ResRus in { _ => [] } in - dont ++ inf.s ! ClImper ! (gNum g n )!P2 ++ + dont ++ inf.s ! ClImper ! gennum g n ! P2 ++ inf.s2++inf.s3!g!n } ; EmbedS s = {s = "что" ++ s.s} ; -- In Russian "Whether you go" transformed in "go whether you": EmbedQS qs = {s = qs.s ! QIndir} ; - EmbedVP vp = {s = vp.s2 ++ vp.s!ClInfinit!(ASg Masc) !P3 ++ vp.s3!Masc!Sg} ; + EmbedVP vp = {s = vp.s2 ++ vp.s!ClInfinit!(GSg Masc) !P3 ++ vp.s3!Masc!Sg} ; UseCl t p cl = {s = case t.t of { Cond => cl.s! p.p ! ClCondit ; --# notpresent diff --git a/next-lib/src/russian/VerbRus.gf b/next-lib/src/russian/VerbRus.gf index 193800034..13f19b797 100644 --- a/next-lib/src/russian/VerbRus.gf +++ b/next-lib/src/russian/VerbRus.gf @@ -12,18 +12,18 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { { (ClIndic Present _) => masha.s ! (mkPronForm Nom No NonPoss) ; (ClIndic PastRus _) => case gn of - { (ASg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss); - (ASg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss); - (ASg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss); - APl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss) + { (GSg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss); + (GSg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss); + (GSg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss); + GPl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss) }; (ClIndic Future _) => case gn of - { APl => case p of + { GPl => case p of { P3 => "будут"++masha.s ! (mkPronForm Inst No NonPoss); P2 => "будете"++masha.s !(mkPronForm Inst No NonPoss); P1 => "будем"++masha.s ! (mkPronForm Inst No NonPoss) }; - (ASg _) => case p of + (GSg _) => case p of { P3=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ; P2 => "будешь"++ masha.s ! (mkPronForm Inst No NonPoss) ; P1=> "буду"++ masha.s ! (mkPronForm Inst No NonPoss) @@ -46,30 +46,30 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { CompAP zloj ={ s= \\clf,gn,p => case clf of { -- person is ignored ! - ClInfinit => "быть" ++ zloj.s ! AF Inst Animate (ASg Masc) ; + ClInfinit => "быть" ++ zloj.s ! AF Inst Animate (GSg Masc) ; ClImper => case gn of - { (ASg _) => "будь" ++ zloj.s ! AF Inst Animate (ASg Masc); - APl => "будьте" ++ zloj.s ! AF Inst Animate APl + { (GSg _) => "будь" ++ zloj.s ! AF Inst Animate (GSg Masc); + GPl => "будьте" ++ zloj.s ! AF Inst Animate GPl }; -- infinitive does not save GenNum, -- but indicative does for the sake of adjectival predication ! ClIndic Present _ => zloj.s ! AF Nom Animate gn ; ClIndic PastRus _ => case gn of - { (ASg Fem) => "была" ++ zloj.s! AF Nom Animate (ASg Fem); - (ASg Masc) => "был" ++ zloj.s! AF Nom Animate (ASg Masc); - (ASg Neut) => "был" ++ zloj.s! AF Nom Animate (ASg Neut); - APl => "были" ++ zloj.s! AF Nom Animate APl + { (GSg Fem) => "была" ++ zloj.s! AF Nom Animate (GSg Fem); + (GSg Masc) => "был" ++ zloj.s! AF Nom Animate (GSg Masc); + (GSg Neut) => "был" ++ zloj.s! AF Nom Animate (GSg Neut); + GPl => "были" ++ zloj.s! AF Nom Animate GPl }; ClIndic Future _ => case gn of - { APl => case p of - { P3 => "будут" ++ zloj.s! AF Nom Animate APl; - P2 => "будете" ++ zloj.s! AF Nom Animate APl; - P1 => "будем" ++ zloj.s! AF Nom Animate APl + { GPl => case p of + { P3 => "будут" ++ zloj.s! AF Nom Animate GPl; + P2 => "будете" ++ zloj.s! AF Nom Animate GPl; + P1 => "будем" ++ zloj.s! AF Nom Animate GPl } ; - (ASg _) => case p of - {P3 => "будет" ++ zloj.s! AF Nom Animate (ASg (genGNum gn)); - P2 => "будешь"++ zloj.s! AF Nom Animate (ASg (genGNum gn)); - P1=> "буду" ++ zloj.s! AF Nom Animate (ASg (genGNum gn)) + (GSg _) => case p of + {P3 => "будет" ++ zloj.s! AF Nom Animate (GSg (genGNum gn)); + P2 => "будешь"++ zloj.s! AF Nom Animate (GSg (genGNum gn)); + P1=> "буду" ++ zloj.s! AF Nom Animate (GSg (genGNum gn)) } }; ClCondit => "" @@ -94,20 +94,20 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { CompAdv zloj = { s= \\clf,gn,p => case clf of { ClImper => case gn of - { ASg _ => "будь" ++ zloj.s; -- person is ignored ! - APl => "будьте" ++ zloj.s + { GSg _ => "будь" ++ zloj.s; -- person is ignored ! + GPl => "будьте" ++ zloj.s }; ClInfinit => "быть" ++ zloj.s; ClIndic Present _ => zloj.s ; ClIndic PastRus _ => case gn of - { (ASg Fem) => "была" ++ zloj.s; - (ASg Masc) => "был" ++ zloj.s; - (ASg Neut) => "было" ++ zloj.s; - APl => "были" ++ zloj.s + { (GSg Fem) => "была" ++ zloj.s; + (GSg Masc) => "был" ++ zloj.s; + (GSg Neut) => "было" ++ zloj.s; + GPl => "были" ++ zloj.s }; ClIndic Future _ => case gn of - { (ASg _) => "будет" ++ zloj.s; - APl => "будут" ++ zloj.s + { (GSg _) => "будет" ++ zloj.s; + GPl => "будут" ++ zloj.s }; ClCondit => "" } ; @@ -253,13 +253,13 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { w = Act; negBefore = True; s2 = ""; - s3 = \\g,n => molodoj.s!(AF Inst Animate (gNum g n)) + s3 = \\g,n => molodoj.s!(AF Inst Animate (gennum g n)) } ; SlashV2A obechat molodoj = {s = \\clf,gn,p => obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ - molodoj.s ! AF Inst Inanimate (ASg Neut) ; + molodoj.s ! AF Inst Inanimate (GSg Neut) ; ---- AR 17/6; AF Inst tu.anim (pgNum tu.g tu.n) ; asp = obechat.asp ; w = Act; diff --git a/next-lib/src/slavic/CommonSlavic.gf b/next-lib/src/slavic/CommonSlavic.gf index d65c3d090..fc38ca990 100644 --- a/next-lib/src/slavic/CommonSlavic.gf +++ b/next-lib/src/slavic/CommonSlavic.gf @@ -3,4 +3,20 @@ resource CommonSlavic = ParamX ** open Prelude in { param Gender = Masc | Fem | Neut ; Animacy = Animate | Inanimate ; + + GenNum = GSg Gender | GPl ; + +oper + gennum : Gender -> Number -> GenNum = \g,n -> + case n of { + Sg => GSg g ; + Pl => GPl + } ; + + numGenNum : GenNum -> Number = \gn -> + case gn of { + GSg _ => Sg ; + GPl => Pl + } ; + }