forked from GitHub/gf-rgl
RG and Phrasebook fixes
- added a paradigm for alternative plurals - fixed usage of alternative plurals in Numerals - added a distinction between numerals and posessive pronouns - verb omission and appropriate cases in some uses of to be/to have - fixed declination of personal names - added a gender parameter to pronouns (similar to Polish RG) - vowel insertion before short adjective suffix - don't generate short forms for relative adjectives (might need lexicon update) - minor Phrasebook fixes
This commit is contained in:
@@ -122,8 +122,6 @@ abstract Structural = Cat ** {
|
|||||||
as_CAdv : CAdv ;
|
as_CAdv : CAdv ;
|
||||||
|
|
||||||
have_V2 : V2 ;
|
have_V2 : V2 ;
|
||||||
have_V3 : V3 ;
|
|
||||||
have_not_V3 : V3;
|
|
||||||
|
|
||||||
fun language_title_Utt : Utt ;
|
fun language_title_Utt : Utt ;
|
||||||
|
|
||||||
|
|||||||
@@ -39054,7 +39054,7 @@ lin ispanjec_N = mkN "испанец" "испанца" "испанцу" "исп
|
|||||||
lin ispanist_N = mkN "испанист" "испаниста" "испанисту" "испаниста" "испанистом" "испанисте" "испанистом" "испанисты" "испанистов" "испанистам" "испанистов" "испанистом" "испанистах" Masc Animate ;
|
lin ispanist_N = mkN "испанист" "испаниста" "испанисту" "испаниста" "испанистом" "испанисте" "испанистом" "испанисты" "испанистов" "испанистам" "испанистов" "испанистом" "испанистах" Masc Animate ;
|
||||||
lin ispanistika_N = mkN "испанистика" "испанистики" "испанистике" "испанистику" "испанистикою" "испанистике" "испанистикою" "испанистики" "испанистикою" "испанистикою" "испанистики" "испанистикою" "испанистикою" Fem Inanimate ;
|
lin ispanistika_N = mkN "испанистика" "испанистики" "испанистике" "испанистику" "испанистикою" "испанистике" "испанистикою" "испанистики" "испанистикою" "испанистикою" "испанистики" "испанистикою" "испанистикою" Fem Inanimate ;
|
||||||
lin ispanija_PN = mkPN "испания" Fem Sg Inanimate ;
|
lin ispanija_PN = mkPN "испания" Fem Sg Inanimate ;
|
||||||
lin ispanka_N = mkN "испанка" "испанки" "испанке" "испанку" "испанкою" "испанке" "испанками" "испанки" "испанок" "испанкам" "испанок" "испанками" "испанках" Fem Animate ;
|
lin ispanka_N = mkN "испанка" "испанки" "испанке" "испанку" "испанкой" "испанке" "испанками" "испанки" "испанок" "испанкам" "испанок" "испанками" "испанках" Fem Animate ;
|
||||||
lin ispano_amjerikanskijj_A = mkA "испано-американский" ;
|
lin ispano_amjerikanskijj_A = mkA "испано-американский" ;
|
||||||
lin ispano_indjejjskijj_A = mkA "испано-индейский" ;
|
lin ispano_indjejjskijj_A = mkA "испано-индейский" ;
|
||||||
lin ispano_mavritanskijj_A = mkA "испано-мавританский" ;
|
lin ispano_mavritanskijj_A = mkA "испано-мавританский" ;
|
||||||
|
|||||||
@@ -1,3 +1,16 @@
|
|||||||
concrete ExtraRus of ExtraRusAbs = CatRus ** {
|
concrete ExtraRus of ExtraRusAbs = CatRus **
|
||||||
flags coding=utf8 ;
|
open ResRus, MorphoRus, (P = ParadigmsRus), Prelude, NounRus in {
|
||||||
|
flags optimize=all ; coding=utf8 ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
have_V3 = P.mkV3 (P.mkV P.imperfective "" "" "" "" "" "" "был" "будь" "есть") "" "у" Nom Gen;
|
||||||
|
|
||||||
|
have2_V3 = P.mkV3 (P.mkV P.imperfective "есть" "есть" "есть" "есть" "есть" "есть" "был" "будь" "есть") "" "у" Nom Gen;
|
||||||
|
|
||||||
|
have_not_V3 = P.mkV3 (P.mkV P.imperfective "нет" "нет" "нет" "нет" "нет" "нет" "не было" "не будь" "нет") "" "у" Gen Gen;
|
||||||
|
|
||||||
|
be_V3 = P.mkV3 (P.mkV P.imperfective "" "" "" "" "" "" "был" "будь" "") "" "" Nom Dat;
|
||||||
|
|
||||||
|
to2_Prep = { s = "в" ; c = Acc };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,12 @@
|
|||||||
abstract ExtraRusAbs = {
|
abstract ExtraRusAbs = Cat ** {
|
||||||
|
|
||||||
|
fun
|
||||||
|
|
||||||
|
have_V3 : V3 ;
|
||||||
|
have2_V3 : V3 ;
|
||||||
|
have_not_V3 : V3;
|
||||||
|
|
||||||
|
be_V3 : V3 ;
|
||||||
|
|
||||||
|
to2_Prep : Prep ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:abstract:common
|
--# -path=.:abstract:common
|
||||||
concrete LexiconRus of Lexicon = CatRus **
|
concrete LexiconRus of Lexicon = CatRus **
|
||||||
open ParadigmsRus, Prelude, StructuralRus, MorphoRus in {
|
open ParadigmsRus, Prelude, StructuralRus, MorphoRus, (E = ExtraRus) in {
|
||||||
flags
|
flags
|
||||||
optimize=values ;
|
optimize=values ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -57,7 +57,8 @@ lin
|
|||||||
ceiling_N = mkN "потолок" ; -- vowel change
|
ceiling_N = mkN "потолок" ; -- vowel change
|
||||||
chair_N = mkN "стул" ; -- irregular
|
chair_N = mkN "стул" ; -- irregular
|
||||||
cheese_N = mkN "сыр" ;
|
cheese_N = mkN "сыр" ;
|
||||||
child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
child_N = mkNAltPl "ребёнок" "деть" masculine animate;
|
||||||
|
-- child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
||||||
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate ;
|
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate ;
|
||||||
city_N = mkN "город" ;
|
city_N = mkN "город" ;
|
||||||
clean_A = mkA "чистый" "чище";
|
clean_A = mkA "чистый" "чище";
|
||||||
@@ -185,7 +186,7 @@ lin
|
|||||||
louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ;
|
louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ;
|
||||||
love_N = mkN "любовь" ; -- vowel change
|
love_N = mkN "любовь" ; -- vowel change
|
||||||
love_V2= dirV2 (regV imperfective second "люб" "лю" "любил" "люби" "любить" );
|
love_V2= dirV2 (regV imperfective second "люб" "лю" "любил" "люби" "любить" );
|
||||||
man_N = mkN "человек" ; -- null gen pl
|
man_N = mkNAltPl "человек" "людь" masculine animate ; -- null gen pl
|
||||||
married_A2 = mkA2 (mkA "замужем") "за" instructive ;
|
married_A2 = mkA2 (mkA "замужем") "за" instructive ;
|
||||||
meat_N = mkN "мясо" ;
|
meat_N = mkN "мясо" ;
|
||||||
milk_N = mkN "молоко" ;
|
milk_N = mkN "молоко" ;
|
||||||
@@ -353,7 +354,7 @@ lin
|
|||||||
wood_N = mkN "дерево" ;
|
wood_N = mkN "дерево" ;
|
||||||
worm_N = mkN "черв" ;
|
worm_N = mkN "черв" ;
|
||||||
write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" );
|
write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" );
|
||||||
year_N = mkN "год" ;
|
year_N = mkNAltPl "год" "лето" masculine inanimate ;
|
||||||
yellow_A = mkA "жёлтый" ;
|
yellow_A = mkA "жёлтый" ;
|
||||||
young_A = mkA "молодой" "моложе";
|
young_A = mkA "молодой" "моложе" ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,27 +16,27 @@ flags coding=utf8 ;
|
|||||||
|
|
||||||
----2 Personal (together with possesive) pronouns.
|
----2 Personal (together with possesive) pronouns.
|
||||||
|
|
||||||
oper pronYa : Pronoun =
|
oper pronYa : Gender -> Pronoun = \ gen ->
|
||||||
let nonPoss = { s = table { Nom => "я" ;
|
let nonPoss = { s = table { Nom => "я" ;
|
||||||
Gen => "меня" ;
|
Gen => "меня" ;
|
||||||
Dat => "мне" ;
|
Dat => "мне" ;
|
||||||
Acc => "меня" ;
|
Acc => "меня" ;
|
||||||
Inst => "мной" ;
|
Inst => "мной" ;
|
||||||
Prepos _ => "мне" } }
|
Prepos _ => "мне" } }
|
||||||
in pronYaTu nonPoss "мо" P1 ;
|
in pronYaTu nonPoss "мо" P1 gen ;
|
||||||
|
|
||||||
oper pronTu : Pronoun =
|
oper pronTu : Gender -> Pronoun = \ gen ->
|
||||||
let nonPoss = { s = table { Nom => "ты" ;
|
let nonPoss = { s = table { Nom => "ты" ;
|
||||||
Gen => "тебя" ;
|
Gen => "тебя" ;
|
||||||
Dat => "тебе" ;
|
Dat => "тебе" ;
|
||||||
Acc => "тебя" ;
|
Acc => "тебя" ;
|
||||||
Inst => "тобой" ;
|
Inst => "тобой" ;
|
||||||
Prepos _ => "тебе" } }
|
Prepos _ => "тебе" } }
|
||||||
in pronYaTu nonPoss "тво" P2 ;
|
in pronYaTu nonPoss "тво" P2 gen ;
|
||||||
|
|
||||||
-- Pronouns ya, ty, svoj
|
-- Pronouns ya, ty, svoj
|
||||||
oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun =
|
oper pronYaTu : { s : Case => Str } -> Str -> Person -> Gender -> Pronoun =
|
||||||
\nonPoss, mo, pers ->
|
\nonPoss, mo, pers, gen ->
|
||||||
{ s = table {
|
{ s = table {
|
||||||
PF c _ NonPoss => nonPoss.s!c ;
|
PF c _ NonPoss => nonPoss.s!c ;
|
||||||
PF c _ (Poss gn) => case <c, gn> of {
|
PF c _ (Poss gn) => case <c, gn> of {
|
||||||
@@ -64,7 +64,7 @@ oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun =
|
|||||||
|
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
g = PNoGen ; n = Sg ; p = pers ; pron = True
|
g = PGen gen ; n = Sg ; p = pers ; pron = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper pronNAfterPrep : Pronoun -> Pronoun = \p ->
|
oper pronNAfterPrep : Pronoun -> Pronoun = \p ->
|
||||||
@@ -106,8 +106,8 @@ oper pronOno: Pronoun =
|
|||||||
g = PGen Neut ; n = Sg ; p = P3 ; pron = True
|
g = PGen Neut ; n = Sg ; p = P3 ; pron = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper pronMuVu : Str -> Str -> Person -> Pronoun =
|
oper pronMuVu : Str -> Str -> Person -> Gender -> Pronoun =
|
||||||
\mu,na,pers ->
|
\mu,na,pers,gen ->
|
||||||
{ s = table {
|
{ s = table {
|
||||||
PF Nom _ NonPoss => mu ;
|
PF Nom _ NonPoss => mu ;
|
||||||
PF Gen _ NonPoss => na + "с" ;
|
PF Gen _ NonPoss => na + "с" ;
|
||||||
@@ -138,12 +138,12 @@ oper pronMuVu : Str -> Str -> Person -> Pronoun =
|
|||||||
PF Inst _ (Poss GPl) => na + "шими" ;
|
PF Inst _ (Poss GPl) => na + "шими" ;
|
||||||
PF (Prepos _) _ (Poss GPl) => na + "ших"
|
PF (Prepos _) _ (Poss GPl) => na + "ших"
|
||||||
};
|
};
|
||||||
g = PNoGen ; n = Pl ; p = pers ; pron = True
|
g = PGen gen ; n = Pl ; p = pers ; pron = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper pronMu: Pronoun = pronMuVu "мы" "на" P1;
|
oper pronMu: Gender -> Pronoun = \gen -> pronMuVu "мы" "на" P1 gen;
|
||||||
|
|
||||||
oper pronVu: Pronoun = pronMuVu "вы" "ва" P2;
|
oper pronVu: Gender -> Pronoun = \gen -> pronMuVu "вы" "ва" P2 gen;
|
||||||
|
|
||||||
oper pronOni: Pronoun = pronNAfterPrep
|
oper pronOni: Pronoun = pronNAfterPrep
|
||||||
{ s = table {
|
{ s = table {
|
||||||
@@ -699,15 +699,15 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
|||||||
---- Type Adjective only has positive degree while AdjDegr type
|
---- Type Adjective only has positive degree while AdjDegr type
|
||||||
---- includes also comparative and superlative forms.
|
---- includes also comparative and superlative forms.
|
||||||
--
|
--
|
||||||
kazhdujDet: Adjective = aRegHardStemStress "кажд" ;
|
kazhdujDet: Adjective = aRegHard StemStress Rel "кажд" ;
|
||||||
samuj : Adjective = aRegHardStemStress "сам" ;
|
samuj : Adjective = aRegHard StemStress Rel "сам" ;
|
||||||
|
|
||||||
-- lubojDet: Adjective = uy_oj_EndDecl "люб" ;
|
-- lubojDet: Adjective = uy_oj_EndDecl "люб" ;
|
||||||
-- drugojDet: Adjective = uy_oj_EndDecl "друг" ;
|
-- drugojDet: Adjective = uy_oj_EndDecl "друг" ;
|
||||||
-- glaznoj: Adjective = uy_oj_EndDecl "глазн" ;
|
-- glaznoj: Adjective = uy_oj_EndDecl "глазн" ;
|
||||||
kotorujDet: Adjective = aRegHardStemStress "котор";
|
kotorujDet: Adjective = aRegHard StemStress Rel "котор";
|
||||||
nekotorujDet: Adjective = aRegHardStemStress "некотор";
|
nekotorujDet: Adjective = aRegHard StemStress Rel "некотор";
|
||||||
takoj: Adjective = aRegHardEndStress "так";
|
takoj: Adjective = aRegHard EndStress Rel "так";
|
||||||
-- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь";
|
-- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь";
|
||||||
-- kakojDet: Adjective = i_oj_EndDecl "как" [];
|
-- kakojDet: Adjective = i_oj_EndDecl "как" [];
|
||||||
-- nikakojDet: Adjective = i_oj_EndDecl "никак" [];
|
-- nikakojDet: Adjective = i_oj_EndDecl "никак" [];
|
||||||
@@ -720,23 +720,23 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
oper aRegHardStemStress : Str -> Adjective = \stem -> aRegHard stem False ;
|
-- oper aRegHardStemStress : Str -> Adjective = \stem -> aRegHard stem False ;
|
||||||
|
|
||||||
oper aRegHardEndStress : Str -> Adjective = \stem -> aRegHard stem True;
|
-- oper aRegHardEndStress : Str -> Adjective = \stem -> aRegHard stem True;
|
||||||
|
|
||||||
-- 1. regular hard adjective
|
-- 1. regular hard adjective
|
||||||
-- 3. stem ending with г, к, х
|
-- 3. stem ending with г, к, х
|
||||||
-- 4. stem ending with ш, ж, ч, щ
|
-- 4. stem ending with ш, ж, ч, щ
|
||||||
-- 5. stem ending with ц
|
-- 5. stem ending with ц
|
||||||
oper aRegHard : Str -> Bool -> Adjective = \stem, endStress ->
|
oper aRegHard : AdjStress -> AdjType -> Str -> Adjective = \stress, at, stem ->
|
||||||
let i = iAfter stem in
|
let i = iAfter stem in
|
||||||
let o = case endStress of {
|
let o = case stress of {
|
||||||
True => "о" ;
|
EndStress => "о" ;
|
||||||
False => oAfter stem } in
|
StemStress => oAfter stem } in
|
||||||
{ s = table {
|
{ s = table {
|
||||||
AF Nom _ (GSg Masc) => stem + case endStress of {
|
AF Nom _ (GSg Masc) => stem + case stress of {
|
||||||
True => "ой";
|
EndStress => "ой";
|
||||||
False => iAfter stem + "й" } ;
|
StemStress => iAfter stem + "й" } ;
|
||||||
AF Nom _ (GSg Neut) => stem + o+"е";
|
AF Nom _ (GSg Neut) => stem + o+"е";
|
||||||
AF Gen _ (GSg (Masc|Neut)) => stem + o+"го";
|
AF Gen _ (GSg (Masc|Neut)) => stem + o+"го";
|
||||||
AF Dat _ (GSg (Masc|Neut)) => stem + o+"му";
|
AF Dat _ (GSg (Masc|Neut)) => stem + o+"му";
|
||||||
@@ -758,15 +758,31 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
|||||||
AF Dat _ GPl => stem + i+"м";
|
AF Dat _ GPl => stem + i+"м";
|
||||||
AF (Prepos _) _ GPl => stem + i+"х";
|
AF (Prepos _) _ GPl => stem + i+"х";
|
||||||
|
|
||||||
AFShort (GSg Masc) => stem;
|
AFShort (GSg Masc) => case at of {
|
||||||
AFShort (GSg Fem) => stem + "а";
|
Qual => case stem of {
|
||||||
AFShort (GSg Neut) => stem + o ;
|
stem2 + ("н"|"ьн") => stem2 + "ен" ;
|
||||||
AFShort GPl => stem + i;
|
_ => stem
|
||||||
|
} ;
|
||||||
|
Rel => stem + case stress of {
|
||||||
|
EndStress => "ой";
|
||||||
|
StemStress => iAfter stem + "й" } };
|
||||||
|
AFShort (GSg Fem) => case at of {
|
||||||
|
Qual => stem + "а";
|
||||||
|
Rel => stem + "ая"
|
||||||
|
};
|
||||||
|
AFShort (GSg Neut) => case at of {
|
||||||
|
Qual => stem + o ;
|
||||||
|
Rel => stem + o+"е"
|
||||||
|
};
|
||||||
|
AFShort GPl => case at of {
|
||||||
|
Qual => stem + i;
|
||||||
|
Rel => stem + i+"е"
|
||||||
|
};
|
||||||
|
|
||||||
AdvF => stem + o
|
AdvF => stem + o
|
||||||
} } ;
|
} } ;
|
||||||
|
|
||||||
oper aRegSoft : Str -> Adjective = \stem ->
|
oper aRegSoft : AdjType -> Str -> Adjective = \at, stem ->
|
||||||
{ s = table {
|
{ s = table {
|
||||||
AF Nom _ (GSg Masc) => stem + "ий" ;
|
AF Nom _ (GSg Masc) => stem + "ий" ;
|
||||||
AF Nom _ (GSg Neut) => stem + "ее";
|
AF Nom _ (GSg Neut) => stem + "ее";
|
||||||
@@ -790,10 +806,22 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
|||||||
AF Dat _ GPl => stem + "им";
|
AF Dat _ GPl => stem + "им";
|
||||||
AF (Prepos _) _ GPl => stem + "их";
|
AF (Prepos _) _ GPl => stem + "их";
|
||||||
|
|
||||||
AFShort (GSg Masc) => stem; -- FIXME: add e if stem ends in consonant + n
|
AFShort (GSg Masc) => case at of {
|
||||||
AFShort (GSg Fem) => stem + "я";
|
Qual => stem;
|
||||||
AFShort (GSg Neut) => stem + "е" ;
|
Rel => stem + "ий"
|
||||||
AFShort GPl => stem + "и" ;
|
};
|
||||||
|
AFShort (GSg Fem) => case at of {
|
||||||
|
Qual => stem + "я";
|
||||||
|
Rel => stem + "яя"
|
||||||
|
};
|
||||||
|
AFShort (GSg Neut) => case at of {
|
||||||
|
Qual => stem + "е" ;
|
||||||
|
Rel => stem + "ее"
|
||||||
|
};
|
||||||
|
AFShort GPl => case at of {
|
||||||
|
Qual => stem + "и" ;
|
||||||
|
Rel => stem + "ие"
|
||||||
|
};
|
||||||
|
|
||||||
AdvF => stem + "е"
|
AdvF => stem + "е"
|
||||||
} } ;
|
} } ;
|
||||||
|
|||||||
@@ -8,24 +8,27 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
|||||||
DetCN kazhduj okhotnik = {
|
DetCN kazhduj okhotnik = {
|
||||||
s = \\c => case kazhduj.size of {
|
s = \\c => case kazhduj.size 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 Sg) ++
|
||||||
okhotnik.s ! NF kazhduj.n (extCase c) nom ;
|
okhotnik.s ! NF kazhduj.n (extCase c) nom ;
|
||||||
|
nompl =>
|
||||||
|
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Pl) ++
|
||||||
|
okhotnik.s ! NF kazhduj.n (extCase c) nompl ;
|
||||||
sgg =>
|
sgg =>
|
||||||
case kazhduj.c of {
|
case c of {
|
||||||
Nom =>
|
PF Nom _ _ =>
|
||||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
kazhduj.s ! AF Nom okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||||
okhotnik.s ! NF Sg Gen sgg;
|
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 Pl kazhduj.c sgg } ;
|
okhotnik.s ! NF Pl (extCase c) sgg } ;
|
||||||
plg =>
|
plg =>
|
||||||
case kazhduj.c of {
|
case c of {
|
||||||
Nom =>
|
PF Nom _ _ =>
|
||||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
kazhduj.s ! AF Nom okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||||
okhotnik.s ! NF Pl Gen plg ;
|
okhotnik.s ! NF Pl Gen plg ;
|
||||||
_ =>
|
_ =>
|
||||||
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 Pl kazhduj.c plg }
|
okhotnik.s ! NF Pl (extCase c) plg }
|
||||||
};
|
};
|
||||||
n = kazhduj.n ;
|
n = kazhduj.n ;
|
||||||
p = P3 ;
|
p = P3 ;
|
||||||
@@ -151,7 +154,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
|||||||
|
|
||||||
NumCard c = c ;
|
NumCard c = c ;
|
||||||
NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = nom} ;
|
NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = nom} ;
|
||||||
NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = plg} ;
|
NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = nompl} ;
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ lin n2 =
|
|||||||
case <c, g, a> of {
|
case <c, g, a> of {
|
||||||
<(Nom|Acc), Fem, Inanimate > => "две";
|
<(Nom|Acc), Fem, Inanimate > => "две";
|
||||||
<(Nom|Acc), _, Inanimate > => "два";
|
<(Nom|Acc), _, Inanimate > => "два";
|
||||||
<(Nom|Acc), _, Animate > => "двух";
|
<Nom , _, Animate > => "два";
|
||||||
|
<Acc , _, Animate > => "двух";
|
||||||
<(Gen|Prepos _), _, _ > => "двух";
|
<(Gen|Prepos _), _, _ > => "двух";
|
||||||
<Dat, _, _ > => "двум";
|
<Dat, _, _ > => "двум";
|
||||||
<Inst, _, _ > => "двумя"
|
<Inst, _, _ > => "двумя"
|
||||||
@@ -197,11 +198,11 @@ lin pot01 =
|
|||||||
lin pot0 d =
|
lin pot0 d =
|
||||||
{s = table {_ => d.s} ; size = d.size} ;
|
{s = table {_ => d.s} ; size = d.size} ;
|
||||||
lin pot110 =
|
lin pot110 =
|
||||||
{s = \\ p => n59 "десять" ; size = plg} ;
|
{s = \\ p => n59 "десят" ; size = plg} ;
|
||||||
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 = d.size} ;
|
{s = table {_ => d.s ! teen} ; size = plg} ;
|
||||||
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 =
|
||||||
@@ -217,9 +218,9 @@ lin pot2plus d e =
|
|||||||
lin pot2as3 n =
|
lin pot2as3 n =
|
||||||
{s = n.s ! indep ; size = n.size} ;
|
{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 ; size = n.size} ;
|
{s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ; size = plg} ;
|
||||||
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 ; size = m.size} ;
|
{s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c ; size = plg} ;
|
||||||
|
|
||||||
--- TODO
|
--- TODO
|
||||||
--- raz/odin
|
--- raz/odin
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ oper
|
|||||||
|
|
||||||
mkIndeclinableNoun: Str -> Gender -> Animacy -> N ;
|
mkIndeclinableNoun: Str -> Gender -> Animacy -> N ;
|
||||||
|
|
||||||
|
mkNAltPl: Str -> Str -> Gender -> Animacy -> N ;
|
||||||
|
|
||||||
mkN : overload {
|
mkN : overload {
|
||||||
|
|
||||||
-- The regular function captures the variants for some common noun endings.
|
-- The regular function captures the variants for some common noun endings.
|
||||||
@@ -290,6 +292,17 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
|||||||
anim = anim
|
anim = anim
|
||||||
} ** {lock_N = <>};
|
} ** {lock_N = <>};
|
||||||
|
|
||||||
|
mkNAltPl = \s, alt, g, anim ->
|
||||||
|
let {singular = mkN s ; plural = mkN alt} in {
|
||||||
|
s = table { NF Sg c size => singular.s ! NF Sg c size;
|
||||||
|
NF Pl c nom => singular.s ! NF Sg c nom;
|
||||||
|
NF Pl c nompl => plural.s ! NF Sg c nompl;
|
||||||
|
NF Pl c sgg => plural.s ! NF Sg c sgg;
|
||||||
|
NF Pl c plg => plural.s ! NF Pl c plg } ;
|
||||||
|
g = g ;
|
||||||
|
anim = anim
|
||||||
|
} ** {lock_N = <>};
|
||||||
|
|
||||||
oper mkWorstN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg,
|
oper mkWorstN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg,
|
||||||
nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N
|
nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N
|
||||||
= \nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg,
|
= \nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg,
|
||||||
@@ -362,14 +375,18 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
|||||||
mkN3 f p2 p3 = (UseN f) ** {c2 = p2; c3 = p3; lock_N3 = <>} ;
|
mkN3 f p2 p3 = (UseN f) ** {c2 = p2; c3 = p3; lock_N3 = <>} ;
|
||||||
|
|
||||||
|
|
||||||
mkPN = \ivan, g, n, anim ->
|
-- mkPN = \ivan, g, n, anim ->
|
||||||
case n of {
|
-- case n of {
|
||||||
Sg => case g of {
|
-- Sg => case g of {
|
||||||
Masc => mkProperNameMasc ivan anim ;
|
-- Masc => mkProperNameMasc ivan anim ;
|
||||||
_ => mkProperNameFem ivan anim
|
-- Fem => mkProperNameFem ivan anim ;
|
||||||
} ;
|
-- _ => mkProperNameMasc ivan anim
|
||||||
Pl => mkProperNamePl ivan anim
|
-- } ;
|
||||||
} ** {lock_PN =<>};
|
-- Pl => mkProperNamePl ivan anim
|
||||||
|
-- } ** {lock_PN =<>};
|
||||||
|
|
||||||
|
mkPN ivan g n anim = nounPN (mk1N ivan);
|
||||||
|
|
||||||
nounPN n = {s=\\c => n.s! NF Sg c nom; 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
|
||||||
@@ -385,6 +402,7 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
|||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (positive : Str) -> A = mk1A ;
|
mkA : (positive : Str) -> A = mk1A ;
|
||||||
|
mkA : (positive : Str) -> AdjType -> A = mk1Ab ;
|
||||||
mkA : (positive, comparative : Str) -> A = mk2A;
|
mkA : (positive, comparative : Str) -> A = mk2A;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -393,14 +411,27 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
|||||||
|
|
||||||
mk2A : Str -> Str -> A = \positive, comparative ->
|
mk2A : Str -> Str -> A = \positive, comparative ->
|
||||||
case positive of {
|
case positive of {
|
||||||
stem+"ый" => mkAdjDeg (aRegHardStemStress stem) comparative ;
|
stem+"ый" => mkAdjDeg (aRegHard StemStress Qual stem) comparative ;
|
||||||
stem+"ой" => mkAdjDeg (aRegHardEndStress stem) comparative ;
|
stem+"ой" => mkAdjDeg (aRegHard EndStress Qual stem) comparative ;
|
||||||
stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative;
|
stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHard StemStress Qual stem) comparative;
|
||||||
stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative;
|
stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHard StemStress Qual stem) comparative;
|
||||||
stem+"ий" => mkAdjDeg (aRegSoft stem) comparative ;
|
stem+"ий" => mkAdjDeg (aRegSoft Qual stem) comparative ;
|
||||||
stem => mkAdjDeg (adjInvar stem) comparative
|
stem => mkAdjDeg (adjInvar stem) comparative
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mk1Ab : Str -> AdjType -> A = \positive, at ->
|
||||||
|
let { stem = Predef.tk 2 positive;
|
||||||
|
comparative = stem + "ее"
|
||||||
|
} in case positive of {
|
||||||
|
stem+"ый" => mkAdjDeg (aRegHard StemStress at stem) comparative ;
|
||||||
|
stem+"ой" => mkAdjDeg (aRegHard EndStress at stem) comparative ;
|
||||||
|
stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHard StemStress at stem) comparative;
|
||||||
|
stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHard StemStress at stem) comparative;
|
||||||
|
stem+"ий" => mkAdjDeg (aRegSoft at stem) comparative ;
|
||||||
|
stem => mkAdjDeg (adjInvar stem) comparative
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- khaki, mini, hindi, netto
|
-- khaki, mini, hindi, netto
|
||||||
adjInvar : Str -> Adjective = \stem -> { s = \\_ => stem } ;
|
adjInvar : Str -> Adjective = \stem -> { s = \\_ => stem } ;
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,9 @@ oper Pronoun = { s : PronForm => Str ; n : Number ; p : Person ;
|
|||||||
-- Gender is not morphologically determined for first
|
-- Gender is not morphologically determined for first
|
||||||
-- and second person pronouns.
|
-- and second person pronouns.
|
||||||
|
|
||||||
|
-- NF: but adjectives and verbs in past tense have to agree with gender of the
|
||||||
|
-- person speaking!
|
||||||
|
|
||||||
param PronGen = PGen Gender | PNoGen ;
|
param PronGen = PGen Gender | PNoGen ;
|
||||||
|
|
||||||
-- The following coercion is useful:
|
-- The following coercion is useful:
|
||||||
@@ -349,10 +352,13 @@ oper animAF: AdjForm -> Animacy = \af ->
|
|||||||
--
|
--
|
||||||
-- An adjective phrase may contain a complement, e.g. "моложе Риты".
|
-- An adjective phrase may contain a complement, e.g. "моложе Риты".
|
||||||
-- Then it is used as postfix in modification, e.g. "человек, моложе Риты".
|
-- Then it is used as postfix in modification, e.g. "человек, моложе Риты".
|
||||||
|
param
|
||||||
|
AdjStress = EndStress | StemStress ;
|
||||||
|
AdjType = Qual | Rel ;
|
||||||
|
|
||||||
|
oper
|
||||||
IsPostfixAdj = Bool ;
|
IsPostfixAdj = Bool ;
|
||||||
|
|
||||||
|
|
||||||
-- Simple adjectives are not postfix:
|
-- Simple adjectives are not postfix:
|
||||||
|
|
||||||
-- Adjective type includes both non-degree adjective classes:
|
-- Adjective type includes both non-degree adjective classes:
|
||||||
@@ -378,7 +384,7 @@ oper animAF: AdjForm -> Animacy = \af ->
|
|||||||
|
|
||||||
param DForm = unit | teen | ten | hund ;
|
param DForm = unit | teen | ten | hund ;
|
||||||
param Place = attr | indep ;
|
param Place = attr | indep ;
|
||||||
param Size = nom | sgg | plg ;
|
param Size = nom | nompl | sgg | plg ;
|
||||||
--param Gend = masc | fem | neut ;
|
--param Gend = masc | fem | neut ;
|
||||||
oper mille : Size => Str = table {
|
oper mille : Size => Str = table {
|
||||||
nom => "тысяча" ;
|
nom => "тысяча" ;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ lin
|
|||||||
how_IAdv = ss "как" ;
|
how_IAdv = ss "как" ;
|
||||||
how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen};
|
how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen};
|
||||||
how8much_IAdv = ss "сколько" ;
|
how8much_IAdv = ss "сколько" ;
|
||||||
i_Pron = pronYa ;
|
i_Pron = pronYa Masc ;
|
||||||
if_Subj = ss "если" ;
|
if_Subj = ss "если" ;
|
||||||
in8front_Prep = { s = "перед" ; c = Inst};
|
in8front_Prep = { s = "перед" ; c = Inst};
|
||||||
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
||||||
@@ -93,7 +93,7 @@ lin
|
|||||||
under_Prep = { s = "под" ; c = Inst };
|
under_Prep = { s = "под" ; c = Inst };
|
||||||
very_AdA = ss "очень" ;
|
very_AdA = ss "очень" ;
|
||||||
want_VV = verbKhotet ;
|
want_VV = verbKhotet ;
|
||||||
we_Pron = pronMu ;
|
we_Pron = pronMu Masc;
|
||||||
whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl;
|
whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl;
|
||||||
whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg;
|
whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg;
|
||||||
when_IAdv = ss "когда" ;
|
when_IAdv = ss "когда" ;
|
||||||
@@ -109,10 +109,10 @@ lin
|
|||||||
why_IAdv = ss "почему" ;
|
why_IAdv = ss "почему" ;
|
||||||
with_Prep = { s = "с" ; c = Inst};
|
with_Prep = { s = "с" ; c = Inst};
|
||||||
without_Prep = { s = "без" ; c = Gen};
|
without_Prep = { s = "без" ; c = Gen};
|
||||||
youPl_Pron = pronVu;
|
youPl_Pron = pronVu Masc;
|
||||||
yes_Utt = ss ["Да"] ;
|
yes_Utt = ss ["Да"] ;
|
||||||
youSg_Pron = pronTu;
|
youSg_Pron = pronTu Masc;
|
||||||
youPol_Pron = pronVu;
|
youPol_Pron = pronVu Masc;
|
||||||
|
|
||||||
have_V2= P.dirV2 (P.regV P.imperfective P.first "име" "ю" "имел" "имей" "иметь" );
|
have_V2= P.dirV2 (P.regV P.imperfective P.first "име" "ю" "имел" "имей" "иметь" );
|
||||||
have_V3 = P.mkV3 (P.mkV P.imperfective "есть" "есть" "есть" "есть" "есть" "есть" "был" "будь" "есть") "" "у" Nom Gen;
|
have_V3 = P.mkV3 (P.mkV P.imperfective "есть" "есть" "есть" "есть" "есть" "есть" "был" "будь" "есть") "" "у" Nom Gen;
|
||||||
|
|||||||
Reference in New Issue
Block a user