mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
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:
@@ -58,15 +58,14 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
|
||||
-- Gender parameter is due to multiple determiners (Numerals in Russian)
|
||||
-- like "mnogo"
|
||||
-- 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} ;
|
||||
Predet, Quant = {s : AdjForm => Str; 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; size: Size} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number} ;
|
||||
Digits = {s : Str ; n : Number} ; ----
|
||||
Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number ; size: Size} ;
|
||||
Digits = {s : Str ; n : Number ; size: Size} ; ----
|
||||
|
||||
-- Structural
|
||||
-- The conjunction has an inherent number, which is used when conjoining
|
||||
|
||||
@@ -346,18 +346,18 @@ Paradigms:
|
||||
let i = iAfter stem in
|
||||
let o = oAfter stem in
|
||||
{ s = table {
|
||||
NF Sg Nom => stem ;
|
||||
NF Sg Gen => stem+"а" ;
|
||||
NF Sg Dat => stem+"у" ;
|
||||
NF Sg Acc => stem ;
|
||||
NF Sg Inst => stem+o+"м" ;
|
||||
NF Sg (Prepos _) => stem+"е" ;
|
||||
NF Pl Nom => stem+i ;
|
||||
NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ;
|
||||
NF Pl Dat => stem+"ам" ;
|
||||
NF Pl Acc => stem+i ;
|
||||
NF Pl Inst => stem+"ами" ;
|
||||
NF Pl (Prepos _) => stem+"ах" };
|
||||
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 {
|
||||
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+"ах" };
|
||||
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 {
|
||||
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+"ах" };
|
||||
NF Sg Nom _ => stem+"а" ;
|
||||
NF Sg Gen _ => stem+i ;
|
||||
NF Sg Dat _ => stem+"е" ;
|
||||
NF Sg Acc _ => stem+"у" ;
|
||||
NF Sg Inst _ => stem+o+"й" ;
|
||||
NF Sg (Prepos _) _ => stem+"е" ;
|
||||
NF Pl Nom _ => stem+i ;
|
||||
NF Pl Gen _ => stem ;
|
||||
NF Pl Dat _ => stem+"ам" ;
|
||||
NF Pl Acc _ => stem+i ;
|
||||
NF Pl Inst _ => stem+"ами" ;
|
||||
NF Pl (Prepos _) _ => stem+"ах" };
|
||||
g = Fem; anim = Inanimate };
|
||||
|
||||
-- 2. Soft regular masculine inanimate, e.g. vichr'
|
||||
oper nRegSoftMasc : Str ->CommNoun= \stem ->
|
||||
{ s = table {
|
||||
NF Sg Nom => stem+"ь";
|
||||
NF Sg Gen => stem+"я" ;
|
||||
NF Sg Dat => stem+"ю" ;
|
||||
NF Sg Acc => stem+"ь" ;
|
||||
NF Sg Inst => stem+"ем" ;
|
||||
NF Sg (Prepos _) => stem+"е" ;
|
||||
NF Pl Nom => stem+"и" ;
|
||||
NF Pl Gen => stem+"ей" ;
|
||||
NF Pl Dat => stem+"ям" ;
|
||||
NF Pl Acc => stem+"и" ;
|
||||
NF Pl Inst => stem+"ями" ;
|
||||
NF Pl (Prepos _) => stem+"ях" };
|
||||
NF Sg Nom _ => stem+"ь";
|
||||
NF Sg Gen _ => stem+"я" ;
|
||||
NF Sg Dat _ => stem+"ю" ;
|
||||
NF Sg Acc _ => stem+"ь" ;
|
||||
NF Sg Inst _ => stem+"ем" ;
|
||||
NF Sg (Prepos _) _ => stem+"е" ;
|
||||
NF Pl Nom _ => stem+"и" ;
|
||||
NF Pl Gen _ => stem+"ей" ;
|
||||
NF Pl Dat _ => stem+"ям" ;
|
||||
NF Pl Acc _ => stem+"и" ;
|
||||
NF Pl Inst _ => stem+"ями" ;
|
||||
NF Pl (Prepos _) _ => stem+"ях" };
|
||||
g = Masc; anim = Inanimate };
|
||||
|
||||
-- 2. Soft regular neuter inanimate, e.g. more
|
||||
oper nRegSoftNeut : Str ->CommNoun= \stem ->
|
||||
{ s = table {
|
||||
NF Sg Nom => stem+"е";
|
||||
NF Sg Gen => stem+"я" ;
|
||||
NF Sg Dat => stem+"ю" ;
|
||||
NF Sg Acc => stem+"е" ;
|
||||
NF Sg Inst => stem+"ем" ;
|
||||
NF Sg (Prepos _) => stem+"е" ;
|
||||
NF Pl Nom => stem+"я" ;
|
||||
NF Pl Gen => stem+"ей" ;
|
||||
NF Pl Dat => stem+"ям" ;
|
||||
NF Pl Acc => stem+"я" ;
|
||||
NF Pl Inst => stem+"ями" ;
|
||||
NF Pl (Prepos _) => stem+"ях" };
|
||||
NF Sg Nom _ => stem+"е";
|
||||
NF Sg Gen _ => stem+"я" ;
|
||||
NF Sg Dat _ => stem+"ю" ;
|
||||
NF Sg Acc _ => stem+"е" ;
|
||||
NF Sg Inst _ => stem+"ем" ;
|
||||
NF Sg (Prepos _) _ => stem+"е" ;
|
||||
NF Pl Nom _ => stem+"я" ;
|
||||
NF Pl Gen _ => stem+"ей" ;
|
||||
NF Pl Dat _ => stem+"ям" ;
|
||||
NF Pl Acc _ => stem+"я" ;
|
||||
NF Pl Inst _ => stem+"ями" ;
|
||||
NF Pl (Prepos _) _ => stem+"ях" };
|
||||
g = Neut; anim = Inanimate };
|
||||
|
||||
-- 2. Soft regular feminine inanimate, e.g. burya
|
||||
oper nRegSoftFem : Str ->CommNoun= \stem ->
|
||||
{ s = table {
|
||||
NF Sg Nom => stem+"я";
|
||||
NF Sg Gen => stem+"и" ;
|
||||
NF Sg Dat => stem+"е" ;
|
||||
NF Sg Acc => stem+"ю" ;
|
||||
NF Sg Inst => stem+"ей" ;
|
||||
NF Sg (Prepos _) => stem+"е" ;
|
||||
NF Pl Nom => stem+"и" ;
|
||||
NF Pl Gen => stem+"ь" ;
|
||||
NF Pl Dat => stem+"ям" ;
|
||||
NF Pl Acc => stem+"и" ;
|
||||
NF Pl Inst => stem+"ями" ;
|
||||
NF Pl (Prepos _) => stem+"ях" };
|
||||
NF Sg Nom _ => stem+"я";
|
||||
NF Sg Gen _ => stem+"и" ;
|
||||
NF Sg Dat _ => stem+"е" ;
|
||||
NF Sg Acc _ => stem+"ю" ;
|
||||
NF Sg Inst _ => stem+"ей" ;
|
||||
NF Sg (Prepos _) _ => stem+"е" ;
|
||||
NF Pl Nom _ => stem+"и" ;
|
||||
NF Pl Gen _ => stem+"ь" ;
|
||||
NF Pl Dat _ => stem+"ям" ;
|
||||
NF Pl Acc _ => stem+"и" ;
|
||||
NF Pl Inst _ => stem+"ями" ;
|
||||
NF Pl (Prepos _) _ => stem+"ях" };
|
||||
g = Fem; anim = Inanimate };
|
||||
|
||||
-- 6. Masc ending in -Vй (V = vowel)
|
||||
oper nDecl6Masc : Str ->CommNoun= \stem ->
|
||||
let n = nRegSoftMasc stem in
|
||||
{ s = table {
|
||||
NF Sg (Nom|Acc) => stem+"й";
|
||||
NF Pl Gen => stem+"ев" ;
|
||||
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 {
|
||||
NF 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 {
|
||||
NF 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 {
|
||||
NF 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 {
|
||||
NF 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 {
|
||||
NF 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 {
|
||||
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+"х" };
|
||||
NF Sg Nom _ => stem+"ь";
|
||||
NF Sg Gen _ => stem+"и" ;
|
||||
NF Sg Dat _ => stem+"и" ;
|
||||
NF Sg Acc _ => stem+"ь" ;
|
||||
NF Sg Inst _ => stem+"ью" ;
|
||||
NF Sg (Prepos _) _ => stem+"и" ;
|
||||
NF Pl Nom _ => stem+"и" ;
|
||||
NF Pl Gen _ => stem+"ей" ;
|
||||
NF Pl Dat _ => stem+a+"м" ;
|
||||
NF Pl Acc _ => stem+"и" ;
|
||||
NF Pl Inst _ => stem+a+"ми" ;
|
||||
NF Pl (Prepos _) _ => stem+a+"х" };
|
||||
g = Fem; anim = Inanimate };
|
||||
|
||||
-- 9. Neut ending in -мя
|
||||
oper nDecl9 : Str ->CommNoun= \stem ->
|
||||
{ s = table {
|
||||
NF Sg Nom => stem+"мя";
|
||||
NF Sg Gen => stem+"мени" ;
|
||||
NF Sg Dat => stem+"мени" ;
|
||||
NF Sg Acc => stem+"мя" ;
|
||||
NF Sg Inst => stem+"менем" ;
|
||||
NF Sg (Prepos _) => stem+"мени" ;
|
||||
NF Pl Nom => stem+"мена" ;
|
||||
NF Pl Gen => stem+"мён" ;
|
||||
NF Pl Dat => stem+"менам" ;
|
||||
NF Pl Acc => stem+"мена" ;
|
||||
NF Pl Inst => stem+"менами" ;
|
||||
NF Pl (Prepos _) => stem+"менах" };
|
||||
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 {
|
||||
NF Sg c => x.s!(NF Sg c) ;
|
||||
NF Pl c => y.s!(NF Pl c)
|
||||
NF Sg c size => x.s!(NF Sg c size) ;
|
||||
NF Pl c size => y.s!(NF Pl c size)
|
||||
} ;
|
||||
g = x.g ; anim = y.anim
|
||||
} ;
|
||||
@@ -560,18 +560,18 @@ Paradigms:
|
||||
-- Nouns inflected as adjectives.
|
||||
oper nAdj : Adjective -> Gender ->CommNoun= \a,g ->
|
||||
{ s = table {
|
||||
NF Sg c => a.s!AF c Inanimate (GSg g) ;
|
||||
NF Pl c => a.s!AF c Inanimate GPl };
|
||||
NF Sg c _ => a.s!AF c Inanimate (GSg g) ;
|
||||
NF Pl c _ => a.s!AF c Inanimate GPl };
|
||||
g = g; anim = Inanimate } ;
|
||||
|
||||
-- Makes a noun animate.
|
||||
oper nAnimate : CommNoun -> CommNoun = \n ->
|
||||
{ s = table {
|
||||
NF Sg Acc => case n.g of {
|
||||
Masc => n.s!(NF Sg Gen);
|
||||
_ => n.s!(NF Sg Acc)
|
||||
NF Sg Acc size => case n.g of {
|
||||
Masc => n.s!(NF Sg Gen size);
|
||||
_ => 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 } ;
|
||||
g = n.g ;
|
||||
anim = Animate
|
||||
@@ -582,90 +582,90 @@ oper
|
||||
|
||||
oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat ->
|
||||
{s = table
|
||||
{ NF Sg Nom => brat ;
|
||||
NF Sg Gen => brat+"а" ;
|
||||
NF Sg Dat => brat+"у" ;
|
||||
NF Sg Acc => brat +"а";
|
||||
NF Sg Inst => brat+"ом" ;
|
||||
NF Sg (Prepos _) => brat+"е" ;
|
||||
NF Pl Nom => brat+"ья" ;
|
||||
NF Pl Gen => brat+"ьев" ;
|
||||
NF Pl Dat => brat+"ьям" ;
|
||||
NF Pl Acc => brat +"ьев";
|
||||
NF Pl Inst => brat+"ьями" ;
|
||||
NF Pl (Prepos _) => brat+"ьяах"
|
||||
{ NF Sg Nom _ => brat ;
|
||||
NF Sg Gen _ => brat+"а" ;
|
||||
NF Sg Dat _ => brat+"у" ;
|
||||
NF Sg Acc _ => brat +"а";
|
||||
NF Sg Inst _ => brat+"ом" ;
|
||||
NF Sg (Prepos _) _ => brat+"е" ;
|
||||
NF Pl Nom _ => brat+"ья" ;
|
||||
NF Pl Gen _ => brat+"ьев" ;
|
||||
NF Pl Dat _ => brat+"ьям" ;
|
||||
NF Pl Acc _ => brat +"ьев";
|
||||
NF Pl Inst _ => brat+"ьями" ;
|
||||
NF Pl (Prepos _) _ => brat+"ьяах"
|
||||
} ;
|
||||
g = Masc ; anim = Inanimate
|
||||
} ;
|
||||
|
||||
oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat ->
|
||||
{s = table
|
||||
{ NF Sg Nom => brat ;
|
||||
NF Sg Gen => brat+"а" ;
|
||||
NF Sg Dat => brat+"у" ;
|
||||
NF Sg Acc => brat +"а";
|
||||
NF Sg Inst => brat+"ом" ;
|
||||
NF Sg (Prepos _) => brat+"е" ;
|
||||
NF Pl Nom => brat+"ья" ;
|
||||
NF Pl Gen => brat+"ьев" ;
|
||||
NF Pl Dat => brat+"ьям" ;
|
||||
NF Pl Acc => brat +"ьев";
|
||||
NF Pl Inst => brat+"ьями" ;
|
||||
NF Pl (Prepos _) => brat+"ьяах"
|
||||
{ NF Sg Nom _ => brat ;
|
||||
NF Sg Gen _ => brat+"а" ;
|
||||
NF Sg Dat _ => brat+"у" ;
|
||||
NF Sg Acc _ => brat +"а";
|
||||
NF Sg Inst _ => brat+"ом" ;
|
||||
NF Sg (Prepos _) _ => brat+"е" ;
|
||||
NF Pl Nom _ => brat+"ья" ;
|
||||
NF Pl Gen _ => brat+"ьев" ;
|
||||
NF Pl Dat _ => brat+"ьям" ;
|
||||
NF Pl Acc _ => brat +"ьев";
|
||||
NF Pl Inst _ => brat+"ьями" ;
|
||||
NF Pl (Prepos _) _ => brat+"ьяах"
|
||||
} ;
|
||||
g = Masc ; anim = Animate
|
||||
} ;
|
||||
|
||||
oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev ->
|
||||
{ s = table
|
||||
{ NF Sg Nom => derev+"о" ;
|
||||
NF Sg Gen => derev+"а" ;
|
||||
NF Sg Dat => derev+"у" ;
|
||||
NF Sg Acc => derev +"о";
|
||||
NF Sg Inst => derev+"ом" ;
|
||||
NF Sg (Prepos _) => derev+"е" ;
|
||||
NF Pl Nom => derev+"ья" ;
|
||||
NF Pl Gen => derev+"ьев" ;
|
||||
NF Pl Dat => derev+"ьям" ;
|
||||
NF Pl Acc => derev +"ья" ;
|
||||
NF Pl Inst => derev+"ьями" ;
|
||||
NF Pl (Prepos _) => derev+"ьяах"
|
||||
{ NF Sg Nom _ => derev+"о" ;
|
||||
NF Sg Gen _ => derev+"а" ;
|
||||
NF Sg Dat _ => derev+"у" ;
|
||||
NF Sg Acc _ => derev +"о";
|
||||
NF Sg Inst _ => derev+"ом" ;
|
||||
NF Sg (Prepos _) _ => derev+"е" ;
|
||||
NF Pl Nom _ => derev+"ья" ;
|
||||
NF Pl Gen _ => derev+"ьев" ;
|
||||
NF Pl Dat _ => derev+"ьям" ;
|
||||
NF Pl Acc _ => derev +"ья" ;
|
||||
NF Pl Inst _ => derev+"ьями" ;
|
||||
NF Pl (Prepos _) _ => derev+"ьяах"
|
||||
} ;
|
||||
g = Masc ; anim = Inanimate
|
||||
} ;
|
||||
|
||||
oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog ->
|
||||
{ s = table {
|
||||
NF _ Nom => mnog+"о" ;
|
||||
NF _ Gen => mnog +"их";
|
||||
NF _ Dat => mnog+"им" ;
|
||||
NF _ Acc => mnog+"о" ;
|
||||
NF _ Inst => mnog+"ими" ;
|
||||
NF _ (Prepos _) => mnog+"их"
|
||||
NF _ Nom _ => mnog+"о" ;
|
||||
NF _ Gen _ => mnog +"их";
|
||||
NF _ Dat _ => mnog+"им" ;
|
||||
NF _ Acc _ => mnog+"о" ;
|
||||
NF _ Inst _ => mnog+"ими" ;
|
||||
NF _ (Prepos _) _ => mnog+"их"
|
||||
} ;
|
||||
g = Neut ; anim = Inanimate
|
||||
} ;
|
||||
|
||||
oper oEnd_PlDecl: Str -> CommNoun = \menshinstv ->
|
||||
{ s = table {
|
||||
NF _ Nom => menshinstv+"а" ;
|
||||
NF _ Gen => menshinstv;
|
||||
NF _ Dat => menshinstv+"ам" ;
|
||||
NF _ Acc => menshinstv+"ва" ;
|
||||
NF _ Inst => menshinstv+"ами" ;
|
||||
NF _ (Prepos _) => menshinstv+"вах"
|
||||
NF _ Nom _ => menshinstv+"а" ;
|
||||
NF _ Gen _ => menshinstv;
|
||||
NF _ Dat _ => menshinstv+"ам" ;
|
||||
NF _ Acc _ => menshinstv+"ва" ;
|
||||
NF _ Inst _ => menshinstv+"ами" ;
|
||||
NF _ (Prepos _) _ => menshinstv+"вах"
|
||||
} ;
|
||||
g = Neut ; anim = Inanimate
|
||||
} ;
|
||||
|
||||
oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv ->
|
||||
{s = table {
|
||||
NF _ Nom => bolshinstv+"о" ;
|
||||
NF _ Gen => bolshinstv+"а" ;
|
||||
NF _ Dat => bolshinstv+"у" ;
|
||||
NF _ Acc => bolshinstv+"о" ;
|
||||
NF _ Inst => bolshinstv+"ом" ;
|
||||
NF _ (Prepos _) => bolshinstv+"е"
|
||||
NF _ Nom _ => bolshinstv+"о" ;
|
||||
NF _ Gen _ => bolshinstv+"а" ;
|
||||
NF _ Dat _ => bolshinstv+"у" ;
|
||||
NF _ Acc _ => bolshinstv+"о" ;
|
||||
NF _ Inst _ => bolshinstv+"ом" ;
|
||||
NF _ (Prepos _) _ => bolshinstv+"е"
|
||||
} ;
|
||||
g = Neut ; anim = Inanimate
|
||||
} ;
|
||||
@@ -677,18 +677,18 @@ oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv ->
|
||||
|
||||
oper eEnd_Decl: Str -> CommNoun = \vs ->
|
||||
{ s = table {
|
||||
NF Sg Nom => vs+"е" ;
|
||||
NF Sg Gen => vs+"ех" ;
|
||||
NF Sg Dat => vs+"ем" ;
|
||||
NF Sg Acc => vs+"ех" ;
|
||||
NF Sg Inst => vs+"еми" ;
|
||||
NF Sg (Prepos _) => vs+"ех" ;
|
||||
NF Pl Nom => vs+"е" ;
|
||||
NF Pl Gen => vs +"ех";
|
||||
NF Pl Dat => vs+"ем" ;
|
||||
NF Pl Acc => vs+ "ех" ;
|
||||
NF Pl Inst => vs+"еми" ;
|
||||
NF Pl (Prepos _) => vs+"ех"
|
||||
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
|
||||
} ;
|
||||
@@ -803,7 +803,7 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
||||
|
||||
vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ;
|
||||
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 {
|
||||
|
||||
@@ -6,23 +6,31 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
|
||||
lin
|
||||
DetCN kazhduj okhotnik = {
|
||||
s = \\c => case kazhduj.q of {
|
||||
False =>
|
||||
s = \\c => case kazhduj.size of {
|
||||
nom =>
|
||||
case kazhduj.c of {
|
||||
Nom =>
|
||||
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) ++
|
||||
okhotnik.s ! NF kazhduj.n kazhduj.c } ;
|
||||
True =>
|
||||
okhotnik.s ! NF kazhduj.n kazhduj.c nom } ;
|
||||
sgg =>
|
||||
case kazhduj.c of {
|
||||
Nom =>
|
||||
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) ++
|
||||
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 ;
|
||||
p = P3 ;
|
||||
@@ -86,8 +94,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
n = num.n ;
|
||||
g = quant.g;
|
||||
c = quant.c;
|
||||
-- q = notB (isNil (num.s ! Nom ! Masc))
|
||||
q = False;
|
||||
size = quant.size
|
||||
} ;
|
||||
|
||||
DetQuant quant num = {
|
||||
@@ -95,8 +102,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
n = num.n ;
|
||||
g = quant.g;
|
||||
c = quant.c;
|
||||
-- q = notB (isNil (num.s ! Nom ! Masc))
|
||||
q = False;
|
||||
size = num.size
|
||||
} ;
|
||||
{-
|
||||
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} ;
|
||||
|
||||
MassNP okhotnik = {
|
||||
s = \\c => okhotnik.s ! NF Sg (extCase c) ;
|
||||
s = \\c => okhotnik.s ! NF Sg (extCase c) nom ;
|
||||
n = Sg ;
|
||||
p = P3 ;
|
||||
pron = False;
|
||||
@@ -146,11 +152,11 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
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 ;
|
||||
NumSg = {s = \\_,_,_ => [] ; n = Sg} ;
|
||||
NumPl = {s = \\_,_,_ => [] ; n = Pl} ;
|
||||
NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = sgg} ;
|
||||
NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = plg} ;
|
||||
|
||||
OrdNumeral 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} ;
|
||||
|
||||
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};
|
||||
|
||||
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; q = False };
|
||||
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; q = False };
|
||||
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; size = nom };
|
||||
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; size = nom };
|
||||
|
||||
UseN noun = noun ;
|
||||
UseN2 noun = noun ;
|
||||
@@ -180,9 +186,9 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
|
||||
ComplN2 f x = {
|
||||
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 ++
|
||||
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 ;
|
||||
anim = f.anim
|
||||
@@ -220,7 +226,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
-- later, in the chapter on verbs.
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (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 ;
|
||||
g = cn.g ;
|
||||
anim = cn.anim
|
||||
@@ -246,14 +253,14 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
} ;
|
||||
|
||||
RelCN idea x = {
|
||||
s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (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 ;
|
||||
anim = idea.anim
|
||||
} ;
|
||||
|
||||
---- AR 17/12/2008
|
||||
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 ;
|
||||
anim = cn.anim
|
||||
} ;
|
||||
|
||||
@@ -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 Sub100 = {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 =
|
||||
{s = table {unit => \\ g, a, c =>
|
||||
@@ -201,7 +201,7 @@ lin pot110 =
|
||||
lin pot111 =
|
||||
{s = \\ p => nadsat "один" ; size = plg} ; --- 11
|
||||
lin pot1to19 d =
|
||||
{s = table {_ => d.s ! teen} ; size = plg} ;
|
||||
{s = table {_ => d.s ! teen} ; size = d.size} ;
|
||||
lin pot0as1 n =
|
||||
{s = table {p => n.s ! p ! unit} ; size = n.size} ;
|
||||
lin pot1 d =
|
||||
@@ -215,11 +215,11 @@ lin pot2 d =
|
||||
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} ;
|
||||
lin pot2as3 n =
|
||||
{s = n.s ! indep} ;
|
||||
{s = n.s ! indep ; size = n.size} ;
|
||||
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 =
|
||||
{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
|
||||
--- raz/odin
|
||||
@@ -230,36 +230,39 @@ lin pot3plus n m =
|
||||
Dig = TDigit ;
|
||||
|
||||
lin
|
||||
IDig d = {s = d.s ; n = d.n} ;
|
||||
IDig d = {s = d.s ; n = d.n ; size = d.size} ;
|
||||
|
||||
IIDig d i = {
|
||||
s = d.s ++ i.s ;
|
||||
n = Pl
|
||||
n = Pl ;
|
||||
size = i.size
|
||||
} ;
|
||||
|
||||
D_0 = mkDig "0" ;
|
||||
D_1 = mk3Dig "1" "1" Sg ; ----
|
||||
D_2 = mkDig "2" ;
|
||||
D_3 = mkDig "3" ;
|
||||
D_4 = mkDig "4" ;
|
||||
D_5 = mkDig "5" ;
|
||||
D_6 = mkDig "6" ;
|
||||
D_7 = mkDig "7" ;
|
||||
D_8 = mkDig "8" ;
|
||||
D_9 = mkDig "9" ;
|
||||
D_0 = mk2Dig "0" plg ;
|
||||
D_1 = mk4Dig "1" "1" Sg nom ; ----
|
||||
D_2 = mk2Dig "2" sgg ;
|
||||
D_3 = mk2Dig "3" sgg ;
|
||||
D_4 = mk2Dig "4" sgg ;
|
||||
D_5 = mk2Dig "5" plg ;
|
||||
D_6 = mk2Dig "6" plg ;
|
||||
D_7 = mk2Dig "7" plg ;
|
||||
D_8 = mk2Dig "8" plg ;
|
||||
D_9 = mk2Dig "9" plg ;
|
||||
|
||||
oper
|
||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "o") ;
|
||||
mk3Dig : Str -> Str -> Size -> TDigit = \c,o,size -> mk4Dig c o Pl size ;
|
||||
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
|
||||
n = n
|
||||
n = n ;
|
||||
size = size
|
||||
} ;
|
||||
|
||||
TDigit = {
|
||||
n : Number ;
|
||||
s : Str
|
||||
s : Str ;
|
||||
size : Size
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -285,7 +285,7 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
||||
|
||||
mkIndeclinableNoun = \s,g, anim ->
|
||||
{
|
||||
s = table { NF _ _ => s } ;
|
||||
s = table { NF _ _ _ => s } ;
|
||||
g = g ;
|
||||
anim = anim
|
||||
} ** {lock_N = <>};
|
||||
@@ -296,19 +296,19 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
||||
nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim ->
|
||||
{
|
||||
s = table {
|
||||
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
|
||||
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
|
||||
@@ -370,7 +370,7 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
||||
} ;
|
||||
Pl => mkProperNamePl ivan anim
|
||||
} ** {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
|
||||
-- $NP$ rather than $PN$.
|
||||
|
||||
@@ -17,7 +17,7 @@ concrete PhraseRus of Phrase = CatRus ** open Prelude, ResRus in {
|
||||
UttNP np = {s = np.s ! PF Acc No NonPoss} ;
|
||||
UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ;
|
||||
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} ;
|
||||
UttAP ap = {s = ap.s ! AF Nom Inanimate (GSg Neut)} ; ---- gennum ? (AR)
|
||||
|
||||
|
||||
@@ -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 (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) ++
|
||||
okhotnik.s ! NF kakoj.n kakoj.c };
|
||||
okhotnik.s ! NF kakoj.n kakoj.c plg };
|
||||
n = kakoj.n ;
|
||||
p = P3 ;
|
||||
pron = False;
|
||||
|
||||
@@ -31,6 +31,7 @@ param
|
||||
-- Anteriority = Simul | Anter ;
|
||||
ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper;
|
||||
-- "naked infinitive" clauses
|
||||
-- DetForm = NonNum | Few | Many ;
|
||||
|
||||
-- A number of Russian nouns have common gender. They can
|
||||
-- denote both males and females: "умница" (a clever person), "инженер" (an engineer).
|
||||
@@ -77,7 +78,7 @@ oper
|
||||
-- For the sake of shorter description these parameters are
|
||||
-- combined in the type SubstForm.
|
||||
param
|
||||
NForm = NF Number Case ;
|
||||
NForm = NF Number Case Size ;
|
||||
|
||||
|
||||
-- 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} ;
|
||||
|
||||
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 ;
|
||||
anim = chelovek.anim
|
||||
} ;
|
||||
|
||||
@@ -14,7 +14,7 @@ lin
|
||||
above_Prep = { s = "над" ; c = Inst} ;
|
||||
after_Prep = { s = "после" ; c = Gen };
|
||||
-- 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_AdN = {s= "почти"} ;
|
||||
although_Subj = ss "хотя" ;
|
||||
@@ -33,11 +33,11 @@ lin
|
||||
during_Prep = { s = ["в течение"] ; c = Gen};
|
||||
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
|
||||
-- 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=<>})) ;
|
||||
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
|
||||
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
|
||||
for_Prep = { s = "для" ; c = Gen };
|
||||
from_Prep = { s = "от" ; c = Gen };
|
||||
@@ -54,19 +54,19 @@ lin
|
||||
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
||||
it_Pron = pronOno ;
|
||||
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=""} ;
|
||||
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: "большинство телефонов безмолству-ет"
|
||||
-- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
||||
-- 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 ;
|
||||
no_Utt = ss ["Нет"] ;
|
||||
on_Prep = { s = "на" ; c = Prepos PrepVNa };
|
||||
--- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom };
|
||||
--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} ;
|
||||
otherwise_PConj = ss "иначе" ;
|
||||
part_Prep = { s = "" ; c = Nom}; -- missing in Russian
|
||||
@@ -76,17 +76,17 @@ lin
|
||||
she_Pron = pronOna ;
|
||||
so_AdA = ss "так";
|
||||
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
|
||||
someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ;
|
||||
somePl_Det = nekotorujDet ** {n = Pl; 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; size = nom} ;
|
||||
something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ;
|
||||
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 "там" ;
|
||||
there7to_Adv = ss "туда" ;
|
||||
there7from_Adv = ss "оттуда" ;
|
||||
therefore_PConj = ss "следовательно" ;
|
||||
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 };
|
||||
to_Prep = { s = "к" ; c = Dat };
|
||||
too_AdA = ss "слишком" ;
|
||||
|
||||
@@ -9,21 +9,21 @@ lin
|
||||
FloatPN i = {s = table {_ => i.s} ; 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 ;
|
||||
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 = Sg ; p = P3 ;
|
||||
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 ;
|
||||
g = PGen cn.g ; anim = cn.anim ; pron = False } ;
|
||||
|
||||
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 } ;
|
||||
|
||||
|
||||
@@ -87,19 +87,19 @@ concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in {
|
||||
CompCN zloj ={
|
||||
s= \\clf,gn,p =>
|
||||
let num = numGenNum gn ;
|
||||
zlojsg = zloj.s ! NF Sg Nom ;
|
||||
zlojpl = zloj.s ! NF Pl Nom
|
||||
zlojsg = zloj.s ! NF Sg Nom nom ;
|
||||
zlojpl = zloj.s ! NF Pl Nom plg
|
||||
in
|
||||
case clf of {
|
||||
-- person is ignored !
|
||||
ClInfinit => "быть" ++ zloj.s ! NF Sg Inst ;
|
||||
ClInfinit => "быть" ++ zloj.s ! NF Sg Inst nom ;
|
||||
ClImper => case gn of
|
||||
{ (GSg _) => "будь" ++ zloj.s ! NF Sg Inst ;
|
||||
GPl => "будьте" ++ zloj.s ! NF Pl Inst
|
||||
{ (GSg _) => "будь" ++ zloj.s ! NF Sg Inst plg ;
|
||||
GPl => "будьте" ++ zloj.s ! NF Pl Inst plg
|
||||
};
|
||||
-- infinitive does not save GenNum,
|
||||
-- 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
|
||||
{ (GSg Fem) => "была" ++ zlojsg ;
|
||||
(GSg Masc) => "был" ++ zlojsg ;
|
||||
|
||||
Reference in New Issue
Block a user