REPLACED old Russian RG completely

This commit is contained in:
Roman Suzi
2020-07-24 12:59:02 +03:00
parent 4d3e106148
commit 1f9e6aeaad
38 changed files with 6639 additions and 276773 deletions
+168 -141
View File
@@ -1,154 +1,181 @@
--# -path=.:../abstract:../common:../../prelude
concrete StructuralRus of Structural = CatRus **
open ResRus, MorphoRus, (P = ParadigmsRus), Prelude, NounRus in {
flags optimize=all ; coding=utf8 ;
concrete StructuralRus of Structural = CatRus **
open ParadigmsRus, ResRus, MorphoRus, (X = ConstructX), Coordination, Prelude in {
lin
-- First mount the numerals.
-- UseNumeral i = i ;
i_Pron = personalPron (Ag MSg P1) ;
we_Pron = personalPron (Ag GPl P1) ;
youSg_Pron = personalPron (Ag MSg P2) ;
youPl_Pron = personalPron (Ag GPl P2) ;
youPol_Pron = youPl_Pron ;
he_Pron = personalPron (Ag MSg P3) ;
she_Pron = personalPron (Ag FSg P3) ;
it_Pron = personalPron (Ag NSg P3) ;
they_Pron = personalPron (Ag GPl P3) ;
-- Then an alphabetical list of structural words
whatSg_IP = what_sg ;
whatPl_IP = what_pl ;
whoSg_IP = who_sg ;
whoPl_IP = who_pl ;
which_IQuant = (adjFormsAdjective (makeAdjectiveForms "который" "" "1a" PrefFull)) ** {
preferShort=PrefFull ;
g=Neut ;
c=Nom
} ;
this_Quant = (adjFormsAdjective this_forms) ** {
preferShort=PrefFull ;
g=Neut ;
c=Nom
} ;
that_Quant = (adjFormsAdjective that_forms) ** {
preferShort=PrefFull ;
g=Neut ;
c=Nom
} ;
no_Quant = (adjFormsAdjective (makeAdjectiveForms "никакой" "" "3b" PrefFull)) ** {
preferShort=PrefFull ;
g=Neut ;
c=Nom
} ;
above_Prep = {s="над" ; c=Ins; hasPrep=True} ;
after_Prep = {s="после" ; c=Gen; hasPrep=True };
before_Prep = {s="перед" ; c=Ins; hasPrep=True};
behind_Prep = {s="за" ; c=Ins; hasPrep=True };
between_Prep = {s="между" ; c=Ins; hasPrep=True};
by8agent_Prep = {s=["с помощью"] ; c=Gen; hasPrep=True};
by8means_Prep = {s=["с помощью"] ; c=Gen; hasPrep=True};
during_Prep = {s=["в течение"] ; c=Gen; hasPrep=True};
except_Prep = {s=["за исключением"] ; c=Gen; hasPrep=True};
for_Prep = {s="для" ; c=Gen ; hasPrep=True};
from_Prep = {s="от" ; c=Gen ; hasPrep=True} ;
in8front_Prep = {s="перед" ; c=Ins; hasPrep=True};
in_Prep = {s="в" ; c=Loc ; hasPrep=True} ;
on_Prep = {s="на" ; c=Loc ; hasPrep=True};
part_Prep = {s="" ; c=Nom ; hasPrep=False }; -- missing in Russian???
possess_Prep = {s="" ; c=Gen ; hasPrep=False};
through_Prep = {s="через" ; c=Acc ; hasPrep=True};
to_Prep = {s="к" ; c=Dat ; hasPrep=True} ;
under_Prep = {s="под" ; c=Ins ; hasPrep=True};
without_Prep = {s="без" ; c=Gen; hasPrep=True };
or_Conj = mkConj "или" Sg ;
and_Conj = mkConj "и" Pl ;
both7and_DConj = mkConj "как" (comma ++ "так и") Pl ;
either7or_DConj = mkConj "либо" (comma ++ "либо") Sg ;
if_then_Conj = mkConj "если" (comma ++ "то") Sg ;
with_Prep = {s="с" ; c=Ins; hasPrep=True};
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; size = nom} ;
almost_AdA = {s= "почти"} ;
almost_AdN = {s= "почти"} ;
although_Subj = ss "хотя" ;
always_AdV = ss "всегда" ;
and_Conj = {s1 = [] ; s2 = "и" ; n = Pl} ;
because_Subj = ss ["потому что"] ;
before_Prep ={ s = "перед" ; c = Inst};
behind_Prep = { s = "за" ; c = Inst };
between_Prep = { s = "между" ; c = Inst};
both7and_DConj = sd2 "как" [", так и"] ** {n = Pl} ;
but_PConj = ss "но" ;
by8agent_Prep = { s = ["с помощью"] ; c = Gen};
by8means_Prep = { s = ["с помощью"] ; c = Gen};
can8know_VV = verbMoch ;
can_VV = verbMoch ;
during_Prep = { s = ["в течение"] ; c = Gen};
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
-- comma is not visible in GUI!
every_Det = {
s = \\c,a,g => kazhdujDet.s ! AF c a (gennum g Sg) ;
n = Sg ; g = PNoGen ; c = Nom ; size = nom} ;
everybody_NP = DetCN (DetQuant IndefArt NumPl) (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ;
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
everywhere_Adv = ss "везде" ;
few_Det = {
s = \\c,a,g => nemnogoSgDet.s ! AF c a (gennum g Sg) ;
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 };
he_Pron = pronOn ;
here_Adv = ss "здесь" ;
here7to_Adv = ss "сюда" ;
here7from_Adv = ss "отсюда" ;
how_IAdv = ss "как" ;
how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen};
how8much_IAdv = ss "сколько" ;
i_Pron = pronYa Masc ;
if_Subj = ss "если" ;
in8front_Prep = { s = "перед" ; c = Inst};
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
it_Pron = pronOno ;
less_CAdv = {s="менее"; p=""} ;
many_Det = {
s = \\c,a,g => mnogoSgDet.s ! AF c a (gennum g Sg) ;
n = Sg; g = (PGen Neut); c = Gen; size = plg} ;
more_CAdv = {s="более"; p=""} ;
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 = {
s = \\c,a,g => mnogoSgDet.s ! AF c a (gennum g Sg) ;
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; size = nom };
or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ;
otherwise_PConj = ss "иначе" ;
part_Prep = { s = "" ; c = Nom}; -- missing in Russian
please_Voc = ss "пожалуйста" ;
possess_Prep = { s = "" ; c = Gen}; --- ?? AR 19/2/2004
quite_Adv = ss "довольно" ;
she_Pron = pronOna ;
so_AdA = ss "так";
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
someSg_Det = {
s = \\c,a,g => nekotorujDet.s ! AF c a (gennum g Sg) ;
n = Sg ; g = PNoGen ; c= Nom ; size = nom} ;
somePl_Det = {
s = \\c,a,g => nekotorujDet.s ! AF c a (gennum g Pl) ;
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; 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; size = nom} ;
through_Prep = { s = "через" ; c = Acc };
to_Prep = { s = "к" ; c = Dat };
too_AdA = ss "слишком" ;
under_Prep = { s = "под" ; c = Inst };
very_AdA = ss "очень" ;
want_VV = verbKhotet ;
we_Pron = pronMu Masc;
whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl;
whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg;
everywhere_Adv = mkAdv "везде" ;
here_Adv = mkAdv "здесь" ;
here7to_Adv = mkAdv "сюда" ;
here7from_Adv = mkAdv "отсюда" ;
quite_Adv = mkAdv "довольно" ;
somewhere_Adv = mkAdv "где-нибудь" ;
there_Adv = mkAdv "там" ;
there7to_Adv = mkAdv "туда" ;
there7from_Adv = mkAdv "оттуда" ;
how_IAdv = ss "как" ;
how8much_IAdv = ss "сколько" ;
when_IAdv = ss "когда" ;
when_Subj = ss "когда" ;
where_IAdv = ss "где" ;
which_IQuant = {
s = \\_ => kotorujDet.s ;
g = PNoGen;
c= Nom
} ;
whoPl_IP = pron2NounPhraseNum pronKto Animate Pl;
whoSg_IP = pron2NounPhraseNum pronKto Animate Sg;
why_IAdv = ss "почему" ;
with_Prep = {s = pre {#sconsonant => "со" ; ("щ"|"Щ") => "со" ; _ => "с"} ; c = Inst} ;
without_Prep = { s = "без" ; c = Gen};
youPl_Pron = pronVu Masc;
yes_Utt = ss ["Да"] ;
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;
so_AdA = ss "так";
have_not_V3 = P.mkV3 (P.mkV P.imperfective "нет" "нет" "нет" "нет" "нет" "нет" "не было" "не будь" "нет") "" "у" Gen Gen;
less_CAdv = X.mkCAdv "менее" "чем" ;
more_CAdv = X.mkCAdv "более" "чем" ;
as_CAdv = X.mkCAdv "так же" "как и" ;
--- NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ;
--- AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ;
--- AnyNumDet = mkDeterminerNum (lubojDet ** {n = Pl; g = PNoGen; c= Nom} );
--- NoNumDet = mkDeterminerNum (nikakojDet ** {n = Pl; g = PNoGen; c= Nom} );
---NobodyNP = UsePron pronNikto Animate;
---NothingNP = UsePron pronNichto Inanimate;
can8know_VV = {v=can; modal=\\a=>[]} ;
can_VV = {v=can; modal=\\a=>[]} ;
must_VV = {v=nullVerb; modal=adjFormsToShort (makeAdjectiveForms "должный" "" "1*a" PrefFull)} ;
want_VV = {v=want; modal=\\a=>[]} ;
-- In case of "neither.. no" expression double negation is not
-- only possible, but also required in Russian.
-- There is no means of control for this however in the resource grammar.
--- NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ;
--- NowhereNP = ss "нигде" ;
--- AgentPrep = { s = "" ; c = Nom}; -- missing in Russian
every_Det = {
s = \\g => (adjFormsAdjective (makeAdjectiveForms "каждый" "" "1*a" PrefFull)).s ! GSg g;
g = Masc ;
c = Nom ;
size = Num1 ;
} ;
someSg_Det = {
s = \\g => (adjFormsAdjective (makeAdjectiveForms "некоторый" "" "1*a" PrefFull)).s ! GSg g;
g = Masc ;
c = Nom ;
size = Num1 ;
} ;
somePl_Det = {
s = \\g => (adjFormsAdjective (makeAdjectiveForms "некоторый" "" "1*a" PrefFull)).s ! GPl;
g = Masc ;
c = Nom ;
size = NumAll ;
} ;
lin language_title_Utt = ss "Русский" ;
oper
sconsonant : pattern Str = #(("с"|"з"|"ж"|"ш"|"л"|"ль"|"р"|"м"|"в"|"С"|"З"|"Ж"|"Ш"|"Л"|"Ль"|"Р"|"М"|"В"|"ЛЬ") +
("б" | "в" | "г" | "д" | "ж" | "з" | "й" | "к" | "л" | "м" | "н" | "п" | "р" | "с" | "т" | "ф" | "х" | "ц" | "ч" | "ш" | "щ" |
"Б" | "В" | "Г" | "Д" | "Ж" | "З" | "Й" | "К" | "Л" | "М" | "Н" | "П" | "Р" | "С" | "Т" | "Ф" | "Х" | "Ц" | "Ч" | "Ш" | "Щ")) ;
}
few_Det = { -- numeral! TODO: мало ? немного ?
s = \\g => (adjFormsAdjective (makeAdjectiveForms "немногий" "" "3a" PrefFull)).s ! GPl;
g = Masc ;
c = Nom ;
size = NumAll ;
} ;
many_Det, much_Det = {
s = \\g => (adjFormsAdjective (makeAdjectiveForms "многий" "" "3a" PrefFull)).s ! GPl;
g = Neut ;
c = Gen ;
size = NumAll
} ;
only_Predet = (adjFormsAdjective (noShorts only_Pron)) ** {size=Num1} ;
most_Predet = (makeAdjectiveFromNoun (nounFormsNoun (guessNounForms "большинство"))) ** {size=Num5} ;
all_Predet = (adjFormsAdjective (noShorts all_Pron)) ** {size=NumAll};
not_Predet = (adjFormsAdjective (mkA "не" "" "0")) ** {size=Num1} ;
how8many_IDet = {
s=\\g,anim,cas => case <anim,cas> of {
<_,Nom|VocRus|Ptv> => "сколько" ;
<_,Gen|Pre|Loc> => "скольких" ;
<_,Dat> => "скольким" ;
<_,Ins> => "сколькими" ;
<Inanimate,Acc> => "сколько" ;
<Animate,Acc> => "скольких" -- also as Nom?
} ;
g=Neut ;
size=NumAll ; --it depends???
c=Nom --???
} ;
almost_AdA = ss "почти" ;
almost_AdN = ss "почти" ;
always_AdV = ss "всегда" ;
at_least_AdN = ss "по меньшей мере" ; -- TODO: ?
at_most_AdN = ss "самое большее" ; -- TODO: ?
too_AdA = ss "слишком" ;
very_AdA = ss "очень" ;
everybody_NP = lin NP everybody ;
everything_NP = lin NP everything ;
something_NP = lin NP something ;
somebody_NP = lin NP somebody ;
nothing_NP = lin NP nothing ;
nobody_NP = lin NP nobody ;
but_PConj = ss "но" ;
otherwise_PConj = ss "иначе" ;
therefore_PConj = ss "следовательно" ;
although_Subj = ss "хотя" ;
because_Subj = ss ["потому что"] ;
if_Subj = ss "если" ;
when_Subj = ss "когда" ;
that_Subj = ss "что" ; -- TODO: ?
have_V2 = dirV2 (mkV Imperfective "иметь" "имею" "имеет");
language_title_Utt = ss "русский" ;
yes_Utt = ss ["да"] ;
no_Utt = ss ["нет"] ;
}