diff options
| author | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
| commit | e89fdae2fa1626348d8025824a7469252fa85e42 (patch) | |
| tree | c7d46bbd0494043b4bd6f917a25a7687517d0547 /next-lib/src/russian/MorphoRus.gf | |
| parent | 3049b59b35b25381a7c6787444165c200d66e08b (diff) | |
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'next-lib/src/russian/MorphoRus.gf')
| -rw-r--r-- | next-lib/src/russian/MorphoRus.gf | 1314 |
1 files changed, 0 insertions, 1314 deletions
diff --git a/next-lib/src/russian/MorphoRus.gf b/next-lib/src/russian/MorphoRus.gf deleted file mode 100644 index c5bac7bd0..000000000 --- a/next-lib/src/russian/MorphoRus.gf +++ /dev/null @@ -1,1314 +0,0 @@ ---# -path=.:../../prelude:../common - ---1 A Simple Russian Resource Morphology - --- Aarne Ranta, Janna Khegai 2006 - --- This resource morphology contains definitions of the lexical entries --- needed in the resource syntax. --- It moreover contains copies of the most usual inflectional patterns. - --- We use the parameter types and word classes defined for morphology. - -resource MorphoRus = ResRus ** open Prelude in { - -flags coding=utf8 ; - -----2 Personal (together with possesive) pronouns. - -oper pronYa : Pronoun = - let nonPoss = { s = table { Nom => "я" ; - Gen => "меня" ; - Dat => "мне" ; - Acc => "меня" ; - Inst => "мной" ; - Prepos _ => "мне" } } - in pronYaTu nonPoss "мо" P1 ; - -oper pronTu : Pronoun = - let nonPoss = { s = table { Nom => "ты" ; - Gen => "тебя" ; - Dat => "тебе" ; - Acc => "тебя" ; - Inst => "тобой" ; - Prepos _ => "тебе" } } - in pronYaTu nonPoss "тво" P2 ; - --- Pronouns ya, tu, svoj -oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun = - \nonPoss, mo, pers -> - { s = table { - PF c _ NonPoss => nonPoss.s!c ; - PF c _ (Poss gn) => case <c, gn> of { - <Nom, GSg Neut > => mo + "ё" ; - <Nom, GSg Masc > => mo + "й" ; - <Gen, GSg (Masc | Neut)> => mo + "его" ; - <Dat, GSg (Masc | Neut)> => mo + "ему" ; - <Acc, GSg (Masc | Neut)> => mo + "его" ; - <Inst, GSg (Masc | Neut)> => mo + "им" ; - <Prepos _, GSg (Masc | Neut)> => mo + "ём" ; - - <Nom, GSg Fem> => mo + "я" ; - <Gen, GSg Fem> => mo + "ей" ; - <Dat, GSg Fem> => mo + "ей" ; - <Acc, GSg Fem> => mo + "ю" ; - <Inst, GSg Fem> => mo + "ей" ; - <Prepos _, GSg Fem> => mo + "ей" ; - - <Nom, GPl> => mo + "и" ; - <Gen, GPl> => mo + "их" ; - <Dat, GPl> => mo + "им" ; - <Acc, GPl> => mo + "их" ; - <Inst, GPl> => mo + "им" ; - <Prepos _, GPl> => mo + "их" - - } - } ; - g = PNoGen ; n = Sg ; p = pers ; pron = True - } ; - -oper pronNAfterPrep : Pronoun -> Pronoun = \p -> - { s = table { - PF c Yes NonPoss => case p.s!(PF c No NonPoss) of { - x@(("е"|"ё"|"и")+_) => "н"+x; - x => x }; - pf => p.s!pf }; - g = p.g ; n = p.n ; p = p.p ; pron = p.pron - } ; - -oper pronOn : Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _) => "его" ; - PF Nom _ _ => "он" ; - PF (Gen|Acc) _ _ => "его" ; - PF Dat _ _ => "ему" ; - PF Inst _ _ => "им" ; - PF (Prepos _) _ _ => "ём" - } ; - g = PGen Masc ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronOna : Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _ ) => "её" ; - PF Nom _ NonPoss => "она" ; - PF (Gen|Acc) _ _ => "её" ; - PF (Dat|Inst|Prepos _) _ _ => "ей" - } ; - g = PGen Fem ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronOno: Pronoun = - { s = table { - PF Nom _ NonPoss => "оно" ; - pf => pronOn.s!pf - } ; - g = PGen Neut ; n = Sg ; p = P3 ; pron = True - } ; - -oper pronMuVu : Str -> Str -> Person -> Pronoun = - \mu,na,pers -> - { s = table { - PF Nom _ NonPoss => mu ; - PF Gen _ NonPoss => na + "с" ; - PF Dat _ NonPoss => na + "м" ; - PF Acc _ NonPoss => na + "с" ; - PF Inst _ NonPoss => na + "ми" ; - PF (Prepos _) _ NonPoss => 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 (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 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 - } ; - -oper pronMu: Pronoun = pronMuVu "мы" "на" P1; - -oper pronVu: Pronoun = pronMuVu "вы" "ва" P2; - -oper pronOni: Pronoun = pronNAfterPrep - { s = table { - PF _ _ (Poss _) => "их" ; - PF Nom _ _ => "они" ; - PF Dat _ _ => "им" ; - PF (Gen|Acc|Prepos _) _ _ => "их" ; - PF Inst _ _ => "ими" - } ; - g = PNoGen ; n = Pl ; p = P3 ; pron = True - } ; - -oper pronKto: Pronoun = - { s = table { - PF Nom _ _ => "кто" ; - PF Gen _ _ => "кого" ; - PF Dat _ _ => "кому" ; - PF Acc _ _ => "кого" ; - PF Inst _ _ => "кем" ; - PF (Prepos _) _ _ => "ком" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; - -oper pronChto: Pronoun = - { s = table { - PF Nom _ _ => "что" ; - PF Gen _ _ => "чего" ; - PF Dat _ _ => "чему" ; - PF Acc _ _ => "что" ; - PF Inst _ _ => "чем" ; - PF (Prepos _) _ _ => "чём" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; - -oper pron_add_to : Pronoun -> Pronoun = \p -> - { s = \\pf => (p.s!pf) + "-то" ; - g = p.g ; - n = p.n ; - p = p.p ; - pron = p.pron - } ; - -oper pronKtoTo : Pronoun = pron_add_to pronKto ; - -oper pronChtoTo: Pronoun = pron_add_to pronChto ; - -oper pronEti: Pronoun = - { s = table { - PF Nom _ _ => "эти" ; - PF Gen _ _ => "этих" ; - PF Dat _ _ => "этим" ; - PF Acc _ _ => "этих" ; - PF Inst _ _ => "этими" ; - PF (Prepos _) _ _ => "этих" - } ; - n = Pl; - p = P3; - g= PGen Fem ; - anim = Animate ; - pron = False - } ; - -oper pronTe: Pronoun = - { s = table { - PF Nom _ _ => "те" ; - PF Gen _ _ => "тех" ; - PF Dat _ _ => "тем" ; - PF Acc _ _ => "тех" ; - PF Inst _ _ => "теми" ; - PF (Prepos _) _ _ => "тех" - } ; - n = Pl; - p = P3; - g=PGen Fem ; - anim = Animate ; - pron = False - } ; - - ---oper pronNikto: Pronoun = --- { s = table { --- PF Nom _ _ => "никто" ; --- PF Gen _ _ => "никого" ; --- PF Dat _ _ => "никому" ; --- PF Acc _ _ => "никого" ; --- PF Inst _ _ => "никем" ; --- PF (Prepos _) _ _ => ["ни о ком"] -- only together with a preposition; --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- ---oper pronNichto: Pronoun = --- { s = table { --- PF Nom _ _ => "ничто" ; --- PF Gen _ _ => "ничего" ; --- PF Dat _ _ => "ничему" ; --- PF Acc _ _ => "ничего" ; --- PF Inst _ _ => "ничем" ; --- PF (Prepos _) _ _ => ["ни о чём"] -- only together with preposition; --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- - -oper pronVseInanimate: Pronoun = - { s = table { - PF Nom _ _ => "всё" ; - PF Gen _ _ => "всего" ; - PF Dat _ _ => "всему" ; - PF Acc _ _ => "всё" ; - PF Inst _ _ => "всем" ; - PF (Prepos _) _ _ => "всём" - } ; - g = PGen Neut; - n = Sg ; - p = P3 ; - pron = False - } ; - - - -----2 Nouns --- ----- Help type SubstFormDecl is introduced to reduce repetition in ----- the declination definitions. It allows us to define a declination type, ----- namely, the String component "s" of the CommNoun type ----- without any reference to the Gender parameter "g". --- - -{- - -Paradigms: -1. hard regular - Masc -Consonant - Neut -o - Fem -a -1*. with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -2. soft regular: - Masc -ь - Neut -е - Fem -я -2*. with vowel changes, Masc in Gen Sg, Fem in Gen Pl (no Neut) -3. stem ending in г, к, х - - Masc, Fem same as 1 but use и instead of ы (Nom/Acc Pl, Gen Sg) - - Neut -кo has Nom Pl -ки instead of -кa -3* with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -4. stem ending in ш, ж, ч, щ, hard endings, - use и instead of ы, and use е instead of unstressed o -5. stem ending in ц, hard endings, use е instead of unstressed o -5*. with vowel changes, Masc in Gen Sg, Fem and Neut in Gen Pl -6. Masc ending in -й, Fem stem ending in vowel, Neut ending in ь? -6* with vowel changes -7. stem ending in и -8. F2, Fem ending in -ь - all -чь, -щь, -шь, -жь - all -пь, -энь, -мь, -фь, - most -дь, -ть, -сть, -сь, -вь, -бь, -8*. with vowel changes in Ins Sg, Gen Sg -9. Neut ending in -мя -10. Masc in -oнoк -11. Masc in -aнин -12. Nom Pl in -ья - --} - - - oper iAfter : Str -> Str = \stem -> - case stem of { - _ + ("г"|"к"|"х") => "и" ; - _ + ("ш"|"ж"|"ч"|"щ") => "и" ; - _ => "ы" - }; - - oper oAfter : Str -> Str = \stem -> - case stem of { - _ + ("ш"|"ж"|"ч"|"щ") => "е" ; - _ + "ц" => "е" ; - _ => "о" - }; - - -- 1. Hard regular masculine inanimate, e.g. spor. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - oper nRegHardMasc : Str ->CommNoun= \stem -> - 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+"ах" }; - g = Masc; anim = Inanimate }; - - -- 1. Hard regular neuter inanimate, e.g. pravilo. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - 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+"ах" }; - g = Neut; anim = Inanimate }; - - -- 1. Hard regular feminine inanimate, e.g. karta. - -- 3. stem ending in г, к, х - -- 4. stem ending in ш, ж, ч, щ - -- 5. stem ending in ц - oper nRegHardFem : Str ->CommNoun= \stem -> - 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+"ах" }; - 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+"ях" }; - 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+"ях" }; - 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+"ях" }; - 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+"ев" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 6. Neut ending in -Ve (V = vowel) (not adjectives) - oper nDecl6Neut : Str ->CommNoun= \stem -> - let n = nRegSoftNeut stem in - { s = table { - NF Pl Gen => stem+"й" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 6. Fem ending in -Vя (V = vowel) - oper nDecl6Fem : Str ->CommNoun= \stem -> - let n = nRegSoftFem stem in - { s = table { - NF Pl Gen => stem+"й" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Masc : Str ->CommNoun= \stem -> - let n = nDecl6Masc stem in - { s = table { - NF Sg (Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Neut : Str ->CommNoun= \stem -> - let n = nDecl6Neut stem in - { s = table { - NF Sg (Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - -- 7. stem ending in и - oper nDecl7Fem : Str ->CommNoun= \stem -> - let n = nDecl6Fem stem in - { s = table { - NF Sg (Dat|Prepos _) => stem+"и" ; - sf => n.s!sf }; - g = n.g; anim = n.anim }; - - - -- 8. Feminine ending in soft consonant - 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+"х" }; - 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+"менах" }; - g = Fem; anim = Inanimate }; - - -- 10. Masc in -oнoк - oper nDecl10Hard : Str -> CommNoun = \stem -> - nAnimate (nSplitSgPl (nRegHardMasc (stem+"онок")) -- FIXME: vowel change in sg - (nRegHardNeut (stem+"ат"))) ; - - -- 10. Masc in -ёнoк - oper nDecl10Soft : Str -> CommNoun = \stem -> - nAnimate (nSplitSgPl (nRegHardMasc (stem+"ёнок")) -- FIXME: vowel change in sg - (nRegHardNeut (stem+"ят"))) ; - - 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) - } ; - g = x.g ; anim = y.anim - } ; - - -- 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 }; - 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 Pl Acc => n.s!(NF Pl Gen); - sf => n.s!sf } ; - g = n.g ; - anim = Animate - } ; - -oper - SubstFormDecl = SS1 NForm ; - -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+"ьяах" - } ; - 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+"ьяах" - } ; - 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+"ьяах" - } ; - 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+"их" - } ; - 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+"вах" - } ; - 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+"е" - } ; - g = Neut ; anim = Inanimate -} ; - --- Note: Now we consider only the plural form of the pronoun "все" (all) --- treated as an adjective (see AllDetPl definition). --- The meaning "entire" is not considered, which allows us to form --- the pronoun-adjective from the substantive form below: - -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+"ех" - } ; - g = Neut ; anim = Inanimate -} ; - - -----2 Adjectives --- ----- Type Adjective only has positive degree while AdjDegr type ----- includes also comparative and superlative forms. --- - kazhdujDet: Adjective = aRegHardStemStress "кажд" ; - samuj : Adjective = aRegHardStemStress "сам" ; - --- lubojDet: Adjective = uy_oj_EndDecl "люб" ; --- drugojDet: Adjective = uy_oj_EndDecl "друг" ; --- glaznoj: Adjective = uy_oj_EndDecl "глазн" ; - kotorujDet: Adjective = aRegHardStemStress "котор"; - nekotorujDet: Adjective = aRegHardStemStress "некотор"; - takoj: Adjective = aRegHardEndStress "так"; --- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь"; --- kakojDet: Adjective = i_oj_EndDecl "как" []; --- nikakojDet: Adjective = i_oj_EndDecl "никак" []; - bolshinstvoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "большинств"); - mnogoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "мног"); - nemnogoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "немног"); - skolkoSgDet: Adjective = extAdjFromSubst (nRegHardNeut "скольк"); - --- bolshinstvoPlDet: Adjective = extAdjFromSubst (oEnd_PlDecl "большинств"); - - - - oper aRegHardStemStress : Str -> Adjective = \stem -> aRegHard stem False ; - - oper aRegHardEndStress : Str -> Adjective = \stem -> aRegHard stem True; - - -- 1. regular hard adjective - -- 3. stem ending with г, к, х - -- 4. stem ending with ш, ж, ч, щ - -- 5. stem ending with ц - oper aRegHard : Str -> Bool -> Adjective = \stem, endStress -> - let i = iAfter stem in - let o = case endStress of { - True => "о" ; - False => oAfter stem } in - { s = table { - AF Nom _ (GSg Masc) => stem + case endStress of { - True => "ой"; - False => iAfter stem + "й" } ; - 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 _ (GSg Fem) => stem + "ая"; - AF Acc _ (GSg Fem) => stem + "ую"; - AF _ _ (GSg Fem) => stem + o+"й"; - - 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 (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 _ (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 _ (GSg Fem) => stem + "яя"; - AF Acc _ (GSg Fem) => stem + "юю"; - AF _ _ (GSg Fem) => 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 (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 + "е" - } } ; - - - - - vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; - extAdjFromSubst: CommNoun -> Adjective = \ vse -> - {s = \\af => vse.s ! NF (numAF af) (caseAF af) } ; - - -oper totDet: Adjective = {s = table { - 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 _ (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 _ (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 _ (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 _ (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 +"о" - } - } ; - -{- --- Commented out since I don't know what the short forms are -oper ti_j_EndDecl : Str -> Adjective = \s ->{s = table { - 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 + "ье" - } - } ; --} - - - ----- 2 Adverbs --- ---oper vsegda: Adverb = { s = "всегда" } ; ---oper chorosho: Adverb = { s = "хорошо" } ; --- ----- 2 Verbs --- ----- Dummy verbum "have" that corresponds to the phrases like ----- "I have a headache" in English. The corresponding sentence ----- in Russian doesn't contain a verb: --- ---oper have: Verbum = {s=\\ vf => "-" ; asp = Imperfective} ; --- ----- There are two common conjugations ----- (according to the number and the person of the subject) ----- patterns in the present tense in the indicative mood. - --- +++ MG_UR: new conjugation class 'Foreign' introduced +++ -param Conjugation = First | FirstE | Second | SecondA | Mixed | Dolzhen | Foreign ; - - ---3 First conjugation (in Present) verbs : -oper verbIdti : Verbum = verbDecl Imperfective First "ид" "у" "шел" "иди" "идти"; - ---oper verbGulyat : Verbum = verbDecl Imperfective First "гуля" "ю" "гулял" "гуляй" "гулять"; ---oper verbVkluchat : Verbum = verbDecl Imperfective First "включа" "ю" "включал" "включай" "включать"; -oper verbSuchestvovat : Verbum = verbDecl Imperfective First "существу" "ю" "существовал" "существуй" "существовать"; ---oper verbVukluchat : Verbum = verbDecl Imperfective First "выключа" "ю" "выключал" "выключай" "выключать"; ---oper verbZhdat : Verbum = verbDecl Imperfective First "жд" "у" "ждал" "жди" "ждать" ; ---oper verbBegat : Verbum = verbDecl Imperfective First "бега" "ю" "бегал" "бегай" "бегать"; ---oper verbPrinimat : Verbum = verbDecl Imperfective First "принима" "ю" "принимал" "принимай" "принимать"; ---oper verbDokazuvat : Verbum = verbDecl Imperfective First "доказыва" "ю" "доказывал" "доказывай" "доказывать"; ---oper verbPredpochitat : Verbum = verbDecl Imperfective First "предпочита" "ю" "предпочитал" "предпочитай" "предпочитать"; ---oper verbOtpravlyat : Verbum = verbDecl Imperfective First "отправля" "ю" "отправлял" "отправляй" "отправлять"; ---oper verbSlomat : Verbum = verbDecl Perfective First "слома" "ю" "сломал" "сломай" "сломать"; - - ----- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) : ---oper verbDavat : Verbum = verbDecl Imperfective FirstE "да" "ю" "давал" "давай" "давать"; ---oper verbPit : Verbum = verbDecl Imperfective FirstE "пь" "ю" "пил" "пей" "пить"; --- - - -oper verbByut : Verbum = verbDecl Perfective First "буд" "у" "был" "будь" "быть"; - -oper verbMoch : Verbum = verbDeclMoch Imperfective First "мог" "у" "мог" "моги" "мочь" "мож"; - -----3 Second conjugation (in Present) verbs : --- ---oper verbLubit : Verbum = verbDecl Imperfective Second "люб" "лю" "любил" "люби" "любить"; ---oper verbGovorit : Verbum = verbDecl Imperfective Second "говор" "ю" "говорил" "говори" "говорить"; --- ---oper verbBolet_2 : Verbum = verbDecl Imperfective Second "бол" "ю" "болел" "боли" "болеть"; ---oper verbPoranit : Verbum = verbDecl Perfective Second "поран" "ю" "поранил" "порань" "поранить"; --- --- Irregular Mixed: -oper verbKhotet : Verbum = verbDecl Imperfective Mixed "хоч" "у" "хотел" "хоти" "хотеть"; - --- Irregular -oper verbDolzhen : Verbum = verbDecl Imperfective Dolzhen "долж" "ен" "долж" ["будь должен"] ["быть должным"] ; - - --- further conjugation class added by Magda Gerritsen and Ulrich Real: --- foreign words introduced in Russian - -oper verbOrganisuet : Verbum = verbDecl Imperfective Foreign "организу" "ю" "организовал" "организуй" "организовать"; - - -oper idetDozhd: Verbum -> Verbum = \idet -> {s = \\vf=>idet.s!vf ++ "дождь"; asp = Imperfective}; - --- "PresentVerb" takes care of the present tense conjugation. - -param PresentVF = PRF GenNum Person; -oper PresentVerb : Type = PresentVF => Str ; - -oper presentConjDolzhen: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - 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 (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 (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 (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 (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 (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 (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. - -param PastVF = PSF GenNum ; -oper PastVerb : Type = PastVF => Str ; -oper pastConj: Str -> PastVerb = \del -> - table { - PSF (GSg Masc) => del ; - PSF (GSg Fem) => del +"а" ; - PSF (GSg Neut) => del+"о" ; - PSF GPl => del+ "и" - }; - -oper pastConjDolzhen: Str -> PastVerb = \del -> - table { - 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 (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. --- It produces the full conjugation table for a verb entry - --- +++ MG_UR: new conjugation class 'Foreign' introduced +++ -oper verbDecl: Aspect -> Conjugation -> Str -> Str -> Str -> Str -> Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf -> - let conj = case c of { - First => <presentConj1,pastConj> ; - FirstE => <presentConj1E,pastConj> ; - Second => <presentConj2,pastConj> ; - SecondA => <presentConj2a,pastConj> ; - Mixed => <presentConjMixed,pastConj> ; - Dolzhen => <presentConjDolzhen,pastConjDolzhen> ; - Foreign => <presentConjForeign,pastConj> } in - let patt = case a of { - Perfective => mkVerbImperfective; - Imperfective => mkVerbImperfective } in - patt inf imperSgP2 (conj.p1 del sgP1End) (conj.p2 sgMascPast) ; - --- for verbs like "мочь" ("can") with changing consonants (first conjugation): --- "могу - можешь" -oper verbDeclMoch: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf, altRoot -> - let patt = case a of { - Perfective => mkVerbImperfective; - Imperfective => mkVerbImperfective } in - patt inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast); - -oper add_sya : Voice -> Str -> Str = \v,x -> - case v of { - Act => x ; - Pas => case Predef.dp 2 x of { - "а" | "е" | "ё" | "и" | "о" | "у" | "ы" | "э" | "ю" | "я" => x + "сь" ; - _ => x + "ся" - } - }; - - --- Generation the imperfective active pattern given --- a number of basic conjugation forms. - -oper mkVerbImperfective : Str -> Str -> PresentVerb -> PastVerb -> Verbum = - \inf, imper, presentFuture, past -> { s = table { VFORM vox vf => - case vf of { - VINF => add_sya vox inf ; - - 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 (GSg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; - - VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы"; - - 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 - } ; - -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 (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 (GSg Masc) P3)) ; - VIMP Pl P3 => "пусть" ++ add_sya vox (presentFuture ! (PRF GPl P3)) ; - - VSUB gn => add_sya vox (past ! (PSF gn)) ++ "бы" ; - - 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)) - } } ; - asp = Perfective - } ; - -----2 Proper names are a simple kind of noun phrases. --- -oper ProperName : Type = {s : Case => Str ; g : Gender ; anim : Animacy} ; --- --- mkCNProperName : CommNoun -> ProperName = \cn -> ---{s = \\c => cn.s! (NF Sg c); g=cn.g; anim = cn.anim }; --- - mkProperNameMasc : Str -> Animacy -> ProperName = \ivan, anim -> - { s = table { Nom => ivan ; - Gen => ivan + "а"; - Dat => ivan + "у"; - Acc => case anim of - { Animate => ivan + "а"; - Inanimate => ivan - }; - Inst => ivan + "ом"; - (Prepos _) => ivan + "е" } ; - g = Masc; anim = anim }; - - mkProperNameFem : Str -> Animacy -> ProperName = \masha, anim -> - { s = table { Nom => masha + "а"; - Gen => masha + "и"; - Dat => masha + "е"; - Acc => masha + "у"; - Inst => masha + "ей"; - (Prepos _) => masha + "е" }; - g = Fem ; anim = anim }; - -}; |
