forked from GitHub/gf-core
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:
@@ -1,9 +1,10 @@
|
||||
concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [
|
||||
NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr
|
||||
NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr,
|
||||
IMale, IFemale, YouFamMale, YouFamFemale, YouPolMale, YouPolFemale
|
||||
] with
|
||||
(Syntax = SyntaxRus),
|
||||
(Symbolic = SymbolicRus),
|
||||
(Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, (P = ParadigmsRus) in {
|
||||
(Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, ExtraRus, (P = ParadigmsRus), (R = ResRus), (M = MorphoRus) in {
|
||||
lin
|
||||
SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ;
|
||||
SHaveNo p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ;
|
||||
@@ -12,6 +13,13 @@ concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [
|
||||
|
||||
AHaveCurr p curr = mkCl (mkVP have_V3 (mkNP aPl_Det curr) p.name) ;
|
||||
|
||||
lin NameNN = mkNP (P.mkN "NN") ;
|
||||
lin
|
||||
NameNN = mkNP (P.mkN "NN") ;
|
||||
IMale = mkPerson (M.pronYa R.Masc) ;
|
||||
IFemale = mkPerson (M.pronYa R.Fem) ;
|
||||
YouFamMale = mkPerson (M.pronTu R.Masc) ;
|
||||
YouFamFemale = mkPerson (M.pronTu R.Fem) ;
|
||||
YouPolMale = mkPerson (M.pronVu R.Masc) ;
|
||||
YouPolFemale = mkPerson (M.pronVu R.Fem) ;
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
-- (C) 2009 Aarne Ranta under LGPL
|
||||
|
||||
concrete WordsRus of Words = SentencesRus **
|
||||
open SyntaxRus, (P = ParadigmsRus), (L = LexiconRus), Prelude in {
|
||||
open SyntaxRus, (P = ParadigmsRus), (L = LexiconRus), ExtraRus, (R = ResRus), Prelude in {
|
||||
|
||||
flags coding = utf8 ;
|
||||
|
||||
@@ -71,7 +71,7 @@ flags coding = utf8 ;
|
||||
|
||||
|
||||
CitRestaurant cit =
|
||||
mkCNPlace (mkCN cit (P.mkN "ресторан")) in_Prep to_Prep ;
|
||||
mkCNPlace (mkCN cit (P.mkN "ресторан")) in_Prep to2_Prep ;
|
||||
|
||||
|
||||
-- currencies
|
||||
@@ -127,30 +127,36 @@ flags coding = utf8 ;
|
||||
|
||||
|
||||
-- actions
|
||||
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
|
||||
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
|
||||
AHasAge p num = mkCl (mkVP be_V3 (mkNP num L.year_N) p.name) ;
|
||||
AHasName p name = mkCl (mkVP (P.mkV3 name_is_V "" "" P.nominative P.accusative) name p.name) ;
|
||||
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
|
||||
AHasRoom p num = mkCl p.name have_V2
|
||||
AHasChildren p num = mkCl (mkVP have_V3 (mkNP num L.child_N) p.name) ;
|
||||
AHasRoom p num = mkCl (mkVP have2_V3
|
||||
(mkNP (mkNP a_Det (P.mkN "номер"))
|
||||
(SyntaxRus.mkAdv for_Prep (mkNP num (P.mkN "человек")))) ;
|
||||
AHasTable p num = mkCl p.name have_V2
|
||||
(SyntaxRus.mkAdv for_Prep (mkNP num (L.man_N)))) p.name) ;
|
||||
AHasTable p num = mkCl (mkVP have2_V3
|
||||
(mkNP (mkNP a_Det (P.mkN "стол"))
|
||||
(SyntaxRus.mkAdv for_Prep (mkNP num (P.mkN "человек")))) ;
|
||||
(SyntaxRus.mkAdv for_Prep (mkNP num (L.man_N)))) p.name) ;
|
||||
AHungry p = mkCl p.name (P.mkA "голодный") ;
|
||||
AIll p = mkCl p.name (P.mkA "больной") ;
|
||||
AKnow p = mkCl p.name (P.regV P.imperfective P.first "зна" "ю" "знал" "знай" "знать" ) ;
|
||||
ALike p item = mkCl item (P.mkV2 (P.mkV P.imperfective "нравлюсь" "нравишься" "нравится" "нравимся" "нравитесь" "нравятся" "нравился" "нравься" "нравиться") [] P.dative) p.name ;
|
||||
ALive p co = mkCl p.name (mkVP (mkVP (P.regV P.imperfective P.firstE "жив" "у" "жил" "живи" "жить")) (SyntaxRus.mkAdv in_Prep co)) ;
|
||||
ALove p q = mkCl p.name (P.dirV2 (P.regV P.imperfective P.second "люб" "лю" "любил" "люби" "любить" )) q.name ;
|
||||
AMarried p = mkCl p.name (P.mkA "женатый") ;
|
||||
-- AMarried p = mkCl p.name (P.mkA "женатый") ;
|
||||
AMarried p = let status = case p.name.g of {
|
||||
R.PGen R.Masc => P.mkAdv "женат" ;
|
||||
_ => P.mkAdv "замужем"
|
||||
} in mkCl p.name status ;
|
||||
AReady p = mkCl p.name (P.mkA "готовый") ;
|
||||
AScared p = mkCl p.name (P.mkV P.imperfective "боюсь" "боишься" "боится" "боимся" "бойтесь" "боятся" "боялся" "бойся" "бояться") ;
|
||||
ASpeak p lang = mkCl p.name (P.mkV2 (P.regV P.imperfective P.secondA "говор" "ю" "говорил" "говори" "говорить") "на" P.prepositional) lang ;
|
||||
AThirsty p = mkCl p.name want_VV (mkVP (P.regV P.imperfective P.firstE "пь" "ю" "пил" "пей" "пить" )) ;
|
||||
ATired p = mkCl p.name (P.mkA "уставший") ;
|
||||
ATired p = mkCl p.name (P.mkA "уставший" R.Rel) ;
|
||||
AUnderstand p = mkCl p.name (P.regV P.imperfective P.first "понима" "ю" "понимал" "понимай" "понимать") ;
|
||||
AWant p obj = mkCl p.name (P.dirV2 (P.regV P.imperfective P.mixed "хо" "чу" "хотел" "хоти" "хотеть")) obj ;
|
||||
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (P.mkV P.imperfective "иду" "идёшь" "идёт" "идём" "идёте" "идут" "шёл" "иди" "идти")) place.to) ;
|
||||
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (P.mkV P.perfective "пошёл" "пошёл" "пошёл" "пошли" "пошли" "пошли" "пошёл" "пойди" "пойти")) place.to) ;
|
||||
--AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (P.mkV P.imperfective "иду" "идёшь" "идёт" "идём" "идёте" "идут" "шёл" "иди" "идти")) place.to) ;
|
||||
|
||||
-- miscellaneous
|
||||
|
||||
@@ -261,12 +267,9 @@ flags coding = utf8 ;
|
||||
by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n)
|
||||
} ;
|
||||
|
||||
far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
|
||||
long_IAdv = ss "как долго" ** {lock_IAdv = <>};
|
||||
|
||||
mkSuperl : A -> Det = \a -> SyntaxRus.mkDet the_Art (SyntaxRus.mkOrd a) ;
|
||||
|
||||
|
||||
far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
|
||||
long_IAdv = ss "как долго" ** {lock_IAdv = <>};
|
||||
|
||||
mkSuperl : A -> Det = \a -> SyntaxRus.mkDet the_Art (SyntaxRus.mkOrd a) ;
|
||||
|
||||
}
|
||||
|
||||
@@ -122,8 +122,6 @@ abstract Structural = Cat ** {
|
||||
as_CAdv : CAdv ;
|
||||
|
||||
have_V2 : V2 ;
|
||||
have_V3 : V3 ;
|
||||
have_not_V3 : V3;
|
||||
|
||||
fun language_title_Utt : Utt ;
|
||||
|
||||
|
||||
@@ -39054,7 +39054,7 @@ lin ispanjec_N = mkN "испанец" "испанца" "испанцу" "исп
|
||||
lin ispanist_N = mkN "испанист" "испаниста" "испанисту" "испаниста" "испанистом" "испанисте" "испанистом" "испанисты" "испанистов" "испанистам" "испанистов" "испанистом" "испанистах" Masc Animate ;
|
||||
lin ispanistika_N = mkN "испанистика" "испанистики" "испанистике" "испанистику" "испанистикою" "испанистике" "испанистикою" "испанистики" "испанистикою" "испанистикою" "испанистики" "испанистикою" "испанистикою" Fem 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_indjejjskijj_A = mkA "испано-индейский" ;
|
||||
lin ispano_mavritanskijj_A = mkA "испано-мавританский" ;
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
concrete ExtraRus of ExtraRusAbs = CatRus ** {
|
||||
flags coding=utf8 ;
|
||||
concrete ExtraRus of ExtraRusAbs = CatRus **
|
||||
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
|
||||
concrete LexiconRus of Lexicon = CatRus **
|
||||
open ParadigmsRus, Prelude, StructuralRus, MorphoRus in {
|
||||
open ParadigmsRus, Prelude, StructuralRus, MorphoRus, (E = ExtraRus) in {
|
||||
flags
|
||||
optimize=values ;
|
||||
coding=utf8 ;
|
||||
@@ -57,7 +57,8 @@ lin
|
||||
ceiling_N = mkN "потолок" ; -- vowel change
|
||||
chair_N = mkN "стул" ; -- irregular
|
||||
cheese_N = mkN "сыр" ;
|
||||
child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
||||
child_N = mkNAltPl "ребёнок" "деть" masculine animate;
|
||||
-- child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
||||
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate ;
|
||||
city_N = mkN "город" ;
|
||||
clean_A = mkA "чистый" "чище";
|
||||
@@ -185,7 +186,7 @@ lin
|
||||
louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ;
|
||||
love_N = mkN "любовь" ; -- vowel change
|
||||
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 ;
|
||||
meat_N = mkN "мясо" ;
|
||||
milk_N = mkN "молоко" ;
|
||||
@@ -353,7 +354,7 @@ lin
|
||||
wood_N = mkN "дерево" ;
|
||||
worm_N = mkN "черв" ;
|
||||
write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" );
|
||||
year_N = mkN "год" ;
|
||||
year_N = mkNAltPl "год" "лето" masculine inanimate ;
|
||||
yellow_A = mkA "жёлтый" ;
|
||||
young_A = mkA "молодой" "моложе";
|
||||
young_A = mkA "молодой" "моложе" ;
|
||||
}
|
||||
|
||||
@@ -16,27 +16,27 @@ flags coding=utf8 ;
|
||||
|
||||
----2 Personal (together with possesive) pronouns.
|
||||
|
||||
oper pronYa : Pronoun =
|
||||
oper pronYa : Gender -> Pronoun = \ gen ->
|
||||
let nonPoss = { s = table { Nom => "я" ;
|
||||
Gen => "меня" ;
|
||||
Dat => "мне" ;
|
||||
Acc => "меня" ;
|
||||
Inst => "мной" ;
|
||||
Prepos _ => "мне" } }
|
||||
in pronYaTu nonPoss "мо" P1 ;
|
||||
in pronYaTu nonPoss "мо" P1 gen ;
|
||||
|
||||
oper pronTu : Pronoun =
|
||||
oper pronTu : Gender -> Pronoun = \ gen ->
|
||||
let nonPoss = { s = table { Nom => "ты" ;
|
||||
Gen => "тебя" ;
|
||||
Dat => "тебе" ;
|
||||
Acc => "тебя" ;
|
||||
Inst => "тобой" ;
|
||||
Prepos _ => "тебе" } }
|
||||
in pronYaTu nonPoss "тво" P2 ;
|
||||
in pronYaTu nonPoss "тво" P2 gen ;
|
||||
|
||||
-- Pronouns ya, ty, svoj
|
||||
oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun =
|
||||
\nonPoss, mo, pers ->
|
||||
oper pronYaTu : { s : Case => Str } -> Str -> Person -> Gender -> Pronoun =
|
||||
\nonPoss, mo, pers, gen ->
|
||||
{ s = table {
|
||||
PF c _ NonPoss => nonPoss.s!c ;
|
||||
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 ->
|
||||
@@ -106,8 +106,8 @@ oper pronOno: Pronoun =
|
||||
g = PGen Neut ; n = Sg ; p = P3 ; pron = True
|
||||
} ;
|
||||
|
||||
oper pronMuVu : Str -> Str -> Person -> Pronoun =
|
||||
\mu,na,pers ->
|
||||
oper pronMuVu : Str -> Str -> Person -> Gender -> Pronoun =
|
||||
\mu,na,pers,gen ->
|
||||
{ s = table {
|
||||
PF Nom _ NonPoss => mu ;
|
||||
PF Gen _ NonPoss => na + "с" ;
|
||||
@@ -138,12 +138,12 @@ oper pronMuVu : Str -> Str -> Person -> Pronoun =
|
||||
PF Inst _ (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
|
||||
{ s = table {
|
||||
@@ -699,15 +699,15 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
||||
---- Type Adjective only has positive degree while AdjDegr type
|
||||
---- includes also comparative and superlative forms.
|
||||
--
|
||||
kazhdujDet: Adjective = aRegHardStemStress "кажд" ;
|
||||
samuj : Adjective = aRegHardStemStress "сам" ;
|
||||
kazhdujDet: Adjective = aRegHard StemStress Rel "кажд" ;
|
||||
samuj : Adjective = aRegHard StemStress Rel "сам" ;
|
||||
|
||||
-- lubojDet: Adjective = uy_oj_EndDecl "люб" ;
|
||||
-- drugojDet: Adjective = uy_oj_EndDecl "друг" ;
|
||||
-- glaznoj: Adjective = uy_oj_EndDecl "глазн" ;
|
||||
kotorujDet: Adjective = aRegHardStemStress "котор";
|
||||
nekotorujDet: Adjective = aRegHardStemStress "некотор";
|
||||
takoj: Adjective = aRegHardEndStress "так";
|
||||
kotorujDet: Adjective = aRegHard StemStress Rel "котор";
|
||||
nekotorujDet: Adjective = aRegHard StemStress Rel "некотор";
|
||||
takoj: Adjective = aRegHard EndStress Rel "так";
|
||||
-- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь";
|
||||
-- kakojDet: 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
|
||||
-- 3. stem ending with г, к, х
|
||||
-- 4. 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 o = case endStress of {
|
||||
True => "о" ;
|
||||
False => oAfter stem } in
|
||||
let o = case stress of {
|
||||
EndStress => "о" ;
|
||||
StemStress => oAfter stem } in
|
||||
{ s = table {
|
||||
AF Nom _ (GSg Masc) => stem + case endStress of {
|
||||
True => "ой";
|
||||
False => iAfter stem + "й" } ;
|
||||
AF Nom _ (GSg Masc) => stem + case stress of {
|
||||
EndStress => "ой";
|
||||
StemStress => iAfter stem + "й" } ;
|
||||
AF Nom _ (GSg Neut) => stem + o+"е";
|
||||
AF Gen _ (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 (Prepos _) _ GPl => stem + i+"х";
|
||||
|
||||
AFShort (GSg Masc) => stem;
|
||||
AFShort (GSg Fem) => stem + "а";
|
||||
AFShort (GSg Neut) => stem + o ;
|
||||
AFShort GPl => stem + i;
|
||||
AFShort (GSg Masc) => case at of {
|
||||
Qual => case stem of {
|
||||
stem2 + ("н"|"ьн") => stem2 + "ен" ;
|
||||
_ => 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
|
||||
} } ;
|
||||
|
||||
oper aRegSoft : Str -> Adjective = \stem ->
|
||||
oper aRegSoft : AdjType -> Str -> Adjective = \at, stem ->
|
||||
{ s = table {
|
||||
AF Nom _ (GSg Masc) => stem + "ий" ;
|
||||
AF Nom _ (GSg Neut) => stem + "ее";
|
||||
@@ -790,10 +806,22 @@ oper eEnd_Decl: Str -> CommNoun = \vs ->
|
||||
AF Dat _ GPl => stem + "им";
|
||||
AF (Prepos _) _ GPl => stem + "их";
|
||||
|
||||
AFShort (GSg Masc) => stem; -- FIXME: add e if stem ends in consonant + n
|
||||
AFShort (GSg Fem) => stem + "я";
|
||||
AFShort (GSg Neut) => stem + "е" ;
|
||||
AFShort GPl => stem + "и" ;
|
||||
AFShort (GSg Masc) => case at of {
|
||||
Qual => stem;
|
||||
Rel => 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 + "е"
|
||||
} } ;
|
||||
|
||||
@@ -8,24 +8,27 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
DetCN kazhduj okhotnik = {
|
||||
s = \\c => case kazhduj.size of {
|
||||
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 ;
|
||||
nompl =>
|
||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g Pl) ++
|
||||
okhotnik.s ! NF kazhduj.n (extCase c) nompl ;
|
||||
sgg =>
|
||||
case kazhduj.c of {
|
||||
Nom =>
|
||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||
case c of {
|
||||
PF Nom _ _ =>
|
||||
kazhduj.s ! AF Nom okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||
okhotnik.s ! NF Sg Gen sgg;
|
||||
_ =>
|
||||
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 =>
|
||||
case kazhduj.c of {
|
||||
Nom =>
|
||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||
case c of {
|
||||
PF Nom _ _ =>
|
||||
kazhduj.s ! AF Nom 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 }
|
||||
okhotnik.s ! NF Pl (extCase c) plg }
|
||||
};
|
||||
n = kazhduj.n ;
|
||||
p = P3 ;
|
||||
@@ -151,7 +154,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
||||
|
||||
NumCard c = c ;
|
||||
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
|
||||
OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors
|
||||
|
||||
@@ -20,7 +20,8 @@ lin n2 =
|
||||
case <c, g, a> of {
|
||||
<(Nom|Acc), Fem, Inanimate > => "две";
|
||||
<(Nom|Acc), _, Inanimate > => "два";
|
||||
<(Nom|Acc), _, Animate > => "двух";
|
||||
<Nom , _, Animate > => "два";
|
||||
<Acc , _, Animate > => "двух";
|
||||
<(Gen|Prepos _), _, _ > => "двух";
|
||||
<Dat, _, _ > => "двум";
|
||||
<Inst, _, _ > => "двумя"
|
||||
@@ -197,11 +198,11 @@ lin pot01 =
|
||||
lin pot0 d =
|
||||
{s = table {_ => d.s} ; size = d.size} ;
|
||||
lin pot110 =
|
||||
{s = \\ p => n59 "десять" ; size = plg} ;
|
||||
{s = \\ p => n59 "десят" ; size = plg} ;
|
||||
lin pot111 =
|
||||
{s = \\ p => nadsat "один" ; size = plg} ; --- 11
|
||||
lin pot1to19 d =
|
||||
{s = table {_ => d.s ! teen} ; size = d.size} ;
|
||||
{s = table {_ => d.s ! teen} ; size = plg} ;
|
||||
lin pot0as1 n =
|
||||
{s = table {p => n.s ! p ! unit} ; size = n.size} ;
|
||||
lin pot1 d =
|
||||
@@ -217,9 +218,9 @@ lin pot2plus d e =
|
||||
lin pot2as3 n =
|
||||
{s = n.s ! indep ; size = n.size} ;
|
||||
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 =
|
||||
{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
|
||||
--- raz/odin
|
||||
|
||||
@@ -73,6 +73,8 @@ oper
|
||||
|
||||
mkIndeclinableNoun: Str -> Gender -> Animacy -> N ;
|
||||
|
||||
mkNAltPl: Str -> Str -> Gender -> Animacy -> N ;
|
||||
|
||||
mkN : overload {
|
||||
|
||||
-- The regular function captures the variants for some common noun endings.
|
||||
@@ -290,6 +292,17 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
||||
anim = anim
|
||||
} ** {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,
|
||||
nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N
|
||||
= \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 = <>} ;
|
||||
|
||||
|
||||
mkPN = \ivan, g, n, anim ->
|
||||
case n of {
|
||||
Sg => case g of {
|
||||
Masc => mkProperNameMasc ivan anim ;
|
||||
_ => mkProperNameFem ivan anim
|
||||
} ;
|
||||
Pl => mkProperNamePl ivan anim
|
||||
} ** {lock_PN =<>};
|
||||
-- mkPN = \ivan, g, n, anim ->
|
||||
-- case n of {
|
||||
-- Sg => case g of {
|
||||
-- Masc => mkProperNameMasc ivan anim ;
|
||||
-- Fem => mkProperNameFem ivan anim ;
|
||||
-- _ => mkProperNameMasc ivan anim
|
||||
-- } ;
|
||||
-- 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=<>};
|
||||
|
||||
-- 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 : (positive : Str) -> A = mk1A ;
|
||||
mkA : (positive : Str) -> AdjType -> A = mk1Ab ;
|
||||
mkA : (positive, comparative : Str) -> A = mk2A;
|
||||
} ;
|
||||
|
||||
@@ -393,14 +411,27 @@ foreign = Foreign; -- +++ MG_UR: added +++
|
||||
|
||||
mk2A : Str -> Str -> A = \positive, comparative ->
|
||||
case positive of {
|
||||
stem+"ый" => mkAdjDeg (aRegHardStemStress stem) comparative ;
|
||||
stem+"ой" => mkAdjDeg (aRegHardEndStress stem) comparative ;
|
||||
stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative;
|
||||
stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHardStemStress stem) comparative;
|
||||
stem+"ий" => mkAdjDeg (aRegSoft stem) comparative ;
|
||||
stem => mkAdjDeg (adjInvar stem) comparative
|
||||
stem+"ый" => mkAdjDeg (aRegHard StemStress Qual stem) comparative ;
|
||||
stem+"ой" => mkAdjDeg (aRegHard EndStress Qual stem) comparative ;
|
||||
stem@(_+("г"|"к"|"х"))+"ий" => mkAdjDeg (aRegHard StemStress Qual stem) comparative;
|
||||
stem@(_+("ш"|"ж"|"ч"|"щ"))+"ий" => mkAdjDeg (aRegHard StemStress Qual stem) comparative;
|
||||
stem+"ий" => mkAdjDeg (aRegSoft Qual 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
|
||||
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
|
||||
-- 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 ;
|
||||
|
||||
-- The following coercion is useful:
|
||||
@@ -349,10 +352,13 @@ oper animAF: AdjForm -> Animacy = \af ->
|
||||
--
|
||||
-- An adjective phrase may contain a complement, e.g. "моложе Риты".
|
||||
-- Then it is used as postfix in modification, e.g. "человек, моложе Риты".
|
||||
param
|
||||
AdjStress = EndStress | StemStress ;
|
||||
AdjType = Qual | Rel ;
|
||||
|
||||
oper
|
||||
IsPostfixAdj = Bool ;
|
||||
|
||||
|
||||
-- Simple adjectives are not postfix:
|
||||
|
||||
-- Adjective type includes both non-degree adjective classes:
|
||||
@@ -378,7 +384,7 @@ oper animAF: AdjForm -> Animacy = \af ->
|
||||
|
||||
param DForm = unit | teen | ten | hund ;
|
||||
param Place = attr | indep ;
|
||||
param Size = nom | sgg | plg ;
|
||||
param Size = nom | nompl | sgg | plg ;
|
||||
--param Gend = masc | fem | neut ;
|
||||
oper mille : Size => Str = table {
|
||||
nom => "тысяча" ;
|
||||
|
||||
@@ -48,7 +48,7 @@ lin
|
||||
how_IAdv = ss "как" ;
|
||||
how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen};
|
||||
how8much_IAdv = ss "сколько" ;
|
||||
i_Pron = pronYa ;
|
||||
i_Pron = pronYa Masc ;
|
||||
if_Subj = ss "если" ;
|
||||
in8front_Prep = { s = "перед" ; c = Inst};
|
||||
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
||||
@@ -93,7 +93,7 @@ lin
|
||||
under_Prep = { s = "под" ; c = Inst };
|
||||
very_AdA = ss "очень" ;
|
||||
want_VV = verbKhotet ;
|
||||
we_Pron = pronMu ;
|
||||
we_Pron = pronMu Masc;
|
||||
whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl;
|
||||
whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg;
|
||||
when_IAdv = ss "когда" ;
|
||||
@@ -109,10 +109,10 @@ lin
|
||||
why_IAdv = ss "почему" ;
|
||||
with_Prep = { s = "с" ; c = Inst};
|
||||
without_Prep = { s = "без" ; c = Gen};
|
||||
youPl_Pron = pronVu;
|
||||
youPl_Pron = pronVu Masc;
|
||||
yes_Utt = ss ["Да"] ;
|
||||
youSg_Pron = pronTu;
|
||||
youPol_Pron = pronVu;
|
||||
youSg_Pron = pronTu Masc;
|
||||
youPol_Pron = pronVu Masc;
|
||||
|
||||
have_V2= P.dirV2 (P.regV P.imperfective P.first "име" "ю" "имел" "имей" "иметь" );
|
||||
have_V3 = P.mkV3 (P.mkV P.imperfective "есть" "есть" "есть" "есть" "есть" "есть" "был" "будь" "есть") "" "у" Nom Gen;
|
||||
|
||||
Reference in New Issue
Block a user