diff --git a/next-lib/src/russian/CatRus.gf b/next-lib/src/russian/CatRus.gf index b3e3809c9..8b364388e 100644 --- a/next-lib/src/russian/CatRus.gf +++ b/next-lib/src/russian/CatRus.gf @@ -44,7 +44,7 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in { -- Noun - CN = {s : Number => Case => Str; g : Gender; anim : Animacy} ; + CN = {s : NForm => Str; g : Gender; anim : Animacy} ; NP = { s : PronForm => Str ; n : Number ; p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; Pron = { s : PronForm => Str ; n : Number ; p : Person ; @@ -89,9 +89,9 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in { A2 = A ** Complement ; -- Substantives moreover have an inherent gender. - N = {s : SubstForm => Str ; g : Gender ; anim : Animacy } ; - N2 = {s : Number => Case => Str; g : Gender; anim : Animacy} ** Complement ; - N3 = {s : Number => Case => Str; g : Gender; anim : Animacy} ** Complement ** {s3 : Str; c2: Case} ; + N = {s : NForm => Str; g : Gender; anim : Animacy} ; + N2 = {s : NForm => Str; g : Gender; anim : Animacy} ** Complement ; + N3 = {s : NForm => Str; g : Gender; anim : Animacy} ** Complement ** {s3 : Str; c2: Case} ; PN = {s : Case => Str ; g : Gender ; anim : Animacy} ; diff --git a/next-lib/src/russian/ExtraLexRus.gf b/next-lib/src/russian/ExtraLexRus.gf index a58868309..9c33235fd 100644 --- a/next-lib/src/russian/ExtraLexRus.gf +++ b/next-lib/src/russian/ExtraLexRus.gf @@ -9,18 +9,18 @@ lin --- citizen_N = nGrazhdanin "господ" ; -- +++ MG_UR: added +++ daughter_N = {s = table { - SF Sg Nom => "дочь" ; - SF Sg Gen => "дочери" ; - SF Sg Dat => "дочери" ; - SF Sg Acc => "дочь" ; - SF Sg Inst => "дочерью" ; - SF Sg (Prepos _) => "дочери" ; - SF Pl Nom => "дочери" ; - SF Pl Gen => "дочерей" ; - SF Pl Dat => "дочерям" ; - SF Pl Acc => "дочерей" ; - SF Pl Inst => "дочерьми" ; - SF Pl (Prepos _) => "дочерях" + NF Sg Nom => "дочь" ; + NF Sg Gen => "дочери" ; + NF Sg Dat => "дочери" ; + NF Sg Acc => "дочь" ; + NF Sg Inst => "дочерью" ; + NF Sg (Prepos _) => "дочери" ; + NF Pl Nom => "дочери" ; + NF Pl Gen => "дочерей" ; + NF Pl Dat => "дочерям" ; + NF Pl Acc => "дочерей" ; + NF Pl Inst => "дочерьми" ; + NF Pl (Prepos _) => "дочерях" } ; g = Fem ; anim = Animate } ; @@ -35,18 +35,18 @@ lin --- ocean_N = nMorje "мор" ; -- +++ MG_UR: added +++ son_N = {s = table - { SF Sg Nom => syn ; - SF Sg Gen => syn+"а" ; - SF Sg Dat => syn+"у" ; - SF Sg Acc => syn +"а"; - SF Sg Inst => syn+"ом" ; - SF Sg (Prepos _) => syn+"е" ; - SF Pl Nom => syn+"ья" ; - SF Pl Gen => syn+"ьев" ; - SF Pl Dat => syn+"ьям" ; - SF Pl Acc => syn +"ьев"; - SF Pl Inst => syn+"ьями" ; - SF Pl (Prepos _) => syn+"ьяах" + { NF Sg Nom => syn ; + NF Sg Gen => syn+"а" ; + NF Sg Dat => syn+"у" ; + NF Sg Acc => syn +"а"; + NF Sg Inst => syn+"ом" ; + NF Sg (Prepos _) => syn+"е" ; + NF Pl Nom => syn+"ья" ; + NF Pl Gen => syn+"ьев" ; + NF Pl Dat => syn+"ьям" ; + NF Pl Acc => syn +"ьев"; + NF Pl Inst => syn+"ьями" ; + NF Pl (Prepos _) => syn+"ьяах" } ; g = Masc ; anim = Animate } ; @@ -54,18 +54,18 @@ lin --- vocationalschool_N = nUchilishe "училищ" ; -- +++ MG_UR: added +++ way_N = {s = table - { SF Sg Nom => put+"ь" ; - SF Sg Gen => put+"и" ; - SF Sg Dat => put+"и" ; - SF Sg Acc => put+"ь" ; - SF Sg Inst => put+"ём" ; - SF Sg (Prepos _) => put+"и" ; - SF Pl Nom => put+"и" ; - SF Pl Gen => put+"ей" ; - SF Pl Dat => put+"ям" ; - SF Pl Acc => put+"и" ; - SF Pl Inst => put+"ями" ; - SF Pl (Prepos _) => put+"ях" + { NF Sg Nom => put+"ь" ; + NF Sg Gen => put+"и" ; + NF Sg Dat => put+"и" ; + NF Sg Acc => put+"ь" ; + NF Sg Inst => put+"ём" ; + NF Sg (Prepos _) => put+"и" ; + NF Pl Nom => put+"и" ; + NF Pl Gen => put+"ей" ; + NF Pl Dat => put+"ям" ; + NF Pl Acc => put+"и" ; + NF Pl Inst => put+"ями" ; + NF Pl (Prepos _) => put+"ях" } ; g = Masc ; anim = Inanimate } ; diff --git a/next-lib/src/russian/MorphoRus.gf b/next-lib/src/russian/MorphoRus.gf index 15a497dd1..cd019d346 100644 --- a/next-lib/src/russian/MorphoRus.gf +++ b/next-lib/src/russian/MorphoRus.gf @@ -346,18 +346,18 @@ Paradigms: let i = iAfter stem in let o = oAfter stem in { s = table { - SF Sg Nom => stem ; - SF Sg Gen => stem+"а" ; - SF Sg Dat => stem+"у" ; - SF Sg Acc => stem ; - SF Sg Inst => stem+o+"м" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+i ; - SF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; - SF Pl Dat => stem+"ам" ; - SF Pl Acc => stem+i ; - SF Pl Inst => stem+"ами" ; - SF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom => stem ; + NF Sg Gen => stem+"а" ; + NF Sg Dat => stem+"у" ; + NF Sg Acc => stem ; + NF Sg Inst => stem+o+"м" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+i ; + NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; + NF Pl Dat => stem+"ам" ; + NF Pl Acc => stem+i ; + NF Pl Inst => stem+"ами" ; + NF Pl (Prepos _) => stem+"ах" }; g = Masc; anim = Inanimate }; -- 1. Hard regular neuter inanimate, e.g. pravilo. @@ -367,18 +367,18 @@ Paradigms: oper nRegHardNeut : Str ->CommNoun= \stem -> let o = oAfter stem in { s = table { - SF Sg Nom => stem+o ; - SF Sg Gen => stem+"а" ; - SF Sg Dat => stem+"у" ; - SF Sg Acc => stem+o ; - SF Sg Inst => stem+o+"м" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ; - SF Pl Gen => stem ; - SF Pl Dat => stem+"ам" ; - SF Pl Acc => stem+"а" ; - SF Pl Inst => stem+"ами" ; - SF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom => stem+o ; + NF Sg Gen => stem+"а" ; + NF Sg Dat => stem+"у" ; + NF Sg Acc => stem+o ; + NF Sg Inst => stem+o+"м" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ; + NF Pl Gen => stem ; + NF Pl Dat => stem+"ам" ; + NF Pl Acc => stem+"а" ; + NF Pl Inst => stem+"ами" ; + NF Pl (Prepos _) => stem+"ах" }; g = Neut; anim = Inanimate }; -- 1. Hard regular feminine inanimate, e.g. karta. @@ -389,77 +389,77 @@ Paradigms: let i = iAfter stem in let o = oAfter stem in { s = table { - SF Sg Nom => stem+"а" ; - SF Sg Gen => stem+i ; - SF Sg Dat => stem+"е" ; - SF Sg Acc => stem+"у" ; - SF Sg Inst => stem+o+"й" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+i ; - SF Pl Gen => stem ; - SF Pl Dat => stem+"ам" ; - SF Pl Acc => stem+i ; - SF Pl Inst => stem+"ами" ; - SF Pl (Prepos _) => stem+"ах" }; + NF Sg Nom => stem+"а" ; + NF Sg Gen => stem+i ; + NF Sg Dat => stem+"е" ; + NF Sg Acc => stem+"у" ; + NF Sg Inst => stem+o+"й" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+i ; + NF Pl Gen => stem ; + NF Pl Dat => stem+"ам" ; + NF Pl Acc => stem+i ; + NF Pl Inst => stem+"ами" ; + NF Pl (Prepos _) => stem+"ах" }; g = Fem; anim = Inanimate }; -- 2. Soft regular masculine inanimate, e.g. vichr' oper nRegSoftMasc : Str ->CommNoun= \stem -> { s = table { - SF Sg Nom => stem+"ь"; - SF Sg Gen => stem+"я" ; - SF Sg Dat => stem+"ю" ; - SF Sg Acc => stem+"ь" ; - SF Sg Inst => stem+"ем" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+"и" ; - SF Pl Gen => stem+"ей" ; - SF Pl Dat => stem+"ям" ; - SF Pl Acc => stem+"и" ; - SF Pl Inst => stem+"ями" ; - SF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom => stem+"ь"; + NF Sg Gen => stem+"я" ; + NF Sg Dat => stem+"ю" ; + NF Sg Acc => stem+"ь" ; + NF Sg Inst => stem+"ем" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+"и" ; + NF Pl Gen => stem+"ей" ; + NF Pl Dat => stem+"ям" ; + NF Pl Acc => stem+"и" ; + NF Pl Inst => stem+"ями" ; + NF Pl (Prepos _) => stem+"ях" }; g = Masc; anim = Inanimate }; -- 2. Soft regular neuter inanimate, e.g. more oper nRegSoftNeut : Str ->CommNoun= \stem -> { s = table { - SF Sg Nom => stem+"е"; - SF Sg Gen => stem+"я" ; - SF Sg Dat => stem+"ю" ; - SF Sg Acc => stem+"е" ; - SF Sg Inst => stem+"ем" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+"я" ; - SF Pl Gen => stem+"ей" ; - SF Pl Dat => stem+"ям" ; - SF Pl Acc => stem+"я" ; - SF Pl Inst => stem+"ями" ; - SF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom => stem+"е"; + NF Sg Gen => stem+"я" ; + NF Sg Dat => stem+"ю" ; + NF Sg Acc => stem+"е" ; + NF Sg Inst => stem+"ем" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+"я" ; + NF Pl Gen => stem+"ей" ; + NF Pl Dat => stem+"ям" ; + NF Pl Acc => stem+"я" ; + NF Pl Inst => stem+"ями" ; + NF Pl (Prepos _) => stem+"ях" }; g = Neut; anim = Inanimate }; -- 2. Soft regular feminine inanimate, e.g. burya oper nRegSoftFem : Str ->CommNoun= \stem -> { s = table { - SF Sg Nom => stem+"я"; - SF Sg Gen => stem+"и" ; - SF Sg Dat => stem+"е" ; - SF Sg Acc => stem+"ю" ; - SF Sg Inst => stem+"ей" ; - SF Sg (Prepos _) => stem+"е" ; - SF Pl Nom => stem+"и" ; - SF Pl Gen => stem+"ь" ; - SF Pl Dat => stem+"ям" ; - SF Pl Acc => stem+"и" ; - SF Pl Inst => stem+"ями" ; - SF Pl (Prepos _) => stem+"ях" }; + NF Sg Nom => stem+"я"; + NF Sg Gen => stem+"и" ; + NF Sg Dat => stem+"е" ; + NF Sg Acc => stem+"ю" ; + NF Sg Inst => stem+"ей" ; + NF Sg (Prepos _) => stem+"е" ; + NF Pl Nom => stem+"и" ; + NF Pl Gen => stem+"ь" ; + NF Pl Dat => stem+"ям" ; + NF Pl Acc => stem+"и" ; + NF Pl Inst => stem+"ями" ; + NF Pl (Prepos _) => stem+"ях" }; g = Fem; anim = Inanimate }; -- 6. Masc ending in -Vй (V = vowel) oper nDecl6Masc : Str ->CommNoun= \stem -> let n = nRegSoftMasc stem in { s = table { - SF Sg (Nom|Acc) => stem+"й"; - SF Pl Gen => stem+"ев" ; + NF Sg (Nom|Acc) => stem+"й"; + NF Pl Gen => stem+"ев" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -467,7 +467,7 @@ Paradigms: oper nDecl6Neut : Str ->CommNoun= \stem -> let n = nRegSoftNeut stem in { s = table { - SF Pl Gen => stem+"й" ; + NF Pl Gen => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -475,7 +475,7 @@ Paradigms: oper nDecl6Fem : Str ->CommNoun= \stem -> let n = nRegSoftFem stem in { s = table { - SF Pl Gen => stem+"й" ; + NF Pl Gen => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -483,7 +483,7 @@ Paradigms: oper nDecl7Masc : Str ->CommNoun= \stem -> let n = nDecl6Masc stem in { s = table { - SF Sg (Prepos _) => stem+"и" ; + NF Sg (Prepos _) => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -491,7 +491,7 @@ Paradigms: oper nDecl7Neut : Str ->CommNoun= \stem -> let n = nDecl6Neut stem in { s = table { - SF Sg (Prepos _) => stem+"и" ; + NF Sg (Prepos _) => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -499,7 +499,7 @@ Paradigms: oper nDecl7Fem : Str ->CommNoun= \stem -> let n = nDecl6Fem stem in { s = table { - SF Sg (Dat|Prepos _) => stem+"и" ; + NF Sg (Dat|Prepos _) => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -508,35 +508,35 @@ Paradigms: oper nDecl8 : Str ->CommNoun= \stem -> let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in { s = table { - SF Sg Nom => stem+"ь"; - SF Sg Gen => stem+"и" ; - SF Sg Dat => stem+"и" ; - SF Sg Acc => stem+"ь" ; - SF Sg Inst => stem+"ью" ; - SF Sg (Prepos _) => stem+"и" ; - SF Pl Nom => stem+"и" ; - SF Pl Gen => stem+"ей" ; - SF Pl Dat => stem+a+"м" ; - SF Pl Acc => stem+"и" ; - SF Pl Inst => stem+a+"ми" ; - SF Pl (Prepos _) => stem+a+"х" }; + NF Sg Nom => stem+"ь"; + NF Sg Gen => stem+"и" ; + NF Sg Dat => stem+"и" ; + NF Sg Acc => stem+"ь" ; + NF Sg Inst => stem+"ью" ; + NF Sg (Prepos _) => stem+"и" ; + NF Pl Nom => stem+"и" ; + NF Pl Gen => stem+"ей" ; + NF Pl Dat => stem+a+"м" ; + NF Pl Acc => stem+"и" ; + NF Pl Inst => stem+a+"ми" ; + NF Pl (Prepos _) => stem+a+"х" }; g = Fem; anim = Inanimate }; -- 9. Neut ending in -мя oper nDecl9 : Str ->CommNoun= \stem -> { s = table { - SF Sg Nom => stem+"мя"; - SF Sg Gen => stem+"мени" ; - SF Sg Dat => stem+"мени" ; - SF Sg Acc => stem+"мя" ; - SF Sg Inst => stem+"менем" ; - SF Sg (Prepos _) => stem+"мени" ; - SF Pl Nom => stem+"мена" ; - SF Pl Gen => stem+"мён" ; - SF Pl Dat => stem+"менам" ; - SF Pl Acc => stem+"мена" ; - SF Pl Inst => stem+"менами" ; - SF Pl (Prepos _) => stem+"менах" }; + NF Sg Nom => stem+"мя"; + NF Sg Gen => stem+"мени" ; + NF Sg Dat => stem+"мени" ; + NF Sg Acc => stem+"мя" ; + NF Sg Inst => stem+"менем" ; + NF Sg (Prepos _) => stem+"мени" ; + NF Pl Nom => stem+"мена" ; + NF Pl Gen => stem+"мён" ; + NF Pl Dat => stem+"менам" ; + NF Pl Acc => stem+"мена" ; + NF Pl Inst => stem+"менами" ; + NF Pl (Prepos _) => stem+"менах" }; g = Fem; anim = Inanimate }; -- 10. Masc in -oнoк @@ -551,8 +551,8 @@ Paradigms: oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y -> {s = table { - SF Sg c => x.s!(SF Sg c) ; - SF Pl c => y.s!(SF Pl c) + NF Sg c => x.s!(NF Sg c) ; + NF Pl c => y.s!(NF Pl c) } ; g = x.g ; anim = y.anim } ; @@ -560,113 +560,112 @@ Paradigms: -- Nouns inflected as adjectives. oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> { s = table { - SF Sg c => a.s!AF c Inanimate (ASg g) ; - SF Pl c => a.s!AF c Inanimate APl }; + NF Sg c => a.s!AF c Inanimate (ASg g) ; + NF Pl c => a.s!AF c Inanimate APl }; g = g; anim = Inanimate } ; -- Makes a noun animate. oper nAnimate : CommNoun -> CommNoun = \n -> { s = table { - SF Sg Acc => case n.g of { - Masc => n.s!(SF Sg Gen); - _ => n.s!(SF Sg Acc) + NF Sg Acc => case n.g of { + Masc => n.s!(NF Sg Gen); + _ => n.s!(NF Sg Acc) }; - SF Pl Acc => n.s!(SF Pl Gen); + NF Pl Acc => n.s!(NF Pl Gen); sf => n.s!sf } ; g = n.g ; anim = Animate } ; oper - CommNoun = {s : SubstForm => Str ; g : Gender ; anim : Animacy } ; - SubstFormDecl = SS1 SubstForm ; + SubstFormDecl = SS1 NForm ; oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> {s = table - { SF Sg Nom => brat ; - SF Sg Gen => brat+"а" ; - SF Sg Dat => brat+"у" ; - SF Sg Acc => brat +"а"; - SF Sg Inst => brat+"ом" ; - SF Sg (Prepos _) => brat+"е" ; - SF Pl Nom => brat+"ья" ; - SF Pl Gen => brat+"ьев" ; - SF Pl Dat => brat+"ьям" ; - SF Pl Acc => brat +"ьев"; - SF Pl Inst => brat+"ьями" ; - SF Pl (Prepos _) => brat+"ьяах" + { NF Sg Nom => brat ; + NF Sg Gen => brat+"а" ; + NF Sg Dat => brat+"у" ; + NF Sg Acc => brat +"а"; + NF Sg Inst => brat+"ом" ; + NF Sg (Prepos _) => brat+"е" ; + NF Pl Nom => brat+"ья" ; + NF Pl Gen => brat+"ьев" ; + NF Pl Dat => brat+"ьям" ; + NF Pl Acc => brat +"ьев"; + NF Pl Inst => brat+"ьями" ; + NF Pl (Prepos _) => brat+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> {s = table - { SF Sg Nom => brat ; - SF Sg Gen => brat+"а" ; - SF Sg Dat => brat+"у" ; - SF Sg Acc => brat +"а"; - SF Sg Inst => brat+"ом" ; - SF Sg (Prepos _) => brat+"е" ; - SF Pl Nom => brat+"ья" ; - SF Pl Gen => brat+"ьев" ; - SF Pl Dat => brat+"ьям" ; - SF Pl Acc => brat +"ьев"; - SF Pl Inst => brat+"ьями" ; - SF Pl (Prepos _) => brat+"ьяах" + { NF Sg Nom => brat ; + NF Sg Gen => brat+"а" ; + NF Sg Dat => brat+"у" ; + NF Sg Acc => brat +"а"; + NF Sg Inst => brat+"ом" ; + NF Sg (Prepos _) => brat+"е" ; + NF Pl Nom => brat+"ья" ; + NF Pl Gen => brat+"ьев" ; + NF Pl Dat => brat+"ьям" ; + NF Pl Acc => brat +"ьев"; + NF Pl Inst => brat+"ьями" ; + NF Pl (Prepos _) => brat+"ьяах" } ; g = Masc ; anim = Animate } ; oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> { s = table - { SF Sg Nom => derev+"о" ; - SF Sg Gen => derev+"а" ; - SF Sg Dat => derev+"у" ; - SF Sg Acc => derev +"о"; - SF Sg Inst => derev+"ом" ; - SF Sg (Prepos _) => derev+"е" ; - SF Pl Nom => derev+"ья" ; - SF Pl Gen => derev+"ьев" ; - SF Pl Dat => derev+"ьям" ; - SF Pl Acc => derev +"ья" ; - SF Pl Inst => derev+"ьями" ; - SF Pl (Prepos _) => derev+"ьяах" + { NF Sg Nom => derev+"о" ; + NF Sg Gen => derev+"а" ; + NF Sg Dat => derev+"у" ; + NF Sg Acc => derev +"о"; + NF Sg Inst => derev+"ом" ; + NF Sg (Prepos _) => derev+"е" ; + NF Pl Nom => derev+"ья" ; + NF Pl Gen => derev+"ьев" ; + NF Pl Dat => derev+"ьям" ; + NF Pl Acc => derev +"ья" ; + NF Pl Inst => derev+"ьями" ; + NF Pl (Prepos _) => derev+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> { s = table { - SF _ Nom => mnog+"о" ; - SF _ Gen => mnog +"их"; - SF _ Dat => mnog+"им" ; - SF _ Acc => mnog+"о" ; - SF _ Inst => mnog+"ими" ; - SF _ (Prepos _) => mnog+"их" + NF _ Nom => mnog+"о" ; + NF _ Gen => mnog +"их"; + NF _ Dat => mnog+"им" ; + NF _ Acc => mnog+"о" ; + NF _ Inst => mnog+"ими" ; + NF _ (Prepos _) => mnog+"их" } ; g = Neut ; anim = Inanimate } ; oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> { s = table { - SF _ Nom => menshinstv+"а" ; - SF _ Gen => menshinstv; - SF _ Dat => menshinstv+"ам" ; - SF _ Acc => menshinstv+"ва" ; - SF _ Inst => menshinstv+"ами" ; - SF _ (Prepos _) => menshinstv+"вах" + NF _ Nom => menshinstv+"а" ; + NF _ Gen => menshinstv; + NF _ Dat => menshinstv+"ам" ; + NF _ Acc => menshinstv+"ва" ; + NF _ Inst => menshinstv+"ами" ; + NF _ (Prepos _) => menshinstv+"вах" } ; g = Neut ; anim = Inanimate } ; oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> {s = table { - SF _ Nom => bolshinstv+"о" ; - SF _ Gen => bolshinstv+"а" ; - SF _ Dat => bolshinstv+"у" ; - SF _ Acc => bolshinstv+"о" ; - SF _ Inst => bolshinstv+"ом" ; - SF _ (Prepos _) => bolshinstv+"е" + NF _ Nom => bolshinstv+"о" ; + NF _ Gen => bolshinstv+"а" ; + NF _ Dat => bolshinstv+"у" ; + NF _ Acc => bolshinstv+"о" ; + NF _ Inst => bolshinstv+"ом" ; + NF _ (Prepos _) => bolshinstv+"е" } ; g = Neut ; anim = Inanimate } ; @@ -678,18 +677,18 @@ oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> oper eEnd_Decl: Str -> CommNoun = \vs -> { s = table { - SF Sg Nom => vs+"е" ; - SF Sg Gen => vs+"ех" ; - SF Sg Dat => vs+"ем" ; - SF Sg Acc => vs+"ех" ; - SF Sg Inst => vs+"еми" ; - SF Sg (Prepos _) => vs+"ех" ; - SF Pl Nom => vs+"е" ; - SF Pl Gen => vs +"ех"; - SF Pl Dat => vs+"ем" ; - SF Pl Acc => vs+ "ех" ; - SF Pl Inst => vs+"еми" ; - SF Pl (Prepos _) => vs+"ех" + NF Sg Nom => vs+"е" ; + NF Sg Gen => vs+"ех" ; + NF Sg Dat => vs+"ем" ; + NF Sg Acc => vs+"ех" ; + NF Sg Inst => vs+"еми" ; + NF Sg (Prepos _) => vs+"ех" ; + NF Pl Nom => vs+"е" ; + NF Pl Gen => vs +"ех"; + NF Pl Dat => vs+"ем" ; + NF Pl Acc => vs+ "ех" ; + NF Pl Inst => vs+"еми" ; + NF Pl (Prepos _) => vs+"ех" } ; g = Neut ; anim = Inanimate } ; @@ -804,7 +803,7 @@ oper eEnd_Decl: Str -> CommNoun = \vs -> vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; extAdjFromSubst: CommNoun -> Adjective = \ vse -> - {s = \\af => vse.s ! SF (numAF af) (caseAF af) } ; + {s = \\af => vse.s ! NF (numAF af) (caseAF af) } ; oper totDet: Adjective = {s = table { @@ -1289,7 +1288,7 @@ oper mkVerbPerfective: Str -> Str -> PresentVerb -> PastVerb -> Verbum = oper ProperName : Type = {s : Case => Str ; g : Gender ; anim : Animacy} ; -- -- mkCNProperName : CommNoun -> ProperName = \cn -> ---{s = \\c => cn.s! (SF Sg c); g=cn.g; anim = cn.anim }; +--{s = \\c => cn.s! (NF Sg c); g=cn.g; anim = cn.anim }; -- mkProperNameMasc : Str -> Animacy -> ProperName = \ivan, anim -> { s = table { Nom => ivan ; diff --git a/next-lib/src/russian/NounRus.gf b/next-lib/src/russian/NounRus.gf index 683f54d07..834f140c1 100644 --- a/next-lib/src/russian/NounRus.gf +++ b/next-lib/src/russian/NounRus.gf @@ -9,10 +9,10 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { s = \\c => case kazhduj.c of { Nom => kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++ - okhotnik.s ! kazhduj.n ! (extCase c) ; + okhotnik.s ! NF kazhduj.n (extCase c) ; _ => kazhduj.s ! AF (extCase c) okhotnik.anim (gNum okhotnik.g kazhduj.n) ++ - okhotnik.s ! kazhduj.n ! kazhduj.c }; + okhotnik.s ! NF kazhduj.n kazhduj.c }; n = kazhduj.n ; p = P3 ; pron = False; @@ -101,7 +101,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ; MassNP okhotnik = { - s = \\c => okhotnik.s ! Sg ! (extCase c) ; + s = \\c => okhotnik.s ! NF Sg (extCase c) ; n = Sg ; p = P3 ; pron = False; @@ -152,15 +152,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen }; IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen }; - UseN sb = - {s = \\n,c => sb.s ! SF n c ; - g = sb.g ; - anim = sb.anim - } ; - --- It is possible to use a function word as a common noun; the semantics is --- often existential or indexical. - UseN2 x = x ; + UseN noun = noun ; + UseN2 noun = noun ; -- The application of a function gives, in the first place, a common noun: -- "ключ от дома". From this, other rules of the resource grammar @@ -170,23 +163,25 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- respectively). Semantics will eventually tell when each -- of the readings is meaningful. - ComplN2 mama ivan = - {s = \\n, cas => case ivan.pron of - { True => ivan.s ! (mkPronForm cas No (Poss (gNum mama.g n))) ++ mama.s ! n ! cas; - False => mama.s ! n ! cas ++ mama.s2 ++ - ivan.s ! (mkPronForm mama.c Yes (Poss (gNum mama.g n))) - }; - g = mama.g ; - anim = mama.anim - } ; + 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.s2 ++ + x.s ! (case nf of {NF n c => mkPronForm f.c Yes (Poss (gNum f.g n))}) + }; + g = f.g ; + anim = f.anim + } ; -- Two-place functions add one argument place. -- There application starts by filling the first place. - ComplN3 poezd paris = - {s = \\n,c => poezd.s ! n ! c ++ poezd.s2 ++ paris.s ! (PF poezd.c Yes NonPoss) ; - g = poezd.g ; anim = poezd.anim; - s2 = poezd.s3; c = poezd.c2 + ComplN3 f x = { + s = \\nf => f.s ! nf ++ f.s2 ++ x.s ! (PF f.c Yes NonPoss) ; + g = f.g ; + anim = f.anim ; + s2 = f.s3 ; + c = f.c2 } ; @@ -194,43 +189,42 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { -- and in modification ("молодой человек"). Predication will be defined -- later, in the chapter on verbs. - AdjCN khoroshij novayaMashina = - {s = \\n, c => - khoroshij.s ! AF c novayaMashina.anim (gNum novayaMashina.g n) ++ - novayaMashina.s ! n ! c ; - g = novayaMashina.g ; - anim = novayaMashina.anim - } ; + AdjCN ap cn = { + s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gNum cn.g n)} ++ + cn.s ! nf ; + g = cn.g ; + anim = cn.anim + } ; -- This is a source of the "man with a telescope" ambiguity, and may produce -- strange things, like "машины всегда". -- Semantics will have to make finer distinctions among adverbials. - AdvCN chelovek uTelevizora = - {s = \\n,c => chelovek.s ! n ! c ++ uTelevizora.s ; - g = chelovek.g ; - anim = chelovek.anim + AdvCN cn adv = { + s = \\nf => cn.s ! nf ++ adv.s ; + g = cn.g ; + anim = cn.anim } ; -- Constructions like "the idea that two is even" are formed at the -- first place as common nouns, so that one can also have "a suggestion that...". - SentCN idea x = - {s = \\n,c => idea.s ! n ! c ++ x.s ; - g = idea.g; anim = idea.anim + SentCN idea x = { + s = \\nf => idea.s ! nf ++ x.s ; + g = idea.g ; + anim = idea.anim } ; - RelCN idea x = - {s = \\n,c => idea.s ! n ! c ++ x.s !(gNum idea.g n)!c!idea.anim ; - g = idea.g; anim = idea.anim + RelCN idea x = { + s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gNum idea.g n)!c!idea.anim} ; + g = idea.g ; + anim = idea.anim } ; - ApposCN cn s = - {s = \\n,c => cn.s ! n ! c ++ s.s! PF c No NonPoss ; - g = cn.g ; - anim = cn.anim + ApposCN cn s = { + s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c => PF c No NonPoss}) ; + g = cn.g ; + anim = cn.anim } ; - - } diff --git a/next-lib/src/russian/ParadigmsRus.gf b/next-lib/src/russian/ParadigmsRus.gf index b424ef102..677a92639 100644 --- a/next-lib/src/russian/ParadigmsRus.gf +++ b/next-lib/src/russian/ParadigmsRus.gf @@ -282,7 +282,7 @@ foreign = Foreign; -- +++ MG_UR: added +++ mkIndeclinableNoun = \s,g, anim -> { - s = table { SF _ _ => s } ; + s = table { NF _ _ => s } ; g = g ; anim = anim } ** {lock_N = <>}; @@ -293,19 +293,19 @@ foreign = Foreign; -- +++ MG_UR: added +++ nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> { s = table { - SF Sg Nom => nomSg ; - SF Sg Gen => genSg ; - SF Sg Dat => datSg ; - SF Sg Acc => accSg ; - SF Sg Inst => instSg ; - SF Sg (Prepos PrepOther) => preposSg ; - SF Sg (Prepos PrepVNa) => prepos2Sg ; - SF Pl Nom => nomPl ; - SF Pl Gen => genPl ; - SF Pl Dat => datPl ; - SF Pl Acc => accPl ; - SF Pl Inst => instPl ; - SF Pl (Prepos _) => preposPl + NF Sg Nom => nomSg ; + NF Sg Gen => genSg ; + NF Sg Dat => datSg ; + NF Sg Acc => accSg ; + NF Sg Inst => instSg ; + NF Sg (Prepos PrepOther) => preposSg ; + NF Sg (Prepos PrepVNa) => prepos2Sg ; + NF Pl Nom => nomPl ; + NF Pl Gen => genPl ; + NF Pl Dat => datPl ; + NF Pl Acc => accPl ; + NF Pl Inst => instPl ; + NF Pl (Prepos _) => preposPl } ; g = g ; anim = anim @@ -364,7 +364,7 @@ foreign = Foreign; -- +++ MG_UR: added +++ Masc => mkProperNameMasc ivan anim ; _ => mkProperNameFem ivan anim } ** {lock_PN =<>}; - nounPN n = {s=\\c => n.s! SF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; + nounPN n = {s=\\c => n.s! NF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; -- On the top level, it is maybe $CN$ that is used rather than $N$, and -- $NP$ rather than $PN$. diff --git a/next-lib/src/russian/QuestionRus.gf b/next-lib/src/russian/QuestionRus.gf index 28a9dfccd..369a29089 100644 --- a/next-lib/src/russian/QuestionRus.gf +++ b/next-lib/src/russian/QuestionRus.gf @@ -36,10 +36,10 @@ concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in { {s = \\pf => case kakoj.c of { Nom => kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++ - okhotnik.s ! kakoj.n ! (extCase pf) ; + okhotnik.s ! NF kakoj.n (extCase pf) ; _ => kakoj.s ! AF (extCase pf) okhotnik.anim (gNum okhotnik.g kakoj.n) ++ - okhotnik.s ! kakoj.n ! kakoj.c }; + okhotnik.s ! NF kakoj.n kakoj.c }; n = kakoj.n ; p = P3 ; pron = False; diff --git a/next-lib/src/russian/ResRus.gf b/next-lib/src/russian/ResRus.gf index d19ea1797..9203f0bd7 100644 --- a/next-lib/src/russian/ResRus.gf +++ b/next-lib/src/russian/ResRus.gf @@ -74,7 +74,7 @@ oper -- For the sake of shorter description these parameters are -- combined in the type SubstForm. param - SubstForm = SF Number Case ; + NForm = NF Number Case ; -- Real parameter types (i.e. ones on which words and phrases depend) @@ -114,14 +114,14 @@ oper mkPronForm: Case -> AfterPrep -> Possessive -> PronForm = \c,n,p -> PF c n p ; - - CommNounPhrase: Type = {s : Number => Case => Str; g : Gender; anim : Animacy} ; + CommNoun = {s : NForm => Str ; g : Gender ; anim : Animacy } ; + NounPhrase : Type = { s : PronForm => Str ; n : Number ; p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; - mkNP : Number -> CommNounPhrase -> NounPhrase = \n,chelovek -> - {s = \\cas => chelovek.s ! n ! (extCase cas) ; + mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> + {s = \\cas => chelovek.s ! NF n (extCase cas) ; n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; anim = chelovek.anim } ; @@ -387,14 +387,4 @@ oper mille : Size => Str = table { oper gg : Str -> Gender => Str = \s -> table {_ => s} ; -- CardOrd = NCard | NOrd ; - -----2 Transformations between parameter types --- - -oper - - numSF: SubstForm -> Number = \sf -> case sf of { SF n _ => n } ; - - caseSF: SubstForm -> Case = \sf -> case sf of { SF _ c => c } ; - }