forked from GitHub/gf-core
SubstForm in Russian is replaced with NForm like in Bulgarian and is used more widely
This commit is contained in:
@@ -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} ;
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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$.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 } ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user