The final fix of noun phrases with cardinal numbers in Russian

The support for variation of the noun depending on what cardinal it is
used with seems to be complete by now ("one child - two children -
five children" - Russian has different plural forms for "a child" when
counting). The case agreement in noun phrases that have additional
determiners besides numerals ("three little blind mice") is fixed too.
This commit is contained in:
Nikita Frolov
2012-01-16 17:15:08 +00:00
parent 8936c6d38e
commit 23f8ebe76e
11 changed files with 283 additions and 271 deletions

View File

@@ -58,15 +58,14 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
-- Gender parameter is due to multiple determiners (Numerals in Russian) -- Gender parameter is due to multiple determiners (Numerals in Russian)
-- like "mnogo" -- like "mnogo"
-- The determined noun has the case parameter specific for the determiner -- The determined noun has the case parameter specific for the determiner
-- 'q' is for 'quantity', quantity determiners demand genitive for the noun
Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; q: Bool} ; Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; size: Size} ;
Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; q: Bool} ; Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; size: Size} ;
-- Numeral -- Numeral
Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number} ; Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number ; size: Size} ;
Digits = {s : Str ; n : Number} ; ---- Digits = {s : Str ; n : Number ; size: Size} ; ----
-- Structural -- Structural
-- The conjunction has an inherent number, which is used when conjoining -- The conjunction has an inherent number, which is used when conjoining

View File

@@ -346,18 +346,18 @@ Paradigms:
let i = iAfter stem in let i = iAfter stem in
let o = oAfter stem in let o = oAfter stem in
{ s = table { { s = table {
NF Sg Nom => stem ; NF Sg Nom _ => stem ;
NF Sg Gen => stem+"а" ; NF Sg Gen _ => stem+"а" ;
NF Sg Dat => stem+"у" ; NF Sg Dat _ => stem+"у" ;
NF Sg Acc => stem ; NF Sg Acc _ => stem ;
NF Sg Inst => stem+o+"м" ; NF Sg Inst _ => stem+o+"м" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+i ; NF Pl Nom _ => stem+i ;
NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ; NF Pl Gen _ => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ;
NF Pl Dat => stem+"ам" ; NF Pl Dat _ => stem+"ам" ;
NF Pl Acc => stem+i ; NF Pl Acc _ => stem+i ;
NF Pl Inst => stem+"ами" ; NF Pl Inst _ => stem+"ами" ;
NF Pl (Prepos _) => stem+"ах" }; NF Pl (Prepos _) _ => stem+"ах" };
g = Masc; anim = Inanimate }; g = Masc; anim = Inanimate };
-- 1. Hard regular neuter inanimate, e.g. pravilo. -- 1. Hard regular neuter inanimate, e.g. pravilo.
@@ -367,18 +367,18 @@ Paradigms:
oper nRegHardNeut : Str ->CommNoun= \stem -> oper nRegHardNeut : Str ->CommNoun= \stem ->
let o = oAfter stem in let o = oAfter stem in
{ s = table { { s = table {
NF Sg Nom => stem+o ; NF Sg Nom _ => stem+o ;
NF Sg Gen => stem+"а" ; NF Sg Gen _ => stem+"а" ;
NF Sg Dat => stem+"у" ; NF Sg Dat _ => stem+"у" ;
NF Sg Acc => stem+o ; NF Sg Acc _ => stem+o ;
NF Sg Inst => stem+o+"м" ; NF Sg Inst _ => stem+o+"м" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ; NF Pl Nom _ => stem+case stem of { _+"к" => "и" ; _ => "а" } ;
NF Pl Gen => stem ; NF Pl Gen _ => stem ;
NF Pl Dat => stem+"ам" ; NF Pl Dat _ => stem+"ам" ;
NF Pl Acc => stem+"а" ; NF Pl Acc _ => stem+"а" ;
NF Pl Inst => stem+"ами" ; NF Pl Inst _ => stem+"ами" ;
NF Pl (Prepos _) => stem+"ах" }; NF Pl (Prepos _) _ => stem+"ах" };
g = Neut; anim = Inanimate }; g = Neut; anim = Inanimate };
-- 1. Hard regular feminine inanimate, e.g. karta. -- 1. Hard regular feminine inanimate, e.g. karta.
@@ -389,77 +389,77 @@ Paradigms:
let i = iAfter stem in let i = iAfter stem in
let o = oAfter stem in let o = oAfter stem in
{ s = table { { s = table {
NF Sg Nom => stem+"а" ; NF Sg Nom _ => stem+"а" ;
NF Sg Gen => stem+i ; NF Sg Gen _ => stem+i ;
NF Sg Dat => stem+"е" ; NF Sg Dat _ => stem+"е" ;
NF Sg Acc => stem+"у" ; NF Sg Acc _ => stem+"у" ;
NF Sg Inst => stem+o+"й" ; NF Sg Inst _ => stem+o+"й" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+i ; NF Pl Nom _ => stem+i ;
NF Pl Gen => stem ; NF Pl Gen _ => stem ;
NF Pl Dat => stem+"ам" ; NF Pl Dat _ => stem+"ам" ;
NF Pl Acc => stem+i ; NF Pl Acc _ => stem+i ;
NF Pl Inst => stem+"ами" ; NF Pl Inst _ => stem+"ами" ;
NF Pl (Prepos _) => stem+"ах" }; NF Pl (Prepos _) _ => stem+"ах" };
g = Fem; anim = Inanimate }; g = Fem; anim = Inanimate };
-- 2. Soft regular masculine inanimate, e.g. vichr' -- 2. Soft regular masculine inanimate, e.g. vichr'
oper nRegSoftMasc : Str ->CommNoun= \stem -> oper nRegSoftMasc : Str ->CommNoun= \stem ->
{ s = table { { s = table {
NF Sg Nom => stem+"ь"; NF Sg Nom _ => stem+"ь";
NF Sg Gen => stem+"я" ; NF Sg Gen _ => stem+"я" ;
NF Sg Dat => stem+"ю" ; NF Sg Dat _ => stem+"ю" ;
NF Sg Acc => stem+"ь" ; NF Sg Acc _ => stem+"ь" ;
NF Sg Inst => stem+"ем" ; NF Sg Inst _ => stem+"ем" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+"и" ; NF Pl Nom _ => stem+"и" ;
NF Pl Gen => stem+"ей" ; NF Pl Gen _ => stem+"ей" ;
NF Pl Dat => stem+"ям" ; NF Pl Dat _ => stem+"ям" ;
NF Pl Acc => stem+"и" ; NF Pl Acc _ => stem+"и" ;
NF Pl Inst => stem+"ями" ; NF Pl Inst _ => stem+"ями" ;
NF Pl (Prepos _) => stem+"ях" }; NF Pl (Prepos _) _ => stem+"ях" };
g = Masc; anim = Inanimate }; g = Masc; anim = Inanimate };
-- 2. Soft regular neuter inanimate, e.g. more -- 2. Soft regular neuter inanimate, e.g. more
oper nRegSoftNeut : Str ->CommNoun= \stem -> oper nRegSoftNeut : Str ->CommNoun= \stem ->
{ s = table { { s = table {
NF Sg Nom => stem+"е"; NF Sg Nom _ => stem+"е";
NF Sg Gen => stem+"я" ; NF Sg Gen _ => stem+"я" ;
NF Sg Dat => stem+"ю" ; NF Sg Dat _ => stem+"ю" ;
NF Sg Acc => stem+"е" ; NF Sg Acc _ => stem+"е" ;
NF Sg Inst => stem+"ем" ; NF Sg Inst _ => stem+"ем" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+"я" ; NF Pl Nom _ => stem+"я" ;
NF Pl Gen => stem+"ей" ; NF Pl Gen _ => stem+"ей" ;
NF Pl Dat => stem+"ям" ; NF Pl Dat _ => stem+"ям" ;
NF Pl Acc => stem+"я" ; NF Pl Acc _ => stem+"я" ;
NF Pl Inst => stem+"ями" ; NF Pl Inst _ => stem+"ями" ;
NF Pl (Prepos _) => stem+"ях" }; NF Pl (Prepos _) _ => stem+"ях" };
g = Neut; anim = Inanimate }; g = Neut; anim = Inanimate };
-- 2. Soft regular feminine inanimate, e.g. burya -- 2. Soft regular feminine inanimate, e.g. burya
oper nRegSoftFem : Str ->CommNoun= \stem -> oper nRegSoftFem : Str ->CommNoun= \stem ->
{ s = table { { s = table {
NF Sg Nom => stem+"я"; NF Sg Nom _ => stem+"я";
NF Sg Gen => stem+"и" ; NF Sg Gen _ => stem+"и" ;
NF Sg Dat => stem+"е" ; NF Sg Dat _ => stem+"е" ;
NF Sg Acc => stem+"ю" ; NF Sg Acc _ => stem+"ю" ;
NF Sg Inst => stem+"ей" ; NF Sg Inst _ => stem+"ей" ;
NF Sg (Prepos _) => stem+"е" ; NF Sg (Prepos _) _ => stem+"е" ;
NF Pl Nom => stem+"и" ; NF Pl Nom _ => stem+"и" ;
NF Pl Gen => stem+"ь" ; NF Pl Gen _ => stem+"ь" ;
NF Pl Dat => stem+"ям" ; NF Pl Dat _ => stem+"ям" ;
NF Pl Acc => stem+"и" ; NF Pl Acc _ => stem+"и" ;
NF Pl Inst => stem+"ями" ; NF Pl Inst _ => stem+"ями" ;
NF Pl (Prepos _) => stem+"ях" }; NF Pl (Prepos _) _ => stem+"ях" };
g = Fem; anim = Inanimate }; g = Fem; anim = Inanimate };
-- 6. Masc ending in -Vй (V = vowel) -- 6. Masc ending in -Vй (V = vowel)
oper nDecl6Masc : Str ->CommNoun= \stem -> oper nDecl6Masc : Str ->CommNoun= \stem ->
let n = nRegSoftMasc stem in let n = nRegSoftMasc stem in
{ s = table { { s = table {
NF Sg (Nom|Acc) => stem+"й"; NF Sg (Nom|Acc) _ => stem+"й";
NF Pl Gen => stem+"ев" ; NF Pl Gen _ => stem+"ев" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -467,7 +467,7 @@ Paradigms:
oper nDecl6Neut : Str ->CommNoun= \stem -> oper nDecl6Neut : Str ->CommNoun= \stem ->
let n = nRegSoftNeut stem in let n = nRegSoftNeut stem in
{ s = table { { s = table {
NF Pl Gen => stem+"й" ; NF Pl Gen _ => stem+"й" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -475,7 +475,7 @@ Paradigms:
oper nDecl6Fem : Str ->CommNoun= \stem -> oper nDecl6Fem : Str ->CommNoun= \stem ->
let n = nRegSoftFem stem in let n = nRegSoftFem stem in
{ s = table { { s = table {
NF Pl Gen => stem+"й" ; NF Pl Gen _ => stem+"й" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -483,7 +483,7 @@ Paradigms:
oper nDecl7Masc : Str ->CommNoun= \stem -> oper nDecl7Masc : Str ->CommNoun= \stem ->
let n = nDecl6Masc stem in let n = nDecl6Masc stem in
{ s = table { { s = table {
NF Sg (Prepos _) => stem+"и" ; NF Sg (Prepos _) _ => stem+"и" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -491,7 +491,7 @@ Paradigms:
oper nDecl7Neut : Str ->CommNoun= \stem -> oper nDecl7Neut : Str ->CommNoun= \stem ->
let n = nDecl6Neut stem in let n = nDecl6Neut stem in
{ s = table { { s = table {
NF Sg (Prepos _) => stem+"и" ; NF Sg (Prepos _) _ => stem+"и" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -499,7 +499,7 @@ Paradigms:
oper nDecl7Fem : Str ->CommNoun= \stem -> oper nDecl7Fem : Str ->CommNoun= \stem ->
let n = nDecl6Fem stem in let n = nDecl6Fem stem in
{ s = table { { s = table {
NF Sg (Dat|Prepos _) => stem+"и" ; NF Sg (Dat|Prepos _) _ => stem+"и" ;
sf => n.s!sf }; sf => n.s!sf };
g = n.g; anim = n.anim }; g = n.g; anim = n.anim };
@@ -508,35 +508,35 @@ Paradigms:
oper nDecl8 : Str ->CommNoun= \stem -> oper nDecl8 : Str ->CommNoun= \stem ->
let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in
{ s = table { { s = table {
NF Sg Nom => stem+"ь"; NF Sg Nom _ => stem+"ь";
NF Sg Gen => stem+"и" ; NF Sg Gen _ => stem+"и" ;
NF Sg Dat => stem+"и" ; NF Sg Dat _ => stem+"и" ;
NF Sg Acc => stem+"ь" ; NF Sg Acc _ => stem+"ь" ;
NF Sg Inst => stem+"ью" ; NF Sg Inst _ => stem+"ью" ;
NF Sg (Prepos _) => stem+"и" ; NF Sg (Prepos _) _ => stem+"и" ;
NF Pl Nom => stem+"и" ; NF Pl Nom _ => stem+"и" ;
NF Pl Gen => stem+"ей" ; NF Pl Gen _ => stem+"ей" ;
NF Pl Dat => stem+a+"м" ; NF Pl Dat _ => stem+a+"м" ;
NF Pl Acc => stem+"и" ; NF Pl Acc _ => stem+"и" ;
NF Pl Inst => stem+a+"ми" ; NF Pl Inst _ => stem+a+"ми" ;
NF Pl (Prepos _) => stem+a+"х" }; NF Pl (Prepos _) _ => stem+a+"х" };
g = Fem; anim = Inanimate }; g = Fem; anim = Inanimate };
-- 9. Neut ending in -мя -- 9. Neut ending in -мя
oper nDecl9 : Str ->CommNoun= \stem -> oper nDecl9 : Str ->CommNoun= \stem ->
{ s = table { { s = table {
NF Sg Nom => stem+"мя"; NF Sg Nom _ => stem+"мя";
NF Sg Gen => stem+"мени" ; NF Sg Gen _ => stem+"мени" ;
NF Sg Dat => stem+"мени" ; NF Sg Dat _ => stem+"мени" ;
NF Sg Acc => stem+"мя" ; NF Sg Acc _ => stem+"мя" ;
NF Sg Inst => stem+"менем" ; NF Sg Inst _ => stem+"менем" ;
NF Sg (Prepos _) => stem+"мени" ; NF Sg (Prepos _) _ => stem+"мени" ;
NF Pl Nom => stem+"мена" ; NF Pl Nom _ => stem+"мена" ;
NF Pl Gen => stem+"мён" ; NF Pl Gen _ => stem+"мён" ;
NF Pl Dat => stem+"менам" ; NF Pl Dat _ => stem+"менам" ;
NF Pl Acc => stem+"мена" ; NF Pl Acc _ => stem+"мена" ;
NF Pl Inst => stem+"менами" ; NF Pl Inst _ => stem+"менами" ;
NF Pl (Prepos _) => stem+"менах" }; NF Pl (Prepos _) _ => stem+"менах" };
g = Fem; anim = Inanimate }; g = Fem; anim = Inanimate };
-- 10. Masc in -oнoк -- 10. Masc in -oнoк
@@ -551,8 +551,8 @@ Paradigms:
oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y -> oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y ->
{s = table { {s = table {
NF Sg c => x.s!(NF Sg c) ; NF Sg c size => x.s!(NF Sg c size) ;
NF Pl c => y.s!(NF Pl c) NF Pl c size => y.s!(NF Pl c size)
} ; } ;
g = x.g ; anim = y.anim g = x.g ; anim = y.anim
} ; } ;
@@ -560,18 +560,18 @@ Paradigms:
-- Nouns inflected as adjectives. -- Nouns inflected as adjectives.
oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> oper nAdj : Adjective -> Gender ->CommNoun= \a,g ->
{ s = table { { s = table {
NF Sg c => a.s!AF c Inanimate (GSg g) ; NF Sg c _ => a.s!AF c Inanimate (GSg g) ;
NF Pl c => a.s!AF c Inanimate GPl }; NF Pl c _ => a.s!AF c Inanimate GPl };
g = g; anim = Inanimate } ; g = g; anim = Inanimate } ;
-- Makes a noun animate. -- Makes a noun animate.
oper nAnimate : CommNoun -> CommNoun = \n -> oper nAnimate : CommNoun -> CommNoun = \n ->
{ s = table { { s = table {
NF Sg Acc => case n.g of { NF Sg Acc size => case n.g of {
Masc => n.s!(NF Sg Gen); Masc => n.s!(NF Sg Gen size);
_ => n.s!(NF Sg Acc) _ => n.s!(NF Sg Acc size)
}; };
NF Pl Acc => n.s!(NF Pl Gen); NF Pl Acc size => n.s!(NF Pl Gen size);
sf => n.s!sf } ; sf => n.s!sf } ;
g = n.g ; g = n.g ;
anim = Animate anim = Animate
@@ -582,90 +582,90 @@ oper
oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat ->
{s = table {s = table
{ NF Sg Nom => brat ; { NF Sg Nom _ => brat ;
NF Sg Gen => brat+"а" ; NF Sg Gen _ => brat+"а" ;
NF Sg Dat => brat+"у" ; NF Sg Dat _ => brat+"у" ;
NF Sg Acc => brat +"а"; NF Sg Acc _ => brat +"а";
NF Sg Inst => brat+"ом" ; NF Sg Inst _ => brat+"ом" ;
NF Sg (Prepos _) => brat+"е" ; NF Sg (Prepos _) _ => brat+"е" ;
NF Pl Nom => brat+"ья" ; NF Pl Nom _ => brat+"ья" ;
NF Pl Gen => brat+"ьев" ; NF Pl Gen _ => brat+"ьев" ;
NF Pl Dat => brat+"ьям" ; NF Pl Dat _ => brat+"ьям" ;
NF Pl Acc => brat +"ьев"; NF Pl Acc _ => brat +"ьев";
NF Pl Inst => brat+"ьями" ; NF Pl Inst _ => brat+"ьями" ;
NF Pl (Prepos _) => brat+"ьяах" NF Pl (Prepos _) _ => brat+"ьяах"
} ; } ;
g = Masc ; anim = Inanimate g = Masc ; anim = Inanimate
} ; } ;
oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat ->
{s = table {s = table
{ NF Sg Nom => brat ; { NF Sg Nom _ => brat ;
NF Sg Gen => brat+"а" ; NF Sg Gen _ => brat+"а" ;
NF Sg Dat => brat+"у" ; NF Sg Dat _ => brat+"у" ;
NF Sg Acc => brat +"а"; NF Sg Acc _ => brat +"а";
NF Sg Inst => brat+"ом" ; NF Sg Inst _ => brat+"ом" ;
NF Sg (Prepos _) => brat+"е" ; NF Sg (Prepos _) _ => brat+"е" ;
NF Pl Nom => brat+"ья" ; NF Pl Nom _ => brat+"ья" ;
NF Pl Gen => brat+"ьев" ; NF Pl Gen _ => brat+"ьев" ;
NF Pl Dat => brat+"ьям" ; NF Pl Dat _ => brat+"ьям" ;
NF Pl Acc => brat +"ьев"; NF Pl Acc _ => brat +"ьев";
NF Pl Inst => brat+"ьями" ; NF Pl Inst _ => brat+"ьями" ;
NF Pl (Prepos _) => brat+"ьяах" NF Pl (Prepos _) _ => brat+"ьяах"
} ; } ;
g = Masc ; anim = Animate g = Masc ; anim = Animate
} ; } ;
oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev ->
{ s = table { s = table
{ NF Sg Nom => derev+"о" ; { NF Sg Nom _ => derev+"о" ;
NF Sg Gen => derev+"а" ; NF Sg Gen _ => derev+"а" ;
NF Sg Dat => derev+"у" ; NF Sg Dat _ => derev+"у" ;
NF Sg Acc => derev +"о"; NF Sg Acc _ => derev +"о";
NF Sg Inst => derev+"ом" ; NF Sg Inst _ => derev+"ом" ;
NF Sg (Prepos _) => derev+"е" ; NF Sg (Prepos _) _ => derev+"е" ;
NF Pl Nom => derev+"ья" ; NF Pl Nom _ => derev+"ья" ;
NF Pl Gen => derev+"ьев" ; NF Pl Gen _ => derev+"ьев" ;
NF Pl Dat => derev+"ьям" ; NF Pl Dat _ => derev+"ьям" ;
NF Pl Acc => derev +"ья" ; NF Pl Acc _ => derev +"ья" ;
NF Pl Inst => derev+"ьями" ; NF Pl Inst _ => derev+"ьями" ;
NF Pl (Prepos _) => derev+"ьяах" NF Pl (Prepos _) _ => derev+"ьяах"
} ; } ;
g = Masc ; anim = Inanimate g = Masc ; anim = Inanimate
} ; } ;
oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog ->
{ s = table { { s = table {
NF _ Nom => mnog+"о" ; NF _ Nom _ => mnog+"о" ;
NF _ Gen => mnog +"их"; NF _ Gen _ => mnog +"их";
NF _ Dat => mnog+"им" ; NF _ Dat _ => mnog+"им" ;
NF _ Acc => mnog+"о" ; NF _ Acc _ => mnog+"о" ;
NF _ Inst => mnog+"ими" ; NF _ Inst _ => mnog+"ими" ;
NF _ (Prepos _) => mnog+"их" NF _ (Prepos _) _ => mnog+"их"
} ; } ;
g = Neut ; anim = Inanimate g = Neut ; anim = Inanimate
} ; } ;
oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> oper oEnd_PlDecl: Str -> CommNoun = \menshinstv ->
{ s = table { { s = table {
NF _ Nom => menshinstv+"а" ; NF _ Nom _ => menshinstv+"а" ;
NF _ Gen => menshinstv; NF _ Gen _ => menshinstv;
NF _ Dat => menshinstv+"ам" ; NF _ Dat _ => menshinstv+"ам" ;
NF _ Acc => menshinstv+"ва" ; NF _ Acc _ => menshinstv+"ва" ;
NF _ Inst => menshinstv+"ами" ; NF _ Inst _ => menshinstv+"ами" ;
NF _ (Prepos _) => menshinstv+"вах" NF _ (Prepos _) _ => menshinstv+"вах"
} ; } ;
g = Neut ; anim = Inanimate g = Neut ; anim = Inanimate
} ; } ;
oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv ->
{s = table { {s = table {
NF _ Nom => bolshinstv+"о" ; NF _ Nom _ => bolshinstv+"о" ;
NF _ Gen => bolshinstv+"а" ; NF _ Gen _ => bolshinstv+"а" ;
NF _ Dat => bolshinstv+"у" ; NF _ Dat _ => bolshinstv+"у" ;
NF _ Acc => bolshinstv+"о" ; NF _ Acc _ => bolshinstv+"о" ;
NF _ Inst => bolshinstv+"ом" ; NF _ Inst _ => bolshinstv+"ом" ;
NF _ (Prepos _) => bolshinstv+"е" NF _ (Prepos _) _ => bolshinstv+"е"
} ; } ;
g = Neut ; anim = Inanimate g = Neut ; anim = Inanimate
} ; } ;
@@ -677,18 +677,18 @@ oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv ->
oper eEnd_Decl: Str -> CommNoun = \vs -> oper eEnd_Decl: Str -> CommNoun = \vs ->
{ s = table { { s = table {
NF Sg Nom => vs+"е" ; NF Sg Nom _ => vs+"е" ;
NF Sg Gen => vs+"ех" ; NF Sg Gen _ => vs+"ех" ;
NF Sg Dat => vs+"ем" ; NF Sg Dat _ => vs+"ем" ;
NF Sg Acc => vs+"ех" ; NF Sg Acc _ => vs+"ех" ;
NF Sg Inst => vs+"еми" ; NF Sg Inst _ => vs+"еми" ;
NF Sg (Prepos _) => vs+"ех" ; NF Sg (Prepos _) _ => vs+"ех" ;
NF Pl Nom => vs+"е" ; NF Pl Nom _ => vs+"е" ;
NF Pl Gen => vs +"ех"; NF Pl Gen _ => vs +"ех";
NF Pl Dat => vs+"ем" ; NF Pl Dat _ => vs+"ем" ;
NF Pl Acc => vs+ "ех" ; NF Pl Acc _ => vs+ "ех" ;
NF Pl Inst => vs+"еми" ; NF Pl Inst _ => vs+"еми" ;
NF Pl (Prepos _) => vs+"ех" NF Pl (Prepos _) _ => vs+"ех"
} ; } ;
g = Neut ; anim = Inanimate g = Neut ; anim = Inanimate
} ; } ;
@@ -803,7 +803,7 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ;
extAdjFromSubst: CommNoun -> Adjective = \ vse -> extAdjFromSubst: CommNoun -> Adjective = \ vse ->
{s = \\af => vse.s ! NF (numAF af) (caseAF af) } ; {s = \\af => vse.s ! NF (numAF af) (caseAF af) plg } ;
oper totDet: Adjective = {s = table { oper totDet: Adjective = {s = table {

View File

@@ -6,23 +6,31 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
lin lin
DetCN kazhduj okhotnik = { DetCN kazhduj okhotnik = {
s = \\c => case kazhduj.q of { s = \\c => case kazhduj.size of {
False => nom =>
case kazhduj.c of { case kazhduj.c of {
Nom => Nom =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF kazhduj.n (extCase c) ; okhotnik.s ! NF kazhduj.n (extCase c) nom ;
_ => _ =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF kazhduj.n kazhduj.c } ; okhotnik.s ! NF kazhduj.n kazhduj.c nom } ;
True => sgg =>
case kazhduj.c of { case kazhduj.c of {
Nom => Nom =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF kazhduj.n Gen ; okhotnik.s ! NF Sg Gen sgg;
_ => _ =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF kazhduj.n Gen } okhotnik.s ! NF Pl kazhduj.c sgg } ;
plg =>
case kazhduj.c of {
Nom =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF Pl Gen plg ;
_ =>
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
okhotnik.s ! NF Pl kazhduj.c plg }
}; };
n = kazhduj.n ; n = kazhduj.n ;
p = P3 ; p = P3 ;
@@ -86,8 +94,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
n = num.n ; n = num.n ;
g = quant.g; g = quant.g;
c = quant.c; c = quant.c;
-- q = notB (isNil (num.s ! Nom ! Masc)) size = quant.size
q = False;
} ; } ;
DetQuant quant num = { DetQuant quant num = {
@@ -95,8 +102,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
n = num.n ; n = num.n ;
g = quant.g; g = quant.g;
c = quant.c; c = quant.c;
-- q = notB (isNil (num.s ! Nom ! Masc)) size = num.size
q = False;
} ; } ;
{- {-
DetArtOrd quant num ord = { DetArtOrd quant num ord = {
@@ -116,7 +122,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
-- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ; -- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ;
MassNP okhotnik = { MassNP okhotnik = {
s = \\c => okhotnik.s ! NF Sg (extCase c) ; s = \\c => okhotnik.s ! NF Sg (extCase c) nom ;
n = Sg ; n = Sg ;
p = P3 ; p = P3 ;
pron = False; pron = False;
@@ -146,11 +152,11 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
anim = okhotnik.anim anim = okhotnik.anim
} ; } ;
-} -}
PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; q = False} ; PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; size = nom} ;
NumCard c = c ; NumCard c = c ;
NumSg = {s = \\_,_,_ => [] ; n = Sg} ; NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = sgg} ;
NumPl = {s = \\_,_,_ => [] ; n = Pl} ; NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = plg} ;
OrdNumeral numeral = variants {} ; ---- TODO; needed to compile Constructors OrdNumeral numeral = variants {} ; ---- TODO; needed to compile Constructors
OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors
@@ -158,14 +164,14 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
-- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ; -- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ;
NumNumeral n = n ; NumNumeral n = n ;
NumDigits n = {s = \\_,_,_ => n.s ; n = n.n} ; NumDigits n = {s = \\_,_,_ => n.s ; n = n.n ; size = n.size } ;
AdNum adn num = {s = \\c,a,n => adn.s ++ num.s!c!a!n ; n = num.n} ; AdNum adn num = {s = \\c,a,n => adn.s ++ num.s!c!a!n ; n = num.n ; size = num.size} ;
OrdSuperl a = {s = a.s!Posit}; OrdSuperl a = {s = a.s!Posit};
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; size = nom };
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; size = nom };
UseN noun = noun ; UseN noun = noun ;
UseN2 noun = noun ; UseN2 noun = noun ;
@@ -180,9 +186,9 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
ComplN2 f x = { ComplN2 f x = {
s = \\nf => case x.pron of { s = \\nf => case x.pron of {
True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ; True => x.s ! (case nf of {NF n c size => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ;
False => f.s ! nf ++ f.c2.s ++ False => f.s ! nf ++ f.c2.s ++
x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) x.s ! (case nf of {NF n c size => mkPronForm f.c2.c Yes (Poss (gennum f.g n))})
}; };
g = f.g ; g = f.g ;
anim = f.anim anim = f.anim
@@ -220,7 +226,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
-- later, in the chapter on verbs. -- later, in the chapter on verbs.
AdjCN ap cn = { AdjCN ap cn = {
s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gennum cn.g n)} ++ s = \\nf => ap.s ! case nf of {NF Sg Gen sgg => AF Nom cn.anim GPl ;
NF n c size => AF c cn.anim (gennum cn.g n)} ++
cn.s ! nf ; cn.s ! nf ;
g = cn.g ; g = cn.g ;
anim = cn.anim anim = cn.anim
@@ -246,14 +253,14 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
} ; } ;
RelCN idea x = { RelCN idea x = {
s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gennum idea.g n)!c!idea.anim} ; s = \\nf => idea.s ! nf ++ case nf of {NF n c size => x.s ! (gennum idea.g n)!c!idea.anim} ;
g = idea.g ; g = idea.g ;
anim = idea.anim anim = idea.anim
} ; } ;
---- AR 17/12/2008 ---- AR 17/12/2008
ApposCN cn s = { ApposCN cn s = {
s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c => PF c No NonPoss}) ; s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c size => PF c No NonPoss}) ;
g = cn.g ; g = cn.g ;
anim = cn.anim anim = cn.anim
} ; } ;

View File

@@ -11,9 +11,9 @@ lincat Digit = {s : DForm => Gender => Animacy => Case => Str ; size : Size} ;
lincat Sub10 = {s : Place => DForm => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub10 = {s : Place => DForm => Gender => Animacy => Case => Str ; size : Size} ;
lincat Sub100 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub100 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ;
lincat Sub1000 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; lincat Sub1000 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ;
lincat Sub1000000 = {s : Gender => Animacy => Case => Str} ; lincat Sub1000000 = {s : Gender => Animacy => Case => Str ; size : Size} ;
lin num x = {s = \\ g,a,c => x.s ! g ! a ! c; n = Pl}; ---- n TODO ; Size? AR 18/12/2007 lin num x = {s = \\ g,a,c => x.s ! g ! a ! c; n = Pl ; size = x.size};
lin n2 = lin n2 =
{s = table {unit => \\ g, a, c => {s = table {unit => \\ g, a, c =>
@@ -201,7 +201,7 @@ lin pot110 =
lin pot111 = lin pot111 =
{s = \\ p => nadsat "один" ; size = plg} ; --- 11 {s = \\ p => nadsat "один" ; size = plg} ; --- 11
lin pot1to19 d = lin pot1to19 d =
{s = table {_ => d.s ! teen} ; size = plg} ; {s = table {_ => d.s ! teen} ; size = d.size} ;
lin pot0as1 n = lin pot0as1 n =
{s = table {p => n.s ! p ! unit} ; size = n.size} ; {s = table {p => n.s ! p ! unit} ; size = n.size} ;
lin pot1 d = lin pot1 d =
@@ -215,11 +215,11 @@ lin pot2 d =
lin pot2plus d e = lin pot2plus d e =
{s = \\ p, g, a, c => d.s ! p ! hund ! g ! a ! c ++ e.s ! indep ! g ! a ! c ; size = e.size} ; {s = \\ p, g, a, c => d.s ! p ! hund ! g ! a ! c ++ e.s ! indep ! g ! a ! c ; size = e.size} ;
lin pot2as3 n = lin pot2as3 n =
{s = n.s ! indep} ; {s = n.s ! indep ; size = n.size} ;
lin pot3 n = lin pot3 n =
{s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size} ; {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ; size = n.size} ;
lin pot3plus n m = lin pot3plus n m =
{s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c} ; {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c ; size = m.size} ;
--- TODO --- TODO
--- raz/odin --- raz/odin
@@ -230,36 +230,39 @@ lin pot3plus n m =
Dig = TDigit ; Dig = TDigit ;
lin lin
IDig d = {s = d.s ; n = d.n} ; IDig d = {s = d.s ; n = d.n ; size = d.size} ;
IIDig d i = { IIDig d i = {
s = d.s ++ i.s ; s = d.s ++ i.s ;
n = Pl n = Pl ;
size = i.size
} ; } ;
D_0 = mkDig "0" ; D_0 = mk2Dig "0" plg ;
D_1 = mk3Dig "1" "1" Sg ; ---- D_1 = mk4Dig "1" "1" Sg nom ; ----
D_2 = mkDig "2" ; D_2 = mk2Dig "2" sgg ;
D_3 = mkDig "3" ; D_3 = mk2Dig "3" sgg ;
D_4 = mkDig "4" ; D_4 = mk2Dig "4" sgg ;
D_5 = mkDig "5" ; D_5 = mk2Dig "5" plg ;
D_6 = mkDig "6" ; D_6 = mk2Dig "6" plg ;
D_7 = mkDig "7" ; D_7 = mk2Dig "7" plg ;
D_8 = mkDig "8" ; D_8 = mk2Dig "8" plg ;
D_9 = mkDig "9" ; D_9 = mk2Dig "9" plg ;
oper oper
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mk3Dig : Str -> Str -> Size -> TDigit = \c,o,size -> mk4Dig c o Pl size ;
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "o") ; mk2Dig : Str -> Size -> TDigit = \c,size -> mk3Dig c (c + "o") size ;
mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { mk4Dig : Str -> Str -> Number -> Size -> TDigit = \c,o,n,size -> {
s = c ; ---- gender s = c ; ---- gender
n = n n = n ;
size = size
} ; } ;
TDigit = { TDigit = {
n : Number ; n : Number ;
s : Str s : Str ;
size : Size
} ; } ;
} }

View File

@@ -285,7 +285,7 @@ foreign = Foreign; -- +++ MG_UR: added +++
mkIndeclinableNoun = \s,g, anim -> mkIndeclinableNoun = \s,g, anim ->
{ {
s = table { NF _ _ => s } ; s = table { NF _ _ _ => s } ;
g = g ; g = g ;
anim = anim anim = anim
} ** {lock_N = <>}; } ** {lock_N = <>};
@@ -296,19 +296,19 @@ foreign = Foreign; -- +++ MG_UR: added +++
nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim ->
{ {
s = table { s = table {
NF Sg Nom => nomSg ; NF Sg Nom _ => nomSg ;
NF Sg Gen => genSg ; NF Sg Gen _ => genSg ;
NF Sg Dat => datSg ; NF Sg Dat _ => datSg ;
NF Sg Acc => accSg ; NF Sg Acc _ => accSg ;
NF Sg Inst => instSg ; NF Sg Inst _ => instSg ;
NF Sg (Prepos PrepOther) => preposSg ; NF Sg (Prepos PrepOther) _ => preposSg ;
NF Sg (Prepos PrepVNa) => prepos2Sg ; NF Sg (Prepos PrepVNa) _ => prepos2Sg ;
NF Pl Nom => nomPl ; NF Pl Nom _ => nomPl ;
NF Pl Gen => genPl ; NF Pl Gen _ => genPl ;
NF Pl Dat => datPl ; NF Pl Dat _ => datPl ;
NF Pl Acc => accPl ; NF Pl Acc _ => accPl ;
NF Pl Inst => instPl ; NF Pl Inst _ => instPl ;
NF Pl (Prepos _) => preposPl NF Pl (Prepos _) _ => preposPl
} ; } ;
g = g ; g = g ;
anim = anim anim = anim
@@ -370,7 +370,7 @@ foreign = Foreign; -- +++ MG_UR: added +++
} ; } ;
Pl => mkProperNamePl ivan anim Pl => mkProperNamePl ivan anim
} ** {lock_PN =<>}; } ** {lock_PN =<>};
nounPN n = {s=\\c => n.s! NF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; nounPN n = {s=\\c => n.s! NF Sg c nom; anim=n.anim; g=n.g; lock_PN=<>};
-- On the top level, it is maybe $CN$ that is used rather than $N$, and -- On the top level, it is maybe $CN$ that is used rather than $N$, and
-- $NP$ rather than $PN$. -- $NP$ rather than $PN$.

View File

@@ -17,7 +17,7 @@ concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in {
UttNP np = {s = np.s ! PF Acc No NonPoss} ; UttNP np = {s = np.s ! PF Acc No NonPoss} ;
UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ; UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ;
UttAdv adv = adv ; UttAdv adv = adv ;
UttCN n = {s = n.s ! NF Sg Nom} ; UttCN n = {s = n.s ! NF Sg Nom nom} ;
UttCard n = {s = n.s ! Neut ! Inanimate ! Nom} ; UttCard n = {s = n.s ! Neut ! Inanimate ! Nom} ;
UttAP ap = {s = ap.s ! AF Nom Inanimate (GSg Neut)} ; ---- gennum ? (AR) UttAP ap = {s = ap.s ! AF Nom Inanimate (GSg Neut)} ; ---- gennum ? (AR)

View File

@@ -36,10 +36,10 @@ concrete QuestionRus of Question = CatRus ** open ResRus, Prelude in {
{s = \\pf => case kakoj.c of { {s = \\pf => case kakoj.c of {
Nom => Nom =>
kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++
okhotnik.s ! NF kakoj.n (extCase pf) ; okhotnik.s ! NF kakoj.n (extCase pf) nom ;
_ => _ =>
kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++
okhotnik.s ! NF kakoj.n kakoj.c }; okhotnik.s ! NF kakoj.n kakoj.c plg };
n = kakoj.n ; n = kakoj.n ;
p = P3 ; p = P3 ;
pron = False; pron = False;

View File

@@ -31,6 +31,7 @@ param
-- Anteriority = Simul | Anter ; -- Anteriority = Simul | Anter ;
ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper;
-- "naked infinitive" clauses -- "naked infinitive" clauses
-- DetForm = NonNum | Few | Many ;
-- A number of Russian nouns have common gender. They can -- A number of Russian nouns have common gender. They can
-- denote both males and females: "умница" (a clever person), "инженер" (an engineer). -- denote both males and females: "умница" (a clever person), "инженер" (an engineer).
@@ -77,7 +78,7 @@ oper
-- For the sake of shorter description these parameters are -- For the sake of shorter description these parameters are
-- combined in the type SubstForm. -- combined in the type SubstForm.
param param
NForm = NF Number Case ; NForm = NF Number Case Size ;
-- Real parameter types (i.e. ones on which words and phrases depend) -- Real parameter types (i.e. ones on which words and phrases depend)
@@ -124,7 +125,9 @@ oper
p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ;
mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek ->
{s = \\cas => chelovek.s ! NF n (extCase cas) ; {s = \\cas => chelovek.s ! NF n (extCase cas) (case n of {
Sg => nom ;
Pl => plg });
n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ;
anim = chelovek.anim anim = chelovek.anim
} ; } ;

View File

@@ -14,7 +14,7 @@ lin
above_Prep = { s = "над" ; c = Inst} ; above_Prep = { s = "над" ; c = Inst} ;
after_Prep = { s = "после" ; c = Gen }; after_Prep = { s = "после" ; c = Gen };
-- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; -- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ;
all_Predet = vseDetPl ** { g = PNoGen; c = Nom; q = False} ; all_Predet = vseDetPl ** { g = PNoGen; c = Nom; size = nom} ;
almost_AdA = {s= "почти"} ; almost_AdA = {s= "почти"} ;
almost_AdN = {s= "почти"} ; almost_AdN = {s= "почти"} ;
although_Subj = ss "хотя" ; although_Subj = ss "хотя" ;
@@ -33,11 +33,11 @@ lin
during_Prep = { s = ["в течение"] ; c = Gen}; during_Prep = { s = ["в течение"] ; c = Gen};
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
-- comma is not visible in GUI! -- comma is not visible in GUI!
every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; q = False} ; every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; size = nom} ;
everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ;
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
everywhere_Adv = ss "везде" ; everywhere_Adv = ss "везде" ;
few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; q = True}; few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; size = plg};
--- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj --- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj
for_Prep = { s = "для" ; c = Gen }; for_Prep = { s = "для" ; c = Gen };
from_Prep = { s = "от" ; c = Gen }; from_Prep = { s = "от" ; c = Gen };
@@ -54,19 +54,19 @@ lin
in_Prep = { s = "в" ; c = Prepos PrepVNa } ; in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
it_Pron = pronOno ; it_Pron = pronOno ;
less_CAdv = {s="менее"; p=""} ; less_CAdv = {s="менее"; p=""} ;
many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ;
more_CAdv = {s="более"; p=""} ; more_CAdv = {s="более"; p=""} ;
most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ;
-- inanimate, Sg: "большинство телефонов безмолству-ет" -- inanimate, Sg: "большинство телефонов безмолству-ет"
-- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ; -- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
-- animate, Pl: "большинство учащихся хорошо подготовлен-ы" -- animate, Pl: "большинство учащихся хорошо подготовлен-ы"
much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; -- same as previous much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; -- same as previous
must_VV = verbDolzhen ; must_VV = verbDolzhen ;
no_Utt = ss ["Нет"] ; no_Utt = ss ["Нет"] ;
on_Prep = { s = "на" ; c = Prepos PrepVNa }; on_Prep = { s = "на" ; c = Prepos PrepVNa };
--- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; --- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom };
--AStaruyj : --AStaruyj :
only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; q = False }; only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; size = nom };
or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ; or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ;
otherwise_PConj = ss "иначе" ; otherwise_PConj = ss "иначе" ;
part_Prep = { s = "" ; c = Nom}; -- missing in Russian part_Prep = { s = "" ; c = Nom}; -- missing in Russian
@@ -76,17 +76,17 @@ lin
she_Pron = pronOna ; she_Pron = pronOna ;
so_AdA = ss "так"; so_AdA = ss "так";
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>}); somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ;
somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; q = False} ; somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; size = nom} ;
something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ;
somewhere_Adv = ss "где-нибудь" ; somewhere_Adv = ss "где-нибудь" ;
that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ;
there_Adv = ss "там" ; there_Adv = ss "там" ;
there7to_Adv = ss "туда" ; there7to_Adv = ss "туда" ;
there7from_Adv = ss "оттуда" ; there7from_Adv = ss "оттуда" ;
therefore_PConj = ss "следовательно" ; therefore_PConj = ss "следовательно" ;
they_Pron = pronOni; they_Pron = pronOni;
this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ;
through_Prep = { s = "через" ; c = Acc }; through_Prep = { s = "через" ; c = Acc };
to_Prep = { s = "к" ; c = Dat }; to_Prep = { s = "к" ; c = Dat };
too_AdA = ss "слишком" ; too_AdA = ss "слишком" ;

View File

@@ -9,21 +9,21 @@ lin
FloatPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ; FloatPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ;
NumPN n = {s = table {_ => n.s ! Neut ! Inanimate ! Nom} ; g = Neut; anim = Inanimate } ; NumPN n = {s = table {_ => n.s ! Neut ! Inanimate ! Nom} ; g = Neut; anim = Inanimate } ;
CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) ++ i.s; CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) nom ++ i.s;
n = Sg ; p = P3 ; n = Sg ; p = P3 ;
g = PGen cn.g ; anim = cn.anim ; pron = False } ; g = PGen cn.g ; anim = cn.anim ; pron = False } ;
CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) nom
++ n.s ! cn.g ! cn. anim ! (extCase cas) ; ++ n.s ! cn.g ! cn. anim ! (extCase cas) ;
n = Sg ; p = P3 ; n = Sg ; p = P3 ;
g = PGen cn.g ; anim = cn.anim ; pron = False } ; g = PGen cn.g ; anim = cn.anim ; pron = False } ;
CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas); CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas) nom;
n = Sg ; p = P3 ; n = Sg ; p = P3 ;
g = PGen cn.g ; anim = cn.anim ; pron = False } ; g = PGen cn.g ; anim = cn.anim ; pron = False } ;
SymbS sy = sy ; SymbS sy = sy ;
SymbNum sy = { s = \\_,_,_=>sy.s; n=Pl }; SymbNum sy = { s = \\_,_,_=>sy.s; n=Pl ; size = plg };
SymbOrd sy = { s = \\af => sy.s } ; SymbOrd sy = { s = \\af => sy.s } ;

View File

@@ -87,19 +87,19 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in {
CompCN zloj ={ CompCN zloj ={
s= \\clf,gn,p => s= \\clf,gn,p =>
let num = numGenNum gn ; let num = numGenNum gn ;
zlojsg = zloj.s ! NF Sg Nom ; zlojsg = zloj.s ! NF Sg Nom nom ;
zlojpl = zloj.s ! NF Pl Nom zlojpl = zloj.s ! NF Pl Nom plg
in in
case clf of { case clf of {
-- person is ignored ! -- person is ignored !
ClInfinit => "быть" ++ zloj.s ! NF Sg Inst ; ClInfinit => "быть" ++ zloj.s ! NF Sg Inst nom ;
ClImper => case gn of ClImper => case gn of
{ (GSg _) => "будь" ++ zloj.s ! NF Sg Inst ; { (GSg _) => "будь" ++ zloj.s ! NF Sg Inst plg ;
GPl => "будьте" ++ zloj.s ! NF Pl Inst GPl => "будьте" ++ zloj.s ! NF Pl Inst plg
}; };
-- infinitive does not save GenNum, -- infinitive does not save GenNum,
-- but indicative does for the sake of adjectival predication ! -- but indicative does for the sake of adjectival predication !
ClIndic Present _ => zloj.s ! NF num Nom ; ClIndic Present _ => zloj.s ! NF num Nom nom ;
ClIndic PastRus _ => case gn of ClIndic PastRus _ => case gn of
{ (GSg Fem) => "была" ++ zlojsg ; { (GSg Fem) => "была" ++ zlojsg ;
(GSg Masc) => "был" ++ zlojsg ; (GSg Masc) => "был" ++ zlojsg ;