mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 11:42:49 -06:00
Russian_lex
This commit is contained in:
@@ -25,7 +25,7 @@ boy_N
|
|||||||
bread_N
|
bread_N
|
||||||
break_V2
|
break_V2
|
||||||
broad_ADeg
|
broad_ADeg
|
||||||
brother_N
|
brother_N2
|
||||||
brown_ADeg
|
brown_ADeg
|
||||||
butter_N
|
butter_N
|
||||||
buy_V2
|
buy_V2
|
||||||
@@ -59,7 +59,7 @@ drink_V2
|
|||||||
eat_V2
|
eat_V2
|
||||||
enemy_N
|
enemy_N
|
||||||
factory_N
|
factory_N
|
||||||
father_N
|
father_N2
|
||||||
fear_VS
|
fear_VS
|
||||||
find_V2
|
find_V2
|
||||||
fish_N
|
fish_N
|
||||||
@@ -106,7 +106,7 @@ man_N
|
|||||||
meat_N
|
meat_N
|
||||||
milk_N
|
milk_N
|
||||||
moon_N
|
moon_N
|
||||||
mother_N
|
mother_N2
|
||||||
mountain_N
|
mountain_N
|
||||||
music_N
|
music_N
|
||||||
narrow_ADeg
|
narrow_ADeg
|
||||||
@@ -162,8 +162,8 @@ stove_N
|
|||||||
student_N
|
student_N
|
||||||
stupid_ADeg
|
stupid_ADeg
|
||||||
sun_N
|
sun_N
|
||||||
switch8off_V
|
switch8off_V2
|
||||||
switch8on_V
|
switch8on_V2
|
||||||
table_N
|
table_N
|
||||||
teacher_N
|
teacher_N
|
||||||
teach_V2
|
teach_V2
|
||||||
@@ -173,7 +173,7 @@ thin_ADeg
|
|||||||
train_N
|
train_N
|
||||||
travel_V
|
travel_V
|
||||||
tree_N
|
tree_N
|
||||||
trousers_N
|
--trousers_N
|
||||||
ugly_ADeg
|
ugly_ADeg
|
||||||
understand_V2
|
understand_V2
|
||||||
university_N
|
university_N
|
||||||
|
|||||||
@@ -1,206 +1,237 @@
|
|||||||
--# -path=.:../abstract:../../prelude
|
--# -path=.:../abstract:../../prelude
|
||||||
--# -val
|
--# -val
|
||||||
|
|
||||||
concrete BasicRus of Basic = CategoriesRus ** open ParadigmsRus in {
|
concrete BasicRus of Basic = CategoriesRus ** open StructuralRus, ParadigmsRus in {
|
||||||
flags
|
flags
|
||||||
optimize=values ;
|
optimize=values ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
lin
|
lin
|
||||||
airplane_N = nTelefon "самолет" ;
|
airplane_N = nTelefon "самолет" ;
|
||||||
answer_V2S = mkV2S (caseV2 (regV "vastata") allative) ;
|
answer_V2S = tvDir (mkRegVerb imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" );
|
||||||
apartment_N = nMashina "квартир" ;
|
apartment_N = nMashina "квартир" ;
|
||||||
apple_N = nChislo "яблок" ;
|
apple_N = nChislo "яблок" ;
|
||||||
art_N = nChislo "искусств" ;
|
art_N = nChislo "искусств" ;
|
||||||
ask_V2Q = mkV2Q (caseV2 (regV "kysyä") ablative) ;
|
ask_V2Q = tvDir (mkRegVerb imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ;
|
||||||
baby_N = nMalush "малыш";
|
baby_N = nMalush "малыш";
|
||||||
bad_ADeg = mkADeg (nLukko "paha") "pahempi" "pahin" ;
|
bad_ADeg = mkADeg ( AKakoj_Nibud "плох" "") "хуже";
|
||||||
bank_N = nBank "банк" ;
|
bank_N = nBank "банк" ;
|
||||||
beautiful_ADeg = mkADeg (regN "kaunis") "kauniimpi" "kaunein" ;
|
beautiful_ADeg = mkADeg( AStaruyj "красив") "красивее";
|
||||||
become_VA = mkVA (regV "tulla") translative ;
|
become_VA = mkRegVerb perfective first "ста" "л" "стал" "стань" "стать" ;
|
||||||
beer_N = nChislo "пив" ;
|
beer_N = nChislo "пив" ;
|
||||||
beg_V2V = mkV2V (caseV2 (reg2V "pyytää" "pyysi") partitive) ;
|
beg_V2V = tvDir (mkRegVerb imperfective second "про" "шу" "просил" "проси" "просить" );
|
||||||
big_ADeg = mkADeg (sgpartN (nArpi "suuri") "suurta") "suurempi" "suurin" ;
|
big_ADeg = mkADeg( AKakoj_Nibud "больш" "") "больше" ;
|
||||||
bike_N = nTelefon "велосипед" ; --- for correct vowel harmony
|
bike_N = nTelefon "велосипед" ;
|
||||||
bird_N = nEdinica "птиц" ;
|
bird_N = nEdinica "птиц" ;
|
||||||
black_ADeg = mkADeg (nLukko "musta") "mustempi" "mustin" ;
|
black_ADeg = mkADeg( AStaruyj "чёрн") "чернее";
|
||||||
blue_ADeg = mkADeg (regN "sininen") "sinisempi" "sinisin" ;
|
blue_ADeg = mkADeg( AMolodoj "голуб") "голубее";
|
||||||
boat_N = nMashina "лодк" ;
|
boat_N = nMashina "лодк" ;
|
||||||
book_N = nMashina "книг" ;
|
book_N = nMashina "книг" ;
|
||||||
boot_N = nBank "сапог" ;
|
boot_N = nBank "сапог" ;
|
||||||
boss_N = nStomatolog "начальник" ;
|
boss_N = nStomatolog "начальник" ;
|
||||||
boy_N = nStomatolog "мальчик" ;
|
boy_N = nStomatolog "мальчик" ;
|
||||||
bread_N = nAdres "хлеб" ;
|
bread_N = nAdres "хлеб" ;
|
||||||
break_V2 = dirV2 (regV "rikkoa") ;
|
break_V2 = tvDir (mkRegVerb imperfective first "прерыва" "ю" "прерывал" "прерывай" "прерывать" );
|
||||||
broad_ADeg = mkADeg (regN "leveä") "leveämpi" "levein" ;
|
|
||||||
brother_N2 = funGen (nBrat ",брат") ;
|
broad_ADeg = mkADeg( AMalenkij "широк") "шире";
|
||||||
brown_ADeg = mkADeg (regN "ruskea") "ruskeampi" "ruskein" ;
|
brother_N2 = mkN2 (nBrat ",брат") ;
|
||||||
brown_ADeg = mkADeg( AStaruyj "коричнев") "коричневее";
|
brown_ADeg = mkADeg( AStaruyj "коричнев") "коричневее";
|
||||||
buy_V2 = dirV2 (regV "ostaa") ;
|
butter_N = nChislo "масл";
|
||||||
buy_V2 = tvDir (mkRegVerb imperfective first "покупа" "ю" "покупал" "покупай" "покупать" );
|
buy_V2 = tvDir (mkRegVerb imperfective first "покупа" "ю" "покупал" "покупай" "покупать" );
|
||||||
cap_N = nNoga "чашк" ; чаш-ек Pl-Gen
|
camera_N = nMashina "kamer" ;
|
||||||
cap_N = nNoga "чашк" ; -- чаш-ек Pl-Gen
|
cap_N = nNoga "чашк" ; -- чаш-ек Pl-Gen
|
||||||
carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" Masc Inanimate;
|
car_N = nMashina "машин" ;
|
||||||
carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" masculine inanimate;
|
carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" masculine inanimate;
|
||||||
ceiling_N = nPotolok"потол" ;
|
cat_N = nMashina "кошк" ;
|
||||||
ceiling_N = nPotolok "потол" ;
|
ceiling_N = nPotolok "потол" ;
|
||||||
cheese_N = nTelefon "сыр" ;
|
chair_N = nStul "стул" ;
|
||||||
|
cheese_N = nTelefon "сыр" ;
|
||||||
|
child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ;
|
||||||
child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" Masc Animate;
|
|
||||||
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate;
|
church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate;
|
||||||
city_N = nAdres "город" ;
|
city_N = nAdres "город" ;
|
||||||
|
|
||||||
clean_ADeg = regADeg "ren" ;
|
clean_ADeg = mkADeg( AStaruyj "чист") "чище";
|
||||||
clever_ADeg = regADeg "klok" ;
|
clever_ADeg = mkADeg( AStaruyj "умн") "умнее";
|
||||||
|
close_V2= tvDir (mkRegVerb imperfective first "закрыва" "ю" "закрывал" "закрывай" "закрывать" );
|
||||||
close_V2 = dirV2 (mk2V "stänga" "stängde") ;
|
coat_N = mkIndeclinableNoun "пальто" masculine inanimate ;
|
||||||
cold_ADeg = mkADeg( AStaruyj "холодн") "холоднее";
|
cold_ADeg = mkADeg( AStaruyj "холодн") "холоднее";
|
||||||
come_V = mkRegVerb imperfective second "прихо" "жу" "приходил" "приходи" "приходить" ;
|
come_V = mkRegVerb imperfective second "прихо" "жу" "приходил" "приходи" "приходить" ;
|
||||||
computer_N = nTelefon "компьютер" ;
|
computer_N = nTelefon "компьютер" ;
|
||||||
country_N = nMashina "стран" ;
|
country_N = nMashina "стран" ;
|
||||||
country_N = nMashina "стран" ;
|
cousin_N = nTelefon "кузен" ;
|
||||||
cousin_N = nTelefon "кузен" ;
|
cow_N = nMashina "коров" ;
|
||||||
die_V = mkRegVerb imperfective first "умира" "ю" "умирал" "умрай" "умирать" ;
|
die_V = mkRegVerb imperfective first "умира" "ю" "умирал" "умрай" "умирать" ;
|
||||||
dirty_ADeg = mkADeg( AStaruyj "грязн") "грязнее" ;
|
dirty_ADeg = mkADeg( AStaruyj "грязн") "грязнее" ;
|
||||||
doctor_N = nAdres "доктор" ;
|
doctor_N = nAdres "доктор" ;
|
||||||
doctor_N = nAdres "доктор" ;
|
dog_N = nNoga "собак" ;
|
||||||
dog_N = nNoga "собак" ;
|
door_N = nBol "двер" ;
|
||||||
drink_V2 = tvDir (mkRegVerb imperfective second "пь" "ю" "пил" "пей" "пить" );
|
drink_V2 = tvDir (mkRegVerb imperfective second "пь" "ю" "пил" "пей" "пить" );
|
||||||
eat_V2 = tvDir (mkRegVerb imperfective first "куша" "ю" "кушал" "кушай" "кушать" );
|
eat_V2 = tvDir (mkRegVerb imperfective first "куша" "ю" "кушал" "кушай" "кушать" );
|
||||||
eat_V2
|
enemy_N = nStomatolog "враг" ;
|
||||||
enemy_N = nStomatolog "враг" ;
|
factory_N = nNoga "фабрик" ;
|
||||||
factory_N = nNoga "фабрик" ;
|
father_N2 = mkN2 (mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate);
|
||||||
fear_VS= mkRegVerb imperfective first "бо" "ю" "боял" "бой" "боять" ;
|
fear_VS= mkRegVerb imperfective first "бо" "ю" "боял" "бой" "боять" ;
|
||||||
find_V2 = tvDir (mkRegVerb imperfective second "нахо" "жу" "находил" "находи" "находить" );
|
find_V2 = tvDir (mkRegVerb imperfective second "нахо" "жу" "находил" "находи" "находить" );
|
||||||
find_V2
|
fish_N = nMashina "рыб" ;
|
||||||
fish_N = nMashina "рыб" ;
|
floor_N = nTelefon "пол" ;
|
||||||
floor_N = nTelefon "пол" ;
|
forget_V2= tvDir (mkRegVerb imperfective first "забыва" "ю" "забывал" "забывай" "забывать" );
|
||||||
fridge_N = nBank "холодильник" ;
|
fridge_N = nBank "холодильник" ;
|
||||||
friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" masculine animate;
|
friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" masculine animate;
|
||||||
fruit_N = nTelefon "фрукт" ;
|
fruit_N = nTelefon "фрукт" ;
|
||||||
garden_N = nTelefon "сад" ;
|
garden_N = nTelefon "сад" ;
|
||||||
girl_N = nNoga "девочк" ;
|
girl_N = nNoga "девочк" ;
|
||||||
girl_N = nNoga "девочк" ;
|
glove_N = nNoga "перчатк" ;
|
||||||
glove_N = nNoga "перчатк" ;
|
gold_N = nChislo "золот" ;
|
||||||
gold_N = nChislo "золот" ;
|
good_ADeg = mkADeg(AKhoroshij "хорош") "лучше" ;
|
||||||
go_V= mkRegVerb imperfective second "хо" "жу" "ходил" "ходи" "ходить" ;
|
go_V= mkRegVerb imperfective second "хо" "жу" "ходил" "ходи" "ходить" ;
|
||||||
go_V
|
green_ADeg = mkADeg( AStaruyj "зелен") "зеленее" ;
|
||||||
harbour_N = nTelefon "залив" ;
|
harbour_N = nTelefon "залив" ;
|
||||||
harbour_N = nTelefon "залив" ;
|
hate_V2= tvDir (mkRegVerb imperfective second "ненави" "жу" "ненавидел" "ненавидь" "ненавидеть" );
|
||||||
hate_V2
|
hat_N = nMashina "шляп" ;
|
||||||
have_V2= tvDir (mkRegVerb imperfective second "име" "ю" "имел" "имей" "иметь" );
|
have_V2= tvDir (mkRegVerb imperfective second "име" "ю" "имел" "имей" "иметь" );
|
||||||
have_V2
|
hear_V2= tvDir (mkRegVerb imperfective first "слуша" "ю" "слушал" "слушай" "слушать" );
|
||||||
hill_N = nTelefon "холм" ;
|
hill_N = nTelefon "холм" ;
|
||||||
hill_N = nTelefon "холм" ;
|
hope_VS= mkRegVerb imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ;
|
||||||
horse_N = nBol "лошад" ;
|
horse_N = nBol "лошад" ;
|
||||||
horse_N = nBol "лошад" ;
|
hot_ADeg = mkADeg(AKhoroshij "горяч") "горячее" ;
|
||||||
house_N = nAdres "дом" ;
|
house_N = nAdres "дом" ;
|
||||||
|
|
||||||
|
important_ADeg = mkADeg( AStaruyj "важн") "важнее" ;
|
||||||
important_ADeg
|
industry_N = nChislo "производств" ;
|
||||||
iron_N = nChislo "желез" ;
|
iron_N = nChislo "желез" ;
|
||||||
king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate;
|
king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate;
|
||||||
king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короли" "королей" "королям" "королей" "королями" "королях" Masc Animate;
|
know_V2= tvDir (mkRegVerb imperfective first "зна" "ю" "знал" "знай" "знать" );
|
||||||
lake_N = nChislo "озер" ;
|
lake_N = nChislo "озер" ;
|
||||||
lake_N = nChislo "озер" ;
|
lamp_N = nMashina "ламп" ;
|
||||||
lamp_N = nMashina "ламп" ;
|
learn_V2= tvDir (mkRegVerb imperfective second "уч" "у" "учил" "учи" "учить" );
|
||||||
learn_V2
|
leather_N = nEdinica "кож" ;
|
||||||
leather_N = nEdinica "кож" ;
|
leave_V2= tvDir (mkRegVerb imperfective second "ухож" "у" "уходил" "уходи" "уходить" );
|
||||||
leave_V2
|
like_V2= tvDir (mkRegVerb imperfective second "нрав" "лю" "нравил" "нравь" "нравить" );
|
||||||
like_V2
|
listen_V2= tvDir (mkRegVerb imperfective first "слуша" "ю" "слушал" "слушай" "слушать" );
|
||||||
live_V= mkRegVerb imperfective second "жив" "у" "жил" "живи" "жить" ;
|
live_V= mkRegVerb imperfective second "жив" "у" "жил" "живи" "жить" ;
|
||||||
live_V
|
long_ADeg = mkADeg( AStaruyj "длинн") "длиннее" ;
|
||||||
lose_V2 = tvDir (mkRegVerb imperfective first "теря" "ю" "терял" "теряй" "терять" );
|
lose_V2 = tvDir (mkRegVerb imperfective first "теря" "ю" "терял" "теряй" "терять" );
|
||||||
love_N = nBol "любов" ;
|
love_N = nBol "любов" ;
|
||||||
love_V2= tvDir (mkRegVerb imperfective second "люб" "лю" "любил" "люби" "любить" );
|
love_V2= tvDir (mkRegVerb imperfective second "люб" "лю" "любил" "люби" "любить" );
|
||||||
man_N = nStomatolog "человек" ;
|
man_N = nStomatolog "человек" ;
|
||||||
man_N = nStomatolog "человек" ;
|
meat_N =nChislo "мяс" ;
|
||||||
milk_N = nChislo "молок" ;
|
milk_N = nChislo "молок" ;
|
||||||
moon_N = nMashina "лун" ;
|
moon_N = nMashina "лун" ;
|
||||||
moon_N = nMashina "лун" ;
|
mother_N2 = mkN2 ( nMashina "мам") ;
|
||||||
mother_N = nMashina "мам" ;
|
mountain_N = nMashina "гор" ;
|
||||||
music_N = nNoga "музык" ;
|
music_N = nNoga "музык" ;
|
||||||
narrow_ADeg = mkADeg( AStaruyj "узк") "уже" ;
|
narrow_ADeg = mkADeg( AStaruyj "узк") "уже" ;
|
||||||
narrow_ADeg
|
|
||||||
|
new_ADeg = mkADeg( AStaruyj "нов") "новее" ;
|
||||||
newspaper_N = nMashina "газет" ;
|
newspaper_N = nMashina "газет" ;
|
||||||
oil_N = nBol "нефть" ;
|
oil_N = nBol "нефть" ;
|
||||||
old_ADeg = mkADeg( AStaruyj "стар") "старше" ;
|
old_ADeg = mkADeg( AStaruyj "стар") "старше" ;
|
||||||
open_V2= tvDir (mkRegVerb imperfective first "открыва" "ю" "открывал" "открывай" "открывать" );
|
open_V2= tvDir (mkRegVerb imperfective first "открыва" "ю" "открывал" "открывай" "открывать" );
|
||||||
paper_N = nNoga "бумаг" ;
|
paper_N = nNoga "бумаг" ;
|
||||||
paper_N = nNoga "бумаг" ;
|
peace_N = nTelefon "мир" ;
|
||||||
pen_N = nNoga "ручк" ;
|
pen_N = nNoga "ручк" ;
|
||||||
planet_N = nMashina "планет" ;
|
planet_N = nMashina "планет" ;
|
||||||
plastic_N = nMashina "пластмасс" ;
|
plastic_N = nMashina "пластмасс" ;
|
||||||
plastic_N = nMashina "пластмасс" ;
|
play_V2 = tvDir (mkRegVerb imperfective first "игра" "ю" "играл" "играй" "играть" );
|
||||||
play_V2
|
policeman_N = nTelefon "милиционер" ;
|
||||||
policeman_N = nTelefon "милиционер" ;
|
priest_N = nStomatolog "священник" ;
|
||||||
queen_N = nMashina "королев" ;
|
queen_N = nMashina "королев" ;
|
||||||
radio_N = mkIndeclinableNoun "радио" neuter inanimate;
|
radio_N = mkIndeclinableNoun "радио" neuter inanimate;
|
||||||
radio_N = mkIndeclinableNoun "радио" ;
|
read_V2 = tvDir (mkRegVerb imperfective first "чита" "ю" "читал" "читай" "читать" );
|
||||||
red_ADeg = mkADeg( AStaruyj "красн") "краснее" ;
|
red_ADeg = mkADeg( AStaruyj "красн") "краснее" ;
|
||||||
religion_N = nMalyariya "религи" ;
|
religion_N = nMalyariya "религи" ;
|
||||||
restaurant_N = nTelefon "ресторан" ;
|
restaurant_N = nTelefon "ресторан" ;
|
||||||
restaurant_N = nTelefon "ресторан" ;
|
river_N = nNoga "рек" ;
|
||||||
river_N = nNog "рек" ;
|
rock_N = nUroven "кам" ;
|
||||||
roof_N = nEdinica "крыш" ;
|
roof_N = nEdinica "крыш" ;
|
||||||
rubber_N = nMashina "резин" ;
|
rubber_N = nMashina "резин" ;
|
||||||
run_V = mkRegVerb imperfective first "бега" "ю" "бегал" "бегай" "бегать" ;
|
run_V = mkRegVerb imperfective first "бега" "ю" "бегал" "бегай" "бегать" ;
|
||||||
run_V
|
say_VS = mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" ;
|
||||||
say_VS
|
school_N = nMashina "школ" ;
|
||||||
school_N = nMashina "школ" ;
|
science_N = nEdinica "наук" ;
|
||||||
science_N = nEdinica "наук" ;
|
sea_N = nProizvedenie "мор" ;
|
||||||
seek_V2 = tvDir (mkRegVerb imperfective first "ищ" "у" "искал" "ищи" "искать" );
|
seek_V2 = tvDir (mkRegVerb imperfective first "ищ" "у" "искал" "ищи" "искать" );
|
||||||
seek_V2
|
see_V2 = tvDir (mkRegVerb imperfective second "виж" "у" "видел" "видь" "видеть" );
|
||||||
sell_V3 = tvDirDir (mkRegVerb imperfective first "прода" "ю" "продавал" "продавай" "продавать" );
|
sell_V3 = tvDirDir (mkRegVerb imperfective first "прода" "ю" "продавал" "продавай" "продавать" );
|
||||||
sell_V3
|
send_V3 = tvDirDir (mkRegVerb imperfective first "посыла" "ю" "посылал" "посылай" "посылать" );
|
||||||
sheep_N = nMashina "овц" ;
|
sheep_N = nMashina "овц" ;
|
||||||
sheep_N = nMashina "овц" ;
|
ship_N = nNol "корабл" ;
|
||||||
|
|
||||||
shirt_N = nNoga "рубашк" ;
|
shirt_N = nNoga "рубашк" ;
|
||||||
shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" Masc Inanimate;
|
shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" masculine inanimate;
|
||||||
shop_N = nTelefon "магазин" ;
|
shop_N = nTelefon "магазин" ;
|
||||||
short_ADeg = mkADeg( AMalenkij "коротк") "короче" ;
|
short_ADeg = mkADeg( AMalenkij "коротк") "короче" ;
|
||||||
silver_N = nChislo "серебр" ;
|
silver_N = nChislo "серебр" ;
|
||||||
sister_N = nMashina "сестр" ;
|
sister_N = nMashina "сестр" ;
|
||||||
sleep_V = mkRegVerb imperfective first "сп" "лю" "спал" "спи" "спать" ;
|
sleep_V = mkRegVerb imperfective first "сп" "лю" "спал" "спи" "спать" ;
|
||||||
small_ADeg = mkADeg( AMalenkij "маленьк") "меньше" ;
|
small_ADeg = mkADeg( AMalenkij "маленьк") "меньше" ;
|
||||||
snake_N = nTetya"зме" ;
|
snake_N = nTetya"зме" ;
|
||||||
sock_N = nPotolok "нос" ;
|
sock_N = nPotolok "нос" ;
|
||||||
speak_V2 = tvDir (mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" );
|
speak_V2 = tvDir (mkRegVerb imperfective second "говор" "ю" "говорил" "говори" "говорить" );
|
||||||
star_N = nMashina "звезд" ;
|
star_N = nMashina "звезд" ;
|
||||||
steel_N = nBol "стал" ;
|
steel_N = nBol "стал" ;
|
||||||
stone_N = nNol "камен" ;
|
stone_N = nNol "камен" ;
|
||||||
stove_N = nBol "печ" ;
|
stove_N = nBol "печ" ;
|
||||||
student_N = nTelefon "студент" ;
|
student_N = nTelefon "студент" ;
|
||||||
stupid_ADeg = mkADeg( AMolodoj "тупой") "тупее" ;
|
stupid_ADeg = mkADeg( AMolodoj "тупой") "тупее" ;
|
||||||
sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" Neut Inanimate;
|
sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" neuter inanimate;
|
||||||
switch8off_V2 = tvDir (mkRegVerb imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ;
|
switch8off_V2 = tvDir (mkRegVerb imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ;
|
||||||
switch8on_V
|
switch8on_V2 = tvDir (mkRegVerb imperfective first "включа" "ю" "включал" "включай" "включать") ;
|
||||||
table_N = nTelefon "стол" ;
|
table_N = nTelefon "стол" ;
|
||||||
teacher_N = nNol "учител" ;
|
teacher_N = nNol "учител" ;
|
||||||
teach_V2
|
teach_V2 = tvDir (mkRegVerb imperfective second "уч" "у" "учил" "учи" "учить" );
|
||||||
television_N = nProizvedenie "телевидени" ;
|
television_N = nProizvedenie "телевидени" ;
|
||||||
thick_ADeg
|
thick_ADeg = mkADeg( AStaruyj "толст") "толще" ;
|
||||||
thin_ADeg
|
thin_ADeg = mkADeg( AMalenkij "тонк") "тоньше" ;
|
||||||
train_N = nAdres "поезд" ;
|
train_N = nAdres "поезд" ;
|
||||||
travel_V = mkRegVerb imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ;
|
travel_V = mkRegVerb imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ;
|
||||||
tree_N = nChislo "дерев" ;
|
tree_N = nChislo "дерев" ;
|
||||||
trousers_N = mkN "" "" "" "" "" "" "штаны" "штанов" "штанам" "штаны" "штанами" "штанах" Masc Inanimate;
|
--trousers_N = mkN "" "" "" "" "" "" "штаны" "штанов" "штанам" "штаны" "штанами" "штанах" masculine inanimate;
|
||||||
ugly_ADeg
|
ugly_ADeg = mkADeg( AStaruyj "некрасив") "некрасивее" ;
|
||||||
understand_V2
|
understand_V2 = tvDir (mkRegVerb imperfective first "понима" "ю" "понимал" "понимай" "понимать" );
|
||||||
university_N = nTelefon "университет" ;
|
university_N = nTelefon "университет" ;
|
||||||
village_N = nMalyariya "деревн" ;
|
village_N = nMalyariya "деревн" ;
|
||||||
wait_V2 = tvDir (mkRegVerb imperfective first "жд" "у" "ждал" "жди" "ждать" );
|
wait_V2 = tvDir (mkRegVerb imperfective first "жд" "у" "ждал" "жди" "ждать" );
|
||||||
walk_V
|
walk_V = mkRegVerb imperfective first "гуля" "ю" "гулял" "гуляй" "гулять" ;
|
||||||
warm_ADeg = mkADeg( AStaruyj "тёпл") "теплее" ;
|
warm_ADeg = mkADeg( AStaruyj "тёпл") "теплее" ;
|
||||||
war_N = nMashina "войн" ;
|
war_N = nMashina "войн" ;
|
||||||
watch_V2
|
watch_V2 = tvDir (mkRegVerb imperfective second "смотр" "ю" "смотрел" "смотри" "смотреть" );
|
||||||
water_N = nMashina "вод" ;
|
water_N = nMashina "вод" ;
|
||||||
white_ADeg = mkADeg( AStaruyj "бел") "белее" ;
|
white_ADeg = mkADeg( AStaruyj "бел") "белее" ;
|
||||||
|
|
||||||
window_N = nChislo "окн" ;
|
window_N = nChislo "окн" ;
|
||||||
wine_N = nChislo "вин" ;
|
wine_N = nChislo "вин" ;
|
||||||
win_V2 = tvDir (mkRegVerb imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" );
|
win_V2 = tvDir (mkRegVerb imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" );
|
||||||
|
woman_N = nZhenchina "женщин" ;
|
||||||
|
wood_N = nChislo "дерев" ;
|
||||||
|
write_V2 = tvDir (mkRegVerb imperfective first "пиш" "у" "писал" "пиши" "писать" );
|
||||||
|
yellow_ADeg = mkADeg( AStaruyj "жёлт") "желтее" ;
|
||||||
|
young_ADeg = mkADeg( AMolodoj "молод") "моложе";
|
||||||
|
|
||||||
|
do_V2 = tvDir (mkRegVerb imperfective first "дела" "ю" "делал" "делай" "делать" );
|
||||||
|
now_Adv = mkAdv "сейчас" ;
|
||||||
|
already_Adv = mkAdv "уже" ;
|
||||||
|
song_N = nTetya "песн" ;
|
||||||
|
add_V3 = mkV3 (mkRegVerb imperfective first "складыва" "ю" "складывал" "складывай" "складывать" ) "" "в" accusative accusative;
|
||||||
|
number_N = nChislo "числ" ;
|
||||||
|
put_V2 = tvDir (mkRegVerb imperfective second "лож" "у" "ложил" "ложи" "ложить" );
|
||||||
|
stop_V = mkRegVerb imperfective first "останавлива" "ю" "останавливал" "останавливай" "останавливать";
|
||||||
|
jump_V = mkRegVerb imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ;
|
||||||
|
here_Adv = mkAdv "здесь" ;
|
||||||
|
here7to_Adv = mkAdv "сюда" ;
|
||||||
|
here7from_Adv = mkAdv "отсюда" ;
|
||||||
|
there_Adv = mkAdv "там" ;
|
||||||
|
there7to_Adv = mkAdv "туда" ;
|
||||||
|
there7from_Adv = mkAdv "оттуда" ;
|
||||||
|
|
||||||
|
distance_N3 = mkN3 (nProizvedenie "расстоян") from_Prep to_Prep ;
|
||||||
|
|
||||||
|
-- in Russian combinations with verbs are expressed with adverbs:
|
||||||
|
-- "легко понять" ("easy to understand"), which is different from
|
||||||
|
-- adjective expression "легкий для понимания" ("easy for understanding")
|
||||||
|
-- So the next to words are adjectives, since there are such adjectives
|
||||||
|
-- in Russian, but to use them with verb would be wrong in Russian:
|
||||||
|
fun_AV = AStaruyj "весёл";
|
||||||
|
easy_A2V = mkA2 (AMalenkij "легк") "для" genitive ;
|
||||||
|
|
||||||
|
empty_ADeg = mkADeg (AMolodoj "пуст") "пустее";
|
||||||
married_A2 = mkA2 (adjInvar "замужем") "за" instructive ;
|
married_A2 = mkA2 (adjInvar "замужем") "за" instructive ;
|
||||||
wood_N = nChislo "дерев" ;
|
|
||||||
|
|||||||
@@ -52,18 +52,19 @@ lincat
|
|||||||
|
|
||||||
N2 = Function ;
|
N2 = Function ;
|
||||||
-- = CommNounPhrase ** Complement ;
|
-- = CommNounPhrase ** Complement ;
|
||||||
N3 = Function ** {s3 : Str; c2: Case} ;
|
N3 = CommNoun3;
|
||||||
|
-- = Function ** {s3 : Str; c2: Case} ;
|
||||||
Num = Numeral ;
|
Num = Numeral ;
|
||||||
-- = {s : Case => Gender => Str} ;
|
-- = {s : Case => Gender => Str} ;
|
||||||
|
|
||||||
V = Verbum ;
|
V = Verbum ;
|
||||||
-- = {s : VerbForm => Str ; asp : Aspect } ;
|
-- = {s : VerbForm => Str ; asp : Aspect } ;
|
||||||
VG = VerbGroup ;
|
-- VG = VerbGroup ;
|
||||||
-- = Verbum ** { w: Voice; s2 : Bool => Str ;
|
-- = Verbum ** { w: Voice; s2 : Bool => Str ;
|
||||||
-- s3 : Gender => Number => Str ; negBefore: Bool} ;
|
-- s3 : Gender => Number => Str ; negBefore: Bool} ;
|
||||||
VP = VerbPhrase ;
|
VP = VerbPhrase ;
|
||||||
-- = Verb ** {s2 : Str ; s3 : Gender => Number => Str ;
|
-- = {s : Bool => ClForm => GenNum => Person => Str ; a : Aspect ; w: Voice} ;
|
||||||
-- negBefore: Bool} ;
|
-- ** {s2 : Str ; s3 : Gender => Number => Str ; negBefore: Bool} ;
|
||||||
V2 = TransVerb ;
|
V2 = TransVerb ;
|
||||||
-- = Verbum ** Complement ;
|
-- = Verbum ** Complement ;
|
||||||
V3 = DitransVerb ;
|
V3 = DitransVerb ;
|
||||||
@@ -73,14 +74,12 @@ lincat
|
|||||||
VV = VerbVerb ;
|
VV = VerbVerb ;
|
||||||
-- = Verbum ;
|
-- = Verbum ;
|
||||||
|
|
||||||
VCl = {s : Bool => Anteriority => Str} ;
|
VCl = VerbPhraseClause ;
|
||||||
|
-- {s : Bool => Anteriority => Str}
|
||||||
|
-- fixed tense:
|
||||||
-- infinitive verb phrase (in other languages very similar to VPI,
|
-- infinitive verb phrase (in other languages very similar to VPI,
|
||||||
-- but without Bool=>Anteriority)
|
-- but without Bool=>Anteriority)
|
||||||
VPI = VerbPhraseInf ;
|
VPI = VerbPhrase ;
|
||||||
-- {s : Str; a: Aspect; w:Voice; s2 : Str ;
|
|
||||||
-- s3 : Gender => Number => Str ; negBefore: Bool} ;
|
|
||||||
-- almost the same as VP, but VF is fixed to the infinitive form
|
|
||||||
-- and the tense field is supressed
|
|
||||||
|
|
||||||
Adv = Adverb ; -- sentence adverb e.g. "now", "in the house"
|
Adv = Adverb ; -- sentence adverb e.g. "now", "in the house"
|
||||||
-- = {s : Str} ;
|
-- = {s : Str} ;
|
||||||
@@ -154,9 +153,13 @@ lincat
|
|||||||
|
|
||||||
AS = Adverb ;
|
AS = Adverb ;
|
||||||
-- = {s : Str} ;
|
-- = {s : Str} ;
|
||||||
A2S = Adverb ** Complement;
|
A2S = Adverb2 ;
|
||||||
AV = Adjective ; --- "eager to leave"
|
-- = Adverb ** Complement;
|
||||||
|
AV = Adjective ;
|
||||||
-- = {s : AdjForm => Str} ;
|
-- = {s : AdjForm => Str} ;
|
||||||
|
--- "eager to leave",
|
||||||
|
-- most combinations with verbs in Russian
|
||||||
|
-- are expressed by adverb: "easy to understand"
|
||||||
A2V = AdjCompl ;
|
A2V = AdjCompl ;
|
||||||
-- = Adjective ** Complement ;
|
-- = Adjective ** Complement ;
|
||||||
|
|
||||||
@@ -168,10 +171,10 @@ lincat
|
|||||||
|
|
||||||
-- similar implementation in all the languages, s-field is dummy:
|
-- similar implementation in all the languages, s-field is dummy:
|
||||||
|
|
||||||
TP = {s : Str ; b : Bool ; t : ClTense ; a : Anteriority} ; -- combination of the three below
|
TP = TensePolarity; -- combination of the three below
|
||||||
Tense = {s : Str ; t : ClTense} ;
|
Tense = {s : Str ; t : ClTense} ;
|
||||||
Ant = {s : Str ; a : Anteriority} ; --For time agreement:
|
Ant = Anterior ; --For time agreement:
|
||||||
Pol = {s : Str ; p : Bool} ; --Positive or negative statement
|
Pol = Polarity ; --Positive or negative statement
|
||||||
Subj = {s : Str} ;
|
Subj = {s : Str} ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1191,6 +1191,37 @@ oper uy_j_EndDecl : Str -> Adjective = \s ->{s = table {
|
|||||||
AF Acc Inanimate APl => "все";
|
AF Acc Inanimate APl => "все";
|
||||||
AF Acc Animate APl => "всех";
|
AF Acc Animate APl => "всех";
|
||||||
AF Gen _ (ASg Masc) => "всего";
|
AF Gen _ (ASg Masc) => "всего";
|
||||||
|
AF Gen _ (ASg Fem) => "всей";
|
||||||
|
AF Gen _ (ASg Neut) => "всего";
|
||||||
|
AF Gen _ APl => "всех";
|
||||||
|
AF Inst _ (ASg Masc) => "всем";
|
||||||
|
AF Inst _ (ASg Fem) => "всей";
|
||||||
|
AF Inst _ (ASg Neut) => "всем";
|
||||||
|
AF Inst _ APl => "всеми";
|
||||||
|
AF Dat _ (ASg Masc) => "ему";
|
||||||
|
AF Dat _ (ASg Fem) => "ей";
|
||||||
|
AF Dat _ (ASg Neut) => "ему";
|
||||||
|
AF Dat _ APl => "всем";
|
||||||
|
AF Prepos _ (ASg Masc) => "всём";
|
||||||
|
AF Prepos _ (ASg Fem) => "всей";
|
||||||
|
AF Prepos _ (ASg Neut) => "всём";
|
||||||
|
AF Prepos _ APl => "всех" ;
|
||||||
|
AdvF => "полностью"
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
oper uy_j_EndDecl : Str -> Adjective = \s ->{s = table {
|
||||||
|
AF Nom _ (ASg Masc) => s+"ый";
|
||||||
|
AF Nom _ (ASg Fem) => s+"ая";
|
||||||
|
AF Nom _ (ASg Neut) => s+"ое";
|
||||||
|
AF Nom _ APl => s+"ые";
|
||||||
|
AF Acc Inanimate (ASg Masc) => s+"ый";
|
||||||
|
AF Acc Animate (ASg Masc) => s+"ого";
|
||||||
|
AF Acc _ (ASg Fem) => s+"ую";
|
||||||
|
|
||||||
|
AF Acc _ (ASg Neut) => s+"ое";
|
||||||
|
AF Acc Inanimate APl => s+"ые";
|
||||||
|
AF Acc Animate APl => s+"ых";
|
||||||
|
AF Gen _ (ASg Masc) => s+"ого";
|
||||||
AF Gen _ (ASg Fem) => s+"ой";
|
AF Gen _ (ASg Fem) => s+"ой";
|
||||||
AF Gen _ (ASg Neut) => s+"ого";
|
AF Gen _ (ASg Neut) => s+"ого";
|
||||||
AF Gen _ APl => s+"ых";
|
AF Gen _ APl => s+"ых";
|
||||||
@@ -1230,6 +1261,36 @@ oper ij_EndK_G_KH_Decl : Str -> Adjective = \s ->{s = table {
|
|||||||
AF Inst _ (ASg Masc) => s+"им";
|
AF Inst _ (ASg Masc) => s+"им";
|
||||||
AF Inst _ (ASg Fem) => s+"ей";
|
AF Inst _ (ASg Fem) => s+"ей";
|
||||||
AF Inst _ (ASg Neut) => s+"им";
|
AF Inst _ (ASg Neut) => s+"им";
|
||||||
|
AF Inst _ APl => s+"ими";
|
||||||
|
AF Dat _ (ASg Masc) => s+"ему";
|
||||||
|
AF Dat _ (ASg Fem) => s+"ей";
|
||||||
|
AF Dat _ (ASg Neut) => s+"ему";
|
||||||
|
AF Dat _ APl => s+"им";
|
||||||
|
AF Prepos _ (ASg Masc) => s+"ем";
|
||||||
|
AF Prepos _ (ASg Fem) => s+"ей";
|
||||||
|
AF Prepos _ (ASg Neut) => s+"ем";
|
||||||
|
AF Prepos _ APl => s+"их";
|
||||||
|
AdvF => "о"
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
oper indijskij: Adjective = ij_EndK_G_KH_Decl "индийск" ;
|
||||||
|
oper francuzskij: Adjective = ij_EndK_G_KH_Decl "французск" ;
|
||||||
|
oper anglijskij: Adjective = ij_EndK_G_KH_Decl "английск" ;
|
||||||
|
oper datskij: Adjective = ij_EndK_G_KH_Decl "датск" ;
|
||||||
|
oper russkij: Adjective = ij_EndK_G_KH_Decl "русск" ;
|
||||||
|
|
||||||
|
oper italyanskij: Adjective = ij_EndK_G_KH_Decl "итальянск" ;
|
||||||
|
oper yaponskij: Adjective = ij_EndK_G_KH_Decl "японск" ;
|
||||||
|
oper malenkij: AdjDegr = mkAdjDeg (ij_EndK_G_KH_Decl "маленьк") "меньше" ;
|
||||||
|
oper vusokij: AdjDegr = mkAdjDeg (ij_EndK_G_KH_Decl "высок") "выше";
|
||||||
|
oper ij_EndK_G_KH_Decl : Str -> Adjective = \s ->{s = table {
|
||||||
|
AF Nom _ (ASg Masc) => s+"ий";
|
||||||
|
AF Nom _ (ASg Fem) => s+"ая";
|
||||||
|
|
||||||
|
AF Nom _ (ASg Neut) => s+"ое";
|
||||||
|
AF Nom _ APl => s+"ие";
|
||||||
|
AF Acc Animate (ASg Masc) => s+"ого";
|
||||||
AF Acc Inanimate (ASg Masc) => s+"ий";
|
AF Acc Inanimate (ASg Masc) => s+"ий";
|
||||||
AF Acc _ (ASg Fem) => s+"ую";
|
AF Acc _ (ASg Fem) => s+"ую";
|
||||||
AF Acc _ (ASg Neut) => s+"ое";
|
AF Acc _ (ASg Neut) => s+"ое";
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
--
|
--
|
||||||
-- The following files are presupposed:
|
-- The following files are presupposed:
|
||||||
|
|
||||||
resource ParadigmsRus = open (Predef=Predef), Prelude, SyntaxRus,
|
resource ParadigmsRus = open (Predef=Predef), Prelude, MorphoRus, SyntaxRus,
|
||||||
CategoriesRus, RulesRus in {
|
CategoriesRus, RulesRus in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
@@ -78,27 +78,27 @@ oper
|
|||||||
|
|
||||||
-- Feminine patterns.
|
-- Feminine patterns.
|
||||||
|
|
||||||
nMashina : Str -> N ; -- inanimate, ending with "-а", Inst -"машин-ой"
|
nMashina : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"машин-ой"
|
||||||
nEdinica : Str -> N ; -- inanimate, ending with "-а", Inst -"единиц-ей"
|
nEdinica : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"единиц-ей"
|
||||||
nZhenchina : Str -> N ; -- animate, ending with "-a"
|
nZhenchina : Str -> N ; -- feminine, animate, ending with "-a"
|
||||||
nNoga : Str -> N ; -- inanimate, ending with "г_к_х-a"
|
nNoga : Str -> N ; -- feminine, inanimate, ending with "г_к_х-a"
|
||||||
nMalyariya : Str -> N ; -- inanimate, ending with "-ия"
|
nMalyariya : Str -> N ; -- feminine, inanimate, ending with "-ия"
|
||||||
nTetya : Str -> N ; -- animate, ending with "-я"
|
nTetya : Str -> N ; -- feminine, animate, ending with "-я"
|
||||||
nBol : Str -> N ; -- inanimate, ending with "-ь"(soft sign)
|
nBol : Str -> N ; -- feminine, inanimate, ending with "-ь"(soft sign)
|
||||||
|
|
||||||
-- Neuter patterns.
|
-- Neuter patterns.
|
||||||
|
|
||||||
nObezbolivauchee : Str -> N ; -- inanimate, ending with "-ee"
|
nObezbolivauchee : Str -> N ; -- neutral, inanimate, ending with "-ee"
|
||||||
nProizvedenie : Str -> N ; -- inanimate, ending with "-e"
|
nProizvedenie : Str -> N ; -- neutral, inanimate, ending with "-e"
|
||||||
nChislo : Str -> N ; -- inanimate, ending with "-o"
|
nChislo : Str -> N ; -- neutral, inanimate, ending with "-o"
|
||||||
|
|
||||||
-- Masculine patterns.
|
-- Masculine patterns.
|
||||||
|
|
||||||
Ending with consonant:
|
--Ending with consonant:
|
||||||
nBrat: Str -> N ; -- animate, брат-ья
|
nBrat: Str -> N ; -- animate, брат-ья
|
||||||
nStul: Str -> N ; -- same as above, but inanimate
|
nStul: Str -> N ; -- same as above, but inanimate
|
||||||
nMalush : St -> N ; -- малышей
|
nMalush : Str -> N ; -- малышей
|
||||||
nPotolok : St -> N ; -- потол-ок - потол-ка
|
nPotolok : Str -> N ; -- потол-ок - потол-ка
|
||||||
|
|
||||||
-- the next four differ in plural nominative and/or accusative form(s) :
|
-- the next four differ in plural nominative and/or accusative form(s) :
|
||||||
nBank: Str -> N ; -- банк-и (Nom=Acc)
|
nBank: Str -> N ; -- банк-и (Nom=Acc)
|
||||||
@@ -106,13 +106,14 @@ Ending with consonant:
|
|||||||
nAdres : Str -> N ; -- адрес-а (Nom=Acc)
|
nAdres : Str -> N ; -- адрес-а (Nom=Acc)
|
||||||
nTelefon : Str -> N ; -- телефон-ы (Nom=Acc)
|
nTelefon : Str -> N ; -- телефон-ы (Nom=Acc)
|
||||||
|
|
||||||
nNol : Str -> N ; -- inanimate, ending with "-ь" (soft sign)
|
nNol : Str -> N ; -- masculine, inanimate, ending with "-ь" (soft sign)
|
||||||
nUroven : Str -> N ; -- inanimate, ending with "-ень"
|
nUroven : Str -> N ; -- masculine, inanimate, ending with "-ень"
|
||||||
|
|
||||||
-- Nouns used as functions need a preposition. The most common is with Genitive.
|
-- Nouns used as functions need a preposition. The most common is with Genitive.
|
||||||
|
|
||||||
mkFun : N -> Preposition -> Case -> N2 ;
|
mkFun : N -> Preposition -> Case -> N2 ;
|
||||||
funGen : N -> N2 ;
|
mkN2 : N -> N2 ;
|
||||||
|
mkN3 : N -> Preposition -> Preposition -> N3 ;
|
||||||
|
|
||||||
-- Proper names.
|
-- Proper names.
|
||||||
|
|
||||||
@@ -155,8 +156,9 @@ Ending with consonant:
|
|||||||
-- Some regular patterns depending on the ending.
|
-- Some regular patterns depending on the ending.
|
||||||
|
|
||||||
AStaruyj : Str -> A ; -- ending with "-ый"
|
AStaruyj : Str -> A ; -- ending with "-ый"
|
||||||
AMalenkij : Str -> A ; -- endign with "-ий"
|
AMalenkij : Str -> A ; -- ending with "-ий", Gen - "маленьк-ого"
|
||||||
AMolodoj : Str -> A ; -- ending with "-ой",
|
AKhoroshij : Str -> A ; -- ending with "-ий", Gen - "хорош-его"
|
||||||
|
AMolodoj : Str -> A ; -- ending with "-ой",
|
||||||
-- plural - молод-ые"
|
-- plural - молод-ые"
|
||||||
AKakoj_Nibud : Str -> Str -> A ; -- ending with "-ой",
|
AKakoj_Nibud : Str -> Str -> A ; -- ending with "-ой",
|
||||||
-- plural - "как-ие"
|
-- plural - "как-ие"
|
||||||
@@ -181,6 +183,12 @@ Ending with consonant:
|
|||||||
|
|
||||||
ap : A -> IsPostfixAdj -> AP ;
|
ap : A -> IsPostfixAdj -> AP ;
|
||||||
|
|
||||||
|
--2 Adverbs
|
||||||
|
|
||||||
|
-- Adverbs are not inflected. Most lexical ones have position
|
||||||
|
-- after the verb. Some can be preverbal (e.g. "always").
|
||||||
|
|
||||||
|
mkAdv : Str -> Adv ;
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
--
|
--
|
||||||
@@ -197,6 +205,13 @@ Voice: Type;
|
|||||||
Aspect: Type;
|
Aspect: Type;
|
||||||
Tense : Type;
|
Tense : Type;
|
||||||
Bool: Type;
|
Bool: Type;
|
||||||
|
Conjugation: Type ;
|
||||||
|
|
||||||
|
first: Conjugation;
|
||||||
|
firstE: Conjugation;
|
||||||
|
second: Conjugation;
|
||||||
|
mixed: Conjugation;
|
||||||
|
dolzhen: Conjugation;
|
||||||
|
|
||||||
true: Bool;
|
true: Bool;
|
||||||
false: Bool;
|
false: Bool;
|
||||||
@@ -215,7 +230,7 @@ past : Tense ;
|
|||||||
-- (singular, second person: "беги"), an infinitive ("бежать").
|
-- (singular, second person: "беги"), an infinitive ("бежать").
|
||||||
-- Inherent aspect should also be specified.
|
-- Inherent aspect should also be specified.
|
||||||
|
|
||||||
mkVerbum : Aspect -> (_,_,_,_,_,_,_,_,_ : Str) -> Verbum ;
|
mkVerbum : Aspect -> (_,_,_,_,_,_,_,_,_ : Str) -> V ;
|
||||||
|
|
||||||
-- Common conjugation patterns are two conjugations:
|
-- Common conjugation patterns are two conjugations:
|
||||||
-- first - verbs ending with "-ать/-ять" and second - "-ить/-еть".
|
-- first - verbs ending with "-ать/-ять" and second - "-ить/-еть".
|
||||||
@@ -228,7 +243,7 @@ past : Tense ;
|
|||||||
-- So the definition for verb "любить" looks like:
|
-- So the definition for verb "любить" looks like:
|
||||||
-- mkRegVerb Imperfective Second "люб" "лю" "любил" "люби" "любить";
|
-- mkRegVerb Imperfective Second "люб" "лю" "любил" "люби" "любить";
|
||||||
|
|
||||||
mkRegVerb :Aspect -> Conjugation -> (_,_,_,_,_ : Str) -> Verbum ;
|
mkRegVerb :Aspect -> Conjugation -> (_,_,_,_,_ : Str) -> V ;
|
||||||
|
|
||||||
-- For writing an application grammar one usualy doesn't need
|
-- For writing an application grammar one usualy doesn't need
|
||||||
-- the whole inflection table, since each verb is used in
|
-- the whole inflection table, since each verb is used in
|
||||||
@@ -245,8 +260,10 @@ past : Tense ;
|
|||||||
-- a particle can be included in a $V$.
|
-- a particle can be included in a $V$.
|
||||||
|
|
||||||
mkTV : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative
|
mkTV : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative
|
||||||
|
mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт"
|
||||||
tvDir : V -> V2 ; -- "видеть", "любить"
|
tvDir : V -> V2 ; -- "видеть", "любить"
|
||||||
|
tvDirDir : V -> V3 ;
|
||||||
|
|
||||||
-- The definitions should not bother the user of the API. So they are
|
-- The definitions should not bother the user of the API. So they are
|
||||||
-- hidden from the document.
|
-- hidden from the document.
|
||||||
--.
|
--.
|
||||||
@@ -258,6 +275,12 @@ past : Tense ;
|
|||||||
Voice = SyntaxRus.Voice ;
|
Voice = SyntaxRus.Voice ;
|
||||||
Tense = SyntaxRus.RusTense ;
|
Tense = SyntaxRus.RusTense ;
|
||||||
Bool = Prelude.Bool ;
|
Bool = Prelude.Bool ;
|
||||||
|
Conjugation = MorphoRus.Conjugation;
|
||||||
|
first = First ;
|
||||||
|
firstE = FirstE ;
|
||||||
|
second = Second ;
|
||||||
|
mixed = Mixed ;
|
||||||
|
dolzhen = Dolzhen;
|
||||||
|
|
||||||
true = True;
|
true = True;
|
||||||
false = False ;
|
false = False ;
|
||||||
@@ -339,7 +362,7 @@ past : Tense ;
|
|||||||
|
|
||||||
nBrat = \s -> nullEndAnimateDeclBrat s** {lock_N = <>};
|
nBrat = \s -> nullEndAnimateDeclBrat s** {lock_N = <>};
|
||||||
nStul = \s -> nullEndInAnimateDeclStul s** {lock_N = <>};
|
nStul = \s -> nullEndInAnimateDeclStul s** {lock_N = <>};
|
||||||
|
|
||||||
nAdres = \s -> nullEndInAnimateDecl2 s ** {lock_N = <>};
|
nAdres = \s -> nullEndInAnimateDecl2 s ** {lock_N = <>};
|
||||||
nTelefon = \s -> nullEndInAnimateDecl1 s ** {lock_N = <>};
|
nTelefon = \s -> nullEndInAnimateDecl1 s ** {lock_N = <>};
|
||||||
|
|
||||||
@@ -347,7 +370,9 @@ past : Tense ;
|
|||||||
nUroven = \s -> EN_softSignEndDeclMasc s ** {lock_N = <>};
|
nUroven = \s -> EN_softSignEndDeclMasc s ** {lock_N = <>};
|
||||||
|
|
||||||
-- mkFun defined in syntax.RusU
|
-- mkFun defined in syntax.RusU
|
||||||
-- funGen defined in syntax.RusU
|
mkN2 n = funGen n ** {lock_N2 = <>} ; -- defined in syntax.RusU
|
||||||
|
|
||||||
|
mkN3 n p r = mkCommNoun3 n p r ** {lock_N3 = <>} ; -- defined in syntax.RusU
|
||||||
|
|
||||||
mkPN = \ivan, g, anim ->
|
mkPN = \ivan, g, anim ->
|
||||||
case g of {
|
case g of {
|
||||||
@@ -364,15 +389,18 @@ past : Tense ;
|
|||||||
adjInvar = \s -> { s = \\af => s } ** {lock_A= <>};
|
adjInvar = \s -> { s = \\af => s } ** {lock_A= <>};
|
||||||
|
|
||||||
AStaruyj s = uy_j_EndDecl s ** {lock_A = <>} ;
|
AStaruyj s = uy_j_EndDecl s ** {lock_A = <>} ;
|
||||||
AMalenkij s = ij_EndK_G_KH_Decl s ** {lock_A= <>};
|
AKhoroshij s = shij_End_Decl s ** {lock_A= <>};
|
||||||
|
AMalenkij s = ij_EndK_G_KH_Decl s ** {lock_A= <>};
|
||||||
AMolodoj s = uy_oj_EndDecl s ** {lock_A= <>};
|
AMolodoj s = uy_oj_EndDecl s ** {lock_A= <>};
|
||||||
AKakoj_Nibud s t = i_oj_EndDecl s t ** {lock_A= <>};
|
AKakoj_Nibud s t = i_oj_EndDecl s t ** {lock_A= <>};
|
||||||
|
|
||||||
mkA2 a p c= mkAdjective2 a p c ** {lock_A2 = <>};
|
mkA2 a p c= mkAdjective2 a p c ** {lock_A2 = <>};
|
||||||
-- mkADeg defined in morpho.RusU
|
mkADeg a s = mkAdjDeg a s ** {lock_ADeg = <>}; -- defined in morpho.RusU
|
||||||
|
|
||||||
ap a p = mkAdjPhrase a p ** {lock_AP = <>}; -- defined in syntax module
|
ap a p = mkAdjPhrase a p ** {lock_AP = <>}; -- defined in syntax module
|
||||||
|
|
||||||
|
mkAdv x = ss x ** {lock_Adv = <>} ;
|
||||||
|
|
||||||
-- Verb definitions
|
-- Verb definitions
|
||||||
|
|
||||||
mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3,
|
mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3,
|
||||||
@@ -380,12 +408,12 @@ past : Tense ;
|
|||||||
Perfective =>
|
Perfective =>
|
||||||
mkVerb (perfectiveActivePattern inf imperSgP2
|
mkVerb (perfectiveActivePattern inf imperSgP2
|
||||||
(presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast))
|
(presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast))
|
||||||
(pastConj sgMascPast);
|
(pastConj sgMascPast) ** { lock_V=<> };
|
||||||
Imperfective =>
|
Imperfective =>
|
||||||
mkVerb (imperfectiveActivePattern inf imperSgP2
|
mkVerb (imperfectiveActivePattern inf imperSgP2
|
||||||
(presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast))
|
(presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast))
|
||||||
(pastConj sgMascPast)
|
(pastConj sgMascPast) ** { lock_V=<> }
|
||||||
};
|
};
|
||||||
|
|
||||||
oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb =
|
oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb =
|
||||||
\sgP1, sgP2, sgP3, plP1, plP2, plP3 ->
|
\sgP1, sgP2, sgP3, plP1, plP2, plP3 ->
|
||||||
@@ -398,8 +426,8 @@ past : Tense ;
|
|||||||
PRF APl P3 => plP3
|
PRF APl P3 => plP3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mkRegVerb a b c d e f g = verbDecl a b c d e f g ** {lock_V = <>} ;
|
||||||
mkRegVerb = verbDecl ; -- defined in morpho.RusU.gf
|
-- defined in morpho.RusU.gf
|
||||||
{-
|
{-
|
||||||
mkV a b = extVerb a b ** {lock_V = <>}; -- defined in types.RusU.gf
|
mkV a b = extVerb a b ** {lock_V = <>}; -- defined in types.RusU.gf
|
||||||
|
|
||||||
@@ -413,5 +441,7 @@ past : Tense ;
|
|||||||
-}
|
-}
|
||||||
mkTV a b c = mkTransVerb a b c ** {lock_V2 = <>}; -- defined in syntax.RusU.gf
|
mkTV a b c = mkTransVerb a b c ** {lock_V2 = <>}; -- defined in syntax.RusU.gf
|
||||||
tvDir v = mkDirectVerb v ** {lock_V2 = <>}; -- defined in syntax.RusU.gf
|
tvDir v = mkDirectVerb v ** {lock_V2 = <>}; -- defined in syntax.RusU.gf
|
||||||
|
tvDirDir v = mkDirDirectVerb v ** {lock_V3 = <>}; -- defined in syntax.RusU.gf
|
||||||
|
mkV3 v s w c d = mkDitransVerb v s w c d ** {lock_V3 = <>}; -- defined in syntax.RusU.gf
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
--# -path=.:../abstract:../../prelude
|
--# -path=.:../abstract:../../prelude
|
||||||
|
|
||||||
instance ResourceRus of Resource = reuse AllResourceRus ;
|
concrete ResourceRus of Resource = RulesRus, ClauseRus, StructuralRus ** {} ;
|
||||||
|
---- concrete ResourceRus of Resource = RulesRus, VerbphraseRus ** {} ;
|
||||||
|
|||||||
@@ -34,50 +34,35 @@ lin
|
|||||||
NDetNP = nDetNP ;
|
NDetNP = nDetNP ;
|
||||||
NDetNum = nDetNum ;
|
NDetNum = nDetNum ;
|
||||||
|
|
||||||
--- PosVG = predVerbGroup True Present ;
|
|
||||||
--- NegVG = predVerbGroup False Present ;
|
|
||||||
--- PredVP = predVerbPhrase ;
|
|
||||||
--- PredV = predVerb ;
|
|
||||||
--- PredAP = predAdjective ;
|
|
||||||
--- PredCN = predCommNoun ;
|
|
||||||
--- PredV2 = complTransVerb ;
|
|
||||||
--- PredV3 = complDitransVerb ;
|
|
||||||
--- PredPassV = predPassVerb ;
|
|
||||||
--- PredNP = predNounPhrase ;
|
|
||||||
--- PredPP = predAdverb ;
|
|
||||||
--- PredVS = complSentVerb ;
|
|
||||||
--- PredVV = complVerbVerb ;
|
|
||||||
--- VTrans = verbOfTransVerb ;
|
|
||||||
|
|
||||||
-- The main uses of verbs and verb phrases have been moved to the
|
-- The main uses of verbs and verb phrases have been moved to the
|
||||||
-- module $Verbphrase$ (deep $VP$ nesting) and its alternative,
|
-- module $Verbphrase$ (deep $VP$ nesting) and its alternative,
|
||||||
-- $Clause$ (shallow many-place predication structure).
|
-- $Clause$ (shallow many-place predication structure).
|
||||||
|
|
||||||
-- PredAS : AS -> S -> Cl ; -- "it is good that he comes"
|
PredAS = predAS ;
|
||||||
-- PredV0 : V0 -> Cl ; -- "it is raining"
|
PredV0 = predV0 ;
|
||||||
|
|
||||||
-- Partial saturation.
|
-- Partial saturation.
|
||||||
|
|
||||||
-- UseV2 : V2 -> V ; -- "loves"
|
ComplA2S = complA2S ;
|
||||||
|
|
||||||
-- ComplA2S : A2S -> NP -> AS ; -- "good for John"
|
--- VTrans = verbOfTransVerb ;
|
||||||
|
UseV2 = verbOfTransVerb ;
|
||||||
-- UseV2V : V2V -> VV ;
|
UseV2V = verbOfTransVerb ;
|
||||||
-- UseV2S : V2S -> VS ;
|
UseV2S = verbOfTransVerb ;
|
||||||
-- UseV2Q : V2Q -> VQ ;
|
UseV2Q = verbOfTransVerb ;
|
||||||
-- UseA2S : A2S -> AS ;
|
UseA2S = useA2S ;
|
||||||
-- UseA2V : A2V -> AV ;
|
UseA2V = useA2V;
|
||||||
|
|
||||||
|
|
||||||
-- Formation of tensed phrases.
|
-- Formation of tensed phrases.
|
||||||
|
|
||||||
-- AdjPart : V -> A ; -- past participle, e.g. "forgotten"
|
AdjPart = adjPart ;
|
||||||
|
|
||||||
-- UseCl : TP -> Cl -> S ;
|
UseCl = useCl ;
|
||||||
-- UseRCl : TP -> RCl -> RS ;
|
UseRCl = useRCl ;
|
||||||
-- UseQCl : TP -> QCl -> QS ;
|
UseQCl = useQCl ;
|
||||||
|
UseVCl = useVCl ;
|
||||||
-- UseVCl : Pol -> Ant -> VCl -> VPI ;
|
|
||||||
|
|
||||||
-- s field is superficial:
|
-- s field is superficial:
|
||||||
PosTP t a = {s = t.s ++ a.s ; b = True ; t = t.t ; a = a.a} ;
|
PosTP t a = {s = t.s ++ a.s ; b = True ; t = t.t ; a = a.a} ;
|
||||||
@@ -102,15 +87,13 @@ lin
|
|||||||
PrepNP p = prepPhrase p ;
|
PrepNP p = prepPhrase p ;
|
||||||
AdvVPI = adVerbPhraseInf ;
|
AdvVPI = adVerbPhraseInf ;
|
||||||
AdvCN = advCommNounPhrase ;
|
AdvCN = advCommNounPhrase ;
|
||||||
|
AdvNP = advNP ;
|
||||||
AdvAP = advAdjPhrase ;
|
AdvAP = advAdjPhrase ;
|
||||||
|
|
||||||
AdvCl = advClause ;
|
AdvCl = advClause ;
|
||||||
AdCPhr = advSentencePhr ;
|
AdCPhr = advSentencePhr ;
|
||||||
AdvPhr = advSentencePhr ;
|
AdvPhr = advSentencePhr ;
|
||||||
|
|
||||||
---AdvVP = adVerbPhrase ;
|
|
||||||
---LocNP = locativeNounPhrase ;
|
|
||||||
|
|
||||||
|
|
||||||
IdRP = identRelPron ;
|
IdRP = identRelPron ;
|
||||||
FunRP = funRelPron ;
|
FunRP = funRelPron ;
|
||||||
@@ -118,24 +101,8 @@ lin
|
|||||||
RelCl = relCl;
|
RelCl = relCl;
|
||||||
RelSlash = relSlash ;
|
RelSlash = relSlash ;
|
||||||
|
|
||||||
--- ModRC = modRelClause ;
|
ModRS = modRS ;
|
||||||
--- RelSuch = relSuch ;
|
|
||||||
--- RelVP = relVerbPhrase ;
|
|
||||||
--- PosSlashV2 = slashTransVerb True ;
|
|
||||||
--- NegSlashV2 = slashTransVerb False ;
|
|
||||||
--- OneVP = predVerbPhrase (pron2NounPhrase pronKtoTo Animate) ;
|
|
||||||
--- ThereNP = thereIs ;
|
|
||||||
|
|
||||||
--- WhoOne = intPronKto Sg ;
|
|
||||||
--- WhoMany = intPronKto Pl ;
|
|
||||||
--- WhatOne = intPronChto Sg ;
|
|
||||||
--- WhatMany = intPronChto Pl ;
|
|
||||||
--- NounIPOne = nounIntPron Sg ;
|
|
||||||
--- NounIPMany = nounIntPron Pl ;
|
|
||||||
--- SuperlNP = superlNounPhrase ;
|
|
||||||
--- QuestVP = questVerbPhrase ;
|
|
||||||
--- IntVP = intVerbPhrase ;
|
|
||||||
--- ImperVP = imperVerbPhrase ;
|
|
||||||
|
|
||||||
FunIP = funIntPron ;
|
FunIP = funIntPron ;
|
||||||
QuestAdv = questAdverbial ;
|
QuestAdv = questAdverbial ;
|
||||||
@@ -145,17 +112,17 @@ lin
|
|||||||
ImperOne = imperUtterance Masc Sg ;
|
ImperOne = imperUtterance Masc Sg ;
|
||||||
ImperMany = imperUtterance Masc Pl ;
|
ImperMany = imperUtterance Masc Pl ;
|
||||||
|
|
||||||
-- IDetCN : IDet -> CN -> IP ; -- "which car", "which cars"
|
IDetCN = iDetCN;
|
||||||
|
|
||||||
-- SlashV2 : NP -> V2 -> Slash ; -- "(whom) John doesn't love"
|
SlashV2 = slashV2 ;
|
||||||
-- SlashVV2 : NP -> VV -> V2 -> Slash ; -- "(which song do you) want to play"
|
SlashVV2 = slashVV2 ;
|
||||||
-- SlashAdv : Cl -> Prep -> Slash ; -- "(whom) John walks with"
|
SlashAdv = slashAdv ;
|
||||||
|
|
||||||
-- IntSlash = intSlash ;
|
IntSlash = intSlash ;
|
||||||
-- QuestCl : Cl -> QCl ; -- "does John walk"; "doesn't John walk"
|
QuestCl = questCl ;
|
||||||
|
|
||||||
-- PosImpVP, NegImpVP : VCl -> Imp ; -- "(don't) be a man"
|
PosImpVP = posImpVP ;
|
||||||
|
NegImpVP = negImpVP ;
|
||||||
|
|
||||||
TwoS = twoSentence ;
|
TwoS = twoSentence ;
|
||||||
ConsS = consSentence ;
|
ConsS = consSentence ;
|
||||||
@@ -186,10 +153,9 @@ lin
|
|||||||
|
|
||||||
AdvSubj = advSubj ;
|
AdvSubj = advSubj ;
|
||||||
|
|
||||||
--- SubjS = subjunctSentence ;
|
SubjS = subjunctSentence ;
|
||||||
--- SubjImper = subjunctImperative ;
|
SubjImper = subjunctImperative ;
|
||||||
--- SubjQu = subjunctQuestion ;
|
|
||||||
--- SubjVP = subjunctVerbPhrase ;
|
|
||||||
|
|
||||||
PhrNP = useNounPhrase ;
|
PhrNP = useNounPhrase ;
|
||||||
PhrOneCN = useCommonNounPhrase Sg ;
|
PhrOneCN = useCommonNounPhrase Sg ;
|
||||||
@@ -205,10 +171,31 @@ lin
|
|||||||
-- These constructs tend to have language-specific syntactic realizations.
|
-- These constructs tend to have language-specific syntactic realizations.
|
||||||
|
|
||||||
--- IsThereNP = isThere ;
|
--- IsThereNP = isThere ;
|
||||||
-- ExistCN = existCN ;
|
ExistCN = existCN ;
|
||||||
-- ExistNumCN = existNumCN ;
|
ExistNumCN = existNumCN ;
|
||||||
|
|
||||||
OneNP = npOne ;
|
OneNP = npOne ;
|
||||||
|
|
||||||
|
--- ThereNP = thereIs ;
|
||||||
|
|
||||||
|
--- WhoOne = intPronKto Sg ;
|
||||||
|
--- WhoMany = intPronKto Pl ;
|
||||||
|
--- WhatOne = intPronChto Sg ;
|
||||||
|
--- WhatMany = intPronChto Pl ;
|
||||||
|
--- NounIPOne = nounIntPron Sg ;
|
||||||
|
--- NounIPMany = nounIntPron Pl ;
|
||||||
|
--- SuperlNP = superlNounPhrase ;
|
||||||
|
--- QuestVP = questVerbPhrase ;
|
||||||
|
--- IntVP = intVerbPhrase ;
|
||||||
|
--- ImperVP = imperVerbPhrase ;
|
||||||
|
|
||||||
|
--- SubjQu = subjunctQuestion ;
|
||||||
|
|
||||||
|
--- ModRC = modRelClause ;
|
||||||
|
--- RelSuch = relSuch ;
|
||||||
|
--- PosSlashV2 = slashTransVerb True ;
|
||||||
|
--- NegSlashV2 = slashTransVerb False ;
|
||||||
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
--# -path=.:../abstract:../../prelude
|
--# -path=.:../abstract:../../prelude
|
||||||
|
|
||||||
--1 The Top-Level Russian Resource Grammar
|
--1 The Top-Level Russian Resource Grammar
|
||||||
--
|
--
|
||||||
-- Janna Khegai 2003
|
-- Janna Khegai 2003
|
||||||
@@ -25,112 +24,115 @@ flags
|
|||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
INP = pron2NounPhrase pronYa Animate;
|
|
||||||
ThouNP = pron2NounPhrase pronTu Animate;
|
|
||||||
HeNP = pron2NounPhrase pronOn Animate;
|
|
||||||
SheNP = pron2NounPhrase pronOna Animate;
|
|
||||||
ItNP = pron2NounPhrase pronOno Inanimate;
|
|
||||||
WeNumNP = pronWithNum (pron2NounPhrase pronMu Animate);
|
|
||||||
YeNumNP = pronWithNum (pron2NounPhrase pronVu Animate);
|
|
||||||
YouNP = pron2NounPhrase pronVu Animate;
|
|
||||||
TheyNP = pron2NounPhrase pronOni Animate;
|
|
||||||
TheyFemNP = pron2NounPhrase pronOni Animate;
|
|
||||||
|
|
||||||
EveryDet = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ;
|
-- First mount the numerals.
|
||||||
AllMassDet = vesDet ** {n = Sg; g = PNoGen; c = Nom} ;
|
|
||||||
AllNumDet = mkDeterminerNum (vseDetPl ** {n = Pl; g = PNoGen; c = Nom} );
|
|
||||||
WhichDet = kotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
WhichNumDet = mkDeterminerNum (kotorujDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
MostDet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
|
||||||
-- inanimate, Sg: "большинство телефонов безмолству-ет"
|
|
||||||
MostsDet = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
|
||||||
-- animate, Pl: "большинство учащихся хорошо подготовлен-ы"
|
|
||||||
HowManyDet = skolkoSgDet ** {n = Sg; g = (PGen Neut); c= Gen};
|
|
||||||
ManyDet = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
|
||||||
MuchDet = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; -- same as previous
|
|
||||||
SomeDet = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
SomeNumDet = mkDeterminerNum (nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
AnyNumDet = mkDeterminerNum (lubojDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
NoNumDet = mkDeterminerNum (nikakojDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
ThisDet = etotDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
TheseNumDet = mkDeterminerNum (etotDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
ThatDet = totDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
|
||||||
ThoseNumDet = mkDeterminerNum (totDet ** {n = Pl; g = PNoGen; c= Nom} );
|
|
||||||
|
|
||||||
UseNumeral i = i ;
|
UseNumeral i = i ;
|
||||||
|
|
||||||
ThisNP = det2NounPhrase etotDet ; -- inanimate form only
|
|
||||||
ThatNP = det2NounPhrase totDet ; -- inanimate form only
|
|
||||||
TheseNumNP n = { s =\\_ => [] ; n = Pl; p = P3; g= PGen Fem ; anim = Animate ; pron = True} ;
|
|
||||||
-- missing in Russian
|
|
||||||
ThoseNumNP n = { s =\\_ => [] ; n = Pl; p = P3; g=PGen Fem ; anim = Animate ; pron = True} ;
|
|
||||||
-- missing in Russian
|
|
||||||
|
|
||||||
EverybodyNP = mkNounPhrase Pl (noun2CommNounPhrase (eEnd_Decl "вс")) ;
|
|
||||||
SomebodyNP = pron2NounPhrase pronKtoTo Animate;
|
|
||||||
NobodyNP = pron2NounPhrase pronNikto Animate;
|
|
||||||
EverythingNP = pron2NounPhrase pronVseInanimate Inanimate;
|
|
||||||
SomethingNP = pron2NounPhrase pronChtoTo Inanimate ;
|
|
||||||
NothingNP = pron2NounPhrase pronNichto Inanimate;
|
|
||||||
|
|
||||||
CanVV = verbMoch ;
|
-- Then an alphabetical list of structural words
|
||||||
CanKnowVV = verbMoch ;
|
|
||||||
MustVV = verbDolzhen ;
|
|
||||||
WantVV = verbKhotet ;
|
|
||||||
|
|
||||||
HowIAdv = ss "как" ;
|
above_Prep = { s2 = "над" ; c = Inst} ;
|
||||||
WhenIAdv = ss "когда" ;
|
after_Prep = { s2 = "после" ; c = Gen };
|
||||||
WhereIAdv = ss "где" ;
|
all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ;
|
||||||
WhyIAdv = ss "почему" ;
|
all_NDet = vseDetPl ** { g = PNoGen; c = Nom} ;
|
||||||
|
almost_Adv = ss "почти" ;
|
||||||
AndConj = ss "и" ** {n = Pl} ;
|
although_Subj = ss "хотя" ;
|
||||||
OrConj = ss "или" ** {n = Sg} ;
|
and_Conj = ss "и" ** {n = Pl} ;
|
||||||
BothAnd = sd2 "как" [", так и"] ** {n = Pl} ;
|
because_Subj = ss ["потому что"] ;
|
||||||
EitherOr = sd2 "либо" [", либо"] ** {n = Sg} ;
|
before_Prep ={ s2 = "перед" ; c = Inst};
|
||||||
|
behind_Prep = { s2 = "за" ; c = Inst };
|
||||||
|
between_Prep = { s2 = "между" ; c = Inst};
|
||||||
|
both_AndConjD = sd2 "как" [", так и"] ** {n = Pl} ;
|
||||||
|
by8agent_Prep = { s2 = ["с помощью"] ; c = Gen};
|
||||||
|
by8means_Prep = { s2 = ["с помощью"] ; c = Gen};
|
||||||
|
can8know_VV = verbMoch ;
|
||||||
|
can_VV = verbMoch ;
|
||||||
|
during_Prep = { s2 = ["в течение"] ; c = Gen};
|
||||||
|
either8or_ConjD = sd2 "либо" [", либо"] ** {n = Sg} ;
|
||||||
-- comma is not visible in GUI!
|
-- comma is not visible in GUI!
|
||||||
|
every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ;
|
||||||
|
everybody_NP = mkNounPhrase Pl (noun2CommNounPhrase (eEnd_Decl "вс")) ;
|
||||||
|
everything_NP = pron2NounPhrase pronVseInanimate Inanimate;
|
||||||
|
everywhere_Adv = ss "везде" ;
|
||||||
|
from_Prep = { s2 = "от" ; c = Gen };
|
||||||
|
he_NP = pron2NounPhrase pronOn Animate;
|
||||||
|
how_IAdv = ss "как" ;
|
||||||
|
how8many_IDet = skolkoSgDet ** {n = Sg; g = (PGen Neut); c= Gen};
|
||||||
|
i_NP = pron2NounPhrase pronYa Animate;
|
||||||
|
if_Subj = ss "если" ;
|
||||||
|
in8front_Prep = { s2 = "перед" ; c = Inst};
|
||||||
|
in_Prep = { s2 = "в" ; c = Prepos };
|
||||||
|
it_NP = pron2NounPhrase pronOno Inanimate;
|
||||||
|
many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
||||||
|
|
||||||
|
most_Det = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ;
|
||||||
|
-- inanimate, Sg: "большинство телефонов безмолству-ет"
|
||||||
|
most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
||||||
|
-- animate, Pl: "большинство учащихся хорошо подготовлен-ы"
|
||||||
|
much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; -- same as previous
|
||||||
|
must_VV = verbDolzhen ;
|
||||||
|
no_Phr = ss ["Нет ."] ;
|
||||||
|
on_Prep = { s2 = "на" ; c = Prepos };
|
||||||
|
or_Conj = ss "или" ** {n = Sg} ;
|
||||||
|
otherwise_Adv = ss "иначе" ;
|
||||||
|
part_Prep = { s2 = "" ; c = Nom}; -- missing in Russian
|
||||||
|
possess_Prep = { s2 = "" ; c = Gen}; --- ?? AR 19/2/2004
|
||||||
|
quite_Adv = ss "довольно" ;
|
||||||
|
she_NP = pron2NounPhrase pronOna Animate;
|
||||||
|
so_Adv = ss "так";
|
||||||
|
somebody_NP = pron2NounPhrase pronKtoTo Animate;
|
||||||
|
some_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||||
|
some_NDet = nekotorujDet ** { g = PNoGen; c= Nom} ;
|
||||||
|
something_NP = pron2NounPhrase pronChtoTo Inanimate ;
|
||||||
|
somewhere_Adv = ss "где-нибудь" ;
|
||||||
|
--- TheseNumNP n = { s =\\_ => [] ; n = Pl; p = P3; g= PGen Fem ;
|
||||||
|
--- anim = Animate ; pron = True} ; -- missing in Russian
|
||||||
|
--- ThoseNumNP n = { s =\\_ => [] ; n = Pl; p = P3; g=PGen Fem ;
|
||||||
|
--- anim = Animate ; pron = True} ; -- missing in Russian
|
||||||
|
that_Det = totDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||||
|
that_NP = det2NounPhrase totDet ; -- inanimate form only
|
||||||
|
therefore_Adv = ss "следовательно" ;
|
||||||
|
these_NDet = etotDet ** { g = PNoGen; c= Nom} ;
|
||||||
|
they8fem_NP = pron2NounPhrase pronOni Animate;
|
||||||
|
they_NP = pron2NounPhrase pronOni Animate;
|
||||||
|
this_Det = etotDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||||
|
this_NP = det2NounPhrase etotDet ; -- inanimate form only
|
||||||
|
those_NDet = totDet ** {g = PNoGen; c= Nom} ;
|
||||||
|
thou_NP = pron2NounPhrase pronTu Animate;
|
||||||
|
through_Prep = { s2 = "через" ; c = Acc };
|
||||||
|
to_Prep = { s2 = "к" ; c = Dat };
|
||||||
|
too_Adv = ss "слишком" ;
|
||||||
|
under_Prep = { s2 = "под" ; c = Inst };
|
||||||
|
very_Adv = ss "очень" ;
|
||||||
|
want_VV = verbKhotet ;
|
||||||
|
we_NP = pron2NounPhrase pronMu Animate ;
|
||||||
|
what8many_IP = pron2NounPhraseNum pronChto Inanimate Pl;
|
||||||
|
what8one_IP = pron2NounPhraseNum pronChto Inanimate Sg;
|
||||||
|
when_IAdv = ss "когда" ;
|
||||||
|
when_Subj = ss "когда" ;
|
||||||
|
where_IAdv = ss "где" ;
|
||||||
|
which8many_IDet = kotorujDet ** {n = Pl; g = PNoGen; c= Nom} ;
|
||||||
|
which8one_IDet = kotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
||||||
|
who8many_IP = pron2NounPhraseNum pronKto Animate Pl;
|
||||||
|
who8one_IP = pron2NounPhraseNum pronKto Animate Sg;
|
||||||
|
why_IAdv = ss "почему" ;
|
||||||
|
with_Prep = { s2 = "с" ; c = Inst};
|
||||||
|
without_Prep = { s2 = "без" ; c = Gen};
|
||||||
|
ye_NP = pron2NounPhrase pronVu Animate;
|
||||||
|
yes_Phr = ss ["Да ."] ;
|
||||||
|
you_NP = pron2NounPhrase pronVu Animate;
|
||||||
|
--- 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 = pron2NounPhrase pronNikto Animate;
|
||||||
|
---NothingNP = pron2NounPhrase pronNichto Inanimate;
|
||||||
|
|
||||||
-- In case of "neither.. no" expression double negation is not
|
-- In case of "neither.. no" expression double negation is not
|
||||||
-- only possible, but also required in Russian.
|
-- only possible, but also required in Russian.
|
||||||
-- There is no means of control for this however in the resource grammar.
|
-- There is no means of control for this however in the resource grammar.
|
||||||
|
--- NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ;
|
||||||
NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ;
|
--- NowhereNP = ss "нигде" ;
|
||||||
|
--- AgentPrep = { s2 = "" ; c = Nom}; -- missing in Russian
|
||||||
IfSubj = ss "если" ;
|
|
||||||
WhenSubj = ss "когда" ;
|
|
||||||
AlthoughSubj = ss "хотя" ;
|
|
||||||
|
|
||||||
PhrYes = ss ["Да ."] ;
|
|
||||||
PhrNo = ss ["Нет ."] ;
|
|
||||||
|
|
||||||
EverywhereNP = ss "везде" ;
|
|
||||||
SomewhereNP = ss "где-нибудь" ;
|
|
||||||
NowhereNP = ss "нигде" ;
|
|
||||||
VeryAdv = ss "очень" ;
|
|
||||||
TooAdv = ss "слишком" ;
|
|
||||||
OtherwiseAdv = ss "иначе" ;
|
|
||||||
AlmostAdv = ss "почти" ;
|
|
||||||
QuiteAdv = ss "довольно" ;
|
|
||||||
ThereforeAdv = ss "следовательно" ;
|
|
||||||
|
|
||||||
InPrep = { s2 = "в" ; c = Prepos };
|
|
||||||
OnPrep = { s2 = "на" ; c = Prepos };
|
|
||||||
ToPrep = { s2 = "к" ; c = Dat };
|
|
||||||
ThroughPrep = { s2 = "через" ; c = Acc };
|
|
||||||
AbovePrep = { s2 = "над" ; c = Inst};
|
|
||||||
UnderPrep = { s2 = "под" ; c = Inst };
|
|
||||||
InFrontPrep = { s2 = "перед" ; c = Inst};
|
|
||||||
BehindPrep = { s2 = "за" ; c = Inst };
|
|
||||||
BetweenPrep = { s2 = "между" ; c = Inst};
|
|
||||||
FromPrep = { s2 = "от" ; c = Gen };
|
|
||||||
BeforePrep = { s2 = "перед" ; c = Inst};
|
|
||||||
DuringPrep = { s2 = ["в течение"] ; c = Gen};
|
|
||||||
AfterPrep = { s2 = "после" ; c = Gen };
|
|
||||||
WithPrep = { s2 = "с" ; c = Inst};
|
|
||||||
WithoutPrep = { s2 = "без" ; c = Gen};
|
|
||||||
ByMeansPrep = { s2 = ["с помощью"] ; c = Gen};
|
|
||||||
PossessPrep = { s2 = "" ; c = Gen}; --- ?? AR 19/2/2004
|
|
||||||
PartPrep = { s2 = "" ; c = Nom}; -- missing in Russian
|
|
||||||
AgentPrep = { s2 = "" ; c = Nom}; -- missing in Russian
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -83,10 +83,15 @@ Numeral : Type = {s : Case => Gender => Str} ;
|
|||||||
n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ;
|
n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ;
|
||||||
anim = chelovek.anim
|
anim = chelovek.anim
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
pron2NounPhrase : Pronoun -> Animacy -> NounPhrase = \ona, anim ->
|
pron2NounPhrase : Pronoun -> Animacy -> NounPhrase = \ona, anim ->
|
||||||
{s = ona.s ; n = ona.n ; g = ona.g ;
|
{s = ona.s ; n = ona.n ; g = ona.g ;
|
||||||
pron = ona.pron; p = ona.p ; anim = anim } ;
|
pron = ona.pron; p = ona.p ; anim = anim } ;
|
||||||
|
|
||||||
|
pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = \ona, anim, num ->
|
||||||
|
{s = ona.s ; n = num ; g = ona.g ;
|
||||||
|
pron = ona.pron; p = ona.p ; anim = anim } ;
|
||||||
|
|
||||||
det2NounPhrase : Adjective -> NounPhrase = \eto ->
|
det2NounPhrase : Adjective -> NounPhrase = \eto ->
|
||||||
{s = \\pf => eto.s ! (AF (extCase pf) Inanimate (ASg Neut)); n = Sg ; g = PGen Neut ; pron = False ; p = P3 ; anim = Inanimate } ;
|
{s = \\pf => eto.s ! (AF (extCase pf) Inanimate (ASg Neut)); n = Sg ; g = PGen Neut ; pron = False ; p = P3 ; anim = Inanimate } ;
|
||||||
|
|
||||||
@@ -228,37 +233,6 @@ nDetNP : NoNumberDeterminer -> Numeral -> CommNounPhrase -> NounPhrase =\eti,py
|
|||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
--3 Simple adjectives
|
--3 Simple adjectives
|
||||||
--
|
--
|
||||||
-- A special type of adjectives just having positive forms
|
|
||||||
-- (for semantic reasons) is useful, e.g. "русский".
|
|
||||||
|
|
||||||
oper
|
|
||||||
extAdjective : AdjDegr -> Adjective = \adj ->
|
|
||||||
{ s = \\af => adj.s ! Pos ! af } ;
|
|
||||||
|
|
||||||
-- Coercions between the compound gen-num type and gender and number:
|
|
||||||
|
|
||||||
gNum : Gender -> Number -> GenNum = \g,n ->
|
|
||||||
case n of
|
|
||||||
{ Sg => case g of
|
|
||||||
{ Fem => ASg Fem ;
|
|
||||||
Masc => ASg Masc ;
|
|
||||||
Neut => ASg Neut } ;
|
|
||||||
Pl => APl
|
|
||||||
} ;
|
|
||||||
|
|
||||||
pgNum : PronGen -> Number -> GenNum = \g,n ->
|
|
||||||
case n of
|
|
||||||
{ Sg => case g of
|
|
||||||
{ PGen Fem => ASg Fem ;
|
|
||||||
PGen Masc => ASg Masc ;
|
|
||||||
PGen Neut => ASg Neut ;
|
|
||||||
_ => ASg Masc } ;
|
|
||||||
Pl => APl
|
|
||||||
} ;
|
|
||||||
-- _ => variants {ASg Masc ; ASg Fem} } ;
|
|
||||||
-- "variants" version cause "no term variants" error during linearization
|
|
||||||
|
|
||||||
|
|
||||||
--3 Adjective phrases
|
--3 Adjective phrases
|
||||||
--
|
--
|
||||||
-- An adjective phrase may contain a complement, e.g. "моложе Риты".
|
-- An adjective phrase may contain a complement, e.g. "моложе Риты".
|
||||||
@@ -328,15 +302,15 @@ pgNum : PronGen -> Number -> GenNum = \g,n ->
|
|||||||
p = True
|
p = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
complVerbAdj : Adjective -> VerbPhraseInf -> AdjPhrase = \zhazhduuchii,zhit ->
|
complVerbAdj : Adjective -> VerbPhrase -> AdjPhrase = \zhazhduuchii,zhit ->
|
||||||
{s = \\af => zhazhduuchii.s ! af ++ zhit.s2 ++ zhit.s ;
|
{s = \\af => zhazhduuchii.s ! af ++ zhit.s2 ++ zhit.s!ClInfinit !APl! P3 ;
|
||||||
p = True
|
p = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
complObjA2V: AdjCompl -> NounPhrase -> VerbPhraseInf -> AdjPhrase =
|
complObjA2V: AdjCompl -> NounPhrase -> VerbPhrase -> AdjPhrase =
|
||||||
\ legkii, mu, zapomnit ->
|
\ legkii, mu, zapomnit ->
|
||||||
{ s = \\af => legkii.s ! AdvF ++ zapomnit.s2 ++ zapomnit.s ++
|
{ s = \\af => legkii.s ! AdvF ++ zapomnit.s2 ++ zapomnit.s!ClInfinit!APl!P3 ++
|
||||||
mu. s ! (mkPronForm legkii.c No NonPoss);
|
mu. s ! (mkPronForm legkii.c No NonPoss);
|
||||||
p = True
|
p = True
|
||||||
};
|
};
|
||||||
@@ -365,7 +339,7 @@ complObjA2V: AdjCompl -> NounPhrase -> VerbPhraseInf -> AdjPhrase =
|
|||||||
-- are counterexamples to the liberal choice we've made.
|
-- are counterexamples to the liberal choice we've made.
|
||||||
|
|
||||||
Function = CommNounPhrase ** Complement ;
|
Function = CommNounPhrase ** Complement ;
|
||||||
|
CommNoun3 = Function ** {s3 : Str ; c2 : Case} ;
|
||||||
|
|
||||||
-- The application of a function gives, in the first place, a common noun:
|
-- The application of a function gives, in the first place, a common noun:
|
||||||
-- "ключ от дома". From this, other rules of the resource grammar
|
-- "ключ от дома". From this, other rules of the resource grammar
|
||||||
@@ -393,6 +367,8 @@ complObjA2V: AdjCompl -> NounPhrase -> VerbPhraseInf -> AdjPhrase =
|
|||||||
mkFun : CommNoun -> Str -> Case -> Function = \f,p,c ->
|
mkFun : CommNoun -> Str -> Case -> Function = \f,p,c ->
|
||||||
(n2n f) ** {s2 = p ; c = c} ;
|
(n2n f) ** {s2 = p ; c = c} ;
|
||||||
|
|
||||||
|
mkCommNoun3: CommNoun -> Preposition-> Preposition -> CommNoun3 = \f,p,r ->
|
||||||
|
(n2n f) ** {s2 = p.s2 ; c=p.c; s3=r.s2 ; c2=r.c} ;
|
||||||
|
|
||||||
-- The commonest cases are functions with Genitive.
|
-- The commonest cases are functions with Genitive.
|
||||||
|
|
||||||
@@ -429,6 +405,14 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
anim = novayaMashina.anim
|
anim = novayaMashina.anim
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
modRS : CommNounPhrase -> RelPron -> CommNounPhrase =
|
||||||
|
\chelovek, kotorujSmeetsya ->
|
||||||
|
{ s = \\n,c => chelovek.s!n!c ++
|
||||||
|
kotorujSmeetsya.s!(gNum chelovek.g n)!c!chelovek.anim;
|
||||||
|
g = chelovek.g;
|
||||||
|
anim = chelovek.anim
|
||||||
|
};
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
|
|
||||||
--3 Transitive verbs
|
--3 Transitive verbs
|
||||||
@@ -452,6 +436,15 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
mkTransVerb : Verbum -> Str -> Case -> TransVerb = \v,p,cas ->
|
mkTransVerb : Verbum -> Str -> Case -> TransVerb = \v,p,cas ->
|
||||||
v ** {s2 = p ; c = cas } ;
|
v ** {s2 = p ; c = cas } ;
|
||||||
|
|
||||||
|
-- dummy function, since formally there are no past participle in Russian:
|
||||||
|
-- забыть - забытый, поймать - пойманный:
|
||||||
|
adjPart : Verbum -> Adjective = \zabuvat ->
|
||||||
|
{ s = \\af => case zabuvat.asp of
|
||||||
|
{ Perfective => zabuvat.s! VFORM Act VINF;
|
||||||
|
Imperfective => []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
mkDirectVerb : Verbum -> TransVerb = \v ->
|
mkDirectVerb : Verbum -> TransVerb = \v ->
|
||||||
|
|
||||||
mkTransVerb v nullPrep Acc;
|
mkTransVerb v nullPrep Acc;
|
||||||
@@ -459,29 +452,49 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
nullPrep : Str = [] ;
|
nullPrep : Str = [] ;
|
||||||
|
|
||||||
-- The rule for using transitive verbs is the complementization rule:
|
-- The rule for using transitive verbs is the complementization rule:
|
||||||
|
|
||||||
complTransVerb :TransVerb -> NounPhrase -> VerbGroup = \se,tu ->
|
complTransVerb :TransVerb -> NounPhrase -> VerbPhrase = \se,tu ->
|
||||||
|
{s =\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p)
|
||||||
++ se.s2 ++ tu.s ! (mkPronForm se.c No NonPoss) ;
|
++ se.s2 ++ tu.s ! (mkPronForm se.c No NonPoss) ;
|
||||||
asp = se.asp ;
|
asp = se.asp ;
|
||||||
w = Act;
|
w = Act;
|
||||||
s2 = table{_ => ""};
|
s2 = "";
|
||||||
s3 = \\g,n => "";
|
s3 = \\g,n => "";
|
||||||
negBefore = True
|
negBefore = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--3 Verb phrases
|
--3 Verb phrases
|
||||||
--
|
--
|
||||||
-- Verb phrases are discontinuous: the parts of a verb phrase are
|
-- Verb phrases are discontinuous: the parts of a verb phrase are
|
||||||
-- (s) an inflected verb, (s2) verb adverbials (not negation though), and
|
-- (s) an inflected verb, (s2) verb adverbials (not negation though), and
|
||||||
-- (s3) complement. This discontinuity is needed in sentence formation
|
-- (s3) complement. This discontinuity is needed in sentence formation
|
||||||
-- to account for word order variations.
|
-- to account for word order variations.
|
||||||
|
|
||||||
VerbPhrase : Type = Verb ** {s2: Str; s3 : Gender => Number => Str ;
|
VerbPhrase : Type = Verb ** {s2: Str; s3 : Gender => Number => Str ;
|
||||||
negBefore: Bool} ;
|
negBefore: Bool} ;
|
||||||
|
|
||||||
VerbPhraseInf : Type = {s : Str; a: Aspect; w:Voice; s2 : Str ;
|
reflTransVerb : TransVerb -> VerbPhrase = \v ->
|
||||||
s3 : Gender => Number => Str ; negBefore: Bool} ;
|
{ s = \\clf,gn,p => v.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ v.s2 ++ sebya!v.c;
|
||||||
-- VerbGroup is new in "lib"-verion of the resource.
|
asp = v.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n=> ""
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
VerbPhraseInf : Type = {s : Str; a: Aspect; w:Voice; s2 :Str; s3: Gender => Number => Str ; negBefore: Bool} ;
|
||||||
|
|
||||||
|
VerbPhraseClause = {s : Bool => Anteriority => ClForm=>GenNum=> Person=> Str; a: Aspect; w:Voice; s2: Str; s3 : Gender => Number => Str ; negBefore: Bool} ;
|
||||||
|
Polarity = {s : Str ; p : Bool} ;
|
||||||
|
Anterior = {s : Str ; a : Anteriority};
|
||||||
|
useVCl : Polarity -> Anterior -> VerbPhraseClause -> VerbPhrase=
|
||||||
|
\p,a, v -> {s = v.s!p.p!a.a ; s2 = case p.p of {True =>v.s2; False => "не"++v.s2}; s3 = v.s3;
|
||||||
|
asp = v.a; w = v.w; negBefore = v.negBefore } ;
|
||||||
|
|
||||||
|
{-
|
||||||
|
-- VerbGroup is in 0.6-version of the resource.
|
||||||
-- VerbGroup does not have RusTense parameter fixed.
|
-- VerbGroup does not have RusTense parameter fixed.
|
||||||
-- It also not yet negated (s2):
|
-- It also not yet negated (s2):
|
||||||
|
|
||||||
@@ -495,30 +508,35 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
s2 = negation b ;
|
s2 = negation b ;
|
||||||
s3 = vidit.s3 ;
|
s3 = vidit.s3 ;
|
||||||
negBefore = vidit.negBefore
|
negBefore = vidit.negBefore
|
||||||
|
} ;
|
||||||
|
-}
|
||||||
|
passVerb : Verbum -> VerbPhrase = \se ->
|
||||||
|
{s=\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||||
|
asp=se.asp; w=Pass; s2 = "";
|
||||||
|
negBefore = True;
|
||||||
|
s3 = table{_=> table{_ => ""}}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
-- A simple verb can be made into a verb phrase with an empty complement.
|
-- A simple verb can be made into a verb phrase with an empty complement.
|
||||||
-- There are two versions, depending on if we want to negate the verb.
|
-- There are two versions, depending on if we want to negate the verb.
|
||||||
-- N.B. negation is *not* a function applicable to a verb phrase, since
|
-- N.B. negation is *not* a function applicable to a verb phrase, since
|
||||||
-- double negations with "inte" are not grammatical.
|
-- double negations with "inte" are not grammatical.
|
||||||
|
|
||||||
predVerb : Verbum -> VerbGroup = \se ->
|
predVerb : Verbum -> VerbPhrase = \se ->
|
||||||
|
{s=\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||||
|
asp = se.asp ;
|
||||||
|
w=Act;
|
||||||
s2 = "";
|
s2 = "";
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
s3 = table{_=> table{_ => ""}}
|
s3 = table{_=> table{_ => ""}}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
predPassVerb : Verbum -> VerbGroup = \se ->
|
|
||||||
se ** {w=Pass; s2 = table{True => ""; False => "не"};
|
|
||||||
negBefore = True;
|
|
||||||
s3 = table{_=> table{_ => ""}}
|
|
||||||
};
|
|
||||||
|
|
||||||
negation : Bool -> Str = \b -> if_then_else Str b [] "не" ;
|
negation : Bool -> Str = \b -> if_then_else Str b [] "не" ;
|
||||||
|
|
||||||
-- Sometimes we want to extract the verb part of a verb phrase.
|
-- Sometimes we want to extract the verb part of a verb phrase.
|
||||||
|
|
||||||
verbOfPhrase : VerbPhrase -> Verb = \v ->
|
verbOfPhrase : VerbPhrase -> Verb = \v ->
|
||||||
{s = v.s; t = v.t ; asp = v.asp ; w =v.w} ;
|
{s = v.s; t = v.t ; asp = v.asp ; w =v.w} ;
|
||||||
|
|
||||||
-- Verb phrases can also be formed from adjectives (" молод"),
|
-- Verb phrases can also be formed from adjectives (" молод"),
|
||||||
@@ -528,25 +546,31 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
|
|
||||||
-- Note: we omit a dash "-" because it will cause problems with negation word order:
|
-- Note: we omit a dash "-" because it will cause problems with negation word order:
|
||||||
-- "Я не - волшебник". Alternatively, we can consider verb-based VP and
|
-- "Я не - волшебник". Alternatively, we can consider verb-based VP and
|
||||||
-- all the rest.
|
-- all the rest.
|
||||||
|
|
||||||
predAdverb : Adverb -> VerbGroup = \zloj ->
|
predAdverb : Adverb -> VerbPhrase = \zloj ->
|
||||||
{ s= table {
|
{ s= \\clf,gn,p => case clf of {
|
||||||
VFORM _ (VIMP Sg _) => "будь" ++ zloj.s; -- person is ignored !
|
ClImper => case gn of
|
||||||
VFORM _ (VIMP Pl _) => "будьте" ++ zloj.s;
|
{ ASg _ => "будь" ++ zloj.s; -- person is ignored !
|
||||||
VFORM _ VINF => "быть" ++ zloj.s;
|
APl => "будьте" ++ zloj.s
|
||||||
VFORM _ (VIND _ (VPresent _)) => zloj.s ;
|
};
|
||||||
VFORM _ (VIND (ASg Fem) VPast) => "была" ++ zloj.s;
|
ClInfinit => "быть" ++ zloj.s;
|
||||||
VFORM _ (VIND (ASg Masc) VPast) => "был" ++ zloj.s;
|
ClIndic Present _ => zloj.s ;
|
||||||
VFORM _ (VIND (ASg Neut) VPast) => "было" ++ zloj.s;
|
ClIndic Past _ => case gn of
|
||||||
VFORM _ (VIND APl VPast) => "были" ++ zloj.s;
|
{ (ASg Fem) => "была" ++ zloj.s;
|
||||||
VFORM _ (VIND (ASg _) (VFuture _)) => "будет" ++ zloj.s;
|
(ASg Masc) => "был" ++ zloj.s;
|
||||||
|
(ASg Neut) => "было" ++ zloj.s;
|
||||||
|
APl => "были" ++ zloj.s
|
||||||
|
};
|
||||||
|
ClIndic Future _ => case gn of
|
||||||
|
{ (ASg _) => "будет" ++ zloj.s;
|
||||||
|
APl => "будут" ++ zloj.s
|
||||||
};
|
};
|
||||||
ClCondit => ""
|
ClCondit => ""
|
||||||
} ;
|
} ;
|
||||||
asp = Imperfective ;
|
asp = Imperfective ;
|
||||||
w = Act;
|
w = Act;
|
||||||
s2 = table{True => ""; False => "не"};
|
s2 = "";
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
s3 = \\g,n => ""
|
s3 = \\g,n => ""
|
||||||
} ;
|
} ;
|
||||||
@@ -567,34 +591,109 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
-- We treat so far only the rule in which the ditransitive
|
-- We treat so far only the rule in which the ditransitive
|
||||||
-- verb takes both complements to form a verb phrase.
|
-- verb takes both complements to form a verb phrase.
|
||||||
|
|
||||||
DitransVerb = TransVerb ** {s4 : Str; c2: Case} ;
|
DitransVerb = TransVerb ** {s4 : Str; c2: Case} ;
|
||||||
|
|
||||||
mkDitransVerb : Verbum -> Str -> Str -> Case -> Case -> DitransVerb =
|
mkDitransVerb : Verbum -> Str -> Str -> Case -> Case -> DitransVerb =
|
||||||
v ** {s2 = ""; c = c1; s4 = ""; c2=c2 } ;
|
\v,s1,s2,c1,c2 -> v ** {s2 = s1; c = c1; s4 = s2; c2=c2 } ;
|
||||||
|
|
||||||
|
mkDirDirectVerb : Verbum -> DitransVerb = \v ->
|
||||||
|
mkDitransVerb v "" "" Acc Dat ;
|
||||||
|
|
||||||
|
complDitransAdjVerb : TransVerb -> NounPhrase -> AdjPhrase -> VerbPhrase =
|
||||||
|
\obechat,tu,molodoj ->
|
||||||
|
{s = \\clf,gn,p => obechat.s2++obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tu.s ! PF obechat.c No NonPoss ++molodoj.s!AF Inst tu.anim (pgNum tu.g tu.n) ;
|
||||||
|
asp = obechat.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n =>""
|
||||||
|
} ;
|
||||||
|
|
||||||
|
complDitransSentVerb : TransVerb -> NounPhrase -> Sentence ->VerbPhrase = \dat,tu, chtoOnPridet ->
|
||||||
|
{s = \\clf,gn,p =>
|
||||||
|
dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++
|
||||||
|
dat.s2 ++ tu.s ! PF dat.c No NonPoss ++ chtoOnPridet.s;
|
||||||
|
asp = dat.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n=> "" } ;
|
||||||
|
complAdjVerb : Verbum -> AdjPhrase -> VerbPhrase =
|
||||||
|
\vuglyadet,molodoj ->
|
||||||
|
{s = \\clf,gn,p => vuglyadet.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ;
|
||||||
|
asp = vuglyadet.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n => molodoj.s!(AF Inst Animate (gNum g n))
|
||||||
} ;
|
} ;
|
||||||
complDitransVerb : DitransVerb -> NounPhrase -> NounPhrase -> VerbPhrase =
|
complDitransVerb : DitransVerb -> NounPhrase -> NounPhrase -> VerbPhrase =
|
||||||
\dat,tu,pivo ->
|
\dat,tu,pivo ->
|
||||||
let
|
let
|
||||||
tebepivo = dat.s2 ++
|
tebepivo = dat.s2 ++
|
||||||
tu.s ! PF dat.c No NonPoss ++ dat.s4 ++ pivo.s ! PF dat.c2 Yes NonPoss
|
tu.s ! PF dat.c No NonPoss ++ dat.s4 ++ pivo.s ! PF dat.c2 Yes NonPoss
|
||||||
in
|
in
|
||||||
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ;
|
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ;
|
||||||
asp = dat.asp ;
|
|
||||||
asp = dat.asp ;
|
asp = dat.asp ;
|
||||||
s2 = table{True => ""; False => "не"};
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n=> ""
|
||||||
|
} ;
|
||||||
|
complQuestVerb: Verbum -> Question -> VerbPhrase =
|
||||||
|
\dat, esliOnPridet ->
|
||||||
|
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ esliOnPridet.s ! DirQ ;
|
||||||
|
asp = dat.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n=> ""
|
||||||
|
} ;
|
||||||
|
|
||||||
|
complDitransQuestVerb : TransVerb -> NounPhrase -> Question -> VerbPhrase =
|
||||||
|
\dat,tu, esliOnPridet ->
|
||||||
|
let
|
||||||
|
tebeEsliOnPridet = dat.s2 ++
|
||||||
|
tu.s ! PF dat.c No NonPoss ++ esliOnPridet.s ! DirQ
|
||||||
|
in
|
||||||
|
{s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebeEsliOnPridet ;
|
||||||
|
asp = dat.asp ;
|
||||||
|
w = Act;
|
||||||
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 = \\g,n=> ""
|
||||||
|
} ;
|
||||||
|
|
||||||
|
complDitransVerbVerb : TransVerb -> NounPhrase -> VerbPhrase -> VerbPhrase =
|
||||||
|
\obechat,tu,ukhodit ->
|
||||||
|
{s = \\clf,gn,p => obechat.s2++obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tu.s ! PF obechat.c No NonPoss ++ukhodit.s!ClInfinit!gn!p ;
|
||||||
|
asp = ukhodit.asp ;
|
||||||
|
w = ukhodit.w;
|
||||||
|
negBefore = ukhodit.negBefore;
|
||||||
|
s2 = ukhodit.s2;
|
||||||
|
s3 = ukhodit.s3
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
complDitransVerbVerb_2 : TransVerb -> NounPhrase -> VerbPhrase -> VerbPhrase =
|
||||||
|
\obechat,tu,ukhodit ->
|
||||||
|
{s = \\clf,gn,p => obechat.s2++obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tu.s ! PF obechat.c No NonPoss ++ukhodit.s!ClInfinit!(pgNum tu.g tu.n)!tu.p ;
|
||||||
|
asp = ukhodit.asp ;
|
||||||
|
w = ukhodit.w;
|
||||||
|
negBefore = ukhodit.negBefore;
|
||||||
s2 = ukhodit.s2;
|
s2 = ukhodit.s2;
|
||||||
s3 = ukhodit.s3
|
s3 = ukhodit.s3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Adverbials
|
--2 Adverbials
|
||||||
--
|
--
|
||||||
adVerbPhrase : VerbPhrase -> Adverb -> VerbPhrase = \poet, khorosho ->
|
adVerbPhrase : VerbPhrase -> Adverb -> VerbPhrase = \poet, khorosho ->
|
||||||
{s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = poet.s2 ++ khorosho.s; s3 = poet.s3;
|
{s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = poet.s2 ++ khorosho.s; s3 = poet.s3;
|
||||||
a = poet.a; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ;
|
asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ;
|
||||||
|
|
||||||
adVerbPhraseInf : VerbPhraseInf -> Adverb -> VerbPhraseInf = \poet, khorosho ->
|
adVerbPhraseInf : VerbPhrase -> Adverb -> VerbPhrase = \pet, khorosho ->
|
||||||
{s = khorosho.s ++ poet.s ; s2 = poet.s2; s3 = poet.s3;
|
{s = pet.s ; s2 = pet.s2; s3 =\\g,n => khorosho.s ++ pet.s3!g!n;
|
||||||
asp = pet.asp; w = pet.w; negBefore = pet.negBefore } ;
|
asp = pet.asp; w = pet.w; negBefore = pet.negBefore } ;
|
||||||
|
|
||||||
-- Adverbials are typically generated by prefixing prepositions.
|
-- Adverbials are typically generated by prefixing prepositions.
|
||||||
@@ -602,6 +701,19 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
-- is a little shaky: "в России" but "на острове".
|
-- is a little shaky: "в России" but "на острове".
|
||||||
-- Adverbials are typically generated by prefixing prepositions.
|
-- Adverbials are typically generated by prefixing prepositions.
|
||||||
-- The rule for creating locative noun phrases by the preposition "in"
|
-- The rule for creating locative noun phrases by the preposition "in"
|
||||||
|
-- is a little shaky, since other prepositions may be preferred ("on", "at").
|
||||||
|
|
||||||
|
Adverb2 = Adverb**Complement ;
|
||||||
|
|
||||||
|
complA2S : Adverb2 -> NounPhrase -> Adverb =
|
||||||
|
\khoroshoDlya, ivan ->
|
||||||
|
{ s= khoroshoDlya.s ++ khoroshoDlya.s2 ++
|
||||||
|
ivan.s ! PF khoroshoDlya.c Yes NonPoss};
|
||||||
|
|
||||||
|
useA2S : Adverb2 -> Adverb = \khoroshoDlya ->
|
||||||
|
{ s= khoroshoDlya.s };
|
||||||
|
|
||||||
|
useA2V : AdjCompl -> Adjective = \khoroshijDlya->
|
||||||
{s = khoroshijDlya.s } ;
|
{s = khoroshijDlya.s } ;
|
||||||
|
|
||||||
prepPhrase : Preposition -> NounPhrase -> Adverb = \na, stol ->
|
prepPhrase : Preposition -> NounPhrase -> Adverb = \na, stol ->
|
||||||
@@ -622,13 +734,22 @@ let {n = ivan.n ; nf = if_then_else Number coll Sg n} in
|
|||||||
{s = \\n,c => chelovek.s ! n ! c ++ uTelevizora.s ;
|
{s = \\n,c => chelovek.s ! n ! c ++ uTelevizora.s ;
|
||||||
g = chelovek.g ;
|
g = chelovek.g ;
|
||||||
anim = chelovek.anim
|
anim = chelovek.anim
|
||||||
|
} ;
|
||||||
|
|
||||||
|
advNP : NounPhrase -> Adverb -> NounPhrase =
|
||||||
|
\dom, vMoskve ->
|
||||||
|
{s = \\pf => dom.s!pf ++ vMoskve.s ;
|
||||||
|
n = dom.n ;
|
||||||
|
p = dom.p;
|
||||||
|
g = dom.g;
|
||||||
|
anim = dom.anim;
|
||||||
|
pron = dom.pron
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
advAdjPhrase : SS -> AdjPhrase -> AdjPhrase = \ochen, khorosho ->
|
advAdjPhrase : SS -> AdjPhrase -> AdjPhrase = \ochen, khorosho ->
|
||||||
{s = \\a => ochen.s ++ khorosho.s ! a ;
|
{s = \\a => ochen.s ++ khorosho.s ! a ;
|
||||||
p = khorosho.p
|
p = khorosho.p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--2 Sentences
|
--2 Sentences
|
||||||
@@ -644,40 +765,60 @@ oper
|
|||||||
|
|
||||||
predVerbPhrase : NounPhrase -> VerbPhrase -> SlashNounPhrase =
|
predVerbPhrase : NounPhrase -> VerbPhrase -> SlashNounPhrase =
|
||||||
\Ya, tebyaNeVizhu -> { s = \\b,clf =>
|
\Ya, tebyaNeVizhu -> { s = \\b,clf =>
|
||||||
let
|
let
|
||||||
{ ya = Ya.s ! (mkPronForm Nom No NonPoss);
|
{ ya = Ya.s ! (mkPronForm Nom No NonPoss);
|
||||||
khorosho = tebyaNeVizhu.s2;
|
khorosho = tebyaNeVizhu.s2;
|
||||||
vizhu = tebyaNeVizhu.s ! clf !(gNum (pgen2gen Ya.g) Ya.n)! Ya.p;
|
vizhu = tebyaNeVizhu.s ! clf !(gNum (pgen2gen Ya.g) Ya.n)! Ya.p;
|
||||||
tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n
|
tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
if_then_else Str tebyaNeVizhu.negBefore
|
|
||||||
(ya ++ ne ++ vizhu ++ tebya)
|
|
||||||
ya ++ khorosho ++ vizhu ++ tebya;
|
ya ++ khorosho ++ vizhu ++ tebya;
|
||||||
s2= "";
|
s2= "";
|
||||||
c = Nom
|
c = Nom
|
||||||
} ;
|
} ;
|
||||||
} ;
|
|
||||||
|
|
||||||
param
|
param
|
||||||
Anteriority = Simul | Anter ;
|
-- for compatibility with Rules.gf:
|
||||||
-- for compatibility with Rules.gf:
|
|
||||||
ClTense = ClPresent | ClPast | ClFuture | ClConditional;
|
|
||||||
ClTense = ClPresent | ClPast | ClFuture | ClConditional;
|
ClTense = ClPresent | ClPast | ClFuture | ClConditional;
|
||||||
|
|
||||||
|
oper
|
||||||
|
TensePolarity = {s : Str ; b : Bool ; t : ClTense ; a : Anteriority} ;
|
||||||
|
|
||||||
|
getRusTense : ClTense -> RusTense = \clt ->
|
||||||
|
case clt of
|
||||||
|
{
|
||||||
|
ClPresent => Present;
|
||||||
|
ClFuture => Future;
|
||||||
|
_ => Past
|
||||||
|
};
|
||||||
|
|
||||||
|
getActVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of
|
||||||
|
{ ClIndic Future _ => VFORM Act (VIND (gNum g n) (VFuture p));
|
||||||
|
ClIndic Past _ => VFORM Act (VIND (gNum g n) VPast);
|
||||||
|
ClIndic Present _ => VFORM Act (VIND (gNum g n) (VPresent p));
|
||||||
|
ClCondit => VFORM Act (VSUB (gNum g n));
|
||||||
|
ClInfinit => VFORM Act VINF ;
|
||||||
|
ClImper => VFORM Act (VIMP n p)
|
||||||
};
|
};
|
||||||
|
|
||||||
oper
|
Clause = {s : Bool => ClForm => Str} ;
|
||||||
|
|
||||||
|
predV0 : Verbum -> Clause = \v ->
|
||||||
|
{s= \\ b, clf => v.s! (VFORM Act (VIND (ASg Masc) (VPresent P3))) };
|
||||||
|
|
||||||
|
predAS : Adverb -> Sentence -> Clause=\vazhno, onPrishel ->
|
||||||
|
{s= \\ b, clf => vazhno.s ++ [", что"] ++ onPrishel.s };
|
||||||
|
|
||||||
|
useCl: TensePolarity ->Clause ->Sentence = \tp, cl ->
|
||||||
|
{s = cl.s!tp.b! ClIndic (getRusTense tp.t) tp.a};
|
||||||
|
|
||||||
predVerbGroupClause : NounPhrase -> VerbPhrase -> Clause =
|
predVerbGroupClause : NounPhrase -> VerbPhrase -> Clause =
|
||||||
predVerbGroupClause : NounPhrase -> VerbGroup -> Clause =
|
\Ya, tebyaNeVizhu -> { s = \\b,clf =>
|
||||||
let {
|
let {
|
||||||
let {
|
ya = Ya.s ! (case clf of {
|
||||||
ClInfinit => (mkPronForm Acc No NonPoss);
|
ClInfinit => (mkPronForm Acc No NonPoss);
|
||||||
ClInfinit => (mkPronForm Acc No NonPoss);
|
_ => (mkPronForm Nom No NonPoss)
|
||||||
_ =>(mkPronForm Nom No NonPoss)
|
});
|
||||||
});
|
|
||||||
ne = tebyaNeVizhu.s2 ! b;
|
|
||||||
vizhu = tebyaNeVizhu.s ! (case c of {
|
|
||||||
ClInfinit => VFORM tebyaNeVizhu.w (VIMP Ya.n Ya.p);
|
|
||||||
ne = case b of {True=>""; False=>"не"};
|
ne = case b of {True=>""; False=>"не"};
|
||||||
|
|
||||||
vizhu = tebyaNeVizhu.s ! clf ! (pgNum Ya.g Ya.n)! Ya.p;
|
vizhu = tebyaNeVizhu.s ! clf ! (pgNum Ya.g Ya.n)! Ya.p;
|
||||||
@@ -686,11 +827,12 @@ oper
|
|||||||
in
|
in
|
||||||
if_then_else Str tebyaNeVizhu.negBefore
|
if_then_else Str tebyaNeVizhu.negBefore
|
||||||
(ya ++ ne ++ vizhu ++ tebya)
|
(ya ++ ne ++ vizhu ++ tebya)
|
||||||
|
(ya ++ vizhu ++ ne ++ tebya)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
-- This is a macro for simultaneous predication and complementation.
|
-- This is a macro for simultaneous predication and complementation.
|
||||||
|
|
||||||
predTransVerb : Bool -> TransVerb -> NounPhrase -> NounPhrase -> Sentence =
|
predTransVerb : Bool -> TransVerb -> NounPhrase -> NounPhrase -> Sentence =
|
||||||
\b,vizhu,ya,tu -> {s= (predVerbPhrase ya (predVerbGroup b Present (complTransVerb vizhu tu))).s!True!ClIndic Present Simul};
|
\b,vizhu,ya,tu -> {s= (predVerbPhrase ya (predVerbGroup b Present (complTransVerb vizhu tu))).s!True!ClIndic Present Simul};
|
||||||
-}
|
-}
|
||||||
@@ -699,14 +841,15 @@ oper
|
|||||||
-- Sentence-complement verbs take sentences as complements.
|
-- Sentence-complement verbs take sentences as complements.
|
||||||
|
|
||||||
SentenceVerb : Type = Verbum ;
|
SentenceVerb : Type = Verbum ;
|
||||||
|
|
||||||
-- To generate "сказал, что Иван гуляет" / "не сказал, что Иван гуляет":
|
-- To generate "сказал, что Иван гуляет" / "не сказал, что Иван гуляет":
|
||||||
|
|
||||||
|
complSentVerb : SentenceVerb -> Sentence -> VerbPhrase =
|
||||||
\vidit,tuUlubaeshsya ->
|
\vidit,tuUlubaeshsya ->
|
||||||
{s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p)
|
{s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p)
|
||||||
{s = \\vf => vidit.s ! vf ++ [", что"] ++ tuUlubaeshsya.s ;
|
++ [", что"] ++ tuUlubaeshsya.s ;
|
||||||
asp = vidit.asp;
|
asp = vidit.asp;
|
||||||
w = Act;
|
w = Act;
|
||||||
s2="";
|
s2="";
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
s3 = \\g,n => ""
|
s3 = \\g,n => ""
|
||||||
@@ -725,15 +868,18 @@ oper
|
|||||||
VerbVerb : Type = Verbum ;
|
VerbVerb : Type = Verbum ;
|
||||||
|
|
||||||
|
|
||||||
-- To generate "can walk"/"can't walk"; "tries to walk"/"does not try to walk":
|
-- To generate "can walk"/"can't walk"; "tries to walk"/"does not try to walk":
|
||||||
-- The contraction of "not" is not provided, since it would require changing
|
-- The contraction of "not" is not provided, since it would require changing
|
||||||
-- the verb parameter type.
|
-- the verb parameter type.
|
||||||
|
|
||||||
complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \putatsya,bezhat ->
|
|
||||||
complVerbVerb : VerbVerb -> VerbPhrase -> VerbPhrase = \putatsya,bezhat ->
|
complVerbVerb : VerbVerb -> VerbPhrase -> VerbPhrase = \putatsya,bezhat ->
|
||||||
asp = putatsya.asp ;
|
{ s = \\clf,gn,p => putatsya.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ bezhat.s!clf!gn!p ;
|
||||||
|
asp = putatsya.asp ;
|
||||||
w = Act;
|
w = Act;
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
|
s2 = "";
|
||||||
|
s3 =\\g,n => ""
|
||||||
|
} ;
|
||||||
|
|
||||||
predVerbGroupI: VerbPhrase -> VerbPhraseClause = \v ->
|
predVerbGroupI: VerbPhrase -> VerbPhraseClause = \v ->
|
||||||
{s=\\b,ant,clf,gn,p => case b of {True => v.s!clf!gn!p; False=> "не"++v.s!clf!gn!p }; a=v.asp; w=v.w; s2=v.s2; s3=v.s3; negBefore=v.negBefore};
|
{s=\\b,ant,clf,gn,p => case b of {True => v.s!clf!gn!p; False=> "не"++v.s!clf!gn!p }; a=v.asp; w=v.w; s2=v.s2; s3=v.s3; negBefore=v.negBefore};
|
||||||
@@ -745,24 +891,35 @@ oper
|
|||||||
-- We cannot have - nor would we want to have - a productive slash-category former.
|
-- We cannot have - nor would we want to have - a productive slash-category former.
|
||||||
-- Perhaps a handful more will be needed.
|
-- Perhaps a handful more will be needed.
|
||||||
--
|
--
|
||||||
-- Notice that the slash category has the same relation to sentences as
|
-- Notice that the slash category has the same relation to sentences as
|
||||||
-- transitive verbs have to verbs: it's like a *sentence taking a complement*.
|
-- transitive verbs have to verbs: it's like a *sentence taking a complement*.
|
||||||
|
|
||||||
SlashNounPhrase = Clause ** Complement ;
|
SlashNounPhrase = Clause ** Complement ;
|
||||||
|
{-
|
||||||
slashTransVerb : Bool -> NounPhrase -> TransVerb -> SlashNounPhrase =
|
|
||||||
slashTransVerb : Bool -> NounPhrase -> TransVerb -> SlashNounPhrase =
|
slashTransVerb : Bool -> NounPhrase -> TransVerb -> SlashNounPhrase =
|
||||||
predVerbPhrase ivan (predVerbGroup b Present ((verbOfTransVerb lubit)**
|
\b,ivan,lubit ->
|
||||||
predVerbPhrase ivan (predVerbGroup b Present ((verbOfTransVerb lubit)**
|
predVerbPhrase ivan (predVerbGroup b Present ((verbOfTransVerb lubit)**
|
||||||
w = Act;
|
{ w = Act;
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
s3 = table{_=> table{_ => ""}} })) **
|
s2 = table{_=> table{_ => ""}} })) **
|
||||||
complementOfTransVerb lubit ;
|
complementOfTransVerb lubit ;
|
||||||
|
-}
|
||||||
thereIs : NounPhrase -> Sentence = \bar ->
|
thereIs : NounPhrase -> Sentence = \bar ->
|
||||||
|
{s = "есть" ++ bar.s ! PF Nom No NonPoss} ;
|
||||||
|
|
||||||
|
|
||||||
|
existCN : CommNounPhrase -> Clause = \bar ->
|
||||||
|
{s =\\b,clf => case b of
|
||||||
|
{True => verbByut.s ! (getActVerbForm clf bar.g Sg P3)
|
||||||
++ bar.s ! Sg ! Nom ;
|
++ bar.s ! Sg ! Nom ;
|
||||||
|
False => "не" ++ verbByut.s ! (getActVerbForm clf bar.g Sg P3)
|
||||||
--existCN : CommNoun -> Clause = \ bar ->
|
++ bar.s ! Sg ! Nom
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
existNumCN: Numeral -> CommNounPhrase -> Clause=\tri, bar ->
|
||||||
|
{s =\\b,clf => case b of
|
||||||
|
{True => verbByut.s ! (getActVerbForm clf bar.g Sg P3)
|
||||||
++ tri.s!Nom!bar.g ++bar.s ! Pl ! Nom ;
|
++ tri.s!Nom!bar.g ++bar.s ! Pl ! Nom ;
|
||||||
False => "не" ++ verbByut.s ! (getActVerbForm clf bar.g Sg P3)
|
False => "не" ++ verbByut.s ! (getActVerbForm clf bar.g Sg P3)
|
||||||
++ tri.s !Nom!bar.g ++bar.s ! Pl ! Nom
|
++ tri.s !Nom!bar.g ++bar.s ! Pl ! Nom
|
||||||
@@ -790,6 +947,9 @@ oper
|
|||||||
|
|
||||||
--2 Relative pronouns and relative clauses
|
--2 Relative pronouns and relative clauses
|
||||||
--
|
--
|
||||||
|
|
||||||
|
oper
|
||||||
|
identRelPron : RelPron = { s = \\gn, c, anim =>
|
||||||
kotorujDet.s ! (AF c anim gn )} ;
|
kotorujDet.s ! (AF c anim gn )} ;
|
||||||
|
|
||||||
useRCl : TensePolarity -> RelClause -> RelPron = \tp, rcl ->
|
useRCl : TensePolarity -> RelClause -> RelPron = \tp, rcl ->
|
||||||
@@ -804,7 +964,7 @@ oper
|
|||||||
-- Relative clauses can be formed from both verb phrases ("видит Машу") and
|
-- Relative clauses can be formed from both verb phrases ("видит Машу") and
|
||||||
-- slash expressions ("я вижу").
|
-- slash expressions ("я вижу").
|
||||||
|
|
||||||
|
RelClause : Type = {s : Bool => ClForm => GenNum => Case => Animacy => Str} ;
|
||||||
|
|
||||||
|
|
||||||
relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \kotoruj, gulyaet ->
|
relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \kotoruj, gulyaet ->
|
||||||
@@ -830,7 +990,7 @@ relCl : Clause -> RelClause =\ A ->
|
|||||||
|
|
||||||
-- The main use of relative clauses is to modify common nouns.
|
-- The main use of relative clauses is to modify common nouns.
|
||||||
-- The result is a common noun, out of which noun phrases can be formed
|
-- The result is a common noun, out of which noun phrases can be formed
|
||||||
|
-- by determiners. A comma is used before the relative clause.
|
||||||
|
|
||||||
modRelClause : CommNounPhrase -> RelClause -> CommNounPhrase =
|
modRelClause : CommNounPhrase -> RelClause -> CommNounPhrase =
|
||||||
\chelovek,kotorujSmeetsya ->
|
\chelovek,kotorujSmeetsya ->
|
||||||
@@ -867,16 +1027,14 @@ relCl : Clause -> RelClause =\ A ->
|
|||||||
nounIntPron : Number -> CommNounPhrase -> IntPron = \n, x ->
|
nounIntPron : Number -> CommNounPhrase -> IntPron = \n, x ->
|
||||||
detNounPhrase (kakojDet ** {n = n ; g = PNoGen; c = Nom}) x ;
|
detNounPhrase (kakojDet ** {n = n ; g = PNoGen; c = Nom}) x ;
|
||||||
|
|
||||||
{ s = table {
|
intPronKto : Number -> IntPron = \num ->
|
||||||
{ s = table {
|
{ s = table {
|
||||||
PF Gen _ _ => "кого" ;
|
PF Nom _ _ => "кто" ;
|
||||||
PF Gen _ _ => "кого" ;
|
PF Gen _ _ => "кого" ;
|
||||||
PF Dat _ _ => "кому" ;
|
PF Dat _ _ => "кому" ;
|
||||||
PF Acc _ _ => "кого" ;
|
PF Acc _ _ => "кого" ;
|
||||||
PF Inst _ _ => "кем" ;
|
PF Inst _ _ => "кем" ;
|
||||||
PF Prepos _ _ => ["о ком"]
|
PF Prepos _ _ => ["о ком"]
|
||||||
g = PGen Masc ;
|
|
||||||
anim = Animate ;
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
g = PGen Masc ;
|
g = PGen Masc ;
|
||||||
@@ -886,8 +1044,8 @@ relCl : Clause -> RelClause =\ A ->
|
|||||||
n = num ;
|
n = num ;
|
||||||
p = P3 ;
|
p = P3 ;
|
||||||
pron = False
|
pron = False
|
||||||
PF Nom _ _ => "что" ;
|
} ;
|
||||||
PF Gen _ _ => "чего" ;
|
|
||||||
intPronChto : Number -> IntPron = \num ->
|
intPronChto : Number -> IntPron = \num ->
|
||||||
{ s = table {
|
{ s = table {
|
||||||
PF Nom _ _ => "что" ;
|
PF Nom _ _ => "что" ;
|
||||||
@@ -915,8 +1073,8 @@ relCl : Clause -> RelClause =\ A ->
|
|||||||
-- and one-word utterances. The rules are far from complete.
|
-- and one-word utterances. The rules are far from complete.
|
||||||
--
|
--
|
||||||
-- N.B. we have not included rules for texts, which we find we cannot say much
|
-- N.B. we have not included rules for texts, which we find we cannot say much
|
||||||
|
-- about on this level. In semantically rich GF grammars, texts, dialogues, etc,
|
||||||
indicUtt : Sentence -> Utterance = \x -> postfixSS "." (defaultSentence x) ;
|
-- will of course play an important role as categories not reducible to utterances.
|
||||||
-- An example is proof texts, whose semantics show a dependence between premises
|
-- An example is proof texts, whose semantics show a dependence between premises
|
||||||
-- and conclusions. Another example is intersentential anaphora.
|
-- and conclusions. Another example is intersentential anaphora.
|
||||||
|
|
||||||
@@ -931,6 +1089,9 @@ oper
|
|||||||
phrVPI: VerbPhrase -> Utterance = \v ->
|
phrVPI: VerbPhrase -> Utterance = \v ->
|
||||||
{s = v.s2++v.s!ClInfinit!APl!P3 ++ v.s3!Masc!Sg} ;
|
{s = v.s2++v.s!ClInfinit!APl!P3 ++ v.s3!Masc!Sg} ;
|
||||||
|
|
||||||
|
--2 Questions
|
||||||
|
--
|
||||||
|
-- Questions are either direct ("Ты счастлив?")
|
||||||
-- or indirect ("Потом он спросил счастлив ли ты").
|
-- or indirect ("Потом он спросил счастлив ли ты").
|
||||||
|
|
||||||
param
|
param
|
||||||
@@ -943,33 +1104,50 @@ oper
|
|||||||
|
|
||||||
useQCl : TensePolarity -> QuestionCl -> Question = \tp, qcl ->
|
useQCl : TensePolarity -> QuestionCl -> Question = \tp, qcl ->
|
||||||
{s = qcl.s!tp.b! ClIndic (getRusTense tp.t) tp.a };
|
{s = qcl.s!tp.b! ClIndic (getRusTense tp.t) tp.a };
|
||||||
-- Note: The particle "ли" can also be used in direct questions:
|
|
||||||
-- Видел ли ты что-нибудь подобное?
|
--3 Yes-no questions
|
||||||
--
|
--
|
||||||
-- Yes-no questions are used both independently ("Ты взял мяч?")
|
-- Yes-no questions are used both independently ("Ты взял мяч?")
|
||||||
-- and after interrogative adverbials ("Почему ты взял мяч?").
|
-- and after interrogative adverbials ("Почему ты взял мяч?").
|
||||||
|
|
||||||
-- Note: The particle "ли" can also be used in direct questions:
|
-- Note: The particle "ли" can also be used in direct questions:
|
||||||
-- Видел ли ты что-нибудь подобное?
|
-- Видел ли ты что-нибудь подобное?
|
||||||
|
-- but we are not considering this case.
|
||||||
|
|
||||||
|
questVerbPhrase : NounPhrase -> VerbPhrase -> Question =
|
||||||
\tu,spish ->
|
\tu,spish ->
|
||||||
let { vu = tu.s ! (mkPronForm Nom No NonPoss);
|
let { vu = tu.s ! (mkPronForm Nom No NonPoss);
|
||||||
spish = spish.s2 ++
|
spish = spish.s2 ++
|
||||||
spish.s ! (ClIndic Present Simul) !(gNum (pgen2gen tu.g) tu.n)! tu.p ++ spish.s3 ! (pgen2gen tu.g) ! tu.n } in
|
spish.s ! (ClIndic Present Simul) !(gNum (pgen2gen tu.g) tu.n)! tu.p ++ spish.s3 ! (pgen2gen tu.g) ! tu.n } in
|
||||||
}
|
{ s = table {
|
||||||
DirQ => vu ++ spish ;
|
DirQ => vu ++ spish ;
|
||||||
IndirQ => spish ++ "ли" ++ vu
|
IndirQ => spish ++ "ли" ++ vu
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
(predVerbGroup True Present (predNounPhrase bar)) ;
|
questCl : Clause -> QuestionCl = \cl-> {s = \\b,cf,_ => cl.s ! b ! cf } ;
|
||||||
|
|
||||||
--3 Wh-questions
|
|
||||||
{-
|
{-
|
||||||
isThere : NounPhrase -> Question = \bar ->
|
isThere : NounPhrase -> Question = \bar ->
|
||||||
questVerbPhrase
|
questVerbPhrase
|
||||||
({s = \\_ => ["есть ли"] ; n = bar.n ; p = P3; g = bar.g; anim = bar.anim; pron = bar.pron})
|
({s = \\_ => ["есть ли"] ; n = bar.n ; p = P3; g = bar.g; anim = bar.anim; pron = bar.pron})
|
||||||
(predVerbGroup True Present (predNounPhrase bar)) ;
|
(predVerbGroup True Present (predNounPhrase bar)) ;
|
||||||
-}
|
-}
|
||||||
|
--3 Wh-questions
|
||||||
|
--
|
||||||
|
-- Wh-questions are of two kinds: ones that are like $NP - VP$ sentences,
|
||||||
|
-- others that are like $S/NP - NP$ sentences.
|
||||||
|
|
||||||
|
intVerbPhrase : IntPron -> VerbPhrase -> QuestionCl = \kto,spit ->
|
||||||
|
{s = \\b,clf,qf => (predVerbPhrase kto spit).s!b!clf } ;
|
||||||
|
|
||||||
|
intSlash : IntPron -> SlashNounPhrase -> QuestionCl = \Kto, yaGovoruO ->
|
||||||
|
let { kom = Kto.s ! (mkPronForm yaGovoruO.c No NonPoss) ; o = yaGovoruO.s2 } in
|
||||||
|
{s = \\b,clf,_ => o ++ kom ++ yaGovoruO.s ! b ! clf
|
||||||
|
} ;
|
||||||
|
|
||||||
|
slashAdv : Clause -> Preposition -> SlashNounPhrase=
|
||||||
|
\cl,p -> {s=cl.s; s2=p.s2; c=p.c} ;
|
||||||
|
|
||||||
slashV2 : NounPhrase -> TransVerb -> SlashNounPhrase = \ivan, lubit->
|
slashV2 : NounPhrase -> TransVerb -> SlashNounPhrase = \ivan, lubit->
|
||||||
{ s=\\b,clf => ivan.s ! PF Nom No NonPoss ++ lubit.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ; s2=lubit.s2; c=lubit.c };
|
{ s=\\b,clf => ivan.s ! PF Nom No NonPoss ++ lubit.s! (getActVerbForm clf (pgen2gen ivan.g) ivan.n ivan.p) ; s2=lubit.s2; c=lubit.c };
|
||||||
@@ -986,8 +1164,7 @@ isThere : NounPhrase -> Question = \bar ->
|
|||||||
--3 Interrogative adverbials
|
--3 Interrogative adverbials
|
||||||
--
|
--
|
||||||
-- These adverbials will be defined in the lexicon: they include
|
-- These adverbials will be defined in the lexicon: they include
|
||||||
IntAdverb = SS ;
|
-- "когда", "где", "как", "почему", etc, which are all invariant one-word
|
||||||
|
|
||||||
-- expressions. In addition, they can be formed by adding prepositions
|
-- expressions. In addition, they can be formed by adding prepositions
|
||||||
-- to interrogative pronouns, in the same way as adverbials are formed
|
-- to interrogative pronouns, in the same way as adverbials are formed
|
||||||
-- from noun phrases. N.B. we rely on record subtyping when ignoring the
|
-- from noun phrases. N.B. we rely on record subtyping when ignoring the
|
||||||
@@ -1001,10 +1178,20 @@ isThere : NounPhrase -> Question = \bar ->
|
|||||||
questAdverbial_1 : IntAdverb -> NounPhrase -> VerbPhrase -> Question =
|
questAdverbial_1 : IntAdverb -> NounPhrase -> VerbPhrase -> Question =
|
||||||
\kak, tu, pozhivaesh ->
|
\kak, tu, pozhivaesh ->
|
||||||
{s = \\q => kak.s ++ tu.s ! (mkPronForm Nom No NonPoss) ++ pozhivaesh.s2 ++pozhivaesh.s ! (ClIndic Present Simul )!(gNum (pgen2gen tu.g) tu.n) ! tu.p ++
|
{s = \\q => kak.s ++ tu.s ! (mkPronForm Nom No NonPoss) ++ pozhivaesh.s2 ++pozhivaesh.s ! (ClIndic Present Simul )!(gNum (pgen2gen tu.g) tu.n) ! tu.p ++
|
||||||
--2 Imperatives
|
pozhivaesh.s3 ! (pgen2gen tu.g) ! tu.n } ;
|
||||||
|
|
||||||
|
questAdverbial : IntAdverb -> Clause -> QuestionCl =
|
||||||
|
\kak, tuPozhivaesh ->
|
||||||
|
{s = \\b,clf,q => kak.s ++ tuPozhivaesh.s!b!clf } ;
|
||||||
|
|
||||||
|
--2 Imperatives
|
||||||
|
--
|
||||||
|
-- We only consider second-person imperatives.
|
||||||
|
|
||||||
Imperative: Type = { s: Gender => Number => Str } ;
|
Imperative: Type = { s: Gender => Number => Str } ;
|
||||||
|
|
||||||
imperVerbPhrase : VerbPhrase -> Imperative = \budGotov ->
|
imperVerbPhrase : VerbPhrase -> Imperative = \budGotov ->
|
||||||
|
{s = \\g, n => budGotov.s ! ClImper ! (gNum g n) ! P2 ++ budGotov.s2++budGotov.s3 ! g ! n} ;
|
||||||
|
|
||||||
-- infinitive verbPhrase,
|
-- infinitive verbPhrase,
|
||||||
-- however in Russian Infinitive and Imperative is totally different
|
-- however in Russian Infinitive and Imperative is totally different
|
||||||
@@ -1211,85 +1398,125 @@ isThere : NounPhrase -> Question = \bar ->
|
|||||||
useNounPhrase (indefNounPhrase n mashina) ;
|
useNounPhrase (indefNounPhrase n mashina) ;
|
||||||
|
|
||||||
useRegularName : Gender -> SS -> NounPhrase = \g, masha ->
|
useRegularName : Gender -> SS -> NounPhrase = \g, masha ->
|
||||||
ss (masha.s ! PF Nom No NonPoss) ;
|
nameNounPhrase (case g of { Masc => mkProperNameMasc masha.s Animate;
|
||||||
|
_ => mkProperNameFem masha.s Animate }) ;
|
||||||
defaultQuestion : Question -> SS = \ktoTu ->
|
|
||||||
ss (ktoTu.s ! DirQ) ;
|
-- Here are some default forms.
|
||||||
|
|
||||||
defaultSentence : Sentence -> Utterance = \x ->
|
defaultNounPhrase : NounPhrase -> SS = \masha ->
|
||||||
x ;
|
ss (masha.s ! PF Nom No NonPoss) ;
|
||||||
|
|
||||||
predNounPhrase : NounPhrase -> VerbGroup = \masha -> { s= table {
|
defaultQuestion : Question -> SS = \ktoTu ->
|
||||||
VFORM _ (VSUB _) => "" ;
|
ss (ktoTu.s ! DirQ) ;
|
||||||
VFORM _ (VIMP Sg _) => "будь" ++ masha.s ! (mkPronForm Inst No NonPoss);
|
|
||||||
VFORM _ (VIMP Pl _) => "будьте" ++ masha.s ! (mkPronForm Inst No NonPoss) ;
|
defaultSentence : Sentence -> Utterance = \x ->
|
||||||
VFORM _ VINF => "быть" ++ masha.s ! (mkPronForm Inst No NonPoss);
|
x ;
|
||||||
VFORM _ (VIND _ (VPresent _)) => masha.s ! (mkPronForm Nom No NonPoss) ;
|
|
||||||
VFORM _ (VIND (ASg Fem) VPast) =>"была"++masha.s ! (mkPronForm Inst No NonPoss);
|
predNounPhrase : NounPhrase -> VerbPhrase = \masha ->
|
||||||
VFORM _ (VIND (ASg Masc) VPast) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss);
|
{ s=\\clf,gn,p => case clf of
|
||||||
VFORM _ (VIND (ASg Neut) VPast) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss);
|
{
|
||||||
|
(ClIndic Present _) => masha.s ! (mkPronForm Nom No NonPoss) ;
|
||||||
|
(ClIndic Past _) => case gn of
|
||||||
|
{ (ASg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss);
|
||||||
|
(ASg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss);
|
||||||
|
(ASg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss);
|
||||||
|
APl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||||
|
};
|
||||||
|
(ClIndic Future _) => case gn of
|
||||||
|
{ APl => case p of
|
||||||
|
{ P3 => "будут"++masha.s ! (mkPronForm Inst No NonPoss);
|
||||||
|
P2 => "будете"++masha.s !(mkPronForm Inst No NonPoss);
|
||||||
|
P1 => "будем"++masha.s ! (mkPronForm Inst No NonPoss)
|
||||||
};
|
};
|
||||||
(ASg _) => case p of
|
(ASg _) => case p of
|
||||||
VFORM _ (VIND APl (VFuture P2)) => "будете"++masha.s !(mkPronForm Inst No NonPoss);
|
|
||||||
{ P3=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ;
|
{ P3=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ;
|
||||||
VFORM _ (VIND (ASg _) (VFuture P3))=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ;
|
P2 => "будешь"++ masha.s ! (mkPronForm Inst No NonPoss) ;
|
||||||
VFORM _ (VIND (ASg _) (VFuture P2)) => "будешь"++ masha.s ! (mkPronForm Inst No NonPoss) ;
|
P1=> "буду"++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||||
} --case p
|
} --case p
|
||||||
}; --case gn
|
}; --case gn
|
||||||
asp = Imperfective ;
|
ClCondit => "" ;
|
||||||
w = Act;
|
ClImper => case (numGNum gn) of
|
||||||
s2 = table{True => ""; False => "не"};
|
{Sg => "будь" ++ masha.s ! (mkPronForm Inst No NonPoss);
|
||||||
negBefore = True;
|
Pl => "будьте" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||||
s3 = table{_=> table{_ => ""}}
|
};
|
||||||
|
ClInfin => "быть" ++ masha.s ! (mkPronForm Inst No NonPoss)
|
||||||
} ;
|
}; -- case clf
|
||||||
|
asp = Imperfective ;
|
||||||
|
w = Act;
|
||||||
predCommNoun : CommNounPhrase -> VerbGroup = \chelovek ->
|
negBefore = True;
|
||||||
{ s= table {
|
s2 = "";
|
||||||
VFORM _ (VIMP Sg _) => "будь" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
s3 = \\g,n => ""
|
||||||
VFORM _ (VIMP Pl _) => "будьте" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss) ;
|
} ;
|
||||||
-- person is ignored !
|
|
||||||
VFORM _ VINF => "быть" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss) ;
|
predCommNoun : CommNounPhrase -> VerbPhrase = \chelovek ->
|
||||||
VFORM _ (VIND gn (VPresent _)) => (indefNounPhrase (numGNum gn) chelovek ).s ! (mkPronForm Nom No NonPoss);
|
{ s=\\clf,gn,p =>
|
||||||
VFORM _ (VIND (ASg Fem) VPast) => "была" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
case clf of
|
||||||
VFORM _ (VIND (ASg Masc) VPast) => "был" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
{
|
||||||
VFORM _ (VIND (ASg Neut) VPast) => "было" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
ClInfinit =>"быть" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss) ;
|
||||||
VFORM _ (VIND APl VPast) => "были" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss);
|
ClCondit => case gn of
|
||||||
|
{
|
||||||
|
(ASg _) => ["был бы"] ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
APl => ["были бы"] ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss)
|
||||||
|
} ;
|
||||||
|
ClImper => case gn of
|
||||||
|
{
|
||||||
|
(ASg _) => "будь" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
APl => "будьте" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss)
|
||||||
|
};
|
||||||
|
ClIndic Present _ => (indefNounPhrase (numGNum gn) chelovek ).s ! (mkPronForm Nom No NonPoss);
|
||||||
|
ClIndic Past _ => case gn of
|
||||||
|
{
|
||||||
|
(ASg Masc) => "был" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
(ASg Fem) => "была" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
(ASg Neut) => "было" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
APl => "были" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss)
|
||||||
|
};
|
||||||
|
ClIndic Future _ => case gn of
|
||||||
|
{
|
||||||
(ASg _) => case p of
|
(ASg _) => case p of
|
||||||
{
|
{
|
||||||
VFORM _ (VIND APl (VFuture P1)) => "будем" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss);
|
|
||||||
P3 => "будет" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
P3 => "будет" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
VFORM _ (VIND (ASg g) (VFuture P2)) => "будешь"++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
P2 => "будешь"++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
VFORM _ (VIND (ASg g) (VFuture P1))=> "буду" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss);
|
P1 => "буду" ++ (indefNounPhrase Sg chelovek ).s ! (mkPronForm Inst No NonPoss)
|
||||||
} ;
|
} ;
|
||||||
APl => case p of
|
APl => case p of
|
||||||
asp = Imperfective ;
|
{
|
||||||
w = Act;
|
P3 => "будут" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
s2 = table{True => ""; False => "не"};
|
|
||||||
negBefore = True;
|
|
||||||
P2 =>"будете" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss);
|
P2 =>"будете" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss);
|
||||||
|
P1 => "будем" ++ (indefNounPhrase Pl chelovek ).s ! (mkPronForm Inst No NonPoss)
|
||||||
|
} -- p
|
||||||
|
} -- gn
|
||||||
|
} ; -- clf
|
||||||
|
asp = Imperfective ;
|
||||||
w = Act;
|
w = Act;
|
||||||
negBefore = True;
|
negBefore = True;
|
||||||
predAdjective : AdjPhrase -> VerbGroup = \zloj ->
|
s2 = "";
|
||||||
{ s= table {
|
s3= \\g,n => ""
|
||||||
VFORM _ (VIMP Sg _) => "будь" ++ zloj.s ! AF Inst Animate (ASg Masc);
|
} ;
|
||||||
VFORM _ (VIMP Pl _) => "будьте" ++ zloj.s ! AF Inst Animate APl ;
|
|
||||||
-- person is ignored !
|
predAdjective : AdjPhrase -> VerbPhrase = \zloj ->{
|
||||||
VFORM _ VINF => "быть" ++ zloj.s ! AF Inst Animate (ASg Masc) ;
|
s= \\clf,gn,p => case clf of {
|
||||||
-- infinitive does not save GenNum,
|
|
||||||
-- but indicative does for the sake of adjectival predication !
|
-- person is ignored !
|
||||||
VFORM _ (VIND gn (VPresent _)) => zloj.s ! AF Nom Animate gn ;
|
ClInfinit => "быть" ++ zloj.s ! AF Inst Animate (ASg Masc) ;
|
||||||
VFORM _ (VIND (ASg Fem) VPast) => "была" ++ zloj.s! AF Nom Animate (ASg Fem);
|
ClImper => case gn of
|
||||||
|
{ (ASg _) => "будь" ++ zloj.s ! AF Inst Animate (ASg Masc);
|
||||||
VFORM _ (VIND (ASg Masc) VPast) => "был" ++ zloj.s! AF Nom Animate (ASg Masc);
|
APl => "будьте" ++ zloj.s ! AF Inst Animate APl
|
||||||
VFORM _ (VIND (ASg Neut) VPast) => "был" ++ zloj.s! AF Nom Animate (ASg Neut);
|
};
|
||||||
|
-- infinitive does not save GenNum,
|
||||||
|
-- but indicative does for the sake of adjectival predication !
|
||||||
|
ClIndic Present _ => zloj.s ! AF Nom Animate gn ;
|
||||||
|
ClIndic Past _ => case gn of
|
||||||
|
{ (ASg Fem) => "была" ++ zloj.s! AF Nom Animate (ASg Fem);
|
||||||
|
|
||||||
|
(ASg Masc) => "был" ++ zloj.s! AF Nom Animate (ASg Masc);
|
||||||
|
(ASg Neut) => "был" ++ zloj.s! AF Nom Animate (ASg Neut);
|
||||||
|
APl => "были" ++ zloj.s! AF Nom Animate APl
|
||||||
};
|
};
|
||||||
ClIndic Future _ => case gn of
|
ClIndic Future _ => case gn of
|
||||||
VFORM _ (VIND APl (VFuture P2)) => "будете" ++ zloj.s! AF Nom Animate APl;
|
|
||||||
{ APl => case p of
|
{ APl => case p of
|
||||||
VFORM _ (VIND (ASg g) (VFuture P3)) => "будет" ++ zloj.s! AF Nom Animate (ASg g);
|
{ P3 => "будут" ++ zloj.s! AF Nom Animate APl;
|
||||||
VFORM _ (VIND (ASg g) (VFuture P2)) => "будешь"++ zloj.s! AF Nom Animate (ASg g);
|
P2 => "будете" ++ zloj.s! AF Nom Animate APl;
|
||||||
P1 => "будем" ++ zloj.s! AF Nom Animate APl
|
P1 => "будем" ++ zloj.s! AF Nom Animate APl
|
||||||
VFORM _ (VSUB _) => ""
|
} ;
|
||||||
|
(ASg _) => case p of
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ param
|
|||||||
AfterPrep = Yes | No ;
|
AfterPrep = Yes | No ;
|
||||||
Possessive = NonPoss | Poss GenNum ;
|
Possessive = NonPoss | Poss GenNum ;
|
||||||
Animacy = Animate | Inanimate ;
|
Animacy = Animate | Inanimate ;
|
||||||
|
Anteriority = Simul | Anter ;
|
||||||
|
ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper;
|
||||||
|
-- "naked infinitive" clauses
|
||||||
|
|
||||||
|
|
||||||
-- A number of Russian nouns have common gender. They can
|
-- A number of Russian nouns have common gender. They can
|
||||||
-- denote both males and females: "умница" (a clever person), "инженер" (an engineer).
|
-- denote both males and females: "умница" (a clever person), "инженер" (an engineer).
|
||||||
@@ -144,6 +148,31 @@ param
|
|||||||
|
|
||||||
GenNum = ASg Gender | APl ;
|
GenNum = ASg Gender | APl ;
|
||||||
|
|
||||||
|
-- Coercions between the compound gen-num type and gender and number:
|
||||||
|
oper
|
||||||
|
gNum : Gender -> Number -> GenNum = \g,n ->
|
||||||
|
case n of
|
||||||
|
{ Sg => case g of
|
||||||
|
{ Fem => ASg Fem ;
|
||||||
|
Masc => ASg Masc ;
|
||||||
|
Neut => ASg Neut } ;
|
||||||
|
Pl => APl
|
||||||
|
} ;
|
||||||
|
|
||||||
|
pgNum : PronGen -> Number -> GenNum = \g,n ->
|
||||||
|
case n of
|
||||||
|
{ Sg => case g of
|
||||||
|
{ PGen Fem => ASg Fem ;
|
||||||
|
PGen Masc => ASg Masc ;
|
||||||
|
PGen Neut => ASg Neut ;
|
||||||
|
_ => ASg Masc } ;
|
||||||
|
Pl => APl
|
||||||
|
} ;
|
||||||
|
-- _ => variants {ASg Masc ; ASg Fem} } ;
|
||||||
|
-- "variants" version cause "no term variants" error during linearization
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
oper numGNum : GenNum -> Number = \gn ->
|
oper numGNum : GenNum -> Number = \gn ->
|
||||||
case gn of { APl => Pl ; _ => Sg } ;
|
case gn of { APl => Pl ; _ => Sg } ;
|
||||||
|
|
||||||
@@ -190,6 +219,12 @@ oper
|
|||||||
|
|
||||||
Adjective : Type = {s : AdjForm => Str} ;
|
Adjective : Type = {s : AdjForm => Str} ;
|
||||||
|
|
||||||
|
-- A special type of adjectives just having positive forms
|
||||||
|
-- (for semantic reasons) is useful, e.g. "русский".
|
||||||
|
|
||||||
|
oper
|
||||||
|
extAdjective : AdjDegr -> Adjective = \adj ->
|
||||||
|
{ s = \\af => adj.s ! Pos ! af } ;
|
||||||
|
|
||||||
--3 Verbs
|
--3 Verbs
|
||||||
|
|
||||||
@@ -253,24 +288,25 @@ oper
|
|||||||
-- The conjugation parameters left (Gender, Number, Person)
|
-- The conjugation parameters left (Gender, Number, Person)
|
||||||
-- are combined in the "VF" type:
|
-- are combined in the "VF" type:
|
||||||
|
|
||||||
|
--param VF = VFin GenNum Person | VImper Number Person | VInf | VSubj GenNum;
|
||||||
param VF =
|
|
||||||
VFin GenNum Person | VImper Number Person | VInf | VSubj GenNum;
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
Verb : Type = {s : VF => Str ; t: RusTense ; a : Aspect ; w: Voice} ;
|
-- Verb : Type = {s : VF => Str ; t: RusTense ; a : Aspect ; w: Voice} ;
|
||||||
|
Verb : Type = {s : ClForm => GenNum => Person => Str ; asp : Aspect ; w: Voice} ;
|
||||||
|
|
||||||
extVerb : Verbum -> Voice -> RusTense -> Verb = \aller, vox, t ->
|
extVerb : Verbum -> Voice -> Verb = \aller, vox, ->
|
||||||
{ s = table {
|
{ s = \\clf, gn,p => case clf of
|
||||||
VFin gn p => case t of {
|
{
|
||||||
Present => aller.s ! VFORM vox (VIND gn (VPresent p)) ;
|
ClIndic Present _ => aller.s ! VFORM vox (VIND gn (VPresent p)) ;
|
||||||
Past => aller.s ! VFORM vox (VIND gn VPast ) ;
|
ClIndic Past _ => aller.s ! VFORM vox (VIND gn VPast ) ;
|
||||||
Future => aller.s ! VFORM vox (VIND gn (VFuture p))
|
ClIndic Future _ => aller.s ! VFORM vox (VIND gn (VFuture p)) ;
|
||||||
} ;
|
ClCondit => aller.s ! VFORM vox (VSUB gn);
|
||||||
VImper n p => aller.s ! VFORM vox (VIMP n p) ;
|
ClImper => aller.s ! VFORM vox (VIMP (numGNum gn) p) ;
|
||||||
VInf => aller.s ! VFORM vox VINF ;
|
ClInfinit => aller.s ! VFORM vox VINF
|
||||||
VSubj gn => aller.s ! VFORM vox (VSUB gn)
|
} ;
|
||||||
}; t = t ; a = aller.asp ; w = vox } ;
|
asp = aller.asp ;
|
||||||
|
w = vox
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--3 Other open classes
|
--3 Other open classes
|
||||||
|
|||||||
Reference in New Issue
Block a user