diff --git a/lib/resource-1.0/russian/LexiconRus.gf b/lib/resource-1.0/russian/LexiconRus.gf index a4154a944..dea1dc4be 100644 --- a/lib/resource-1.0/russian/LexiconRus.gf +++ b/lib/resource-1.0/russian/LexiconRus.gf @@ -1,409 +1,398 @@ ---# -path=.:../abstract:../common:../../prelude - --- -concrete LexiconRus of Lexicon = CatRus ** - open ParadigmsRus, Prelude, StructuralRus, MorphoRus in { ---, IrregRus -flags - optimize=values ; - coding=utf8 ; -lin - airplane_N = nTelefon "самолет" ; - answer_V2S = dirV2 (regV imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" ); - apartment_N = nMashina "квартир" ; - apple_N = nChislo "яблок" ; - art_N = nChislo "искусств" ; - ask_V2Q = dirV2 (regV imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ; - baby_N = nMalush "малыш"; - bad_A = AKakoj_Nibud "плох" "" "хуже"; - bank_N = nBank "банк" ; - beautiful_A = AStaruyj "красив" "красивее"; - become_VA = regV perfective second "станов" "лю" "стал" "стань" "стать" ; - beer_N = nChislo "пив" ; - beg_V2V = dirV2 (mkV imperfective "прошу" "просишь" "просит" "просим" "просите" "просят" "просил" "проси" "просить" ); - big_A = AKakoj_Nibud "больш" "" "больше" ; - bike_N = nTelefon "велосипед" ; - bird_N = nEdinica "птиц" ; - black_A = AStaruyj "чёрн" "чернее"; - blue_A = AMolodoj "голуб" "голубее"; - boat_N = nMashina "лодк" ; - book_N = nNoga "книг" ; - boot_N = nBank "сапог" ; - boss_N = nStomatolog "начальник" ; - boy_N = nStomatolog "мальчик" ; - bread_N = nAdres "хлеб" ; - break_V2 = dirV2 (regV imperfective first "прерыва" "ю" "прерывал" "прерывай" "прерывать" ); - broad_A = AMalenkij "широк" "шире"; - brother_N2 = mkN2 (nBrat "брат") ; - brown_A = AStaruyj "коричнев" "коричневее"; - butter_N = nChislo "масл"; - buy_V2 = dirV2 (regV imperfective first "покупа" "ю" "покупал" "покупай" "покупать" ); - camera_N = nMashina "kamer" ; - cap_N = nNoga "чашк" ; -- чаш-ек Pl-Gen - car_N = nMashina "машин" ; - carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" masculine inanimate; - cat_N = nMashina "кошк" ; -ceiling_N = nPotolok "потол" ; - chair_N = nStul "стул" ; -cheese_N = nTelefon "сыр" ; -child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" masculine animate ; - church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" masculine inanimate; - city_N = nAdres "город" ; - clean_A = AStaruyj "чист" "чище"; - clever_A = AStaruyj "умн" "умнее"; - close_V2= dirV2 (regV imperfective first "закрыва" "ю" "закрывал" "закрывай" "закрывать" ); - coat_N = mkIndeclinableNoun "пальто" masculine inanimate ; - cold_A = AStaruyj "холодн" "холоднее"; - come_V = regV imperfective first "прихо" "жу" "приходил" "приходи" "приходить" ; - computer_N = nTelefon "компьютер" ; - country_N = nMashina "стран" ; -cousin_N = nTelefon "кузен" ; -cow_N = nMashina "коров" ; -die_V = regV imperfective first "умира" "ю" "умирал" "умирай" "умирать" ; -dirty_A = AStaruyj "грязн" "грязнее" ; -doctor_N = nAdres "доктор" ; -dog_N = nNoga "собак" ; -door_N = nBol "двер" ; -drink_V2 = dirV2 (regV imperfective firstE "пь" "ю" "пил" "пей" "пить" ); -eat_V2 = dirV2 (regV imperfective first "куша" "ю" "кушал" "кушай" "кушать" ); -enemy_N = nStomatolog "враг" ; -factory_N = nNoga "фабрик" ; -father_N2 = mkN2 (mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate); -fear_VS= regV imperfective second "бо" "ю" "боял" "бой" "боять" ; -find_V2 = dirV2 (mkV imperfective "нахожу" "находишь" "находит" "находим" "находите" "находят" "находил" "находи" "находить" ); -fish_N = nMashina "рыб" ; -floor_N = nTelefon "пол" ; -forget_V2= dirV2 (regV imperfective first "забыва" "ю" "забывал" "забывай" "забывать" ); -fridge_N = nBank "холодильник" ; -friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" masculine animate; -fruit_N = nTelefon "фрукт" ; -garden_N = nTelefon "сад" ; -girl_N = nNoga "девочк" ; -glove_N = nNoga "перчатк" ; -gold_N = nChislo "золот" ; -good_A = AKhoroshij "хорош" "лучше" ; -go_V= regV imperfective second "хо" "жу" "ходил" "ходи" "ходить" ; -green_A = AStaruyj "зелен" "зеленее" ; -harbour_N = nTelefon "залив" ; -hate_V2= dirV2 (regV imperfective second "ненави" "жу" "ненавидел" "ненавидь" "ненавидеть" ); -hat_N = nMashina "шляп" ; -have_V2= dirV2 (regV imperfective first "име" "ю" "имел" "имей" "иметь" ); -hear_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); -hill_N = nTelefon "холм" ; -hope_VS= regV imperfective first "наде" "ю" "надеял" "надей" "надеять" ; -horse_N = nBol "лошад" ; -hot_A = AKhoroshij "горяч" "горячее" ; -house_N = nAdres "дом" ; -important_A = AStaruyj "важн" "важнее" ; -industry_N = nChislo "производств" ; -iron_N = nChislo "желез" ; -king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate; -know_V2= dirV2 (regV imperfective first "зна" "ю" "знал" "знай" "знать" ); -lake_N = nChislo "озер" ; -lamp_N = nMashina "ламп" ; -learn_V2= dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); -leather_N = nEdinica "кож" ; -leave_V2= dirV2 (regV imperfective second "ухож" "у" "уходил" "уходи" "уходить" ); -like_V2= dirV2 (regV imperfective second "нрав" "лю" "нравил" "нравь" "нравить" ); -listen_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); -live_V= regV imperfective firstE "жив" "у" "жил" "живи" "жить" ; -long_A = AStaruyj "длинн" "длиннее" ; -lose_V2 = dirV2 (regV imperfective first "теря" "ю" "терял" "теряй" "терять" ); -love_N = nBol "любов" ; -love_V2= dirV2 (regV imperfective second "люб" "лю" "любил" "люби" "любить" ); -man_N = nStomatolog "человек" ; -meat_N =nChislo "мяс" ; -milk_N = nChislo "молок" ; -moon_N = nMashina "лун" ; -mother_N2 = mkN2 ( nMashina "мам") ; -mountain_N = nMashina "гор" ; -music_N = nNoga "музык" ; -narrow_A = AStaruyj "узк" "уже" ; -new_A = AStaruyj "нов" "новее" ; -newspaper_N = nMashina "газет" ; -oil_N = nBol "нефть" ; -old_A = AStaruyj "стар" "старше" ; -open_V2= dirV2 (regV imperfective first "открыва" "ю" "открывал" "открывай" "открывать" ); -paper_N = nNoga "бумаг" ; -peace_N = nTelefon "мир" ; -pen_N = nNoga "ручк" ; -planet_N = nMashina "планет" ; -plastic_N = nMashina "пластмасс" ; -play_V2 = mkV2 (regV imperfective first "игра" "ю" "играл" "играй" "играть" ) "c" instructive; -policeman_N = nTelefon "милиционер" ; -priest_N = nStomatolog "священник" ; -queen_N = nMashina "королев" ; -radio_N = mkIndeclinableNoun "радио" neuter inanimate; -read_V2 = dirV2 (regV imperfective first "чита" "ю" "читал" "читай" "читать" ); -red_A = AStaruyj "красн" "краснее" ; -religion_N = nMalyariya "религи" ; -restaurant_N = nTelefon "ресторан" ; -river_N = nNoga "рек" ; -rock_N = nUroven "кам" ; -roof_N = nEdinica "крыш" ; -rubber_N = nMashina "резин" ; -run_V = regV imperfective first "бега" "ю" "бегал" "бегай" "бегать" ; -say_VS = regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ; -school_N = nMashina "школ" ; -science_N = nNoga "наук" ; -sea_N = nProizvedenie "мор" ; -seek_V2 = dirV2 (regV imperfective first "ищ" "у" "искал" "ищи" "искать" ); -see_V2 = dirV2 (regV imperfective second "виж" "у" "видел" "видь" "видеть" ); -sell_V3 = tvDirDir (regV imperfective firstE "прода" "ю" "продавал" "продавай" "продавать" ); -send_V3 = tvDirDir (regV imperfective first "посыла" "ю" "посылал" "посылай" "посылать" ); -sheep_N = nMashina "овц" ; -ship_N = nNol "корабл" ; -shirt_N = nNoga "рубашк" ; -shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" masculine inanimate; -shop_N = nTelefon "магазин" ; -short_A = AMalenkij "коротк" "короче" ; -silver_N = nChislo "серебр" ; -sister_N = nMashina "сестр" ; -sleep_V = regV imperfective second "сп" "лю" "спал" "спи" "спать" ; -small_A = AMalenkij "маленьк" "меньше" ; -snake_N = nTetya"зме" ; -sock_N = nPotolok "нос" ; -speak_V2 = dirV2 (regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ); -star_N = nMashina "звезд" ; -steel_N = nBol "стал" ; -stone_N = nNol "камен" ; -stove_N = nBol "печ" ; -student_N = nTelefon "студент" ; -stupid_A = AMolodoj "тупой" "тупее" ; -sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" neuter inanimate; -switch8off_V2 = dirV2 (regV imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ; -switch8on_V2 = dirV2 (regV imperfective first "включа" "ю" "включал" "включай" "включать") ; -table_N = nTelefon "стол" ; -teacher_N = nNol "учител" ; -teach_V2 = dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); -television_N = nProizvedenie "телевидени" ; -thick_A = AStaruyj "толст" "толще" ; -thin_A = AMalenkij "тонк" "тоньше" ; -train_N = nAdres "поезд" ; -travel_V = regV imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ; -tree_N = nChislo "дерев" ; ---trousers_N = mkN "" "" "" "" "" "" "штаны" "штанов" "штанам" "штаны" "штанами" "штанах" masculine inanimate; -ugly_A = AStaruyj "некрасив" "некрасивее" ; -understand_V2 = dirV2 (regV imperfective first "понима" "ю" "понимал" "понимай" "понимать" ); -university_N = nTelefon "университет" ; -village_N = nMalyariya "деревн" ; -wait_V2 = dirV2 (regV imperfective firstE "жд" "у" "ждал" "жди" "ждать" ); -walk_V = regV imperfective first "гуля" "ю" "гулял" "гуляй" "гулять" ; -warm_A = AStaruyj "тёпл" "теплее" ; -war_N = nMashina "войн" ; -watch_V2 = dirV2 (regV imperfective second "смотр" "ю" "смотрел" "смотри" "смотреть" ); -water_N = nMashina "вод" ; -white_A = AStaruyj "бел" "белее" ; -window_N = nChislo "окн" ; -wine_N = nChislo "вин" ; -win_V2 = dirV2 (regV imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" ); -woman_N = nZhenchina "женщин" ; -wood_N = nChislo "дерев" ; -write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" ); -yellow_A = AStaruyj "жёлт" "желтее" ; -young_A = AMolodoj "молод" "моложе"; - - do_V2 = dirV2 (regV imperfective first "дела" "ю" "делал" "делай" "делать" ); - now_Adv = mkAdv "сейчас" ; - already_Adv = mkAdv "уже" ; - song_N = nTetya "песн" ; - add_V3 = mkV3 (regV imperfective first "складыва" "ю" "складывал" "складывай" "складывать" ) "" "в" accusative accusative; - number_N = nChislo "числ" ; - put_V2 = dirV2 (regV imperfective firstE "клад" "у" "клал" "клади" "класть" ); - stop_V = regV imperfective first "останавлива" "ю" "останавливал" "останавливай" "останавливать"; - jump_V = regV imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ; - -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_A = AMolodoj "пуст" "пустее"; -married_A2 = mkA2 (adjInvar "замужем") "за" instructive ; -paint_V2A = dirV2 (regV imperfective first "рису" "ю" "рисовал" "рисуй" "рисовать" ) ; - probable_AS = AStaruyj "возможн" "возможнее"; - rain_V0 = idetDozhd verbIdti; -- No such verb in Russian! -talk_V3 = mkV3 (regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ) "с" "о" instructive prepositional; -wonder_VQ = regV imperfective first "интересу" "ю" "интересовал" "интересуй" "интересовать"; - - -- Nouns - - animal_N = nZhivotnoe "животн" ; - ashes_N = nPepel "пеп" ; - back_N = nMashina "спин" ; - bark_N = mkN "лай" "лая" "лаю" "лай" "лаем" "лае" "лаи" "лаев" "лаям" "лаи" "лаями" "лаях" masculine inanimate; - belly_N = nTelefon "живот" ; - bird_N = nEdinica "птиц" ; - blood_N = nBol "кров" ; - bone_N = nBol "кост" ; - breast_N = nBol "грудь" ; - - cloud_N = nChislo "облак" ; - day_N = mkN "день" "дня" "дню" "день" "днём" "дне" "дни" "дней" "дням" "дни" "днями" "днях" masculine inanimate ; - - dust_N = nBol "пыл" ; - ear_N = nChislo "ухо" ; - earth_N = nTetya "земл" ; - egg_N = nChislo "яйц" ; - eye_N = nAdres "глаз" ; - fat_N = nBank "жир" ; - --- father_N = UseN2 father_N2 ; - feather_N = mkN "перо" "пера" "перу" "пера" "пером" "пере" "перья" "перьев" "перьям" "перьев" "перьями" "перьях" neuter inanimate ; - fingernail_N = mkN "ноготь" "ногтя" "ногтю" "ногтя" "ногтем" "ногте" "ногти" "ногтей" "ногтям" "ногтей" "ногтями" "ногтях" masculine inanimate ; - fire_N = mkN "огонь" "огня" "огню" "огня" "огнём" "огне" "огни" "огней" "огням" "огней" "огнями" "огнях" masculine inanimate ; - fish_N = nMashina "рыб" ; - flower_N = mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" masculine animate ; - fog_N = nTelefon "туман" ; - foot_N = nTetya "ступн" ; - forest_N = nAdres "лес" ; - fruit_N = nTelefon "фрукт"; - grass_N = nMashina "трав" ; - guts_N = nBol "внутренност" ; - hair_N = nTelefon "волос" ; - hand_N = nNoga "рук" ; - head_N = nMashina "голов" ; - heart_N = mkN "сердце" "сердца" "сердцу" "сердца" "сердцем" "сердце" "сердца" "сердец" "сердцам" "сердец" "сердцами" "сердцах" neuter inanimate; - horn_N = nAdres "рог" ; - husband_N = mkN "муж" "мужа" "мужу" "мужа" "мужем" "муже" "мужья" "мужей" "мужьям" "мужей" "мужьями" "мужьях" masculine animate ; - ice_N = mkN "лёд" "льда" "льду" "льда" "льдом" "льде" "льды" "льдов" "льдам" "льдов" "льдами" "льдах" masculine inanimate ; - knee_N = mkN "колено" "колена" "колену" "колена" "коленом" "колене" "колени" "колен" "коленам" "колен" "коленями" "коленях" neuter inanimate ; - lake_N = nChislo "озер" ; - leaf_N = nStul "лист" ; - leg_N = nNoga "ног" ; - liver_N = nBol "печен" ; - louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" feminine animate ; - - meat_N = nChislo "мяс" ; - moon_N = nMashina "лун" ; - - - mountain_N = nMashina "гор" ; - mouth_N = mkN "рот" "рта" "рту" "рот" "ртом" "рте" "рты" "ртов" "ртам" "рты" "ртами" "ртах" masculine inanimate; - name_N = mkN "имя" "имени" "имени" "имя" "именем" "имени" "имена" "имён" "именам" "имена" "именами" "именах" neuter inanimate; - neck_N = nTetya "ше" ; - night_N = nBol "ноч" ; - nose_N = nTelefon "нос" ; - person_N = nBol "личность" ; - rain_N = nNol "дожд" ; - - road_N = nNoga "дорог" ; - root_N = nUroven "кор" ; - rope_N = nNoga "веревк" ; - salt_N = nBol "сол" ; - sand_N = mkN "песок" "песка" "песку" "песок" "песком" "песке" "пески" "песков" "пескам" "песков" "песками" "песках" masculine inanimate ; - sea_N = nProizvedenie "мор" ; - seed_N = mkN "семя" "семени" "семении" "семя" "семенем" "семени" "семена" "семян" "семенам" "семена" "семенами" "семенах" neuter inanimate ; - skin_N = nEdinica "кож" ; - sky_N = mkN "небо" "неба" "небу" "небо" "небом" "небе" "небеса" "небес" "небесам" "небес" "небесами" "небесах" neuter inanimate ; - smoke_N = nTelefon "дым" ; - snake_N = nTetya "зме" ; - snow_N = nAdres "снег" ; - star_N = nMashina "звезд" ; - stick_N = nNoga "палк" ; - - - tail_N = nTelefon "хвост" ; - tongue_N = nBank "язык" ; - tooth_N = nTelefon "зуб" ; - tree_N = nChislo "дерев" ; - water_N = nMashina "вод" ; - wife_N = nMashina "жен" ; - wind_N = mkN "ветер" "ветра" "ветру" "ветер" "ветром" "ветра" "ветров" "ветра" "ветрам" "ветров" "ветрами" "ветрах" masculine inanimate ; - wing_N = mkN "крыло" "крыла" "крылу" "крыло" "крылом" "крыле" "крылья" "крыльев" "крыльям" "крылья" "крыльями" "крыльях" neuter inanimate ; - - worm_N = nNol "черв" ; - year_N = nAdres "год" ; - - --- Verbs - - bite_V2 = dirV2 (regV imperfective first "куса" "ю" "кусал" "кусай" "кусать"); - blow_V = regV imperfective first "ду" "ю" "дул" "дуй" "дуть" ; - breathe_V = regV imperfective second "дыш" "у" "дышал" "дыши" "дышать" ; - burn_V = regV imperfective second "гор" "ю" "горел" "гори" "гореть" ; - count_V2 = dirV2 (regV imperfective first "счита" "ю" "считал" "считай" "считать" ) ; - cut_V2 = dirV2 (regV imperfective first "реж" "у" "резал" "режь" "резать" ) ; - dig_V = regV imperfective first "копа" "ю" "копал" "копай" "копать" ; - - - fall_V = regV imperfective first "пада" "ю" "падал" "падай" "падать" ; - - fight_V2 = dirV2 (regV imperfective firstE "дер" "у" "драл" "дери" "драть" ) ; - float_V = regV imperfective firstE "плыв" "у" "плыл" "плыви" "плыть" ; - flow_V = regV imperfective firstE "тек" "у" "тёк" "теки" "течь" ; - fly_V = regV imperfective second "лета" "ю" "летал" "летай" "летать" ; - freeze_V = regV imperfective first "замерза" "ю" "замерзал" "замерзай" "замерзать" ; - give_V3 = tvDirDir (regV imperfective firstE "да" "ю" "давал" "давай" "давать" ) ; - - hit_V2 = dirV2 (regV imperfective first "ударя" "ю" "ударял" "ударяй" "ударять" ); - hold_V2 = dirV2 (regV imperfective second "держ" "у" "держал" "держи" "держать" ); - hunt_V2 = dirV2 (regV imperfective second "охоч" "у" "охотил" "охоть" "охотить" ) ; - kill_V2 = dirV2 (regV imperfective first "убива" "ю" "убивал" "убивай" "убивать" ) ; - - laugh_V = regV imperfective firstE "сме" "ю" "смеял" "смей" "смеять" ; - lie_V = regV imperfective firstE "лг" "у" "лгал" "лги" "лгать" ; - play_V = regV imperfective first "игра" "ю" "играл" "играй" "играть" ; - pull_V2 = dirV2 (regV imperfective first "тян" "у" "тянул" "тяни" "тянуть" ) ; - push_V2 = dirV2 (regV imperfective first "толка" "ю" "толкал" "толкай" "толкать" ); - rub_V2 = dirV2 (regV imperfective firstE "тр" "у" "тёр" "три" "тереть" ); - - scratch_V2 = dirV2 (regV imperfective first "чеш" "у" "чесал" "чеши" "чесать" ) ; - - sew_V = regV imperfective firstE "шь" "ю" "шил" "шей" "шить" ; - sing_V = regV imperfective firstE "по" "ю" "пел" "пой" "петь" ; - sit_V = mkV imperfective "сижу" "сидишь" "сидит" "сидим" "сидите" "сидят" "сидел" "сиди" "сидеть" ; - smell_V = regV imperfective first "пахн" "у" "пахнул" "пахни" "пахнуть" ; - spit_V = regV imperfective firstE "плю" "ю" "плевал" "плюй" "плевать" ; - split_V2 = dirV2 (regV imperfective first "разбива" "ю" "разбивал" "разбей" "разбивать" ) ; - squeeze_V2 = dirV2 (regV imperfective first "сжима" "ю" "сжимал" "сжимай" "сжимать" ) ; - stab_V2 = dirV2 (regV imperfective first "кол" "ю" "колол" "коли" "колоть" ) ; - stand_V = regV imperfective second "сто" "ю" "стоял" "стой" "стоять" ; - suck_V2 = dirV2 (regV imperfective firstE "сос" "у" "сосал" "соси" "сосать") ; - swell_V = regV imperfective first "опуха" "ю" "опухал" "опухай" "опухать" ; - swim_V = regV imperfective first "плава" "ю" "плавал" "плавай" "плавать" ; - think_V = regV imperfective first "дума" "ю" "думал" "думай" "думать" ; - throw_V2 = dirV2 (regV imperfective first "броса" "ю" "бросал" "бросай" "бросать" ) ; - tie_V2 = dirV2 (regV imperfective first "вяж" "у" "вязал" "вяжи" "вязать") ; - turn_V = regV imperfective first "поворачива" "ю" "поворачивал" "поворачивай" "поворачивать" ; - vomit_V = regV imperfective firstE "рв" "у" "рвал" "рви" "рвать" ; - wash_V2 = dirV2 (regV imperfective first "мо" "ю" "мыл" "мой" "мыть" ) ; - wipe_V2 = dirV2 (regV imperfective first "вытира" "ю" "вытирал" "вытирай" "вытирать" ); - - - correct_A = AStaruyj "правильн" "правильнее"; - dry_A = AMolodoj "сух" "суше"; - - dull_A = AStaruyj "скучн" "скучнее"; - far_Adv = mkAdv "далеко"; - full_A = AStaruyj "полн" "полнее"; - heavy_A = AStaruyj "тяжел" "тяжелее"; - left_Ord = (uy_j_EndDecl "лев" ) ** {lock_A = <>}; - near_A = AMalenkij "близк" "ближе"; - right_Ord = (uy_j_EndDecl "прав") ** {lock_A = <>} ; - rotten_A = AMolodoj "гнил" "гнилее"; - round_A = AStaruyj "кругл" "круглее"; - sharp_A = AStaruyj "остр" "острее"; - smooth_A = AMalenkij "гладк" "глаже"; - straight_A = AMolodoj "прям" "прямее"; - wet_A = AStaruyj "мокр" "мокрее"; - wide_A = AMalenkij "широк" "шире"; - -fear_V2 =dirV2 (regV imperfective first "бо" "ю" "боял" "бой" "боять" ); -paris_PN = mkPN "Париж" Masc Inanimate ; - - - - - - grammar_N = nNoga "грамматик"; - language_N = nBank "язык" ; - rule_N = nChislo "правил" ; +--# -path=.:../abstract:../common:../../prelude +-- +concrete LexiconRus of Lexicon = CatRus ** + open ParadigmsRus, Prelude, StructuralRus, MorphoRus in { +--, IrregRus +flags + optimize=values ; + coding=utf8 ; +lin + add_V3 = mkV3 (regV imperfective first "складыва" "ю" "складывал" "складывай" "складывать" ) "" "в" accusative accusative; + airplane_N = nTelefon "самолет" ; + already_Adv = mkAdv "уже" ; + animal_N = nZhivotnoe "животн" ; + answer_V2S = dirV2 (regV imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" ); + apartment_N = nMashina "квартир" ; +-- apple_N = nChislo "яблок" ; -- +++ MG_UR: wrong! +++ +-- art_N = nChislo "искусств" ; -- +++ MG_UR: wrong! +++ + art_N = nSlovo "искусств" ; -- +++ MG_UR: added +++ + ashes_N = nPepel "пеп" ; + ask_V2Q = dirV2 (regV imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ; + baby_N = nMalush "малыш"; + back_N = nMashina "спин" ; + bad_A = AKakoj_Nibud "плох" "" "хуже"; + bank_N = nBank "банк" ; + bark_N = mkN "лай" "лая" "лаю" "лай" "лаем" "лае" "лае" "лаи" "лаев" "лаям" "лаи" "лаями" "лаях" "лаях" masculine inanimate ; + beautiful_A = AStaruyj "красив" "красивее"; + become_VA = regV perfective second "станов" "лю" "стал" "стань" "стать" ; +-- beer_N = nChislo "пив" ; -- +++ MG_UR: wrong! +++ + beer_N = nSlovo "пив" ; -- +++ MG_UR: added +++ + beg_V2V = dirV2 (mkV imperfective "прошу" "просишь" "просит" "просим" "просите" "просят" "просил" "проси" "просить" ); + belly_N = nTelefon "живот" ; + big_A = AKakoj_Nibud "больш" "" "больше" ; + bike_N = nTelefon "велосипед" ; + bird_N = nEdinica "птиц" ; + bite_V2 = dirV2 (regV imperfective first "куса" "ю" "кусал" "кусай" "кусать"); + black_A = AStaruyj "чёрн" "чернее"; + blood_N = nBol "кров" ; + blow_V = regV imperfective first "ду" "ю" "дул" "дуй" "дуть" ; + blue_A = AMolodoj "голуб" "голубее"; + boat_N = nMashina "лодк" ; + bone_N = nBol "кост" ; + book_N = nNoga "книг" ; + boot_N = nBank "сапог" ; + boss_N = nStomatolog "начальник" ; + boy_N = nStomatolog "мальчик" ; + bread_N = nAdres "хлеб" ; + break_V2 = dirV2 (regV imperfective first "прерыва" "ю" "прерывал" "прерывай" "прерывать" ); + breast_N = nBol "грудь" ; + breathe_V = regV imperfective second "дыш" "у" "дышал" "дыши" "дышать" ; +--- bridge_N = nMost "мост" ; + broad_A = AMalenkij "широк" "шире"; + brother_N2 = mkN2 (nBrat "брат") ; + brown_A = AStaruyj "коричнев" "коричневее"; + burn_V = regV imperfective second "гор" "ю" "горел" "гори" "гореть" ; +-- butter_N = nChislo "масл"; -- +++ MG_UR: wrong! +++ + butter_N = nSlovo "масл"; -- +++ MG_UR: added +++ + buy_V2 = dirV2 (regV imperfective first "покупа" "ю" "покупал" "покупай" "покупать" ); + camera_N = nMashina "kamer" ; +--- candle_N = nSvecha "свеч" ; -- +++ MG_UR: added +++ + cap_N = nNoga "чашк" ; -- чаш-ек Pl-Gen + car_N = nMashina "машин" ; + carpet_N = mkN "ковёр" "ковра" "ковру" "ковёр" "ковром" "ковре" "ковре" "ковры" "ковров" "коврам" "ковры" "коврами" "коврах" "коврах" masculine inanimate ; + cat_N = nMashina "кошк" ; + ceiling_N = nPotolok "потол" ; + chair_N = nStul "стул" ; + cheese_N = nTelefon "сыр" ; +--- child2_N = nRebenok "реб" ; -- Achtung: Hier 'child' im Sinne von "junge Lebewesen" (dann keine Suppletivformen(?))! + child_N = mkN "ребёнок" "ребёнка" "ребёнку" "ребёнка" "ребёнком" "ребёнке" "ребёнке" "дети" "детей" "детям" "детей" "детьми" "детях" "детях" masculine animate ; + church_N = mkN "церковь" "церкви" "церкви" "церковь" "церковью" "церкви" "церкви" "церкви" "церквей" "церквям" "церкви" "церквями" "церквях" "церквях" masculine inanimate ; +--- citizen_N = nGrazhdanin "господ" ; -- +++ MG_UR: added +++ + city_N = nAdres "город" ; + clean_A = AStaruyj "чист" "чище"; + clever_A = AStaruyj "умн" "умнее"; + close_V2= dirV2 (regV imperfective first "закрыва" "ю" "закрывал" "закрывай" "закрывать" ); +-- cloud_N = nChislo "облак" ; -- +++ MG_UR: wrong! +++ + cloud_N = nChislo "облак" "облаков" ; -- +++ MG_UR: added +++ + coat_N = mkIndeclinableNoun "пальто" masculine inanimate ; + cold_A = AStaruyj "холодн" "холоднее"; + come_V = regV imperfective first "прихо" "жу" "приходил" "приходи" "приходить" ; + computer_N = nTelefon "компьютер" ; + correct_A = AStaruyj "правильн" "правильнее"; + count_V2 = dirV2 (regV imperfective first "счита" "ю" "считал" "считай" "считать" ) ; + country_N = nMashina "стран" ; + cousin_N = nTelefon "кузен" ; + cow_N = nMashina "коров" ; + cut_V2 = dirV2 (regV imperfective first "реж" "у" "резал" "режь" "резать" ) ; +--- daughter_N = nDoch "доч" ; -- +++ MG_UR: added +++ +-- day_N = mkN "день" "дня" "дню" "день" "днём" "дне" "дне" "дни" "дней" "дням" "дни" "днями" "днях" "днях" masculine inanimate ; + day_N = nDen "д" ; -- +++ MG_UR: class better than mkN +++ +--- desk_N = nStol "стол" ; +--- dictionary_N = nSlovar "словар" ; + die_V = regV imperfective first "умира" "ю" "умирал" "умирай" "умирать" ; + dig_V = regV imperfective first "копа" "ю" "копал" "копай" "копать" ; + dirty_A = AStaruyj "грязн" "грязнее" ; + distance_N3 = mkN3 (nProizvedenie "расстояни") from_Prep to_Prep ; + do_V2 = dirV2 (regV imperfective first "дела" "ю" "делал" "делай" "делать" ); + doctor_N = nAdres "доктор" ; + dog_N = nNoga "собак" ; + door_N = nBol "двер" ; + drink_V2 = dirV2 (regV imperfective firstE "пь" "ю" "пил" "пей" "пить" ); + dry_A = AMolodoj "сух" "суше"; + dull_A = AStaruyj "скучн" "скучнее"; + dust_N = nBol "пыл" ; +-- ear_N = nChislo "ухо" ; -- +++ MG_UR: wrong! +++ + earth_N = nTetya "земл" ; + easy_A2V = mkA2 (AMalenkij "лёгк" "легче") "для" genitive ; + eat_V2 = dirV2 (regV imperfective first "куша" "ю" "кушал" "кушай" "кушать" ); +-- egg_N = nChislo "яйц" ; -- +++ MG_UR: wrong! +++ + egg_N = nChislo "яйц" "яиц" ; -- +++ MG_UR: added +++ + empty_A = AMolodoj "пуст" "пустее"; + enemy_N = nStomatolog "враг" ; + eye_N = nAdres "глаз" ; + factory_N = nNoga "фабрик" ; + fall_V = regV imperfective first "пада" "ю" "падал" "падай" "падать" ; + far_Adv = mkAdv "далеко"; + fat_N = nBank "жир" ; + father_N2 = mkN2 (mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" "отцах" masculine animate); + fear_V2 =dirV2 (regV imperfective first "бо" "ю" "боял" "бой" "боять" ); + fear_VS = regV imperfective second "бо" "ю" "боял" "бой" "боять" ; + feather_N = mkN "перо" "пера" "перу" "пера" "пером" "пере" "пере" "перья" "перьев" "перьям" "перьев" "перьями" "перьях" "перьях" neuter inanimate ; +--- fellow_N = nTovarish "товарищ" ; -- +++ MG_UR: added +++ + fight_V2 = dirV2 (regV imperfective firstE "дер" "у" "драл" "дери" "драть" ) ; + find_V2 = dirV2 (mkV imperfective "нахожу" "находишь" "находит" "находим" "находите" "находят" "находил" "находи" "находить" ); + fingernail_N = mkN "ноготь" "ногтя" "ногтю" "ногтя" "ногтем" "ногте" "ногте" "ногти" "ногтей" "ногтям" "ногтей" "ногтями" "ногтях" "ногтях" masculine inanimate ; + fire_N = mkN "огонь" "огня" "огню" "огня" "огнём" "огне" "огне" "огни" "огней" "огням" "огней" "огнями" "огнях" "огнях" masculine inanimate ; + fish_N = nMashina "рыб" ; +--- flag_N = nVremja "зна" ; + float_V = regV imperfective firstE "плыв" "у" "плыл" "плыви" "плыть" ; + floor_N = nTelefon "пол" ; + flow_V = regV imperfective firstE "тек" "у" "тёк" "теки" "течь" ; + flower_N = mkN "отец" "отца" "отцу" "отца" "отцом" "отце" "отце" "отцы" "отцов" "отцам" "отцов" "отцами" "отцах" "отцах" masculine animate ; + fly_V = regV imperfective second "лета" "ю" "летал" "летай" "летать" ; + fog_N = nTelefon "туман" ; + foot_N = nTetya "ступн" ; + forest_N = nLes "лес" ; + forget_V2= dirV2 (regV imperfective first "забыва" "ю" "забывал" "забывай" "забывать" ); + freeze_V = regV imperfective first "замерза" "ю" "замерзал" "замерзай" "замерзать" ; + fridge_N = nBank "холодильник" ; +-- friend_N = mkN "друг" "друга" "другу" "друга" "другом" "друге" "друге" "друзья" "друзей" "друзьям" "друзей" "дузьями" "друзьях" "друзьях" masculine animate ; + friend_N = nDrug "дру" ; -- +++ MG_UR: class better than mkN +++ + fruit_N = nTelefon "фрукт" ; + full_A = AStaruyj "полн" "полнее"; + fun_AV = AStaruyj "весёл" "веселее"; + garden_N = nTelefon "сад" ; + girl_N = nNoga "девочк" ; + give_V3 = tvDirDir (regV imperfective firstE "да" "ю" "давал" "давай" "давать" ) ; + glove_N = nNoga "перчатк" ; + go_V= regV imperfective second "хо" "жу" "ходил" "ходи" "ходить" ; +-- gold_N = nChislo "золот" ; -- +++ MG_UR: wrong! +++ + gold_N = nSlovo "золот" ; -- +++ MG_UR: added +++ + good_A = AKhoroshij "хорош" "лучше" ; + grammar_N = nNoga "грамматик"; + grass_N = nMashina "трав" ; + green_A = AStaruyj "зелен" "зеленее" ; + guts_N = nBol "внутренност" ; + hair_N = nTelefon "волос" ; + hand_N = nNoga "рук" ; + harbour_N = nTelefon "залив" ; + hat_N = nMashina "шляп" ; + hate_V2= dirV2 (regV imperfective second "ненави" "жу" "ненавидел" "ненавидь" "ненавидеть" ); + have_V2= dirV2 (regV imperfective first "име" "ю" "имел" "имей" "иметь" ); + head_N = nMashina "голов" ; + hear_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); + heart_N = mkN "сердце" "сердца" "сердцу" "сердца" "сердцем" "сердце" "сердце" "сердца" "сердец" "сердцам" "сердец" "сердцами" "сердцах" "сердцах" neuter inanimate ; +--- heaven_N = nNebo "неб" ; -- +++ MG_UR: added +++ + heavy_A = AStaruyj "тяжел" "тяжелее"; + hill_N = nTelefon "холм" ; + hit_V2 = dirV2 (regV imperfective first "ударя" "ю" "ударял" "ударяй" "ударять" ); + hold_V2 = dirV2 (regV imperfective second "держ" "у" "держал" "держи" "держать" ); + hope_VS= regV imperfective first "наде" "ю" "надеял" "надей" "надеять" ; + horn_N = nAdres "рог" ; +-- horse_N = nBol "лошад" ; -- +++ MG_UR: wrong! +++ + horse_N = nLoshad "лошад" ; -- +++ MG_UR: added +++ + hot_A = AKhoroshij "горяч" "горячее" ; + house_N = nAdres "дом" ; + hunt_V2 = dirV2 (regV imperfective second "охоч" "у" "охотил" "охоть" "охотить" ) ; + husband_N = mkN "муж" "мужа" "мужу" "мужа" "мужем" "муже" "муже" "мужья" "мужей" "мужьям" "мужей" "мужьями" "мужьях" "мужьях" masculine animate ; + ice_N = mkN "лёд" "льда" "льду" "льда" "льдом" "льде" "льде" "льды" "льдов" "льдам" "льдов" "льдами" "льдах" "льдах" masculine inanimate ; + important_A = AStaruyj "важн" "важнее" ; +-- industry_N = nChislo "производств" ; -- +++ MG_UR: wrong! +++ + industry_N = nSlovo "производств" ; -- +++ MG_UR: added +++ +-- iron_N = nChislo "желез" ; -- +++ MG_UR: wrong! +++ + iron_N = nSlovo "желез" ; -- +++ MG_UR: added +++ + jump_V = regV imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ; + kill_V2 = dirV2 (regV imperfective first "убива" "ю" "убивал" "убивай" "убивать" ) ; + king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короле" "короли" "королей" "королям" "королей" "королями" "королях" "королях" masculine animate ; + knee_N = mkN "колено" "колена" "колену" "колена" "коленом" "колене" "колене" "колени" "колен" "коленам" "колен" "коленями" "коленях" "коленях" neuter inanimate ; + know_V2= dirV2 (regV imperfective first "зна" "ю" "знал" "знай" "знать" ); +-- lake_N = nChislo "озер" ; -- +++ MG_UR: wrong! +++ + lake_N = nChislo "озер" "озёр"; -- +++ MG_UR: added +++ + lamp_N = nMashina "ламп" ; + language_N = nBank "язык" ; + laugh_V = regV imperfective firstE "сме" "ю" "смеял" "смей" "смеять" ; + leaf_N = nStul "лист" ; + learn_V2= dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); + leather_N = nEdinica "кож" ; + leave_V2= dirV2 (regV imperfective second "ухож" "у" "уходил" "уходи" "уходить" ); + left_Ord = (uy_j_EndDecl "лев" ) ** {lock_A = <>}; + leg_N = nNoga "ног" ; + lie_V = regV imperfective firstE "лг" "у" "лгал" "лги" "лгать" ; + like_V2= dirV2 (regV imperfective second "нрав" "лю" "нравил" "нравь" "нравить" ); + listen_V2= dirV2 (regV imperfective first "слуша" "ю" "слушал" "слушай" "слушать" ); + live_V= regV imperfective firstE "жив" "у" "жил" "живи" "жить" ; + liver_N = nBol "печен" ; + long_A = AStaruyj "длинн" "длиннее" ; + lose_V2 = dirV2 (regV imperfective first "теря" "ю" "терял" "теряй" "терять" ); + louse_N = mkN "вошь" "вши" "вши" "вошь" "вошью" "вше" "вше" "вши" "вшей" "вшам" "вшей" "вшами" "вшах" "вшах" feminine animate ; + love_N = nBol "любов" ; + love_V2= dirV2 (regV imperfective second "люб" "лю" "любил" "люби" "любить" ); + man_N = nStomatolog "человек" ; + married_A2 = mkA2 (adjInvar "замужем") "за" instructive ; +-- meat_N = nChislo "мяс" ; -- +++ MG_UR: wrong! +++ +-- milk_N = nChislo "молок" ; -- +++ MG_UR: wrong! +++ +--- mister_N = nGospodin "господ" ; -- +++ MG_UR: added +++ +--- mom_N = nMat "мат" ; -- +++ MG_UR: added +++ +--- month_N = nMesjac "месяц" ; -- +++ MG_UR: added +++ + moon_N = nMashina "лун" ; + mother_N2 = mkN2 ( nMashina "мам") ; + mountain_N = nMashina "гор" ; + mouth_N = mkN "рот" "рта" "рту" "рот" "ртом" "рте" "рте" "рты" "ртов" "ртам" "рты" "ртами" "ртах" "ртах" masculine inanimate ; +--- museum_N = nMusej "музе" ; -- +++ MG_UR: added +++ + music_N = nNoga "музык" ; +-- name_N = mkN "имя" "имени" "имени" "имя" "именем" "имени" "имени" "имена" "имён" "именам" "имена" "именами" "именах" "именах" neuter inanimate ; + name_N = nVremja "и" ; -- +++ MG_UR: class better than mkN +++ + narrow_A = AStaruyj "узк" "уже" ; + near_A = AMalenkij "близк" "ближе"; + neck_N = nTetya "ше" ; + new_A = AStaruyj "нов" "новее" ; + newspaper_N = nMashina "газет" ; +-- night_N = nBol "ноч" ; -- +++ MG_UR: wrong! +++ + night_N = nNoch "ноч" ; -- +++ MG_UR: added +++ + nose_N = nTelefon "нос" ; + now_Adv = mkAdv "сейчас" ; + number_N = nChislo "числ" "чисел" ; +--- ocean_N = nMorje "мор" ; -- +++ MG_UR: added +++ + oil_N = nBol "нефть" ; + old_A = AStaruyj "стар" "старше" ; + open_V2= dirV2 (regV imperfective first "открыва" "ю" "открывал" "открывай" "открывать" ); +--- organise_V2 = dirV2 (regV imperfective foreign "организу" "ю" "организовал" "организуй" "организовать" ); -- +++ MG_UR: added +++ + paint_V2A = dirV2 (regV imperfective first "рису" "ю" "рисовал" "рисуй" "рисовать" ) ; +--- palace_N = nDvorec "двор" ; -- +++ MG_UR: added +++ + paper_N = nNoga "бумаг" ; + paris_PN = mkPN "Париж" Masc Inanimate ; + peace_N = nTelefon "мир" ; + pen_N = nNoga "ручк" ; + person_N = nBol "личность" ; + planet_N = nMashina "планет" ; + plastic_N = nMashina "пластмасс" ; + play_V = regV imperfective first "игра" "ю" "играл" "играй" "играть" ; + play_V2 = mkV2 (regV imperfective first "игра" "ю" "играл" "играй" "играть" ) "c" instructive; + policeman_N = nTelefon "милиционер" ; + priest_N = nStomatolog "священник" ; + probable_AS = AStaruyj "возможн" "возможнее"; + pull_V2 = dirV2 (regV imperfective first "тян" "у" "тянул" "тяни" "тянуть" ) ; + push_V2 = dirV2 (regV imperfective first "толка" "ю" "толкал" "толкай" "толкать" ); + put_V2 = dirV2 (regV imperfective firstE "клад" "у" "клал" "клади" "класть" ); + queen_N = nMashina "королев" ; + radio_N = mkIndeclinableNoun "радио" neuter inanimate; + rain_N = nNol "дожд" ; + rain_V0 = idetDozhd verbIdti; -- No such verb in Russian! + read_V2 = dirV2 (regV imperfective first "чита" "ю" "читал" "читай" "читать" ); + red_A = AStaruyj "красн" "краснее" ; + religion_N = nMalyariya "религи" ; + restaurant_N = nTelefon "ресторан" ; + right_Ord = (uy_j_EndDecl "прав") ** {lock_A = <>} ; + river_N = nNoga "рек" ; + road_N = nNoga "дорог" ; + rock_N = nUroven "кам" ; + roof_N = nEdinica "крыш" ; + root_N = nUroven "кор" ; + rope_N = nNoga "веревк" ; + rotten_A = AMolodoj "гнил" "гнилее"; + round_A = AStaruyj "кругл" "круглее"; + rub_V2 = dirV2 (regV imperfective firstE "тр" "у" "тёр" "три" "тереть" ); + rubber_N = nMashina "резин" ; +-- rule_N = nChislo "правил" ; -- +++ MG_UR: wrong! +++ + rule_N = nSlovo "правил" ; -- +++ MG_UR: added +++ + run_V = regV imperfective first "бега" "ю" "бегал" "бегай" "бегать" ; + salt_N = nBol "сол" ; + sand_N = mkN "песок" "песка" "песку" "песок" "песком" "песке" "песке" "пески" "песков" "пескам" "песков" "песками" "песках" "песках" masculine inanimate ; + say_VS = regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ; + school_N = nMashina "школ" ; + science_N = nNoga "наук" ; + scratch_V2 = dirV2 (regV imperfective first "чеш" "у" "чесал" "чеши" "чесать" ) ; + sea_N = nProizvedenie "мор" ; +-- see_V2 = dirV2 (regV imperfective second "виж" "у" "видел" "видь" "видеть" ); + see_V2 = dirV2 (regV imperfective second "ви" "жу" "видел" "видь" "видеть" ); -- changed !! +-- seed_N = mkN "семя" "семени" "семении" "семя" "семенем" "семени" "семени" "семена" "семян" "семенам" "семена" "семенами" "семенах" "семенах" neuter inanimate ; + seed_N = nVremja "се" ; -- +++ MG_UR: class better than mkN +++ + seek_V2 = dirV2 (regV imperfective first "ищ" "у" "искал" "ищи" "искать" ); + sell_V3 = tvDirDir (regV imperfective firstE "прода" "ю" "продавал" "продавай" "продавать" ); + send_V3 = tvDirDir (regV imperfective first "посыла" "ю" "посылал" "посылай" "посылать" ); + sew_V = regV imperfective firstE "шь" "ю" "шил" "шей" "шить" ; + sharp_A = AStaruyj "остр" "острее"; + sheep_N = nMashina "овц" ; + ship_N = nNol "корабл" ; + shirt_N = nNoga "рубашк" ; + shoe_N = mkN "туфля" "туфли" "туфле" "туфлю" "туфлей" "туфле" "туфле" "туфли" "туфель" "туфлям" "туфли" "туфлями" "туфлях" "туфлях" masculine inanimate ; + shop_N = nTelefon "магазин" ; + short_A = AMalenkij "коротк" "короче" ; +-- silver_N = nChislo "серебр" ; -- +++ MG_UR: wrong! +++ + silver_N = nSlovo "серебр" ; -- +++ MG_UR: added +++ + sing_V = regV imperfective firstE "по" "ю" "пел" "пой" "петь" ; + sister_N = nMashina "сестр" ; + sit_V = mkV imperfective "сижу" "сидишь" "сидит" "сидим" "сидите" "сидят" "сидел" "сиди" "сидеть" ; + skin_N = nEdinica "кож" ; + sky_N = mkN "небо" "неба" "небу" "небо" "небом" "небе" "небе" "небеса" "небес" "небесам" "небес" "небесами" "небесах" "небесах" neuter inanimate ; + sleep_V = regV imperfective second "сп" "лю" "спал" "спи" "спать" ; + small_A = AMalenkij "маленьк" "меньше" ; + smell_V = regV imperfective first "пахн" "у" "пахнул" "пахни" "пахнуть" ; + smoke_N = nTelefon "дым" ; + smooth_A = AMalenkij "гладк" "глаже"; + snake_N = nTetya "зме" ; + snake_N = nTetya"зме" ; + snow_N = nAdres "снег" ; + sock_N = nPotolok "нос" ; +--- son_N = nSyn "сын" ; -- +++ MG_UR: added +++ + song_N = nTetya "песн" ; + speak_V2 = dirV2 (regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ); + spit_V = regV imperfective firstE "плю" "ю" "плевал" "плюй" "плевать" ; + split_V2 = dirV2 (regV imperfective first "разбива" "ю" "разбивал" "разбей" "разбивать" ) ; + squeeze_V2 = dirV2 (regV imperfective first "сжима" "ю" "сжимал" "сжимай" "сжимать" ) ; + stab_V2 = dirV2 (regV imperfective first "кол" "ю" "колол" "коли" "колоть" ) ; + stand_V = regV imperfective second "сто" "ю" "стоял" "стой" "стоять" ; + star_N = nMashina "звезд" ; + steel_N = nBol "стал" ; + stick_N = nNoga "палк" ; + stone_N = nNol "камен" ; + stop_V = regV imperfective first "останавлива" "ю" "останавливал" "останавливай" "останавливать"; + stove_N = nBol "печ" ; + straight_A = AMolodoj "прям" "прямее"; + student_N = nTelefon "студент" ; + stupid_A = AMolodoj "тупой" "тупее" ; + suck_V2 = dirV2 (regV imperfective firstE "сос" "у" "сосал" "соси" "сосать") ; + sun_N = mkN "солнце" "солнца" "солнцу" "солнце" "солнцем" "солнце" "солнце" "солнца" "солнц" "солнцам" "солнца" "солнцами" "солнцах" "солнцах" neuter inanimate ; + swell_V = regV imperfective first "опуха" "ю" "опухал" "опухай" "опухать" ; + swim_V = regV imperfective first "плава" "ю" "плавал" "плавай" "плавать" ; + switch8off_V2 = dirV2 (regV imperfective first "выключа" "ю" "выключал" "выключай" "выключать") ; + switch8on_V2 = dirV2 (regV imperfective first "включа" "ю" "включал" "включай" "включать") ; + table_N = nTelefon "стол" ; + tail_N = nTelefon "хвост" ; + talk_V3 = mkV3 (regV imperfective second "говор" "ю" "говорил" "говори" "говорить" ) "с" "о" instructive prepositional; + teach_V2 = dirV2 (regV imperfective second "уч" "у" "учил" "учи" "учить" ); +-- teacher_N = nNol "учител" ; -- +++ MG_UR: wrong! +++ + teacher_N = nUchitel "учител" ; -- +++ MG_UR: added +++ + television_N = nProizvedenie "телевидени" ; + thick_A = AStaruyj "толст" "толще" ; + thin_A = AMalenkij "тонк" "тоньше" ; + think_V = regV imperfective first "дума" "ю" "думал" "думай" "думать" ; + throw_V2 = dirV2 (regV imperfective first "броса" "ю" "бросал" "бросай" "бросать" ) ; + tie_V2 = dirV2 (regV imperfective first "вяж" "у" "вязал" "вяжи" "вязать") ; +--- time_N = nVremja "вре" ; -- +++ MG_UR: added +++ + tongue_N = nBank "язык" ; + tooth_N = nTelefon "зуб" ; + train_N = nAdres "поезд" ; + travel_V = regV imperfective first "путешеству" "ю" "путешествовал" "путешествуй" "путешествовать" ; + tree_N = nDerevo "дерев" ; -- +++ MG_UR: added +++ + turn_V = regV imperfective first "поворачива" "ю" "поворачивал" "поворачивай" "поворачивать" ; + ugly_A = AStaruyj "некрасив" "некрасивее" ; + understand_V2 = dirV2 (regV imperfective first "понима" "ю" "понимал" "понимай" "понимать" ); + university_N = nTelefon "университет" ; + village_N = nMalyariya "деревн" ; +--- vocationalschool_N = nUchilishe "училищ" ; -- +++ MG_UR: added +++ + vomit_V = regV imperfective firstE "рв" "у" "рвал" "рви" "рвать" ; + wait_V2 = dirV2 (regV imperfective firstE "жд" "у" "ждал" "жди" "ждать" ); + walk_V = regV imperfective first "гуля" "ю" "гулял" "гуляй" "гулять" ; +--- want_V2 = dirV2 (regV imperfective mixed "хо" "чу" "хотел" "хоти" "хотеть" ); + war_N = nMashina "войн" ; + warm_A = AStaruyj "тёпл" "теплее" ; + wash_V2 = dirV2 (regV imperfective first "мо" "ю" "мыл" "мой" "мыть" ) ; + watch_V2 = dirV2 (regV imperfective second "смотр" "ю" "смотрел" "смотри" "смотреть" ); + water_N = nMashina "вод" ; +--- way_N = nPut "пут" ; -- +++ MG_UR: added +++ + wet_A = AStaruyj "мокр" "мокрее"; + white_A = AStaruyj "бел" "белее" ; + wide_A = AMalenkij "широк" "шире"; + wife_N = nMashina "жен" ; + win_V2 = dirV2 (regV imperfective first "выигрыва" "ю" "выигрывал" "выигрывай" "выигрывать" ); + wind_N = mkN "ветер" "ветра" "ветру" "ветер" "ветром" "ветра" "ветра" "ветров" "ветра" "ветрам" "ветров" "ветрами" "ветрах" "ветрах" masculine inanimate ; +-- window_N = nChislo "окн" ; -- +++ MG_UR: wrong! +++ + window_N = nChislo "окн" "окон" ; -- +++ MG_UR: added +++ +-- wine_N = nChislo "вин" ; -- +++ MG_UR: wrong! +++ + wine_N = nSlovo "вин" ; -- +++ MG_UR: added +++ +-- wing_N = mkN "крыло" "крыла" "крылу" "крыло" "крылом" "крыле" "крыле" "крылья" "крыльев" "крыльям" "крылья" "крыльями" "крыльях" "крыльях" neuter inanimate ; + wing_N = nDerevo "крыл" ; -- +++ MG_UR: class better than mkN +++ + wipe_V2 = dirV2 (regV imperfective first "вытира" "ю" "вытирал" "вытирай" "вытирать" ); + woman_N = nZhenchina "женщин" ; + wonder_VQ = regV imperfective first "интересу" "ю" "интересовал" "интересуй" "интересовать"; +-- wood_N = nChislo "дерев" ; -- +++ MG_UR: wrong! +++ + wood_N = nDerevo "дерев" ; -- +++ MG_UR: added +++ +--- word_N = nSlovo "слов" ; -- +++ MG_UR: added +++ + worm_N = nNol "черв" ; + write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" ); + year_N = nAdres "год" ; + yellow_A = AStaruyj "жёлт" "желтее" ; + young_A = AMolodoj "молод" "моложе"; } - diff --git a/lib/resource-1.0/russian/MorphoRus.gf b/lib/resource-1.0/russian/MorphoRus.gf index cc858fed7..e642cf434 100644 --- a/lib/resource-1.0/russian/MorphoRus.gf +++ b/lib/resource-1.0/russian/MorphoRus.gf @@ -1,1848 +1,2615 @@ ---# -path=.:../../prelude:../common - ---1 A Simple Russian Resource Morphology - --- Aarne Ranta, Janna Khegai 2006 - --- This resource morphology contains definitions of the lexical entries --- needed in the resource syntax. --- It moreover contains copies of the most usual inflectional patterns. - --- We use the parameter types and word classes defined for morphology. - --- Note: mkPassive operation is at the moment incorrect. Low-level ending-analysis --- is needed to fix the operation. - -resource MorphoRus = ResRus ** open Prelude, (Predef=Predef) in { - -flags coding=utf8 ; - -----2 Personal (together with possesive) pronouns. -oper pronYa: Pronoun = - { s = table { - PF Nom _ NonPoss => "я" ; - PF Gen _ NonPoss => "меня" ; - PF Dat _ NonPoss => "мне" ; - PF Acc _ NonPoss => "меня" ; - PF Inst _ NonPoss => "мной" ; - PF Prepos _ NonPoss => "мне" ; - PF Nom _ (Poss (ASg Masc)) => "мой" ; - PF Gen _ (Poss (ASg Masc)) => "моего" ; - PF Dat _ (Poss (ASg Masc)) => "моему" ; - PF Acc _ (Poss (ASg Masc)) => "моего" ; - PF Inst _ (Poss (ASg Masc)) => "моим" ; - PF Prepos _ (Poss (ASg Masc)) => "моём" ; - PF Nom _ (Poss (ASg Fem)) => "моя" ; - PF Gen _ (Poss (ASg Fem)) => "моей" ; - PF Dat _ (Poss (ASg Fem)) => "моей" ; - PF Acc _ (Poss (ASg Fem)) => "мою" ; - PF Inst _ (Poss (ASg Fem)) => "моею" ; - PF Prepos _ (Poss (ASg Fem)) => "моей" ; - PF Nom _ (Poss (ASg Neut)) => "моё" ; - PF Gen _ (Poss (ASg Neut)) => "моего" ; - PF Dat _ (Poss (ASg Neut)) => "моему" ; - PF Acc _ (Poss (ASg Neut)) => "моё" ; - PF Inst _ (Poss (ASg Neut)) => "моим" ; - PF Prepos _ (Poss (ASg Neut)) => "моём" ; - PF Nom _ (Poss APl) => "мои" ; - PF Gen _ (Poss APl)=> "моих" ; - PF Dat _ (Poss APl) => "моим" ; - PF Acc _ (Poss APl) => "моих" ; - PF Inst _ (Poss APl) => "моими" ; - PF Prepos _ (Poss APl) => "моих" - } ; - g = PNoGen ; - n = Sg ; - p = P1 ; - pron = True - } ; - -oper pronTu: Pronoun = - { s = table { - PF Nom _ NonPoss => "ты" ; - PF Gen _ NonPoss => "тебя" ; - PF Dat _ NonPoss => "тебе" ; - PF Acc _ NonPoss => "тебя" ; - PF Inst _ NonPoss => "тобой" ; - PF Prepos _ NonPoss => ["о тебе"] ; - PF Nom _ (Poss (ASg Masc)) => "твой" ; - PF Gen _ (Poss (ASg Masc)) => "твоего" ; - PF Dat _ (Poss (ASg Masc)) => "твоему" ; - PF Acc _ (Poss (ASg Masc)) => "твоего" ; - PF Inst _ (Poss (ASg Masc)) => "твоим" ; - PF Prepos _ (Poss (ASg Masc)) => "твоём" ; - PF Nom _ (Poss (ASg Fem)) => "твоя" ; - PF Gen _ (Poss (ASg Fem)) => "твоей" ; - PF Dat _ (Poss (ASg Fem)) => "твоей" ; - PF Acc _ (Poss (ASg Fem)) => "твою" ; - PF Inst _ (Poss (ASg Fem)) => "твоею" ; - PF Prepos _ (Poss (ASg Fem)) => "твоей" ; - PF Nom _ (Poss (ASg Neut)) => "твоё" ; - PF Gen _ (Poss (ASg Neut)) => "твоего" ; - PF Dat _ (Poss (ASg Neut)) => "твоему" ; - PF Acc _ (Poss (ASg Neut)) => "твоё" ; - PF Inst _ (Poss (ASg Neut)) => "твоим" ; - PF Prepos _ (Poss (ASg Neut)) => "твоём" ; - PF Nom _ (Poss APl) => "твои" ; - PF Gen _ (Poss APl)=> "твоих" ; - PF Dat _ (Poss APl) => "твоим" ; - PF Acc _ (Poss APl) => "твоих" ; - PF Inst _ (Poss APl) => "твоими" ; - PF Prepos _ (Poss APl) => "твоих" - } ; - g = PNoGen ; - n = Sg ; - p = P2 ; - pron = True - } ; - -oper pronOn: Pronoun = - { s = table { - PF Nom _ NonPoss => "он" ; - PF Gen No NonPoss => "его" ; - PF Gen Yes NonPoss => "него" ; - PF Dat No NonPoss => "ему" ; - PF Dat Yes NonPoss => "нему" ; - PF Acc No NonPoss => "его" ; - PF Acc Yes NonPoss => "него" ; - PF Inst No NonPoss => "им" ; - PF Inst Yes NonPoss => "ним" ; - PF Prepos _ NonPoss => "нём" ; - PF _ _ (Poss _) => "его" - } ; - g = PGen Masc ; - n = Sg ; - p = P3 ; - pron = True - } ; - -oper pronOna: Pronoun = - { s = table { - PF Nom _ NonPoss => "она" ; - PF Gen No NonPoss => "её" ; - PF Gen Yes NonPoss => "неё" ; - PF Dat No NonPoss => "ей" ; - PF Dat Yes NonPoss => "ней" ; - PF Acc No NonPoss => "её" ; - PF Acc Yes NonPoss => "неё" ; - PF Inst No NonPoss => "ей" ; - PF Inst Yes NonPoss => "ней" ; - PF Prepos _ NonPoss => ["о ней"] ; - PF _ _ (Poss _ ) => "её" - } ; - g = PGen Fem ; - n = Sg ; - p = P3 ; - pron = True - } ; -oper pronOno: Pronoun = - { s = table { - PF Nom _ NonPoss => "оно" ; - PF Gen No NonPoss => "его" ; - PF Gen Yes NonPoss => "него" ; - PF Dat No NonPoss => "ему" ; - PF Dat Yes NonPoss => "нему" ; - PF Acc No NonPoss => "его" ; - PF Acc Yes NonPoss => "него" ; - PF Inst No NonPoss => "им" ; - PF Inst Yes NonPoss => "ним" ; - PF Prepos _ NonPoss => "нём" ; - PF _ _ (Poss _ ) => "его" - } ; - g = PGen Neut ; - n = Sg ; - p = P3 ; - - pron = True - } ; - -oper pronMu: Pronoun = - { s = table { - PF Nom _ NonPoss => "мы" ; - PF Gen _ NonPoss => "нас" ; - PF Dat _ NonPoss => "нам" ; - PF Acc _ NonPoss => "нас" ; - PF Inst _ NonPoss => "нами" ; - PF Prepos _ NonPoss => ["о нас"] ; - PF Nom _ ((Poss (ASg Masc))) => "наш" ; - PF Gen _ (Poss (ASg Masc)) => "нашего" ; - PF Dat _ ((Poss (ASg Masc))) => "нашему" ; - PF Acc _ ((Poss (ASg Masc))) => "нашего" ; - PF Inst _ (Poss (ASg Masc)) => "нашим" ; - PF Prepos _ (Poss (ASg Masc)) => "нашем" ; - PF Nom _ (Poss (ASg Fem)) => "наша" ; - PF Gen _ (Poss (ASg Fem)) => "нашей" ; - PF Dat _ (Poss (ASg Fem)) => "нашей" ; - PF Acc _ (Poss (ASg Fem)) => "нашу" ; - PF Inst _ (Poss (ASg Fem)) => "нашею" ; - PF Prepos _ (Poss (ASg Fem)) => "нашей" ; - PF Nom _ (Poss (ASg Neut)) => "наше" ; - PF Gen _ (Poss (ASg Neut)) => "нашего" ; - PF Dat _ (Poss (ASg Neut)) => "нашему" ; - PF Acc _ (Poss (ASg Neut)) => "наше" ; - PF Inst _ (Poss (ASg Neut)) => "нашим" ; - PF Prepos _ (Poss (ASg Neut)) => "нашем" ; - PF Nom _ (Poss APl) => "наши" ; - PF Gen _ (Poss APl)=> "наших" ; - PF Dat _ (Poss APl) => "нашим" ; - PF Acc _ (Poss APl) => "наших" ; - PF Inst _ (Poss APl) => "нашими" ; - PF Prepos _ (Poss APl) => "наших" - }; - g = PNoGen ; - n = Pl ; - p = P1 ; - pron = True - } ; - -oper pronVu: Pronoun = - { s = table { - PF Nom _ NonPoss => "вы" ; - PF Gen _ NonPoss => "вас" ; - PF Dat _ NonPoss => "вам" ; - PF Acc _ NonPoss => "вас" ; - PF Inst _ NonPoss => "вами" ; - PF Prepos _ NonPoss => "вас" ; - PF Nom _ (Poss (ASg Masc)) => "ваш" ; - PF Gen _ (Poss (ASg Masc)) => "вашего" ; - PF Dat _ (Poss (ASg Masc)) => "вашему" ; - PF Acc _ (Poss (ASg Masc)) => "вашего" ; - PF Inst _ (Poss (ASg Masc)) => "вашим" ; - PF Prepos _ (Poss (ASg Masc)) => "вашем" ; - PF Nom _ (Poss (ASg Fem)) => "ваша" ; - PF Gen _ (Poss (ASg Fem)) => "вашей" ; - PF Dat _ (Poss (ASg Fem)) => "вашей" ; - PF Acc _ (Poss (ASg Fem)) => "вашу" ; - PF Inst _ (Poss (ASg Fem)) => "вашею" ; - PF Prepos _ (Poss (ASg Fem)) => "вашей" ; - PF Nom _ (Poss (ASg Neut)) => "ваше" ; - PF Gen _ (Poss (ASg Neut)) => "вашего" ; - PF Dat _ (Poss (ASg Neut)) => "вашему" ; - PF Acc _ (Poss (ASg Neut)) => "ваше" ; - PF Inst _ (Poss (ASg Neut)) => "вашим" ; - PF Prepos _ (Poss (ASg Neut)) => "вашем" ; - PF Nom _ (Poss APl) => "ваши" ; - PF Gen _ (Poss APl)=> "ваших" ; - PF Dat _ (Poss APl) => "вашим" ; - PF Acc _ (Poss APl) => "ваших" ; - PF Inst _ (Poss APl) => "вашими" ; - PF Prepos _ (Poss APl) => "ваших" - }; - g = PNoGen ; - n = Pl ; - p = P2 ; - pron = True - } ; - -oper pronOni: Pronoun = - { s = table { - PF Nom _ NonPoss => "они" ; - PF Gen No NonPoss => "их" ; - PF Gen Yes NonPoss => "них" ; - PF Dat No NonPoss => "им" ; - PF Dat Yes NonPoss => "ним" ; - PF Acc No NonPoss => "их" ; - PF Acc Yes NonPoss => "них" ; - PF Inst No NonPoss => "ими" ; - PF Inst Yes NonPoss => "ними" ; - PF Prepos _ NonPoss => ["о них"] ; - PF _ _ (Poss _) => "их" - } ; - g = PNoGen ; - n = Pl ; - p = P3 ; - pron = True - } ; - -oper pronKto: Pronoun = - { s = table { - PF Nom _ _ => "кто" ; - PF Gen _ _ => "кого" ; - PF Dat _ _ => "кому" ; - PF Acc _ _ => "кого" ; - PF Inst _ _ => "кем" ; - PF Prepos _ _ => "ком" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; -oper pronKtoTo: Pronoun = - { s = table { - PF Nom _ _ => "кто-то" ; - PF Gen _ _ => "кого-то" ; - PF Dat _ _ => "кому-то" ; - PF Acc _ _ => "кого-то" ; - PF Inst _ _ => "кем-то" ; - PF Prepos _ _ => "ком-то" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; -oper pronChtoTo: Pronoun = - { s = table { - PF Nom _ _ => "что-то" ; - PF Gen _ _ => "чего-то" ; - PF Dat _ _ => "чему-то" ; - PF Acc _ _ => "что-то" ; - PF Inst _ _ => "чем-то" ; - PF Prepos _ _ => "чём-то" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; - oper pronChto: Pronoun = - { s = table { - PF Nom _ _ => "что" ; - PF Gen _ _ => "чего" ; - PF Dat _ _ => "чему" ; - PF Acc _ _ => "что" ; - PF Inst _ _ => "чем" ; - PF Prepos _ _ => "чём" - } ; - g = PGen Masc; - n = Sg ; - p = P3 ; - pron = False - } ; -oper pronEti: Pronoun = - { s = table { - PF Nom _ _ => "эти" ; - PF Gen _ _ => "этих" ; - PF Dat _ _ => "этим" ; - PF Acc _ _ => "этих" ; - PF Inst _ _ => "этими" ; - PF Prepos _ _ => "этих" - } ; - n = Pl; - p = P3; - g= PGen Fem ; - anim = Animate ; - pron = False - } ; - -oper pronTe: Pronoun = - { s = table { - PF Nom _ _ => "те" ; - PF Gen _ _ => "тех" ; - PF Dat _ _ => "тем" ; - PF Acc _ _ => "тех" ; - PF Inst _ _ => "теми" ; - PF Prepos _ _ => "тех" - } ; - n = Pl; - p = P3; - g=PGen Fem ; - anim = Animate ; - pron = False - } ; - - ---oper pronNikto: Pronoun = --- { s = table { --- PF Nom _ _ => "никто" ; --- PF Gen _ _ => "никого" ; --- PF Dat _ _ => "никому" ; --- PF Acc _ _ => "никого" ; --- PF Inst _ _ => "никем" ; --- PF Prepos _ _ => ["ни о ком"] -- only together with a preposition --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- ---oper pronNichto: Pronoun = --- { s = table { --- PF Nom _ _ => "ничто" ; --- PF Gen _ _ => "ничего" ; --- PF Dat _ _ => "ничему" ; --- PF Acc _ _ => "ничего" ; --- PF Inst _ _ => "ничем" ; --- PF Prepos _ _ => ["ни о чём"] -- only together with preposition --- } ; --- g = PGen Masc; --- n = Sg ; --- p = P3 ; --- pron = False --- } ; --- -oper pronVseInanimate: Pronoun = - { s = table { - PF Nom _ _ => "всё" ; - PF Gen _ _ => "всего" ; - PF Dat _ _ => "всему" ; - PF Acc _ _ => "всё" ; - PF Inst _ _ => "всем" ; - PF Prepos _ _ => "всём" - } ; - g = PGen Neut; - n = Sg ; - p = P3 ; - pron = False - } ; - -----2 Nouns --- ----- Help type SubstFormDecl is introduced to reduce repetition in ----- the declination definitions. It allows us to define a declination type, ----- namely, the String component "s" of the CommNoun type ----- without any reference to the Gender parameter "g". --- -oper - CommNoun = {s : SubstForm => Str ; g : Gender ; anim : Animacy } ; - SubstFormDecl = SS1 SubstForm ; --- ---oper gorlo : CommNoun = l_oEndInAnimateDecl "горл" ; ---oper koleno : CommNoun = oEndInAnimateDecl "колен" ; ---oper plecho : CommNoun = oEndInAnimateDecl "плеч" ; ---oper ukho : CommNoun = oEnd_KH_InAnimateDecl "у" ; ---oper zhivot : CommNoun = nullEndInAnimateDecl1 "живот" ; ---oper grud : CommNoun = softSignEndDeclFem "груд" ; ---oper ruka : CommNoun = aEndG_K_KH_Decl "рук" ; ---oper spina : CommNoun = aEndInAnimateDecl "спин" ; ---oper stopa : CommNoun = aEndInAnimateDecl "стоп" ; ---oper sreda : CommNoun = aEndInAnimateDecl "сред" ; ---oper pyatnica : CommNoun = aEndInAnimateDecl "пятниц" ; ---oper subbota : CommNoun = aEndInAnimateDecl "суббот" ; ---oper astma : CommNoun = aEndInAnimateDecl "астм" ; ---oper angina : CommNoun = aEndInAnimateDecl "ангин" ; ---oper revmatizm : CommNoun = nullEndInAnimateDecl1 "ревматизм" ; ---oper zapor : CommNoun = nullEndInAnimateDecl1 "запор" ; ---oper ponos : CommNoun = nullEndInAnimateDecl1 "понос" ; ---oper artrit : CommNoun = nullEndInAnimateDecl1 "артрит" ; ---oper diabet : CommNoun = nullEndInAnimateDecl1 "диабет" ; ---oper tsistit : CommNoun = nullEndInAnimateDecl1 "цистит" ; ---oper izzhoga : CommNoun = aEndG_K_KH_Decl "изжог" ; ---oper allergiya : CommNoun = i_yaEndDecl "аллерги" ; --- ---oper viagra : CommNoun = aEndInAnimateDecl "виагр" ; ---oper antidepressant : CommNoun = nullEndInAnimateDecl1 "антидепрессант" ; ---oper insulin : CommNoun = nullEndInAnimateDecl1 "инсулин" ; ---oper vitamin : CommNoun = nullEndInAnimateDecl1 "витамин" ; ---oper antibiotik : CommNoun = nullEndInAnimateDecl3 "антибиотик" ; ---oper ponedelnik : CommNoun = nullEndInAnimateDecl3 "понедельник" ; ---oper vtornik : CommNoun = nullEndInAnimateDecl3 "вторник" ; ---oper chetverg : CommNoun = nullEndInAnimateDecl3 "четверг" ; --- --- ---oper kaplya : CommNoun = (l_yaEndInAnimateDecl "кап") ** {g = Fem; anim = Inanimate} ; ---oper snotvornoe : CommNoun = oeEndInAnimateDecl "снотворн" ; ---oper uspokoitelnoe : CommNoun = oeEndInAnimateDecl "успокоительн" ; ---oper slabitelnoe : CommNoun = oeEndInAnimateDecl "слабительн" ; --- ---oper urolog : CommNoun = nullEndAnimateDecl "уролог" ; ---oper ginekolog : CommNoun = nullEndAnimateDecl "гинеколог" ; ---oper nevropatolog : CommNoun = nullEndAnimateDecl "невропатолог" ; ---oper dermatolog : CommNoun = nullEndAnimateDecl "дерматолог" ; ---oper kardiolog : CommNoun = nullEndAnimateDecl "кардиолог" ; ---oper terapevt : CommNoun = nullEndAnimateDecl2 "терапевт" ; ---oper okulist : CommNoun = nullEndAnimateDecl2 "окулист" ; ---oper pediatr : CommNoun = nullEndAnimateDecl2 "педиатр" ; ---oper khirurg : CommNoun = nullEndAnimateDecl2 "хирург" ; --- ---oper muzhchina : CommNoun = (aEndAnimateDecl "мужчин") ** { g = Masc ; anim = Animate } ; ---oper zhenchina : CommNoun = (aEndAnimateDecl "женщин") ** { g = Fem ; anim = Animate } ; ---oper mama : CommNoun = (aEndAnimateDecl "мам")**{ g = Fem ; anim = Animate } ; ---oper cena : CommNoun = (aEndAnimateDecl "цен") ** { g = Fem ; anim = Inanimate } ; --- -oper aEndAnimateDecl: Str -> SubstFormDecl = \muzhchin -> -{s = table { - SF Sg Nom => muzhchin+"а" ; - SF Sg Gen => muzhchin+"ы" ; - SF Sg Dat => muzhchin+"е" ; - SF Sg Acc => muzhchin+"у" ; - SF Sg Inst => muzhchin+"ой" ; - SF Sg Prepos => muzhchin +"е" ; - SF Pl Nom => muzhchin +"ы" ; - SF Pl Gen => muzhchin ; SF Pl Dat => muzhchin+"ам" ; - SF Pl Acc => muzhchin ; - SF Pl Inst => muzhchin+"ами" ; - SF Pl Prepos => muzhchin+"ах" } - } ; - ---oper stomatolog : CommNoun = nullEndAnimateDecl "стоматолог" ; -oper nullEndInAnimateDecl: Str -> CommNoun = \stomatolog -> - {s = table - { SF Sg Nom => stomatolog ; - SF Sg Gen => stomatolog+"а" ; - SF Sg Dat => stomatolog+"у" ; - SF Sg Acc => stomatolog +"а" ; - SF Sg Inst => stomatolog+"ом" ; - SF Sg Prepos => stomatolog+"е" ; - SF Pl Nom => stomatolog+"и" ; - SF Pl Gen => stomatolog+"ов" ; - SF Pl Dat => stomatolog+"ам" ; - SF Pl Acc => stomatolog+"ов" ; - SF Pl Inst => stomatolog+"ами" ; - SF Pl Prepos => stomatolog+"ах" } ; - g = Masc ; anim = Inanimate - } ; - -oper nullEndAnimateDecl: Str -> CommNoun = \stomatolog -> - {s = table - { SF Sg Nom => stomatolog ; - SF Sg Gen => stomatolog+"а" ; - SF Sg Dat => stomatolog+"у" ; - SF Sg Acc => stomatolog +"а" ; - SF Sg Inst => stomatolog+"ом" ; - SF Sg Prepos => stomatolog+"е" ; - SF Pl Nom => stomatolog+"и" ; - SF Pl Gen => stomatolog+"ов" ; - SF Pl Dat => stomatolog+"ам" ; - SF Pl Acc => stomatolog+"ов" ; - SF Pl Inst => stomatolog+"ами" ; - SF Pl Prepos => stomatolog+"ах" } ; - g = Masc ; anim = Animate - } ; -oper nullEndAnimateDecl2: Str -> CommNoun = \stomatolog -> - {s = table - { SF Sg Nom => stomatolog ; - SF Sg Gen => stomatolog+"а" ; - SF Sg Dat => stomatolog+"у" ; - SF Sg Acc => stomatolog +"а" ; - SF Sg Inst => stomatolog+"ом" ; - SF Sg Prepos => stomatolog+"е" ; - SF Pl Nom => stomatolog+"ы" ; - SF Pl Gen => stomatolog+"ов" ; - SF Pl Dat => stomatolog+"ам" ; - SF Pl Acc => stomatolog+"ов" ; - SF Pl Inst => stomatolog+"ами" ; - SF Pl Prepos => stomatolog+"ах" } ; - g = Masc ; anim = Animate - } ; - ---oper gripp : CommNoun = nullEndInAnimateDecl1 "грипп" ; ---oper bar : CommNoun = nullEndInAnimateDecl1 "бар" ; ---oper telefon: CommNoun = nullEndInAnimateDecl1 "телефон" ; ---oper restoran : CommNoun = nullEndInAnimateDecl1 "ресторан" ; --- ----- Note: Plural form of the "грипп" (influenza) is a bit doubious ----- However, according to http://starling.rinet.ru/morph.htm it exists. ----- so we also keep it. -oper nullEndInAnimateDeclPepel: Str -> CommNoun = \gripp -> - {s = table - { SF Sg Nom => gripp +"ел"; - SF Sg Gen => gripp+"ла" ; - SF Sg Dat => gripp+"лу" ; - SF Sg Acc => gripp +"ел"; - SF Sg Inst => gripp+"лом" ; - SF Sg Prepos => gripp+"ле" ; - SF Pl Nom => gripp+"лы" ; - SF Pl Gen => gripp+"лов" ; - SF Pl Dat => gripp+"лам" ; - SF Pl Acc => gripp +"лы"; - SF Pl Inst => gripp+"лами" ; - SF Pl Prepos => gripp+"лах" - } ; - g = Masc ; anim = Inanimate - - } ; -oper nullEndInAnimateDecl1: Str -> CommNoun = \gripp -> - {s = table - { SF Sg Nom => gripp ; - SF Sg Gen => gripp+"а" ; - SF Sg Dat => gripp+"у" ; - SF Sg Acc => gripp ; - SF Sg Inst => gripp+"ом" ; - SF Sg Prepos => gripp+"е" ; - SF Pl Nom => gripp+"ы" ; - SF Pl Gen => gripp+"ов" ; - SF Pl Dat => gripp+"ам" ; - SF Pl Acc => gripp +"ы"; - SF Pl Inst => gripp+"ами" ; - SF Pl Prepos => gripp+"ах" - } ; - g = Masc ; anim = Inanimate - - } ; -oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> - {s = table - { SF Sg Nom => brat ; - SF Sg Gen => brat+"а" ; - SF Sg Dat => brat+"у" ; - SF Sg Acc => brat +"а"; - SF Sg Inst => brat+"ом" ; - SF Sg Prepos => brat+"е" ; - SF Pl Nom => brat+"ья" ; - SF Pl Gen => brat+"ьев" ; - SF Pl Dat => brat+"ьям" ; - SF Pl Acc => brat +"ьев"; - SF Pl Inst => brat+"ьями" ; - SF Pl Prepos => brat+"ьяах" - } ; - g = Masc ; anim = Inanimate - } ; -oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> - {s = table - { SF Sg Nom => brat ; - SF Sg Gen => brat+"а" ; - SF Sg Dat => brat+"у" ; - SF Sg Acc => brat +"а"; - SF Sg Inst => brat+"ом" ; - SF Sg Prepos => brat+"е" ; - SF Pl Nom => brat+"ья" ; - SF Pl Gen => brat+"ьев" ; - SF Pl Dat => brat+"ьям" ; - SF Pl Acc => brat +"ьев"; - SF Pl Inst => brat+"ьями" ; - SF Pl Prepos => brat+"ьяах" - } ; - g = Masc ; anim = Animate - - } ; - ---oper adres: CommNoun = nullEndInAnimateDecl2 "адрес" ; ---oper dom : CommNoun = nullEndInAnimateDecl2 "дом" ; ---oper svet : CommNoun = nullEndInAnimateDecl2 "свет" ; -oper nullEndInAnimateDecl2: Str -> CommNoun = \gripp -> - {s = table - { SF Sg Nom => gripp ; - SF Sg Gen => gripp+"а" ; - SF Sg Dat => gripp+"у" ; - SF Sg Acc => gripp ; - SF Sg Inst => gripp+"ом" ; - SF Sg Prepos => gripp+"е" ; - SF Pl Nom => gripp+"а" ; - SF Pl Gen => gripp+"ов" ; - SF Pl Dat => gripp+"ам" ; - SF Pl Acc => gripp +"а"; - SF Pl Inst => gripp+"ами" ; - SF Pl Prepos => gripp+"ах" - } ; - g = Masc ; anim = Inanimate - } ; ---oper nullEndInAnimateDecl3: Str -> CommNoun = \antibiotik -> --- {s = table --- { SF Sg Nom => antibiotik ; --- SF Sg Gen => antibiotik+"а" ; --- SF Sg Dat => antibiotik+"у" ; --- SF Sg Acc => antibiotik ; --- SF Sg Inst => antibiotik+"ом" ; --- SF Sg Prepos => antibiotik+"е" ; --- SF Pl Nom => antibiotik+"и" ; --- SF Pl Gen => antibiotik+"ов" ; --- --- SF Pl Dat => antibiotik+"ам" ; --- SF Pl Acc => antibiotik +"и"; --- SF Pl Inst => antibiotik+"ами" ; --- SF Pl Prepos => antibiotik+"ах" --- } ; --- g = Masc ; anim = Inanimate --- } ; --- ---oper obezbolivauchee : CommNoun = eeEndInAnimateDecl "обезболивающ" ; -oper eeEndInAnimateDecl: Str -> CommNoun = \obezbolivauch -> - { s = table - { SF Sg Nom => obezbolivauch +"ее"; - SF Sg Gen => obezbolivauch+"его" ; - SF Sg Dat => obezbolivauch+"ему" ; - SF Sg Acc => obezbolivauch +"ее"; - SF Sg Inst => obezbolivauch+"им" ; - SF Sg Prepos => obezbolivauch+"ем" ; - SF Pl Nom => obezbolivauch+"ие" ; - SF Pl Gen => obezbolivauch+"их" ; - SF Pl Dat => obezbolivauch+"им" ; - SF Pl Acc => obezbolivauch+"ие" ; - SF Pl Inst => obezbolivauch+"ими" ; - SF Pl Prepos => obezbolivauch+"их" - } ; - g = Neut ; anim = Inanimate - } ; - -oper oeEndInAnimateDecl: Str -> CommNoun = \snotvorn -> - { s = table - { SF Sg Nom => snotvorn +"ое"; - SF Sg Gen => snotvorn+"ого" ; - SF Sg Dat => snotvorn+"ому" ; - SF Sg Acc => snotvorn +"ое"; - SF Sg Inst => snotvorn+"ым" ; - SF Sg Prepos => snotvorn+"ом" ; - SF Pl Nom => snotvorn+"ые" ; - SF Pl Gen => snotvorn+"ых" ; - SF Pl Dat => snotvorn+"ым" ; - SF Pl Acc => snotvorn+"ые" ; - SF Pl Inst => snotvorn+"ыми" ; - SF Pl Prepos => snotvorn+"ых" - } ; - g = Neut ; anim = Inanimate - } ; -oper oeEndAnimateDecl: Str -> CommNoun = \snotvorn -> - { s = table - { SF Sg Nom => snotvorn +"ое"; - SF Sg Gen => snotvorn+"ого" ; - SF Sg Dat => snotvorn+"ому" ; - SF Sg Acc => snotvorn +"ое"; - SF Sg Inst => snotvorn+"ым" ; - SF Sg Prepos => snotvorn+"ом" ; - SF Pl Nom => snotvorn+"ые" ; - SF Pl Gen => snotvorn+"ых" ; - SF Pl Dat => snotvorn+"ым" ; - SF Pl Acc => snotvorn+"ые" ; - SF Pl Inst => snotvorn+"ыми" ; - SF Pl Prepos => snotvorn+"ых" - } ; - g = Neut ; anim = Animate - } ; - ---oper voskresenje : CommNoun = soft_eEndInAnimateDecl "воскресен" ; ---oper soft_eEndInAnimateDecl: Str -> CommNoun = \proizvedeni -> --- { s = table --- { SF Sg Nom => proizvedeni +"ье"; --- SF Sg Gen => proizvedeni+"ья" ; --- SF Sg Dat => proizvedeni+"ью" ; --- SF Sg Acc => proizvedeni +"ье"; --- SF Sg Inst => proizvedeni+"ьем" ; --- SF Sg Prepos => proizvedeni+"ье" ; --- SF Pl Nom => proizvedeni+"ья" ; --- SF Pl Gen => proizvedeni+"ий" ; --- SF Pl Dat => proizvedeni+"ьям" ; --- SF Pl Acc => proizvedeni+"ья" ; --- SF Pl Inst => proizvedeni+"ьями" ; --- SF Pl Prepos => proizvedeni+"ьях" --- } ; --- g = Neut ; anim = Inanimate --- } ; ---oper proizvedenie : CommNoun = eEndInAnimateDecl "произведени" ; -oper eEndInAnimateDecl: Str -> CommNoun = \proizvedeni -> - { s = table - { SF Sg Nom => proizvedeni +"е"; - SF Sg Gen => proizvedeni+"я" ; - SF Sg Dat => proizvedeni+"ю" ; - SF Sg Acc => proizvedeni +"е"; - SF Sg Inst => proizvedeni+"ем" ; - SF Sg Prepos => proizvedeni+"и" ; - SF Pl Nom => proizvedeni+"я" ; - SF Pl Gen => proizvedeni+"й" ; - SF Pl Dat => proizvedeni+"ям" ; - SF Pl Acc => proizvedeni+"я" ; - SF Pl Inst => proizvedeni+"ями" ; - SF Pl Prepos => proizvedeni+"ях" - } ; - g = Neut ; anim = Inanimate - } ; ---oper chislo : CommNoun = l_oEndInAnimateDecl "числ" ; ---oper vino : CommNoun = l_oEndInAnimateDecl "вин" ; ---oper l_oEndInAnimateDecl: Str -> CommNoun = \chisl -> --- let { chis = Predef.tk 1 chisl ; ending = Predef.dp 3 chisl } in --- oEndInAnimateDecl3 chisl (chis+"e"+ending) ; -oper oEndInAnimateDecl3: Str -> Str -> CommNoun = \chisl, chisel -> - { s = table - { SF Sg Nom => chisl +"о"; - SF Sg Gen => chisl+"а" ; - SF Sg Dat => chisl+"у" ; - SF Sg Acc => chisl +"о"; - SF Sg Inst => chisl+"ом" ; - SF Sg Prepos => chisl+"е" ; - SF Pl Nom => chisl+"а" ; - SF Pl Gen => chisel; - SF Pl Dat => chisl+"ам" ; - SF Pl Acc => chisl+"а" ; - SF Pl Inst => chisl+"ами" ; - SF Pl Prepos => chisl+"ах" - } ; - g = Neut ; anim = Inanimate - } ; - -oper oEndInAnimateDecl: Str -> CommNoun = \plech -> - { s = table - { SF Sg Nom => plech+"о" ; - SF Sg Gen => plech+"а" ; - SF Sg Dat => plech+"у" ; - SF Sg Acc => plech+"о" ; - SF Sg Inst => plech+"ом" ; SF Sg Prepos => plech+"е" ; - SF Pl Nom => plech+"и" ; - SF Pl Gen => plech; - SF Pl Dat => plech+"ам" ; - SF Pl Acc => plech+"и" ; - SF Pl Inst => plech+"ами" ; - SF Pl Prepos => plech+"ях" - } ; - g = Neut ; anim = Inanimate - } ; ---oper oEnd_KH_InAnimateDecl: Str -> CommNoun = \u -> --- { s = table --- { SF Sg Nom => u+"хо" ; --- SF Sg Gen => u+"ха" ; --- SF Sg Dat => u+"ху" ; --- SF Sg Acc => u+"хо" ; --- SF Sg Inst => u+"хом" ; -- SF Sg Prepos => u+"хе" ; --- SF Pl Nom => u+"ши" ; --- SF Pl Gen => u +"шей"; --- SF Pl Dat => u+"шам" ; --- SF Pl Acc => u+"ши" ; --- SF Pl Inst => u+"шами" ; --- SF Pl Prepos => u+"шах" --- } ; --- g = Neut ; anim = Inanimate --- } ; --- ---oper malaria : CommNoun = i_yaEndDecl "маляри" ; --- ---oper daniya : ProperName = mkCNProperName(i_yaEndDecl "Дани" ); ---oper angliya : ProperName = mkCNProperName(i_yaEndDecl "Англи") ; ---oper finlyandiya : ProperName = mkCNProperName(i_yaEndDecl "Финлянди") ; ---oper franciya : ProperName = mkCNProperName(i_yaEndDecl "Франци" ); ---oper germaniya : ProperName = mkCNProperName(i_yaEndDecl "Германи") ; ---oper italiya : ProperName = mkCNProperName(i_yaEndDecl "Итали" ); ---oper norvegiya : ProperName = mkCNProperName(i_yaEndDecl "Норвеги") ; ---oper rossiya : ProperName = mkCNProperName(i_yaEndDecl "Росси") ; ---oper ispaniya : ProperName = mkCNProperName(i_yaEndDecl "Испани") ; ---oper shveciya : ProperName = mkCNProperName(i_yaEndDecl "Швеци") ; --- -oper i_yaEndDecl: Str -> CommNoun = \malar -> - { s = table - { SF Sg Nom => malar+"я" ; - SF Sg Gen => malar+"и" ; - SF Sg Dat => malar+"и" ; - SF Sg Acc => malar+"ю" ; - SF Sg Inst => malar+"ей" ; SF Sg Prepos => malar+"и" ; - SF Pl Nom => malar+"и" ; - SF Pl Gen => malar+"й" ; - SF Pl Dat => malar+"ям" ; - SF Pl Acc => malar+"и" ; - SF Pl Inst => malar+"ями" ; - SF Pl Prepos => malar+"ях" - } ; - g = Fem ; anim = Inanimate - } ; - ---oper bol : CommNoun = softSignEndDeclFem "бол" ; ---oper nol : CommNoun = softSignEndDeclMasc "нол" ; ---oper uroven : CommNoun = EN_softSignEndDeclMasc "уровен" ; -oper softSignEndDeclFem: Str -> CommNoun = \bol -> - {s = table - { SF Sg Nom => bol+"ь" ; - SF Sg Gen => bol+"и" ; - SF Sg Dat => bol+"и" ; - SF Sg Acc => bol+"ь" ; - SF Sg Inst => bol+"ью" ; - SF Sg Prepos => bol+"и" ; - SF Pl Nom => bol+"и" ; - SF Pl Gen => bol+"ей" ; - SF Pl Dat => bol+"ям" ; - SF Pl Acc => bol+"и" ; - SF Pl Inst => bol+"ями" ; - SF Pl Prepos => bol+"ях" } ; - g = Fem ; anim = Inanimate - } ; -oper softSignEndDeclMasc: Str -> CommNoun = \nol -> - {s = table - { SF Sg Nom => nol+"ь" ; - SF Sg Gen => nol+"я" ; - SF Sg Dat => nol+"ю" ; - SF Sg Acc => nol+"ь" ; - SF Sg Inst => nol+"ем" ; - SF Sg Prepos => nol+"е" ; - SF Pl Nom => nol+"и" ; - SF Pl Gen => nol+"ей" ; - SF Pl Dat => nol+"ям" ; - SF Pl Acc => nol+"и" ; - SF Pl Inst => nol+"ями" ; - SF Pl Prepos => nol+"ях" - } ; - g = Masc ; anim = Inanimate - } ; -oper okEndDeclMasc: Str -> CommNoun = \potol -> - {s = table - { SF Sg Nom => potol+"ок" ; - SF Sg Gen => potol+"ка" ; - SF Sg Dat => potol+"ку" ; - SF Sg Acc => potol+"ок" ; - SF Sg Inst => potol+"ком" ; - SF Sg Prepos => potol+"ке" ; - SF Pl Nom => potol+"ки" ; - SF Pl Gen => potol+"ков" ; - SF Pl Dat => potol+"кам" ; - SF Pl Acc => potol+"ки" ; - SF Pl Inst => potol+"ками" ; - SF Pl Prepos => potol+"ках" - } ; - g = Masc ; anim = Inanimate - } ; - - -oper shEndDeclMasc: Str -> CommNoun = \malush -> - {s = table - { SF Sg Nom => malush ; - SF Sg Gen => malush+"а" ; - SF Sg Dat => malush+"у" ; - SF Sg Acc => malush+"а" ; - SF Sg Inst => malush+"ом" ; - SF Sg Prepos => malush+"е" ; - SF Pl Nom => malush+"и" ; - SF Pl Gen => malush+"ей" ; - SF Pl Dat => malush+"ам" ; - SF Pl Acc => malush+"ей" ; - SF Pl Inst => malush+"ами" ; - SF Pl Prepos => malush+"ах" - } ; - g = Masc ; anim = Inanimate - } ; - -oper EN_softSignEndDeclMasc: Str -> CommNoun = \rem -> - {s = table - { SF Sg Nom => rem+"ень" ; - SF Sg Gen => rem+"ня" ; - SF Sg Dat => rem+"ню" ; - SF Sg Acc => rem+"ень" ; - SF Sg Inst => rem+"нем" ; - SF Sg Prepos => rem+"не" ; - SF Pl Nom => rem+"ни" ; - SF Pl Gen => rem+"ней" ; - SF Pl Dat => rem+"ням" ; - SF Pl Acc => rem+"ни" ; - SF Pl Inst => rem+"нями" ; - SF Pl Prepos => rem+"нях" - } ; - g = Masc ; anim = Inanimate - } ; - ---oper noga : CommNoun = aEndG_K_KH_Decl "ног" ; ---oper doroga : CommNoun = aEndG_K_KH_Decl "дорог" ; ---oper dvojka : CommNoun = aEndG_K_KH_Decl "двойк" ; ---oper butyulka : CommNoun = aEndG_K_KH_Decl "бутылк" ; -oper aEndG_K_KH_Decl: Str -> CommNoun = \nog -> -{ s = table { - SF Sg Nom => nog+"а" ; - SF Sg Gen => nog+"и" ; - SF Sg Dat => nog+"е" ; - SF Sg Acc => nog+"у" ; - SF Sg Inst => nog+"ой" ; - SF Sg Prepos => nog+"е" ; - SF Pl Nom => nog+"и" ; - SF Pl Gen => nog ; - SF Pl Dat => nog+"ам" ; - SF Pl Acc => nog+ "и" ; - SF Pl Inst => nog+"ами" ; - SF Pl Prepos => nog+"ах" - } ; - g = Fem ; anim = Inanimate -} ; - ---oper golova : CommNoun = aEndInAnimateDecl "голов" ; ---oper mashina : CommNoun = aEndInAnimateDecl "машин" ; ---oper temperatura : CommNoun = aEndInAnimateDecl "температур" ; ---oper edinica : CommNoun = ej_aEndInAnimateDecl "единиц" ; --- -oper aEndInAnimateDecl: Str -> CommNoun = \golov -> - { s = table - { SF Sg Nom => golov+"а" ; - SF Sg Gen => golov+"ы" ; - SF Sg Dat => golov+"е" ; - SF Sg Acc => golov+"у" ; - SF Sg Inst => golov+"ой" ; - SF Sg Prepos => golov+"е" ; - SF Pl Nom => golov+"ы" ; - SF Pl Gen => golov ; - SF Pl Dat => golov+"ам" ; - SF Pl Acc => golov+ "ы" ; - SF Pl Inst => golov+"ами" ; - SF Pl Prepos => golov+"ах" - } ; - g = Fem ; anim = Inanimate - } ; -oper ej_aEndInAnimateDecl: Str -> CommNoun = \ediniz -> - { s = table - { SF Sg Nom => ediniz+"а" ; - SF Sg Gen => ediniz+"ы" ; - SF Sg Dat => ediniz+"е" ; - SF Sg Acc => ediniz+"у" ; - SF Sg Inst => ediniz+"ей" ; - SF Sg Prepos => ediniz+"е" ; - SF Pl Nom => ediniz+"ы" ; - SF Pl Gen => ediniz ; - SF Pl Dat => ediniz+"ам" ; - SF Pl Acc => ediniz+ "ы" ; - SF Pl Inst => ediniz+"ами" ; - SF Pl Prepos => ediniz+"ах" - } ; - g = Fem ; anim = Inanimate - } ; - - ---oper dyadya : CommNoun = (yaEndAnimateDecl "дяд") ** {g = Masc; anim = Animate} ; -oper yaEndAnimateDecl: Str -> SubstFormDecl = \nyan -> - {s = table { - SF Sg Nom => nyan + "я" ; SF Sg Gen => nyan + "и" ; - SF Sg Dat => nyan + "е" ; - SF Sg Acc => nyan + "ю" ; - SF Sg Inst => nyan + "ей" ; - SF Sg Prepos => nyan + "е" ; - SF Pl Nom => nyan + "и" ; - SF Pl Gen => nyan + "ей" ; - SF Pl Inst => nyan + "ями" ; - SF Pl Prepos => nyan + "ях" ; - SF Pl Dat => nyan + "ям" ; SF Pl Acc => nyan + "ей" - } - } ; ---oper l_yaEndInAnimateDecl: Str -> SubstFormDecl = \kap -> ---{s = table { --- SF Sg Nom => kap + "ля" ; -- SF Sg Gen => kap + "ли" ; --- SF Sg Dat => kap + "ле" ; --- SF Sg Acc => kap + "лю" ; --- SF Sg Inst => kap + "лей" ; --- SF Sg Prepos => kap + "ле" ; --- SF Pl Nom => kap + "ли" ; --- SF Pl Gen => kap + "ель" ; --- SF Pl Inst => kap + "лями" ; --- SF Pl Prepos => kap + "лях" ; --- SF Pl Dat => kap + "лям" ; -- SF Pl Acc => kap + "ли" --- } --- } ; --- ---oper oEnd_Decl: Str -> CommNoun = \bolshinstv -> ---{ s = table { --- SF Sg Nom => bolshinstv+"о" ; --- SF Sg Gen => bolshinstv+"а" ; --- SF Sg Dat => bolshinstv+"у" ; --- SF Sg Acc => bolshinstv+"о" ; --- SF Sg Inst => bolshinstv+"ом" ; --- SF Sg Prepos => bolshinstv+"е" ; --- SF Pl Nom => bolshinstv+"а" ; --- SF Pl Gen => bolshinstv ; --- SF Pl Dat => bolshinstv+"ам" ; --- SF Pl Acc => bolshinstv+ "а" ; --- SF Pl Inst => bolshinstv+"ами" ; --- SF Pl Prepos => bolshinstv+"ах" --- } ; --- g = Neut ; anim = Inanimate ---} ; - -oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> -{ s = table { - SF _ Nom => mnog+"о" ; - SF _ Gen => mnog +"их"; - SF _ Dat => mnog+"им" ; - SF _ Acc => mnog+"о" ; - SF _ Inst => mnog+"ими" ; - SF _ Prepos => mnog+"их" - } ; - g = Neut ; anim = Inanimate -} ; - -oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> - { s = table { - SF _ Nom => menshinstv+"а" ; - SF _ Gen => menshinstv; - SF _ Dat => menshinstv+"ам" ; - SF _ Acc => menshinstv+"ва" ; - SF _ Inst => menshinstv+"ами" ; - SF _ Prepos => menshinstv+"вах" - } ; - g = Neut ; anim = Inanimate -} ; - -oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> - {s = table { - SF _ Nom => bolshinstv+"о" ; - SF _ Gen => bolshinstv+"а" ; - SF _ Dat => bolshinstv+"у" ; - SF _ Acc => bolshinstv+"о" ; - SF _ Inst => bolshinstv+"ом" ; - SF _ Prepos => bolshinstv+"е" - } ; - g = Neut ; anim = Inanimate -} ; - --- Note: Now we consider only the plural form of the pronoun "все" (all) --- treated as an adjective (see AllDetPl definition). --- The meaning "entire" is not considered, which allows us to form --- the pronoun-adjective from the substantive form below: - -oper eEnd_Decl: Str -> CommNoun = \vs -> -{ s = table { - SF Sg Nom => vs+"е" ; - SF Sg Gen => vs+"ех" ; - SF Sg Dat => vs+"ем" ; - SF Sg Acc => vs+"ех" ; - SF Sg Inst => vs+"еми" ; - SF Sg Prepos => vs+"ех" ; - SF Pl Nom => vs+"е" ; - SF Pl Gen => vs +"ех"; - SF Pl Dat => vs+"ем" ; - SF Pl Acc => vs+ "ех" ; - SF Pl Inst => vs+"еми" ; - SF Pl Prepos => vs+"ех" - } ; - g = Neut ; anim = Inanimate -} ; - ---mkAdjCommNounMascInanim: Adjective -> CommNoun = ---\a -> ---{ s = table { --- SF Sg Nom => a.s ! AF Nom Inanimate (ASg Masc) ; --- SF Sg Gen => a.s ! AF Gen Inanimate (ASg Masc) ; --- SF Sg Dat => a.s ! AF Dat Inanimate (ASg Masc) ; --- SF Sg Acc => a.s ! AF Acc Inanimate (ASg Masc) ; --- SF Sg Inst => a.s ! AF Inst Inanimate (ASg Masc) ; --- SF Sg Prepos => a.s ! AF Prepos Inanimate (ASg Masc) ; --- SF Pl Nom => a.s ! AF Nom Inanimate APl ; --- SF Pl Gen => a.s ! AF Gen Inanimate APl; --- SF Pl Dat => a.s ! AF Dat Inanimate APl ; --- SF Pl Acc => a.s ! AF Acc Inanimate APl ; --- SF Pl Inst => a.s ! AF Inst Inanimate APl ; --- SF Pl Prepos => a.s ! AF Prepos Inanimate APl --- }; --- g = Masc ; --- anim = Inanimate ---}; -----2 Adjectives --- ----- Type Adjective only has positive degree while AdjDegr type ----- includes also comparative and superlative forms. ----- The later entries can be converted into the former using ----- "extAdjective" operation defined in the syntax module ----- and vice verca using "mkAdjDeg" operation. --- ---oper --- adjInvar: Str -> Adjective = \s -> { s = \\af => s }; --- - kazhdujDet: Adjective = uy_j_EndDecl "кажд" ; - samuj: Adjective = uy_j_EndDecl "сам" ; --- lubojDet: Adjective = uy_oj_EndDecl "люб" ; --- drugojDet: Adjective = uy_oj_EndDecl "друг" ; --- glaznoj: Adjective = uy_oj_EndDecl "глазн" ; - kotorujDet: Adjective = uy_j_EndDecl "котор"; - nekotorujDet: Adjective = uy_j_EndDecl "некотор"; - takoj: Adjective = i_oj_EndDecl "так" []; --- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь"; --- kakojDet: Adjective = i_oj_EndDecl "как" []; --- nikakojDet: Adjective = i_oj_EndDecl "никак" []; - bolshinstvoSgDet: Adjective = extAdjFromSubst (oEnd_SgDecl "большинств"); - mnogoSgDet: Adjective = extAdjFromSubst (kg_oEnd_SgDecl "мног"); - skolkoSgDet: Adjective = extAdjFromSubst (kg_oEnd_SgDecl "скольк"); - - bolshinstvoPlDet: Adjective = extAdjFromSubst (oEnd_PlDecl "большинств"); - - vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; - extAdjFromSubst: CommNoun -> Adjective = \ vse -> - {s = \\af => vse.s ! SF (numAF af) (caseAF af) } ; - -oper - AdjDegr : Type = {s : Degree => AdjForm => Str} ; - -oper mkAdjDeg: Adjective -> Str -> AdjDegr = \adj, s -> - { s = table - { - Posit => adj.s ; - Compar => \\af => s ; - Superl => \\af => samuj.s !af ++ adj.s ! af - } - }; ---oper uzhasnuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "ужасн") "ужаснее"; ---oper schastlivyuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "счастлив") "счастливее"; ---oper deshevuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "дешев") "дешевле"; ---oper staruj: AdjDegr = mkAdjDeg (uy_j_EndDecl "стар") "старше"; -oper totDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "тот"; - AF Nom _ (ASg Fem) => "та"; - AF Nom _ (ASg Neut) => "то"; - AF Nom _ APl => "те"; - AF Acc Inanimate (ASg Masc) => "тот"; - AF Acc Animate (ASg Masc) => "того"; - AF Acc _ (ASg Fem) => "ту"; - AF Acc _ (ASg Neut) => "то"; - AF Acc Inanimate APl => "те"; - AF Acc Animate APl => "тех"; - 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 odinDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "один"; - AF Nom _ (ASg Fem) => "одна"; - AF Nom _ (ASg Neut) => "одно"; - AF Nom _ APl => "одни"; - AF Acc Inanimate (ASg Masc) => "один"; - AF Acc Animate (ASg Masc) => "одного"; - AF Acc _ (ASg Fem) => "одну"; - AF Acc _ (ASg Neut) => "одно"; - AF Acc Inanimate APl => "одни"; - AF Acc Animate APl => "одних"; - 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 etotDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "этот"; - AF Nom _ (ASg Fem) => "эта"; - AF Nom _ (ASg Neut) => "это"; - AF Nom _ APl => "эти"; - AF Acc Inanimate (ASg Masc) => "этот"; - AF Acc Animate (ASg Masc) => "этого"; - AF Acc _ (ASg Fem) => "эту"; - AF Acc _ (ASg Neut) => "это"; - AF Acc Inanimate APl => "эти"; - AF Acc Animate APl => "этих"; - 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 vesDet: Adjective = {s = table { - AF Nom _ (ASg Masc) => "весь"; - AF Nom _ (ASg Fem) => "вся"; - AF Nom _ (ASg Neut) => "всё"; - AF Nom _ APl => "все"; - AF Acc Animate (ASg Masc) => "весь"; - AF Acc Inanimate (ASg Masc) => "всего"; - AF Acc _ (ASg Fem) => "всю"; - AF Acc _ (ASg Neut) => "всё"; - AF Acc Inanimate APl => "все"; - AF Acc Animate APl => "всех"; - 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 Neut) => s + "ого"; - AF Gen _ APl => s + "ых"; - AF Inst _ (ASg Masc) => s + "ым"; - AF Inst _ (ASg Fem) => 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 => s +"о" - } - } ; -oper ti_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 Neut) => s+"ьего"; - AF Gen _ APl => s+"ьих"; - AF Inst _ (ASg Masc) => s+"ьим"; - AF Inst _ (ASg Fem) => 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 => s + "ье" - } - } ; - ---oper shi_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 Neut) => s+"его"; --- AF Gen _ APl => s+"их"; --- AF Inst _ (ASg Masc) => s+"им"; --- AF Inst _ (ASg Fem) => 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 => s + "о" --- } --- } ; --- ---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 _ (ASg Fem) => s+"ую"; - AF Acc _ (ASg Neut) => s+"ое"; - AF Acc Animate APl => s+"их"; - AF Acc Inanimate APl => s+"ие"; - AF Gen _ (ASg Masc) => s+"ого"; - AF Gen _ (ASg Fem) => s+"ой"; - AF Gen _ (ASg Neut) => s+"ого"; - AF Gen _ APl => s+"их"; - AF Inst _ (ASg Masc) => s+"им"; - AF Inst _ (ASg Fem) => 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 => s + "о" - } - } ; -oper shij_End_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 _ (ASg Fem) => s+"ую"; - AF Acc _ (ASg Neut) => s+"ое"; - AF Acc Animate APl => s+"их"; - AF Acc Inanimate APl => s+"ие"; - AF Gen _ (ASg Masc) => s+"его"; - AF Gen _ (ASg Fem) => s+"ей"; - AF Gen _ (ASg Neut) => s+"его"; - AF Gen _ APl => s+"их"; - AF Inst _ (ASg Masc) => s+"им"; - AF Inst _ (ASg Fem) => 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 => s + "о" - } - } ; - ---oper bolshoj: AdjDegr = mkAdjDeg (i_oj_EndDecl "больш" []) "больше"; ---oper dorogoj: AdjDegr = mkAdjDeg (i_oj_EndDecl "дорог" []) "дороже"; -oper i_oj_EndDecl : Str -> Str -> Adjective = \s, chastica ->{s = table { - AF Nom _ (ASg Masc) => s+"ой" + chastica ; - AF Nom _ (ASg Fem) => s+"ая"+ chastica ; - AF Nom _ (ASg Neut) => s+"ое"+ chastica ; - AF Nom _ APl => s+"ие"+ chastica ; - AF Acc Animate (ASg Masc) => s+"ого"+ chastica ; - AF Acc Inanimate (ASg Masc) => s+"ой"+ chastica ; - AF Acc _ (ASg Fem) => s+"ую"+ chastica ; - AF Acc _ (ASg Neut) => s+"ое"+ chastica ; - AF Acc Animate APl => s+"их"+ chastica ; - AF Acc Inanimate APl => s+"ие"+ chastica ; - AF Gen _ (ASg Masc) => s+"ого"+ chastica ; - AF Gen _ (ASg Fem) => s+"ой"+ chastica ; - AF Gen _ (ASg Neut) => s+"ого"+ chastica ; - AF Gen _ APl => s+"их"+ chastica ; - AF Inst _ (ASg Masc) => s+"им"+ chastica ; - AF Inst _ (ASg Fem) => s+"ой"+ chastica ; - AF Inst _ (ASg Neut) => s+"им"+ chastica ; - AF Inst _ APl => s+"ими"+ chastica ; - AF Dat _ (ASg Masc) => s+"ому"+ chastica ; - AF Dat _ (ASg Fem) => s+"ой"+ chastica ; - AF Dat _ (ASg Neut) => s+"ому"+ chastica ; - AF Dat _ APl => s+"им"+ chastica ; - AF Prepos _ (ASg Masc) => s+"ом"+ chastica ; - AF Prepos _ (ASg Fem) => s+"ой"+ chastica ; - AF Prepos _ (ASg Neut) => s+"ом"+ chastica ; - AF Prepos _ APl => s+"их" + chastica; - AdvF => s + "о" - } - } ; ---oper molodoj: AdjDegr = mkAdjDeg (uy_oj_EndDecl "молод") "моложе"; - -oper uy_oj_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 Animate (ASg Masc) => s+"ого"; - AF Acc Inanimate (ASg Masc) => s+"ой"; - AF Acc _ (ASg Fem) => s+"ую"; - AF Acc _ (ASg Neut) => s+"ое"; - AF Acc Animate APl => s+"ых"; - AF Acc Inanimate APl => s+"ые"; - AF Gen _ (ASg Masc) => s+"ого"; - AF Gen _ (ASg Fem) => s+"ой"; - AF Gen _ (ASg Neut) => s+"ого"; - AF Gen _ APl => s+"ых"; - AF Inst _ (ASg Masc) => s+"ым"; - AF Inst _ (ASg Fem) => 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 => s + "о" - } - } ; ---oper prostuzhen: Adjective = shortDecl1 "простужен" ; ---oper beremenen: Adjective = shortDecl "беремен" ; ---oper need: Adjective = shortDecl "нуж" ; ---oper shortDecl1 : Str -> Adjective = \s ->{s = table { --- AF _ _ (ASg Masc) => s; --- AF _ _ (ASg Fem) => s+"а"; --- AF _ _ (ASg Neut) => s+"о"; --- AF _ _ APl => s+"ы" ; --- AdvF => s + "о" --- } --- } ; ---oper shortDecl : Str -> Adjective = \s ->{s = table { --- AF _ _ (ASg Masc) => s +"ен"; --- AF _ _ (ASg Fem) => s+"на"; --- AF _ _ (ASg Neut) => s+"но"; --- AF _ _ APl => s+"ны" ; --- AdvF => s + "о" --- } -- } ; --- ----- 2 Adverbs --- ---oper vsegda: Adverb = { s = "всегда" } ; ---oper chorosho: Adverb = { s = "хорошо" } ; --- ----- 2 Verbs --- ----- Dummy verbum "have" that corresponds to the phrases like ----- "I have a headache" in English. The corresponding sentence ----- in Russian doesn't contain a verb: --- ---oper have: Verbum = {s=\\ vf => "-" ; asp = Imperfective} ; --- ----- There are two common conjugations ----- (according to the number and the person of the subject) ----- patterns in the present tense in the indicative mood. --- -param Conjugation = First | FirstE | Second | Mixed | Dolzhen; - --- ---3 First conjugation (in Present) verbs : -oper verbIdti : Verbum = verbDecl Imperfective First "ид" "у" "шел" "иди" "идти"; - ---oper verbGulyat : Verbum = verbDecl Imperfective First "гуля" "ю" "гулял" "гуляй" "гулять"; ---oper verbVkluchat : Verbum = verbDecl Imperfective First "включа" "ю" "включал" "включай" "включать"; -oper verbSuchestvovat : Verbum = verbDecl Imperfective First "существу" "ю" "существовал" "существуй" "существовать"; ---oper verbVukluchat : Verbum = verbDecl Imperfective First "выключа" "ю" "выключал" "выключай" "выключать"; ---oper verbZhdat : Verbum = verbDecl Imperfective First "жд" "у" "ждал" "жди" "ждать" ; ---oper verbBegat : Verbum = verbDecl Imperfective First "бега" "ю" "бегал" "бегай" "бегать"; ---oper verbPrinimat : Verbum = verbDecl Imperfective First "принима" "ю" "принимал" "принимай" "принимать"; ---oper verbDokazuvat : Verbum = verbDecl Imperfective First "доказыва" "ю" "доказывал" "доказывай" "доказывать"; ---oper verbPredpochitat : Verbum = verbDecl Imperfective First "предпочита" "ю" "предпочитал" "предпочитай" "предпочитать"; ---oper verbOtpravlyat : Verbum = verbDecl Imperfective First "отправля" "ю" "отправлял" "отправляй" "отправлять"; ---oper verbSlomat : Verbum = verbDecl Perfective First "слома" "ю" "сломал" "сломай" "сломать"; - - ----- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) : ---oper verbDavat : Verbum = verbDecl Imperfective FirstE "да" "ю" "давал" "давай" "давать"; ---oper verbPit : Verbum = verbDecl Imperfective FirstE "пь" "ю" "пил" "пей" "пить"; --- - - -oper verbByut : Verbum = verbDecl Perfective First "буд" "у" "был" "будь" "быть"; - -oper verbMoch : Verbum = verbDeclMoch Imperfective First "мог" "у" "мог" "моги" "мочь" "мож"; - -----3 Second conjugation (in Present) verbs : --- ---oper verbLubit : Verbum = verbDecl Imperfective Second "люб" "лю" "любил" "люби" "любить"; ---oper verbGovorit : Verbum = verbDecl Imperfective Second "говор" "ю" "говорил" "говори" "говорить"; --- ---oper verbBolet_2 : Verbum = verbDecl Imperfective Second "бол" "ю" "болел" "боли" "болеть"; ---oper verbPoranit : Verbum = verbDecl Perfective Second "поран" "ю" "поранил" "порань" "поранить"; --- --- Irregular Mixed: -oper verbKhotet : Verbum = verbDecl Imperfective Mixed "хоч" "у" "хотел" "хоти" "хотеть"; - --- Irregular -oper verbDolzhen : Verbum = verbDecl Imperfective Dolzhen "долж" "ен" "долж" ["будь должен"] ["быть должным"] ; - - --- To reduces the redundancies in the definitions --- we introduce some intermediate types, --- so that the full type can be described as a combination --- of the intermediate types. For example "AspectVoice" --- is a type for defining a pattern for a particular --- aspect and voice. - -oper AspectVoice: Type = { s : VerbConj => Str ; asp: Aspect } ; - -idetDozhd: Verbum -> Verbum = \idet -> {s = \\vf=>idet.s!vf ++ "дождь"; asp = Imperfective}; - --- "PresentVerb" takes care of the present tense conjugation. - -param PresentVF = PRF GenNum Person; -oper PresentVerb : Type = PresentVF => Str ; -oper presentConjDolzhen: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF APl _ => del+ "ны" ; - PRF (ASg Masc) P1 => del+ sgP1End ; - PRF (ASg Fem) P1 => del+ "на" ; - PRF (ASg Neut) P1 => del+ "но" ; - PRF (ASg Masc) P2 => del+ sgP1End ; - PRF (ASg Fem) P2 => del+ "на" ; - PRF (ASg Neut) P2 => del+ "но" ; - PRF (ASg Masc) P3 => del+ sgP1End ; - PRF (ASg Fem) P3 => del+ "на" ; - PRF (ASg Neut) P3 => del+ "но" }; - -oper presentConjMixed: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ешь" ; - PRF (ASg _) P3 => del+ "ет" ; - PRF APl P1 => del+ "им" ; - PRF APl P2 => del+ "ите" ; - PRF APl P3 => del+ "ят" - }; -oper presentConj2: Str -> Str -> PresentVerb = \del, sgP1End -> -table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ишь" ; - PRF (ASg _) P3 => del+ "ит" ; - PRF APl P1 => del+ "им" ; - PRF APl P2 => del+ "ите" ; - PRF APl P3 => del+ "ят" - }; - -oper presentConj1E: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ёшь" ; - PRF (ASg _) P3 => del+ "ёт" ; - PRF APl P1 => del+ "ём" ; - PRF APl P2 => del+ "ёте" ; - PRF APl P3 => del+ sgP1End + "т" - }; -oper presentConj1: Str -> Str -> PresentVerb = \del, sgP1End -> - table { - PRF (ASg _) P1 => del+ sgP1End ; - PRF (ASg _) P2 => del+ "ешь" ; - PRF (ASg _) P3 => del+ "ет" ; - PRF APl P1 => del+ "ем" ; - PRF APl P2 => del+ "ете" ; - PRF APl P3 => del+ sgP1End + "т" - }; -oper presentConj1Moch: Str -> Str -> Str -> PresentVerb = \del, sgP1End, altRoot -> - table { - PRF (ASg _) P1 => del + sgP1End ; - PRF (ASg _) P2 => altRoot + "ешь" ; - PRF (ASg _) P3 => altRoot + "ет" ; - PRF APl P1 => altRoot + "ем" ; - PRF APl P2 => altRoot + "ете" ; - PRF APl P3 => del+ sgP1End + "т" - }; - --- "PastVerb" takes care of the past tense conjugation. - -param PastVF = PSF GenNum ; -oper PastVerb : Type = PastVF => Str ; -oper pastConj: Str -> PastVerb = \del -> - table { - PSF (ASg Masc) => del ; - PSF (ASg Fem) => del +"а" ; - PSF (ASg Neut) => del+"о" ; - PSF APl => del+ "и" - }; - -oper pastConjDolzhen: Str -> PastVerb = \del -> - table { - PSF (ASg Masc) => ["был "] + del + "ен" ; - PSF (ASg Fem) => ["была "] + del + "на" ; - PSF (ASg Neut) => ["было "] + del + "но" ; - PSF APl => ["были "] + del + "ны" - }; - --- "verbDecl" sorts out verbs according to the aspect and voice parameters. --- It produces the full conjugation table for a verb entry - -oper verbDecl: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf -> case a of -{ Perfective => case c of { - First => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - FirstE => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1E del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - Second => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj2 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - Mixed => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConjMixed del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - Dolzhen => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConjDolzhen del sgP1End) (pastConjDolzhen sgMascPast)) (pastConjDolzhen sgMascPast) -} ; - Imperfective => case c of { - First => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - FirstE => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1E del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - Second => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj2 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); - Mixed => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConjMixed del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast) ; - Dolzhen => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConjDolzhen del sgP1End) (pastConjDolzhen sgMascPast)) (pastConjDolzhen sgMascPast) - } -}; - --- for verbs like "мочь" ("can") with changing consonants (first conjugation): --- "могу - можешь" -oper verbDeclMoch: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Str -> Verbum = - \a, c, del, sgP1End, sgMascPast, imperSgP2, inf, altRoot -> case a of - { Perfective => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast)) (pastConj sgMascPast); - Imperfective => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast)) (pastConj sgMascPast) - }; - - --- "mkVerb" produce the passive forms from --- the active forms using the "mkPassive" method. --- Passive is expressed in Russian by so called reflexive verbs, --- which are formed from the active form by suffixation. - -oper mkVerb : AspectVoice -> PastVerb -> Verbum = \av1, pv -> { s = table { - VFORM Act vf => av1.s !vf; - VFORM Pass vf => (mkPassive av1 pv ).s ! vf - } ; - asp = av1.asp -}; - --- vowels : Strs = strs { --- "а" ; "е" ; "ё" ; "и" ; "о" ; "у" ; --- "ы" ; "э" ; "ю" ; "я" --- } ; --- -oper mkPassive: AspectVoice -> PastVerb -> AspectVoice = \av, pv -> - { s = table { - VINF => av.s ! VINF + "ся"; - VIMP Sg P1 => av.s ! (VIMP Sg P1) +"сь" ; - VIMP Pl P1 => av.s ! (VIMP Pl P1) +"ся"; - VIMP Sg P2 => av.s ! (VIMP Sg P2 ) +"сь"; - VIMP Pl P2 => av.s! (VIMP Pl P2) +"сь"; - VIMP Sg P3 => av.s ! (VIMP Sg P3) +"ся"; - VIMP Pl P3 => av.s ! (VIMP Pl P3) +"ся"; - VSUB (ASg Masc) => pv ! (PSF (ASg Masc)) + "ся"++"бы"; - VSUB (ASg Fem) => pv ! (PSF (ASg Fem)) + "сь"++"бы"; - VSUB (ASg Neut) => pv ! (PSF (ASg Neut)) + "сь"++"бы"; - VSUB APl => pv ! (PSF APl) + "сь"+"бы" ; - VIND (ASg _) (VPresent P1) => - -- case av.asp of { Imperfective => - av.s ! (VIND (ASg Masc) (VPresent P1)) + "сь" ; - -- Perfective = > nonExist - -- } ; - VIND (ASg _) (VPresent P2) => av.s ! (VIND (ASg Masc) (VPresent P2))+ "ся" ; - VIND (ASg _) (VPresent P3) => av.s ! (VIND (ASg Masc) (VPresent P3))+ "ся" ; - VIND APl (VPresent P1) => av.s !( VIND APl (VPresent P1)) + "ся" ; - VIND APl (VPresent P2) => av.s !( VIND APl (VPresent P2)) + "сь" ; - VIND APl (VPresent P3) => av.s !( VIND APl (VPresent P3)) + "ся" ; - VIND (ASg _) (VFuture P1) => av.s ! (VIND (ASg Masc) (VFuture P1)) + "сь"; - VIND (ASg _) (VFuture P2) => av.s! (VIND (ASg Masc) (VFuture P2) )+ "ся"; - VIND (ASg _) (VFuture P3) => av.s! (VIND (ASg Masc) (VFuture P3)) + "ся"; - VIND APl (VFuture P1) => av.s! (VIND APl (VFuture P1) )+ "ся"; - VIND APl (VFuture P2) => av.s! (VIND APl (VFuture P2) )+ "сь"; - VIND APl (VFuture P3) => av.s! (VIND APl (VFuture P3)) + "ся"; - VIND (ASg Masc) VPast => av.s ! (VIND (ASg Masc) VPast ) + "ся"; - VIND (ASg Fem) VPast => av.s ! (VIND (ASg Fem) VPast ) + "сь"; - VIND (ASg Neut) VPast => av.s ! (VIND (ASg Neut) VPast) + "сь"; - VIND APl VPast => av.s ! (VIND APl VPast ) + "сь" - } ; - asp = av.asp -}; - --- Generation the imperfective active pattern given --- a number of basic conjugation forms. - -oper - imperfectiveActivePattern : Str -> Str -> PresentVerb -> PastVerb -> AspectVoice = - \inf, imper, presentFuture, past -> { s= table { - VINF => inf ; - VIMP Sg P1 => "давайте" ++ inf ; - VIMP Pl P1 => "давайте" ++ inf ; - VIMP Sg P2 => imper ; - VIMP Pl P2 => imper+"те" ; - VIMP Sg P3 => "пусть" ++ presentFuture ! (PRF (ASg Masc) P3) ; - VIMP Pl P3 => "пусть" ++ presentFuture ! (PRF APl P3) ; - VSUB (ASg Masc) => past ! (PSF (ASg Masc)) ++"бы"; - VSUB (ASg Fem) => past ! (PSF (ASg Fem)) ++"бы"; - VSUB (ASg Neut) => past ! (PSF (ASg Neut) )++"бы"; - VSUB APl => past ! (PSF APl) ++"бы"; - VIND (ASg _) (VPresent P1) => presentFuture ! ( PRF (ASg Masc) P1); - VIND (ASg _) (VPresent P2) => presentFuture! (PRF (ASg Masc) P2) ; - VIND (ASg _) (VPresent P3) => presentFuture ! (PRF (ASg Masc) P3) ; - VIND APl (VPresent P1) => presentFuture ! (PRF APl P1); - VIND APl (VPresent P2) => presentFuture ! (PRF APl P2); - VIND APl (VPresent P3) => presentFuture ! (PRF APl P3); - VIND (ASg _) (VFuture P1) => "буду" ++ inf ; - VIND (ASg _) (VFuture P2) => "будешь" ++ inf ; - VIND (ASg _) (VFuture P3) => "будет" ++ inf ; - VIND APl (VFuture P1) => "будем" ++ inf ; - VIND APl (VFuture P2) => "будете" ++ inf ; - VIND APl (VFuture P3) => "будут" ++ inf ; - VIND (ASg Masc) VPast => past ! (PSF (ASg Masc)) ; - VIND (ASg Fem) VPast => past ! (PSF (ASg Fem) ) ; - VIND (ASg Neut) VPast => past ! (PSF (ASg Neut)) ; - VIND APl VPast => past ! (PSF APl) - } ; - asp = Imperfective -} ; - - oper perfectiveActivePattern: Str -> Str -> PresentVerb -> PastVerb -> AspectVoice = - \inf, imper, presentFuture, past -> { s= table { - VINF => inf ; - VIMP Sg P1 => "давайте"++ presentFuture ! (PRF (ASg Masc) P1); - VIMP Pl P1 => "давайте" ++ presentFuture ! (PRF APl P1); - VIMP Sg P2 => imper ; - VIMP Pl P2 => imper+"те" ; - VIMP Sg P3 => "пусть" ++ presentFuture ! (PRF (ASg Masc) P3) ; - VIMP Pl P3 => "пусть" ++ presentFuture ! (PRF APl P3) ; - VSUB (ASg Masc) => past ! (PSF (ASg Masc)) ++"бы"; - VSUB (ASg Fem) => past ! (PSF (ASg Fem)) ++"бы"; - - VSUB (ASg Neut) => past ! (PSF (ASg Neut) )++"бы"; - VSUB APl => past ! (PSF APl) ++"бы"; - VIND (ASg _) (VPresent _) => [] ; - VIND APl (VPresent P1) => nonExist ; - VIND APl (VPresent P2) => nonExist ; - VIND APl (VPresent P3) => [] ; - VIND (ASg _) (VFuture P1) => presentFuture ! (PRF (ASg Masc) P1) ; - VIND (ASg _) (VFuture P2) => presentFuture ! (PRF (ASg Masc) P2) ; - VIND (ASg _) (VFuture P3) => presentFuture ! (PRF (ASg Masc) P3) ; - VIND APl (VFuture P1) => presentFuture ! (PRF APl P1) ; - VIND APl (VFuture P2) => presentFuture ! (PRF APl P2) ; - VIND APl (VFuture P3) => presentFuture ! (PRF APl P3) ; - VIND (ASg Masc) VPast => past ! (PSF (ASg Masc)) ; - VIND (ASg Fem) VPast => past ! (PSF (ASg Fem) ) ; - VIND (ASg Neut) VPast => past ! (PSF (ASg Neut)) ; - VIND APl VPast => past ! (PSF APl) - } ; - asp = Perfective -} ; - -----2 Proper names are a simple kind of noun phrases. --- -oper - ProperName : Type = {s : Case => Str ; g : Gender ; anim : Animacy} ; --- --- mkCNProperName : CommNoun -> ProperName = \cn -> ---{s = \\c => cn.s! (SF Sg c); g=cn.g; anim = cn.anim }; --- - mkProperNameMasc : Str -> Animacy -> ProperName = \ivan, anim -> - { s = table { Nom => ivan ; - Gen => ivan + "а"; - Dat => ivan + "у"; - Acc => case anim of - { Animate => ivan + "а"; - Inanimate => ivan - }; - Inst => ivan + "ом"; - Prepos => ivan + "е" } ; - g = Masc; anim = anim }; - - mkProperNameFem : Str -> Animacy -> ProperName = \masha, anim -> - { s = table { Nom => masha + "а"; - Gen => masha + "и"; - Dat => masha + "е"; - Acc => masha + "у"; - Inst => masha + "ей"; - Prepos => masha + "е" } ; - g = Fem ; anim = anim }; - -}; - - +--# -path=.:../../prelude:../common + +--1 A Simple Russian Resource Morphology + +-- Aarne Ranta, Janna Khegai 2006 + +-- This resource morphology contains definitions of the lexical entries +-- needed in the resource syntax. +-- It moreover contains copies of the most usual inflectional patterns. + +-- We use the parameter types and word classes defined for morphology. + +-- Note: mkPassive operation is at the moment incorrect. Low-level ending-analysis +-- is needed to fix the operation. + +resource MorphoRus = ResRus ** open Prelude, (Predef=Predef) in { + +flags coding=utf8 ; + +----2 Personal (together with possesive) pronouns. +oper pronYa: Pronoun = + { s = table { + PF Nom _ NonPoss => "я" ; + PF Gen _ NonPoss => "меня" ; + PF Dat _ NonPoss => "мне" ; + PF Acc _ NonPoss => "меня" ; + PF Inst _ NonPoss => "мной" ; + PF Prepos _ NonPoss => "мне" ; + PF Prepos2 _ NonPoss => "мне" ; + PF Nom _ (Poss (ASg Masc)) => "мой" ; + PF Gen _ (Poss (ASg Masc)) => "моего" ; + PF Dat _ (Poss (ASg Masc)) => "моему" ; + PF Acc _ (Poss (ASg Masc)) => "моего" ; + PF Inst _ (Poss (ASg Masc)) => "моим" ; + PF Prepos _ (Poss (ASg Masc)) => "моём" ; + PF Prepos2 _ (Poss (ASg Masc)) => "моём" ; + PF Nom _ (Poss (ASg Fem)) => "моя" ; + PF Gen _ (Poss (ASg Fem)) => "моей" ; + PF Dat _ (Poss (ASg Fem)) => "моей" ; + PF Acc _ (Poss (ASg Fem)) => "мою" ; + PF Inst _ (Poss (ASg Fem)) => "моею" ; + PF Prepos _ (Poss (ASg Fem)) => "моей" ; + PF Prepos2 _ (Poss (ASg Fem)) => "моей" ; + PF Nom _ (Poss (ASg Neut)) => "моё" ; + PF Gen _ (Poss (ASg Neut)) => "моего" ; + PF Dat _ (Poss (ASg Neut)) => "моему" ; + PF Acc _ (Poss (ASg Neut)) => "моё" ; + PF Inst _ (Poss (ASg Neut)) => "моим" ; + PF Prepos _ (Poss (ASg Neut)) => "моём" ; + PF Prepos2 _ (Poss (ASg Neut)) => "моём" ; + PF Nom _ (Poss APl) => "мои" ; + PF Gen _ (Poss APl)=> "моих" ; + PF Dat _ (Poss APl) => "моим" ; + PF Acc _ (Poss APl) => "моих" ; + PF Inst _ (Poss APl) => "моими" ; + PF Prepos _ (Poss APl) => "моих"; + PF Prepos2 _ (Poss APl) => "моих" + } ; + g = PNoGen ; + n = Sg ; + p = P1 ; + pron = True + } ; + +oper pronTu: Pronoun = + { s = table { + PF Nom _ NonPoss => "ты" ; + PF Gen _ NonPoss => "тебя" ; + PF Dat _ NonPoss => "тебе" ; + PF Acc _ NonPoss => "тебя" ; + PF Inst _ NonPoss => "тобой" ; + PF Prepos _ NonPoss => ["о тебе"] ; + PF Prepos2 _ NonPoss => ["о тебе"] ; + PF Nom _ (Poss (ASg Masc)) => "твой" ; + PF Gen _ (Poss (ASg Masc)) => "твоего" ; + PF Dat _ (Poss (ASg Masc)) => "твоему" ; + PF Acc _ (Poss (ASg Masc)) => "твоего" ; + PF Inst _ (Poss (ASg Masc)) => "твоим" ; + PF Prepos _ (Poss (ASg Masc)) => "твоём" ; + PF Prepos2 _ (Poss (ASg Masc)) => "твоём" ; + PF Nom _ (Poss (ASg Fem)) => "твоя" ; + PF Gen _ (Poss (ASg Fem)) => "твоей" ; + PF Dat _ (Poss (ASg Fem)) => "твоей" ; + PF Acc _ (Poss (ASg Fem)) => "твою" ; + PF Inst _ (Poss (ASg Fem)) => "твоею" ; + PF Prepos _ (Poss (ASg Fem)) => "твоей" ; + PF Prepos2 _ (Poss (ASg Fem)) => "твоей" ; + PF Nom _ (Poss (ASg Neut)) => "твоё" ; + PF Gen _ (Poss (ASg Neut)) => "твоего" ; + PF Dat _ (Poss (ASg Neut)) => "твоему" ; + PF Acc _ (Poss (ASg Neut)) => "твоё" ; + PF Inst _ (Poss (ASg Neut)) => "твоим" ; + PF Prepos _ (Poss (ASg Neut)) => "твоём" ; + PF Prepos2 _ (Poss (ASg Neut)) => "твоём" ; + PF Nom _ (Poss APl) => "твои" ; + PF Gen _ (Poss APl)=> "твоих" ; + PF Dat _ (Poss APl) => "твоим" ; + PF Acc _ (Poss APl) => "твоих" ; + PF Inst _ (Poss APl) => "твоими" ; + PF Prepos _ (Poss APl) => "твоих"; + PF Prepos2 _ (Poss APl) => "твоих" + } ; + g = PNoGen ; + n = Sg ; + p = P2 ; + pron = True + } ; + +oper pronOn: Pronoun = + { s = table { + PF Nom _ NonPoss => "он" ; + PF Gen No NonPoss => "его" ; + PF Gen Yes NonPoss => "него" ; + PF Dat No NonPoss => "ему" ; + PF Dat Yes NonPoss => "нему" ; + PF Acc No NonPoss => "его" ; + PF Acc Yes NonPoss => "него" ; + PF Inst No NonPoss => "им" ; + PF Inst Yes NonPoss => "ним" ; + PF Prepos _ NonPoss => "нём" ; + PF Prepos2 _ NonPoss => "нём" ; + PF _ _ (Poss _) => "его" + } ; + g = PGen Masc ; + n = Sg ; + p = P3 ; + pron = True + } ; + +oper pronOna: Pronoun = + { s = table { + PF Nom _ NonPoss => "она" ; + PF Gen No NonPoss => "её" ; + PF Gen Yes NonPoss => "неё" ; + PF Dat No NonPoss => "ей" ; + PF Dat Yes NonPoss => "ней" ; + PF Acc No NonPoss => "её" ; + PF Acc Yes NonPoss => "неё" ; + PF Inst No NonPoss => "ей" ; + PF Inst Yes NonPoss => "ней" ; + PF Prepos _ NonPoss => ["о ней"] ; + PF Prepos2 _ NonPoss => ["о ней"] ; + PF _ _ (Poss _ ) => "её" + } ; + g = PGen Fem ; + n = Sg ; + p = P3 ; + pron = True + } ; + +oper pronOno: Pronoun = + { s = table { + PF Nom _ NonPoss => "оно" ; + PF Gen No NonPoss => "его" ; + PF Gen Yes NonPoss => "него" ; + PF Dat No NonPoss => "ему" ; + PF Dat Yes NonPoss => "нему" ; + PF Acc No NonPoss => "его" ; + PF Acc Yes NonPoss => "него" ; + PF Inst No NonPoss => "им" ; + PF Inst Yes NonPoss => "ним" ; + PF Prepos _ NonPoss => "нём" ; + PF Prepos2 _ NonPoss => "нём" ; + PF _ _ (Poss _ ) => "его" + } ; + g = PGen Neut ; + n = Sg ; + p = P3 ; + + pron = True + } ; + +oper pronMu: Pronoun = + { s = table { + PF Nom _ NonPoss => "мы" ; + PF Gen _ NonPoss => "нас" ; + PF Dat _ NonPoss => "нам" ; + PF Acc _ NonPoss => "нас" ; + PF Inst _ NonPoss => "нами" ; + PF Prepos _ NonPoss => ["о нас"] ; + PF Prepos2 _ NonPoss => ["о нас"] ; + PF Nom _ ((Poss (ASg Masc))) => "наш" ; + PF Gen _ (Poss (ASg Masc)) => "нашего" ; + PF Dat _ ((Poss (ASg Masc))) => "нашему" ; + PF Acc _ ((Poss (ASg Masc))) => "нашего" ; + PF Inst _ (Poss (ASg Masc)) => "нашим" ; + PF Prepos _ (Poss (ASg Masc)) => "нашем" ; + PF Prepos2 _ (Poss (ASg Masc)) => "нашем" ; + PF Nom _ (Poss (ASg Fem)) => "наша" ; + PF Gen _ (Poss (ASg Fem)) => "нашей" ; + PF Dat _ (Poss (ASg Fem)) => "нашей" ; + PF Acc _ (Poss (ASg Fem)) => "нашу" ; + PF Inst _ (Poss (ASg Fem)) => "нашею" ; + PF Prepos _ (Poss (ASg Fem)) => "нашей" ; + PF Prepos2 _ (Poss (ASg Fem)) => "нашей" ; + PF Nom _ (Poss (ASg Neut)) => "наше" ; + PF Gen _ (Poss (ASg Neut)) => "нашего" ; + PF Dat _ (Poss (ASg Neut)) => "нашему" ; + PF Acc _ (Poss (ASg Neut)) => "наше" ; + PF Inst _ (Poss (ASg Neut)) => "нашим" ; + PF Prepos _ (Poss (ASg Neut)) => "нашем" ; + PF Prepos2 _ (Poss (ASg Neut)) => "нашем" ; + PF Nom _ (Poss APl) => "наши" ; + PF Gen _ (Poss APl)=> "наших" ; + PF Dat _ (Poss APl) => "нашим" ; + PF Acc _ (Poss APl) => "наших" ; + PF Inst _ (Poss APl) => "нашими" ; + PF Prepos _ (Poss APl) => "наших"; + PF Prepos2 _ (Poss APl) => "наших" + }; + g = PNoGen ; + n = Pl ; + p = P1 ; + pron = True + } ; + +oper pronVu: Pronoun = + { s = table { + PF Nom _ NonPoss => "вы" ; + PF Gen _ NonPoss => "вас" ; + PF Dat _ NonPoss => "вам" ; + PF Acc _ NonPoss => "вас" ; + PF Inst _ NonPoss => "вами" ; + PF Prepos _ NonPoss => "вас" ; + PF Prepos2 _ NonPoss => "вас" ; + PF Nom _ (Poss (ASg Masc)) => "ваш" ; + PF Gen _ (Poss (ASg Masc)) => "вашего" ; + PF Dat _ (Poss (ASg Masc)) => "вашему" ; + PF Acc _ (Poss (ASg Masc)) => "вашего" ; + PF Inst _ (Poss (ASg Masc)) => "вашим" ; + PF Prepos _ (Poss (ASg Masc)) => "вашем" ; + PF Prepos2 _ (Poss (ASg Masc)) => "вашем" ; + PF Nom _ (Poss (ASg Fem)) => "ваша" ; + PF Gen _ (Poss (ASg Fem)) => "вашей" ; + PF Dat _ (Poss (ASg Fem)) => "вашей" ; + PF Acc _ (Poss (ASg Fem)) => "вашу" ; + PF Inst _ (Poss (ASg Fem)) => "вашею" ; + PF Prepos _ (Poss (ASg Fem)) => "вашей" ; + PF Prepos2 _ (Poss (ASg Fem)) => "вашей" ; + PF Nom _ (Poss (ASg Neut)) => "ваше" ; + PF Gen _ (Poss (ASg Neut)) => "вашего" ; + PF Dat _ (Poss (ASg Neut)) => "вашему" ; + PF Acc _ (Poss (ASg Neut)) => "ваше" ; + PF Inst _ (Poss (ASg Neut)) => "вашим" ; + PF Prepos _ (Poss (ASg Neut)) => "вашем" ; + PF Prepos2 _ (Poss (ASg Neut)) => "вашем" ; + PF Nom _ (Poss APl) => "ваши" ; + PF Gen _ (Poss APl)=> "ваших" ; + PF Dat _ (Poss APl) => "вашим" ; + PF Acc _ (Poss APl) => "ваших" ; + PF Inst _ (Poss APl) => "вашими" ; + PF Prepos _ (Poss APl) => "ваших"; + PF Prepos2 _ (Poss APl) => "ваших" + }; + g = PNoGen ; + n = Pl ; + p = P2 ; + pron = True + } ; + +oper pronOni: Pronoun = + { s = table { + PF Nom _ NonPoss => "они" ; + PF Gen No NonPoss => "их" ; + PF Gen Yes NonPoss => "них" ; + PF Dat No NonPoss => "им" ; + PF Dat Yes NonPoss => "ним" ; + PF Acc No NonPoss => "их" ; + PF Acc Yes NonPoss => "них" ; + PF Inst No NonPoss => "ими" ; + PF Inst Yes NonPoss => "ними" ; + PF Prepos _ NonPoss => ["о них"] ; + PF Prepos2 _ NonPoss => ["о них"] ; + PF _ _ (Poss _) => "их" + } ; + g = PNoGen ; + n = Pl ; + p = P3 ; + pron = True + } ; + +oper pronKto: Pronoun = + { s = table { + PF Nom _ _ => "кто" ; + PF Gen _ _ => "кого" ; + PF Dat _ _ => "кому" ; + PF Acc _ _ => "кого" ; + PF Inst _ _ => "кем" ; + PF Prepos _ _ => "ком"; + PF Prepos2 _ _ => "ком" + } ; + g = PGen Masc; + n = Sg ; + p = P3 ; + pron = False + } ; + +oper pronKtoTo: Pronoun = + { s = table { + PF Nom _ _ => "кто-то" ; + PF Gen _ _ => "кого-то" ; + PF Dat _ _ => "кому-то" ; + PF Acc _ _ => "кого-то" ; + PF Inst _ _ => "кем-то" ; + PF Prepos _ _ => "ком-то"; + PF Prepos2 _ _ => "ком-то" + } ; + g = PGen Masc; + n = Sg ; + p = P3 ; + pron = False + } ; + +oper pronChtoTo: Pronoun = + { s = table { + PF Nom _ _ => "что-то" ; + PF Gen _ _ => "чего-то" ; + PF Dat _ _ => "чему-то" ; + PF Acc _ _ => "что-то" ; + PF Inst _ _ => "чем-то" ; + PF Prepos _ _ => "чём-то"; + PF Prepos2 _ _ => "чём-то" + } ; + g = PGen Masc; + n = Sg ; + p = P3 ; + pron = False + } ; + +oper pronChto: Pronoun = + { s = table { + PF Nom _ _ => "что" ; + PF Gen _ _ => "чего" ; + PF Dat _ _ => "чему" ; + PF Acc _ _ => "что" ; + PF Inst _ _ => "чем" ; + PF Prepos _ _ => "чём"; + PF Prepos2 _ _ => "чём" + } ; + g = PGen Masc; + n = Sg ; + p = P3 ; + pron = False + } ; + +oper pronEti: Pronoun = + { s = table { + PF Nom _ _ => "эти" ; + PF Gen _ _ => "этих" ; + PF Dat _ _ => "этим" ; + PF Acc _ _ => "этих" ; + PF Inst _ _ => "этими" ; + PF Prepos _ _ => "этих"; + PF Prepos2 _ _ => "этих" + } ; + n = Pl; + p = P3; + g= PGen Fem ; + anim = Animate ; + pron = False + } ; + +oper pronTe: Pronoun = + { s = table { + PF Nom _ _ => "те" ; + PF Gen _ _ => "тех" ; + PF Dat _ _ => "тем" ; + PF Acc _ _ => "тех" ; + PF Inst _ _ => "теми" ; + PF Prepos _ _ => "тех"; + PF Prepos2 _ _ => "тех" + } ; + n = Pl; + p = P3; + g=PGen Fem ; + anim = Animate ; + pron = False + } ; + + +--oper pronNikto: Pronoun = +-- { s = table { +-- PF Nom _ _ => "никто" ; +-- PF Gen _ _ => "никого" ; +-- PF Dat _ _ => "никому" ; +-- PF Acc _ _ => "никого" ; +-- PF Inst _ _ => "никем" ; +-- PF Prepos _ _ => ["ни о ком"] -- only together with a preposition; +-- PF Prepos2 _ _ => ["ни о ком"] -- only together with a preposition +-- } ; +-- g = PGen Masc; +-- n = Sg ; +-- p = P3 ; +-- pron = False +-- } ; +-- +--oper pronNichto: Pronoun = +-- { s = table { +-- PF Nom _ _ => "ничто" ; +-- PF Gen _ _ => "ничего" ; +-- PF Dat _ _ => "ничему" ; +-- PF Acc _ _ => "ничего" ; +-- PF Inst _ _ => "ничем" ; +-- PF Prepos _ _ => ["ни о чём"] -- only together with preposition; +-- PF Prepos2 _ _ => ["ни о чём"] -- only together with preposition +-- } ; +-- g = PGen Masc; +-- n = Sg ; +-- p = P3 ; +-- pron = False +-- } ; +-- + +oper pronVseInanimate: Pronoun = + { s = table { + PF Nom _ _ => "всё" ; + PF Gen _ _ => "всего" ; + PF Dat _ _ => "всему" ; + PF Acc _ _ => "всё" ; + PF Inst _ _ => "всем" ; + PF Prepos _ _ => "всём"; + PF Prepos2 _ _ => "всём" + } ; + g = PGen Neut; + n = Sg ; + p = P3 ; + pron = False + } ; + + + +----2 Nouns +-- +---- Help type SubstFormDecl is introduced to reduce repetition in +---- the declination definitions. It allows us to define a declination type, +---- namely, the String component "s" of the CommNoun type +---- without any reference to the Gender parameter "g". +-- +oper + CommNoun = {s : SubstForm => Str ; g : Gender ; anim : Animacy } ; + SubstFormDecl = SS1 SubstForm ; +-- +--oper gorlo : CommNoun = l_oEndInAnimateDecl "горл" ; +--oper koleno : CommNoun = oEndInAnimateDecl "колен" ; +--oper plecho : CommNoun = oEndInAnimateDecl "плеч" ; +--oper ukho : CommNoun = oEnd_KH_InAnimateDecl "у" ; +--oper zhivot : CommNoun = nullEndInAnimateDecl1 "живот" ; +--oper grud : CommNoun = softSignEndDeclFem "груд" ; +--oper ruka : CommNoun = aEndG_K_KH_Decl "рук" ; +--oper spina : CommNoun = aEndInAnimateDecl "спин" ; +--oper stopa : CommNoun = aEndInAnimateDecl "стоп" ; +--oper sreda : CommNoun = aEndInAnimateDecl "сред" ; +--oper pyatnica : CommNoun = aEndInAnimateDecl "пятниц" ; +--oper subbota : CommNoun = aEndInAnimateDecl "суббот" ; +--oper astma : CommNoun = aEndInAnimateDecl "астм" ; +--oper angina : CommNoun = aEndInAnimateDecl "ангин" ; +--oper revmatizm : CommNoun = nullEndInAnimateDecl1 "ревматизм" ; +--oper zapor : CommNoun = nullEndInAnimateDecl1 "запор" ; +--oper ponos : CommNoun = nullEndInAnimateDecl1 "понос" ; +--oper artrit : CommNoun = nullEndInAnimateDecl1 "артрит" ; +--oper diabet : CommNoun = nullEndInAnimateDecl1 "диабет" ; +--oper tsistit : CommNoun = nullEndInAnimateDecl1 "цистит" ; +--oper izzhoga : CommNoun = aEndG_K_KH_Decl "изжог" ; +--oper allergiya : CommNoun = i_yaEndDecl "аллерги" ; +-- +--oper viagra : CommNoun = aEndInAnimateDecl "виагр" ; +--oper antidepressant : CommNoun = nullEndInAnimateDecl1 "антидепрессант" ; +--oper insulin : CommNoun = nullEndInAnimateDecl1 "инсулин" ; +--oper vitamin : CommNoun = nullEndInAnimateDecl1 "витамин" ; +--oper antibiotik : CommNoun = nullEndInAnimateDecl3 "антибиотик" ; +--oper ponedelnik : CommNoun = nullEndInAnimateDecl3 "понедельник" ; +--oper vtornik : CommNoun = nullEndInAnimateDecl3 "вторник" ; +--oper chetverg : CommNoun = nullEndInAnimateDecl3 "четверг" ; +-- +--oper kaplya : CommNoun = (l_yaEndInAnimateDecl "кап") ** {g = Fem; anim = Inanimate} ; +--oper snotvornoe : CommNoun = oeEndInAnimateDecl "снотворн" ; +--oper uspokoitelnoe : CommNoun = oeEndInAnimateDecl "успокоительн" ; +--oper slabitelnoe : CommNoun = oeEndInAnimateDecl "слабительн" ; +-- +--oper urolog : CommNoun = nullEndAnimateDecl "уролог" ; +--oper ginekolog : CommNoun = nullEndAnimateDecl "гинеколог" ; +--oper nevropatolog : CommNoun = nullEndAnimateDecl "невропатолог" ; +--oper dermatolog : CommNoun = nullEndAnimateDecl "дерматолог" ; +--oper kardiolog : CommNoun = nullEndAnimateDecl "кардиолог" ; +--oper terapevt : CommNoun = nullEndAnimateDecl2 "терапевт" ; +--oper okulist : CommNoun = nullEndAnimateDecl2 "окулист" ; +--oper pediatr : CommNoun = nullEndAnimateDecl2 "педиатр" ; +--oper khirurg : CommNoun = nullEndAnimateDecl2 "хирург" ; +-- +--oper muzhchina : CommNoun = (aEndAnimateDecl "мужчин") ** { g = Masc ; anim = Animate } ; +--oper zhenchina : CommNoun = (aEndAnimateDecl "женщин") ** { g = Fem ; anim = Animate } ; +--oper mama : CommNoun = (aEndAnimateDecl "мам")**{ g = Fem ; anim = Animate } ; +--oper cena : CommNoun = (aEndAnimateDecl "цен") ** { g = Fem ; anim = Inanimate } ; +-- + +oper aEndAnimateDecl: Str -> SubstFormDecl = \muzhchin -> +{s = table { + SF Sg Nom => muzhchin+"а" ; + SF Sg Gen => muzhchin+"ы" ; + SF Sg Dat => muzhchin+"е" ; + SF Sg Acc => muzhchin+"у" ; + SF Sg Inst => muzhchin+"ой" ; + SF Sg Prepos => muzhchin +"е" ; + SF Sg Prepos2 => muzhchin +"е" ; + SF Pl Nom => muzhchin +"ы" ; + SF Pl Gen => muzhchin ; SF Pl Dat => muzhchin+"ам" ; + SF Pl Acc => muzhchin ; + SF Pl Inst => muzhchin+"ами" ; + SF Pl Prepos => muzhchin+"ах" ; + SF Pl Prepos2 => muzhchin+"ах" } + } ; + + +-- oper stomatolog : CommNoun = nullEndAnimateDecl "стоматолог" ; + +oper nullEndInAnimateDecl: Str -> CommNoun = \stomatolog -> + { s = table + { SF Sg Nom => stomatolog ; + SF Sg Gen => stomatolog+"а" ; + SF Sg Dat => stomatolog+"у" ; + SF Sg Acc => stomatolog +"а" ; + SF Sg Inst => stomatolog+"ом" ; + SF Sg Prepos => stomatolog+"е" ; + SF Sg Prepos2 => stomatolog+"е" ; + SF Pl Nom => stomatolog+"и" ; + SF Pl Gen => stomatolog+"ов" ; + SF Pl Dat => stomatolog+"ам" ; + SF Pl Acc => stomatolog+"ов" ; + SF Pl Inst => stomatolog+"ами" ; + SF Pl Prepos => stomatolog+"ах" ; + SF Pl Prepos2 => stomatolog+"ах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper nullEndAnimateDecl: Str -> CommNoun = \stomatolog -> + { s = table + { SF Sg Nom => stomatolog ; + SF Sg Gen => stomatolog+"а" ; + SF Sg Dat => stomatolog+"у" ; + SF Sg Acc => stomatolog +"а" ; + SF Sg Inst => stomatolog+"ом" ; + SF Sg Prepos => stomatolog+"е" ; + SF Sg Prepos2 => stomatolog+"е" ; + SF Pl Nom => stomatolog+"и" ; + SF Pl Gen => stomatolog+"ов" ; + SF Pl Dat => stomatolog+"ам" ; + SF Pl Acc => stomatolog+"ов" ; + SF Pl Inst => stomatolog+"ами" ; + SF Pl Prepos => stomatolog+"ах" ; + SF Pl Prepos2 => stomatolog+"ах" + } ; + g = Masc ; anim = Animate + } ; + +oper nullEndAnimateDecl2: Str -> CommNoun = \stomatolog -> + {s = table + { SF Sg Nom => stomatolog ; + SF Sg Gen => stomatolog+"а" ; + SF Sg Dat => stomatolog+"у" ; + SF Sg Acc => stomatolog +"а" ; + SF Sg Inst => stomatolog+"ом" ; + SF Sg Prepos => stomatolog+"е" ; + SF Sg Prepos2 => stomatolog+"е" ; + SF Pl Nom => stomatolog+"ы" ; + SF Pl Gen => stomatolog+"ов" ; + SF Pl Dat => stomatolog+"ам" ; + SF Pl Acc => stomatolog+"ов" ; + SF Pl Inst => stomatolog+"ами" ; + SF Pl Prepos => stomatolog+"ах" ; + SF Pl Prepos2 => stomatolog+"ах" + } ; + g = Masc ; anim = Animate + } ; + +--oper gripp : CommNoun = nullEndInAnimateDecl1 "грипп" ; +--oper bar : CommNoun = nullEndInAnimateDecl1 "бар" ; +--oper telefon: CommNoun = nullEndInAnimateDecl1 "телефон" ; +--oper restoran : CommNoun = nullEndInAnimateDecl1 "ресторан" ; +-- +---- Note: Plural form of the "грипп" (influenza) is a bit doubious +---- However, according to http://starling.rinet.ru/morph.htm it exists. +---- so we also keep it. + +oper nullEndInAnimateDeclPepel: Str -> CommNoun = \gripp -> + {s = table + { SF Sg Nom => gripp +"ел"; + SF Sg Gen => gripp+"ла" ; + SF Sg Dat => gripp+"лу" ; + SF Sg Acc => gripp +"ел"; + SF Sg Inst => gripp+"лом" ; + SF Sg Prepos => gripp+"ле" ; + SF Sg Prepos2 => gripp+"ле" ; + SF Pl Nom => gripp+"лы" ; + SF Pl Gen => gripp+"лов" ; + SF Pl Dat => gripp+"лам" ; + SF Pl Acc => gripp +"лы"; + SF Pl Inst => gripp+"лами" ; + SF Pl Prepos => gripp+"лах"; + SF Pl Prepos2 => gripp+"лах" + } ; + g = Masc ; anim = Inanimate + + } ; + +oper nullEndInAnimateDecl1: Str -> CommNoun = \gripp -> + {s = table + { SF Sg Nom => gripp ; + SF Sg Gen => gripp+"а" ; + SF Sg Dat => gripp+"у" ; + SF Sg Acc => gripp ; + SF Sg Inst => gripp+"ом" ; + SF Sg Prepos => gripp+"е" ; + SF Sg Prepos2 => gripp+"е" ; + SF Pl Nom => gripp+"ы" ; + SF Pl Gen => gripp+"ов" ; + SF Pl Dat => gripp+"ам" ; + SF Pl Acc => gripp +"ы"; + SF Pl Inst => gripp+"ами" ; + SF Pl Prepos => gripp+"ах"; + SF Pl Prepos2 => gripp+"ах" + } ; + g = Masc ; anim = Inanimate + + } ; + +oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> + {s = table + { SF Sg Nom => brat ; + SF Sg Gen => brat+"а" ; + SF Sg Dat => brat+"у" ; + SF Sg Acc => brat +"а"; + SF Sg Inst => brat+"ом" ; + SF Sg Prepos => brat+"е" ; + SF Sg Prepos2 => brat+"е" ; + SF Pl Nom => brat+"ья" ; + SF Pl Gen => brat+"ьев" ; + SF Pl Dat => brat+"ьям" ; + SF Pl Acc => brat +"ьев"; + SF Pl Inst => brat+"ьями" ; + SF Pl Prepos => brat+"ьяах"; + SF Pl Prepos2 => brat+"ьяах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> + {s = table + { SF Sg Nom => brat ; + SF Sg Gen => brat+"а" ; + SF Sg Dat => brat+"у" ; + SF Sg Acc => brat +"а"; + SF Sg Inst => brat+"ом" ; + SF Sg Prepos => brat+"е" ; + SF Sg Prepos2 => brat+"е" ; + SF Pl Nom => brat+"ья" ; + SF Pl Gen => brat+"ьев" ; + SF Pl Dat => brat+"ьям" ; + SF Pl Acc => brat +"ьев"; + SF Pl Inst => brat+"ьями" ; + SF Pl Prepos => brat+"ьяах"; + SF Pl Prepos2 => brat+"ьяах" + } ; + g = Masc ; anim = Animate + } ; + +--oper adres: CommNoun = nullEndInAnimateDecl2 "адрес" ; +--oper dom : CommNoun = nullEndInAnimateDecl2 "дом" ; +--oper svet : CommNoun = nullEndInAnimateDecl2 "свет" ; + +oper nullEndInAnimateDecl2: Str -> CommNoun = \gripp -> + {s = table + { SF Sg Nom => gripp ; + SF Sg Gen => gripp+"а" ; + SF Sg Dat => gripp+"у" ; + SF Sg Acc => gripp ; + SF Sg Inst => gripp+"ом" ; + SF Sg Prepos => gripp+"е" ; + SF Sg Prepos2 => gripp+"е" ; + SF Pl Nom => gripp+"а" ; + SF Pl Gen => gripp+"ов" ; + SF Pl Dat => gripp+"ам" ; + SF Pl Acc => gripp +"а"; + SF Pl Inst => gripp+"ами" ; + SF Pl Prepos => gripp+"ах"; + SF Pl Prepos2 => gripp+"ах" + } ; + g = Masc ; anim = Inanimate + } ; + +--oper nullEndInAnimateDecl3: Str -> CommNoun = \antibiotik -> +-- {s = table +-- { SF Sg Nom => antibiotik ; +-- SF Sg Gen => antibiotik+"а" ; +-- SF Sg Dat => antibiotik+"у" ; +-- SF Sg Acc => antibiotik ; +-- SF Sg Inst => antibiotik+"ом" ; +-- SF Sg Prepos => antibiotik+"е" ; +-- SF Sg Prepos2 => antibiotik+"е" ; +-- SF Pl Nom => antibiotik+"и" ; +-- SF Pl Gen => antibiotik+"ов" ; +-- SF Pl Dat => antibiotik+"ам" ; +-- SF Pl Acc => antibiotik +"и"; +-- SF Pl Inst => antibiotik+"ами" ; +-- SF Pl Prepos => antibiotik+"ах"; +-- SF Pl Prepos2 => antibiotik+"ах" +-- } ; +-- g = Masc ; anim = Inanimate +-- } ; +-- +--oper obezbolivauchee : CommNoun = eeEndInAnimateDecl "обезболивающ" ; + +oper eeEndInAnimateDecl: Str -> CommNoun = \obezbolivauch -> + { s = table + { SF Sg Nom => obezbolivauch +"ее"; + SF Sg Gen => obezbolivauch+"его" ; + SF Sg Dat => obezbolivauch+"ему" ; + SF Sg Acc => obezbolivauch +"ее"; + SF Sg Inst => obezbolivauch+"им" ; + SF Sg Prepos => obezbolivauch+"ем" ; + SF Sg Prepos2 => obezbolivauch+"ем" ; + SF Pl Nom => obezbolivauch+"ие" ; + SF Pl Gen => obezbolivauch+"их" ; + SF Pl Dat => obezbolivauch+"им" ; + SF Pl Acc => obezbolivauch+"ие" ; + SF Pl Inst => obezbolivauch+"ими" ; + SF Pl Prepos => obezbolivauch+"их"; + SF Pl Prepos2 => obezbolivauch+"их" + } ; + g = Neut ; anim = Inanimate + } ; + +oper oeEndInAnimateDecl: Str -> CommNoun = \snotvorn -> + { s = table + { SF Sg Nom => snotvorn +"ое"; + SF Sg Gen => snotvorn+"ого" ; + SF Sg Dat => snotvorn+"ому" ; + SF Sg Acc => snotvorn +"ое"; + SF Sg Inst => snotvorn+"ым" ; + SF Sg Prepos => snotvorn+"ом" ; + SF Sg Prepos2 => snotvorn+"ом" ; + SF Pl Nom => snotvorn+"ые" ; + SF Pl Gen => snotvorn+"ых" ; + SF Pl Dat => snotvorn+"ым" ; + SF Pl Acc => snotvorn+"ые" ; + SF Pl Inst => snotvorn+"ыми" ; + SF Pl Prepos => snotvorn+"ых"; + SF Pl Prepos2 => snotvorn+"ых" + } ; + g = Neut ; anim = Inanimate + } ; + +oper oeEndAnimateDecl: Str -> CommNoun = \snotvorn -> + { s = table + { SF Sg Nom => snotvorn +"ое"; + SF Sg Gen => snotvorn+"ого" ; + SF Sg Dat => snotvorn+"ому" ; + SF Sg Acc => snotvorn +"ое"; + SF Sg Inst => snotvorn+"ым" ; + SF Sg Prepos => snotvorn+"ом" ; + SF Sg Prepos2 => snotvorn+"ом" ; + SF Pl Nom => snotvorn+"ые" ; + SF Pl Gen => snotvorn+"ых" ; + SF Pl Dat => snotvorn+"ым" ; + SF Pl Acc => snotvorn+"ые" ; + SF Pl Inst => snotvorn+"ыми" ; + SF Pl Prepos => snotvorn+"ых"; + SF Pl Prepos2 => snotvorn+"ых" + } ; + g = Neut ; anim = Animate + } ; + +--oper voskresenje : CommNoun = soft_eEndInAnimateDecl "воскресен" ; +--oper soft_eEndInAnimateDecl: Str -> CommNoun = \proizvedeni -> +-- { s = table +-- { SF Sg Nom => proizvedeni +"ье"; +-- SF Sg Gen => proizvedeni+"ья" ; +-- SF Sg Dat => proizvedeni+"ью" ; +-- SF Sg Acc => proizvedeni +"ье"; +-- SF Sg Inst => proizvedeni+"ьем" ; +-- SF Sg Prepos => proizvedeni+"ье" ; +-- SF Sg Prepos2 => proizvedeni+"ье" ; +-- SF Pl Nom => proizvedeni+"ья" ; +-- SF Pl Gen => proizvedeni+"ий" ; +-- SF Pl Dat => proizvedeni+"ьям" ; +-- SF Pl Acc => proizvedeni+"ья" ; +-- SF Pl Inst => proizvedeni+"ьями" ; +-- SF Pl Prepos => proizvedeni+"ьях"; +-- SF Pl Prepos2 => proizvedeni+"ьях" +-- } ; +-- g = Neut ; anim = Inanimate +-- } ; +--oper proizvedenie : CommNoun = eEndInAnimateDecl "произведени" ; + +oper eEndInAnimateDecl: Str -> CommNoun = \proizvedeni -> + { s = table + { SF Sg Nom => proizvedeni +"е"; + SF Sg Gen => proizvedeni+"я" ; + SF Sg Dat => proizvedeni+"ю" ; + SF Sg Acc => proizvedeni +"е"; + SF Sg Inst => proizvedeni+"ем" ; + SF Sg Prepos => proizvedeni+"и" ; + SF Sg Prepos2 => proizvedeni+"и" ; + SF Pl Nom => proizvedeni+"я" ; + SF Pl Gen => proizvedeni+"й" ; + SF Pl Dat => proizvedeni+"ям" ; + SF Pl Acc => proizvedeni+"я" ; + SF Pl Inst => proizvedeni+"ями" ; + SF Pl Prepos => proizvedeni+"ях"; + SF Pl Prepos2 => proizvedeni+"ях" + } ; + g = Neut ; anim = Inanimate + } ; + +--oper chislo : CommNoun = l_oEndInAnimateDecl "числ" ; +--oper vino : CommNoun = l_oEndInAnimateDecl "вин" ; +--oper l_oEndInAnimateDecl: Str -> CommNoun = \chisl -> +-- let { chis = Predef.tk 1 chisl ; ending = Predef.dp 3 chisl } in +-- oEndInAnimateDecl3 chisl (chis+"e"+ending) ; + +-- +++ MG_UR: now expects two arguments +++ +oper oEndInAnimateDecl3: Str -> Str -> CommNoun = \chisl, chisel -> + { s = table + { SF Sg Nom => chisl +"о"; + SF Sg Gen => chisl+"а" ; + SF Sg Dat => chisl+"у" ; + SF Sg Acc => chisl +"о"; + SF Sg Inst => chisl+"ом" ; + SF Sg Prepos => chisl+"е" ; + SF Sg Prepos2 => chisl+"е" ; + SF Pl Nom => chisl+"а" ; + SF Pl Gen => chisel; + SF Pl Dat => chisl+"ам" ; + SF Pl Acc => chisl+"а" ; + SF Pl Inst => chisl+"ами" ; + SF Pl Prepos => chisl+"ах"; + SF Pl Prepos2 => chisl+"ах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper oEndInAnimateDecl: Str -> CommNoun = \plech -> + { s = table + { SF Sg Nom => plech+"о" ; + SF Sg Gen => plech+"а" ; + SF Sg Dat => plech+"у" ; + SF Sg Acc => plech+"о" ; + SF Sg Inst => plech+"ом" ; + SF Sg Prepos => plech+"е" ; + SF Sg Prepos2 => plech+"е" ; + SF Pl Nom => plech+"и" ; + SF Pl Gen => plech; + SF Pl Dat => plech+"ам" ; + SF Pl Acc => plech+"и" ; + SF Pl Inst => plech+"ами" ; + SF Pl Prepos => plech+"ях"; + SF Pl Prepos2 => plech+"ях" + } ; + g = Neut ; anim = Inanimate + } ; + +--oper oEnd_KH_InAnimateDecl: Str -> CommNoun = \u -> +-- { s = table +-- { SF Sg Nom => u+"хо" ; +-- SF Sg Gen => u+"ха" ; +-- SF Sg Dat => u+"ху" ; +-- SF Sg Acc => u+"хо" ; +-- SF Sg Inst => u+"хом" ; +-- SF Sg Prepos => u+"хе" ; +-- SF Sg Prepos2 => u+"хе" ; +-- SF Pl Nom => u+"ши" ; +-- SF Pl Gen => u +"шей"; +-- SF Pl Dat => u+"шам" ; +-- SF Pl Acc => u+"ши" ; +-- SF Pl Inst => u+"шами" ; +-- SF Pl Prepos => u+"шах"; +-- SF Pl Prepos2 => u+"шах" +-- } ; +-- g = Neut ; anim = Inanimate +-- } ; +-- + +-- further neuter classes added by Magda Gerritsen and Ulrich Real +oper hardCons_ZHInAnimateDecl: Str -> CommNoun = \slov -> + { s = table + { SF Sg Nom => slov+"о"; + SF Sg Gen => slov+"а" ; + SF Sg Dat => slov+"у" ; + SF Sg Acc => slov +"о"; + SF Sg Inst => slov+"ом" ; + SF Sg Prepos => slov+"е" ; + SF Sg Prepos2 => slov+"у" ; + SF Pl Nom => slov+"а" ; + SF Pl Gen => slov+"" ; + SF Pl Dat => slov+"ам" ; + SF Pl Acc => slov+"а" ; + SF Pl Inst => slov+"ами" ; + SF Pl Prepos => slov+"ах"; + SF Pl Prepos2 => slov+"ах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper weakConsInAnimateDecl: Str -> CommNoun = \mor -> + {s = table + { SF Sg Nom => mor+"е" ; + SF Sg Gen => mor+"я" ; + SF Sg Dat => mor+"ю" ; + SF Sg Acc => mor+"е" ; + SF Sg Inst => mor+"ем" ; + SF Sg Prepos => mor+"е" ; + SF Sg Prepos2 => mor+"е" ; + SF Pl Nom => mor+"я" ; + SF Pl Gen => mor+"ей" ; + SF Pl Dat => mor+"ям" ; + SF Pl Acc => mor+"я" ; + SF Pl Inst => mor+"ями" ; + SF Pl Prepos => mor+"ях"; + SF Pl Prepos2 => mor+"ях" + } ; + g = Masc ; anim = Inanimate + } ; + +oper hardCons_ZHInAnimateDeclE: Str -> CommNoun = \uchilish -> + { s = table + { SF Sg Nom => uchilish+"е"; + SF Sg Gen => uchilish+"а" ; + SF Sg Dat => uchilish+"у" ; + SF Sg Acc => uchilish +"е"; + SF Sg Inst => uchilish+"ем" ; + SF Sg Prepos => uchilish+"е" ; + SF Sg Prepos2 => uchilish+"е" ; + SF Pl Nom => uchilish+"а" ; + SF Pl Gen => uchilish+""; + SF Pl Dat => uchilish+"ам" ; + SF Pl Acc => uchilish+"а" ; + SF Pl Inst => uchilish+"ами" ; + SF Pl Prepos => uchilish+"ах"; + SF Pl Prepos2 => uchilish+"ах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper irregPlInAnimateDecl: Str -> CommNoun = \neb -> + { s = table + { SF Sg Nom => neb+"о"; + SF Sg Gen => neb+"а" ; + SF Sg Dat => neb+"у" ; + SF Sg Acc => neb +"о"; + SF Sg Inst => neb+"ом" ; + SF Sg Prepos => neb+"е" ; + SF Sg Prepos2 => neb+"е" ; + SF Pl Nom => neb+"еса" ; + SF Pl Gen => neb+"ес"; + SF Pl Dat => neb+"есам" ; + SF Pl Acc => neb+"еса" ; + SF Pl Inst => neb+"есами" ; + SF Pl Prepos => neb+"есах"; + SF Pl Prepos2 => neb+"есах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> + { s = table + { SF Sg Nom => derev+"о" ; + SF Sg Gen => derev+"а" ; + SF Sg Dat => derev+"у" ; + SF Sg Acc => derev +"о"; + SF Sg Inst => derev+"ом" ; + SF Sg Prepos => derev+"е" ; + SF Sg Prepos2 => derev+"е" ; + SF Pl Nom => derev+"ья" ; + SF Pl Gen => derev+"ьев" ; + SF Pl Dat => derev+"ьям" ; + SF Pl Acc => derev +"ья" ; + SF Pl Inst => derev+"ьями" ; + SF Pl Prepos => derev+"ьяах"; + SF Pl Prepos2 => derev+"ьяах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper irregTotalInAnimateDecl: Str -> CommNoun = \vre -> + {s = table + { SF Sg Nom => vre+"мя" ; + SF Sg Gen => vre+"мени" ; + SF Sg Dat => vre+"мени" ; + SF Sg Acc => vre+"мя" ; + SF Sg Inst => vre+"менем" ; + SF Sg Prepos => vre+"мени" ; + SF Sg Prepos2 => vre+"мени" ; + SF Pl Nom => vre+"мена" ; + SF Pl Gen => vre+"мён" ; + SF Pl Dat => vre+"менам" ; + SF Pl Acc => vre+"мена" ; + SF Pl Inst => vre+"менами" ; + SF Pl Prepos => vre+"менах"; + SF Pl Prepos2 => vre+"менах" + } ; + g = Masc ; anim = Inanimate + } ; +-- +++ MG_UR: end of our neuter patterns +++ + +--oper malaria : CommNoun = i_yaEndDecl "маляри" ; +-- +--oper daniya : ProperName = mkCNProperName(i_yaEndDecl "Дани" ); +--oper angliya : ProperName = mkCNProperName(i_yaEndDecl "Англи") ; +--oper finlyandiya : ProperName = mkCNProperName(i_yaEndDecl "Финлянди") ; +--oper franciya : ProperName = mkCNProperName(i_yaEndDecl "Франци" ); +--oper germaniya : ProperName = mkCNProperName(i_yaEndDecl "Германи") ; +--oper italiya : ProperName = mkCNProperName(i_yaEndDecl "Итали" ); +--oper norvegiya : ProperName = mkCNProperName(i_yaEndDecl "Норвеги") ; +--oper rossiya : ProperName = mkCNProperName(i_yaEndDecl "Росси") ; +--oper ispaniya : ProperName = mkCNProperName(i_yaEndDecl "Испани") ; +--oper shveciya : ProperName = mkCNProperName(i_yaEndDecl "Швеци") ; + +oper i_yaEndDecl: Str -> CommNoun = \malar -> + { s = table + { SF Sg Nom => malar+"я" ; + SF Sg Gen => malar+"и" ; + SF Sg Dat => malar+"и" ; + SF Sg Acc => malar+"ю" ; + SF Sg Inst => malar+"ей" ; + SF Sg Prepos => malar+"и" ; + SF Sg Inst => malar+"ей" ; + SF Sg Prepos2 => malar+"и" ; + SF Pl Nom => malar+"и" ; + SF Pl Gen => malar+"й" ; + SF Pl Dat => malar+"ям" ; + SF Pl Acc => malar+"и" ; + SF Pl Inst => malar+"ями" ; + SF Pl Prepos => malar+"ях"; + SF Pl Prepos2 => malar+"ях" + } ; + g = Fem ; anim = Inanimate + } ; + +--oper bol : CommNoun = softSignEndDeclFem "бол" ; +--oper nol : CommNoun = softSignEndDeclMasc "нол" ; +--oper uroven : CommNoun = EN_softSignEndDeclMasc "уровен" ; + +oper softSignEndDeclFem: Str -> CommNoun = \bol -> + {s = table + { SF Sg Nom => bol+"ь" ; + SF Sg Gen => bol+"и" ; + SF Sg Dat => bol+"и" ; + SF Sg Acc => bol+"ь" ; + SF Sg Inst => bol+"ью" ; + SF Sg Prepos => bol+"и" ; + SF Sg Prepos2 => bol+"и" ; + SF Pl Nom => bol+"и" ; + SF Pl Gen => bol+"ей" ; + SF Pl Dat => bol+"ям" ; + SF Pl Acc => bol+"и" ; + SF Pl Inst => bol+"ями" ; + SF Pl Prepos => bol+"ях"; + SF Pl Prepos2 => bol+"ях" + } ; + g = Fem ; anim = Inanimate + } ; + +oper softSignEndDeclMasc: Str -> CommNoun = \nol -> + {s = table + { SF Sg Nom => nol+"ь" ; + SF Sg Gen => nol+"я" ; + SF Sg Dat => nol+"ю" ; + SF Sg Acc => nol+"ь" ; + SF Sg Inst => nol+"ем" ; + SF Sg Prepos => nol+"е" ; + SF Sg Prepos2 => nol+"е" ; + SF Pl Nom => nol+"и" ; + SF Pl Gen => nol+"ей" ; + SF Pl Dat => nol+"ям" ; + SF Pl Acc => nol+"и" ; + SF Pl Inst => nol+"ями" ; + SF Pl Prepos => nol+"ях"; + SF Pl Prepos2 => nol+"ях" + } ; + g = Masc ; anim = Inanimate + } ; + +-- +++ MG_UR: added +++ +oper softSignEndDeclMascAnimate: Str -> CommNoun = \uchitel -> + {s = table + { SF Sg Nom => uchitel+"ь" ; + SF Sg Gen => uchitel+"я" ; + SF Sg Dat => uchitel+"ю" ; + SF Sg Acc => uchitel+"я" ; + SF Sg Inst => uchitel+"ем" ; + SF Sg Prepos => uchitel+"е" ; + SF Sg Prepos2 => uchitel+"е" ; + SF Pl Nom => uchitel+"я" ; + SF Pl Gen => uchitel+"ей" ; + SF Pl Dat => uchitel+"ям" ; + SF Pl Acc => uchitel+"ей" ; + SF Pl Inst => uchitel+"ями" ; + SF Pl Prepos => uchitel+"ях"; + SF Pl Prepos2 => uchitel+"ях" + } ; + g = Masc ; anim = Animate + } ; + +-- further masculine classes added by Magda Gerritsen and Ulrich Real +oper nullEndDecl: Str -> CommNoun = \stol -> + { s = table + { SF Sg Nom => stol+""; + SF Sg Gen => stol+"а" ; + SF Sg Dat => stol+"у" ; + SF Sg Acc => stol+""; + SF Sg Inst => stol+"ом" ; + SF Sg Prepos => stol+"е" ; + SF Sg Prepos2 => stol+"е" ; + SF Pl Nom => stol+"ы" ; + SF Pl Gen => stol+"ов"; + SF Pl Dat => stol+"ам" ; + SF Pl Acc => stol+"ы" ; + SF Pl Inst => stol+"ами" ; + SF Pl Prepos => stol+"ах"; + SF Pl Prepos2 => stol+"ах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper softSignEndDeclMascInAnimateInstrJO: Str -> CommNoun = \slovar -> + {s = table + { SF Sg Nom => slovar+"ь" ; + SF Sg Gen => slovar+"я" ; + SF Sg Dat => slovar+"ю" ; + SF Sg Acc => slovar+"ь" ; + SF Sg Inst => slovar+"ём" ; + SF Sg Prepos => slovar+"е" ; + SF Sg Prepos2 => slovar+"е" ; + SF Pl Nom => slovar+"и" ; + SF Pl Gen => slovar+"ей" ; + SF Pl Dat => slovar+"ям" ; + SF Pl Acc => slovar+"и" ; + SF Pl Inst => slovar+"ями" ; + SF Pl Prepos => slovar+"ях"; + SF Pl Prepos2 => slovar+"ях" + } ; + g = Masc ; anim = Inanimate + } ; + +oper nullEndInAnimateDeclSoft: Str -> CommNoun = \musej -> + {s = table + { SF Sg Nom => musej+"й" ; + SF Sg Gen => musej+"я" ; + SF Sg Dat => musej+"ю" ; + SF Sg Acc => musej+"й" ; + SF Sg Inst => musej+"ем" ; + SF Sg Prepos => musej+"е" ; + SF Sg Prepos2 => musej+"е" ; + SF Pl Nom => musej+"и" ; + SF Pl Gen => musej+"ей" ; + SF Pl Dat => musej+"ям" ; + SF Pl Acc => musej+"и" ; + SF Pl Inst => musej+"ями" ; + SF Pl Prepos => musej+"ях"; + SF Pl Prepos2 => musej+"ях" + } ; + g = Masc ; anim = Inanimate + } ; + +oper ZH_EndInAnimateDeclSoftGenOWithout: Str -> CommNoun = \dvor -> + {s = table + { SF Sg Nom => dvor+"eц" ; + SF Sg Gen => dvor+"ца" ; + SF Sg Dat => dvor+"цу" ; + SF Sg Acc => dvor+"eц" ; + SF Sg Inst => dvor+"цом" ; + SF Sg Prepos => dvor+"це" ; + SF Sg Prepos2 => dvor+"це" ; + SF Pl Nom => dvor+"ци" ; + SF Pl Gen => dvor+"цей" ; + SF Pl Dat => dvor+"цам" ; + SF Pl Acc => dvor+"ци" ; + SF Pl Inst => dvor+"цами" ; + SF Pl Prepos => dvor+"цах"; + SF Pl Prepos2 => dvor+"цах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper ZH_EndAnimateDeclSoftInstrE: Str -> CommNoun = \tovarish -> + {s = table + { SF Sg Nom => tovarish+"" ; + SF Sg Gen => tovarish+"а" ; + SF Sg Dat => tovarish+"у" ; + SF Sg Acc => tovarish+"a" ; + SF Sg Inst => tovarish+"ем" ; + SF Sg Prepos => tovarish+"е" ; + SF Sg Prepos2 => tovarish+"е" ; + SF Pl Nom => tovarish+"и" ; + SF Pl Gen => tovarish+"ей" ; + SF Pl Dat => tovarish+"ам" ; + SF Pl Acc => tovarish+"и" ; + SF Pl Inst => tovarish+"ами" ; + SF Pl Prepos => tovarish+"ах"; + SF Pl Prepos2 => tovarish+"ах" + } ; + g = Masc ; anim = Animate + } ; + +oper ZH_EndInAnimateDeclSoftGenE: Str -> CommNoun = \mesjac -> + {s = table + { SF Sg Nom => mesjac+"" ; + SF Sg Gen => mesjac+"а" ; + SF Sg Dat => mesjac+"у" ; + SF Sg Acc => mesjac+"" ; + SF Sg Inst => mesjac+"ом" ; + SF Sg Prepos => mesjac+"е" ; + SF Sg Prepos2 => mesjac+"е" ; + SF Pl Nom => mesjac+"и" ; + SF Pl Gen => mesjac+"ев" ; + SF Pl Dat => mesjac+"ам" ; + SF Pl Acc => mesjac+"и" ; + SF Pl Inst => mesjac+"ами" ; + SF Pl Prepos => mesjac+"ах"; + SF Pl Prepos2 => mesjac+"ах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper PlStemChangeAnimateDecl: Str -> CommNoun = \grazhdan -> + {s = table + { SF Sg Nom => grazhdan+"ин" ; + SF Sg Gen => grazhdan+"ина" ; + SF Sg Dat => grazhdan+"ину" ; + SF Sg Acc => grazhdan+"ина" ; + SF Sg Inst => grazhdan+"ином" ; + SF Sg Prepos => grazhdan+"ине" ; + SF Sg Prepos2 => grazhdan+"ине" ; + SF Pl Nom => grazhdan+"е" ; + SF Pl Gen => grazhdan+"" ; + SF Pl Dat => grazhdan+"ам" ; + SF Pl Acc => grazhdan+"" ; + SF Pl Inst => grazhdan+"ами" ; + SF Pl Prepos => grazhdan+"ах"; + SF Pl Prepos2 => grazhdan+"ах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper A_PlStemChangeAnimateDecl: Str -> CommNoun = \gospod -> + {s = table + { SF Sg Nom => gospod+"ин" ; + SF Sg Gen => gospod+"ина" ; + SF Sg Dat => gospod+"ину" ; + SF Sg Acc => gospod+"ина" ; + SF Sg Inst => gospod+"ином" ; + SF Sg Prepos => gospod+"ине" ; + SF Sg Prepos2 => gospod+"ине" ; + SF Pl Nom => gospod+"а" ; + SF Pl Gen => gospod+"" ; + SF Pl Dat => gospod+"ам" ; + SF Pl Acc => gospod+"" ; + SF Pl Inst => gospod+"ами" ; + SF Pl Prepos => gospod+"ах"; + SF Pl Prepos2 => gospod+"ах" + } ; + g = Masc ; anim = Animate + } ; + +oper LittleAnimalDecl: Str -> CommNoun = \reb -> + {s = table + { SF Sg Nom => reb+"ёноk" ; + SF Sg Gen => reb+"ёнkа" ; + SF Sg Dat => reb+"ёнkу" ; + SF Sg Acc => reb+"ёнkа" ; + SF Sg Inst => reb+"ёнkом" ; + SF Sg Prepos => reb+"ёнkе" ; + SF Sg Prepos2 => reb+"ёнkе" ; + SF Pl Nom => reb+"ята" ; + SF Pl Gen => reb+"ят" ; + SF Pl Dat => reb+"ятам" ; + SF Pl Acc => reb+"ят" ; + SF Pl Inst => reb+"ятами" ; + SF Pl Prepos => reb+"ятах"; + SF Pl Prepos2 => reb+"ятах" + } ; + g = Masc ; anim = Animate + } ; + +oper UniqueIrregularDecl: Str -> CommNoun = \put -> + {s = table + { SF Sg Nom => put+"ь" ; + SF Sg Gen => put+"и" ; + SF Sg Dat => put+"и" ; + SF Sg Acc => put+"ь" ; + SF Sg Inst => put+"ём" ; + SF Sg Prepos => put+"и" ; + SF Sg Prepos2 => put+"и" ; + SF Pl Nom => put+"и" ; + SF Pl Gen => put+"ей" ; + SF Pl Dat => put+"ям" ; + SF Pl Acc => put+"и" ; + SF Pl Inst => put+"ями" ; + SF Pl Prepos => put+"ях"; + SF Pl Prepos2 => put+"ях" + } ; + g = Masc ; anim = Inanimate + } ; + +oper softSignEndDeclMascInAnimateGenEWithout: Str -> CommNoun = \d -> + {s = table + { SF Sg Nom => d+"ень" ; + SF Sg Gen => d+"ня" ; + SF Sg Dat => d+"ню" ; + SF Sg Acc => d+"ень" ; + SF Sg Inst => d+"нём" ; + SF Sg Prepos => d+"не" ; + SF Sg Prepos2 => d+"не" ; + SF Pl Nom => d+"ни" ; + SF Pl Gen => d+"ней" ; + SF Pl Dat => d+"ням" ; + SF Pl Acc => d+"ни" ; + SF Pl Inst => d+"нями" ; + SF Pl Prepos => d+"нях"; + SF Pl Prepos2 => d+"нях" + } ; + g = Masc ; anim = Inanimate + } ; + +oper nullEndAnimateDeclDrug: Str -> CommNoun = \dru -> + {s = table + { SF Sg Nom => dru+"г" ; + SF Sg Gen => dru+"га" ; + SF Sg Dat => dru+"гу" ; + SF Sg Acc => dru+"га"; + SF Sg Inst => dru+"гом" ; + SF Sg Prepos => dru+"ге" ; + SF Sg Prepos2 => dru+"ге" ; + SF Pl Nom => dru+"зья" ; + SF Pl Gen => dru+"зей" ; + SF Pl Dat => dru+"зьям" ; + SF Pl Acc => dru +"зей" ; + SF Pl Inst => dru+"зьями" ; + SF Pl Prepos => dru+"зьяах"; + SF Pl Prepos2 => dru+"зьяах" + } ; + g = Masc ; anim = Animate + } ; + +oper nullEndAnimateDeclSyn: Str -> CommNoun = \syn -> + {s = table + { SF Sg Nom => syn ; + SF Sg Gen => syn+"а" ; + SF Sg Dat => syn+"у" ; + SF Sg Acc => syn +"а"; + SF Sg Inst => syn+"ом" ; + SF Sg Prepos => syn+"е" ; + SF Sg Prepos2 => syn+"е" ; + SF Pl Nom => syn+"ья" ; + SF Pl Gen => syn+"ьев" ; + SF Pl Dat => syn+"ьям" ; + SF Pl Acc => syn +"ьев"; + SF Pl Inst => syn+"ьями" ; + SF Pl Prepos => syn+"ьяах"; + SF Pl Prepos2 => syn+"ьяах" + } ; + g = Masc ; anim = Animate + } ; +-- +++ MG_UR: end of our masculine patterns +++ + +oper okEndDeclMasc: Str -> CommNoun = \potol -> + {s = table + { SF Sg Nom => potol+"ок" ; + SF Sg Gen => potol+"ка" ; + SF Sg Dat => potol+"ку" ; + SF Sg Acc => potol+"ок" ; + SF Sg Inst => potol+"ком" ; + SF Sg Prepos => potol+"ке" ; + SF Sg Prepos2 => potol+"ке" ; + SF Pl Nom => potol+"ки" ; + SF Pl Gen => potol+"ков" ; + SF Pl Dat => potol+"кам" ; + SF Pl Acc => potol+"ки" ; + SF Pl Inst => potol+"ками" ; + SF Pl Prepos => potol+"ках"; + SF Pl Prepos2 => potol+"ках" + } ; + g = Masc ; anim = Inanimate + } ; + +oper shEndDeclMasc: Str -> CommNoun = \malush -> + {s = table + { SF Sg Nom => malush ; + SF Sg Gen => malush+"а" ; + SF Sg Dat => malush+"у" ; + SF Sg Acc => malush+"а" ; + SF Sg Inst => malush+"ом" ; + SF Sg Prepos => malush+"е" ; + SF Sg Prepos2 => malush+"е" ; + SF Pl Nom => malush+"и" ; + SF Pl Gen => malush+"ей" ; + SF Pl Dat => malush+"ам" ; + SF Pl Acc => malush+"ей" ; + SF Pl Inst => malush+"ами" ; + SF Pl Prepos => malush+"ах"; + SF Pl Prepos2 => malush+"ах" + } ; + g = Masc ; anim = Inanimate + } ; + +oper EN_softSignEndDeclMasc: Str -> CommNoun = \rem -> + {s = table + { SF Sg Nom => rem+"ень" ; + SF Sg Gen => rem+"ня" ; + SF Sg Dat => rem+"ню" ; + SF Sg Acc => rem+"ень" ; + SF Sg Inst => rem+"нем" ; + SF Sg Prepos => rem+"не" ; + SF Sg Prepos2 => rem+"не" ; + SF Pl Nom => rem+"ни" ; + SF Pl Gen => rem+"ней" ; + SF Pl Dat => rem+"ням" ; + SF Pl Acc => rem+"ни" ; + SF Pl Inst => rem+"нями" ; + SF Pl Prepos => rem+"нях"; + SF Pl Prepos2 => rem+"нях" + } ; + g = Masc ; anim = Inanimate + } ; + +--oper noga : CommNoun = aEndG_K_KH_Decl "ног" ; +--oper doroga : CommNoun = aEndG_K_KH_Decl "дорог" ; +--oper dvojka : CommNoun = aEndG_K_KH_Decl "двойк" ; +--oper butyulka : CommNoun = aEndG_K_KH_Decl "бутылк" ; + +oper aEndG_K_KH_Decl: Str -> CommNoun = \nog -> +{ s = table { + SF Sg Nom => nog+"а" ; + SF Sg Gen => nog+"и" ; + SF Sg Dat => nog+"е" ; + SF Sg Acc => nog+"у" ; + SF Sg Inst => nog+"ой" ; + SF Sg Prepos => nog+"е" ; + SF Sg Prepos2 => nog+"е" ; + SF Pl Nom => nog+"и" ; + SF Pl Gen => nog ; + SF Pl Dat => nog+"ам" ; + SF Pl Acc => nog+ "и" ; + SF Pl Inst => nog+"ами" ; + SF Pl Prepos => nog+"ах"; + SF Pl Prepos2 => nog+"ах" + } ; + g = Fem ; anim = Inanimate +} ; + +--oper golova : CommNoun = aEndInAnimateDecl "голов" ; +--oper mashina : CommNoun = aEndInAnimateDecl "машин" ; +--oper temperatura : CommNoun = aEndInAnimateDecl "температур" ; +--oper edinica : CommNoun = ej_aEndInAnimateDecl "единиц" ; + +oper aEndInAnimateDecl: Str -> CommNoun = \golov -> + { s = table + { SF Sg Nom => golov+"а" ; + SF Sg Gen => golov+"ы" ; + SF Sg Dat => golov+"е" ; + SF Sg Acc => golov+"у" ; + SF Sg Inst => golov+"ой" ; + SF Sg Prepos => golov+"е" ; + SF Sg Prepos2 => golov+"е" ; + SF Pl Nom => golov+"ы" ; + SF Pl Gen => golov ; + SF Pl Dat => golov+"ам" ; + SF Pl Acc => golov+ "ы" ; + SF Pl Inst => golov+"ами" ; + SF Pl Prepos => golov+"ах"; + SF Pl Prepos2 => golov+"ах" + } ; + g = Fem ; anim = Inanimate + } ; + +oper ej_aEndInAnimateDecl: Str -> CommNoun = \ediniz -> + { s = table + { SF Sg Nom => ediniz+"а" ; + SF Sg Gen => ediniz+"ы" ; + SF Sg Dat => ediniz+"е" ; + SF Sg Acc => ediniz+"у" ; + SF Sg Inst => ediniz+"ей" ; + SF Sg Prepos => ediniz+"е" ; + SF Sg Prepos2 => ediniz+"е" ; + SF Pl Nom => ediniz+"ы" ; + SF Pl Gen => ediniz ; + SF Pl Dat => ediniz+"ам" ; + SF Pl Acc => ediniz+ "ы" ; + SF Pl Inst => ediniz+"ами" ; + SF Pl Prepos => ediniz+"ах"; + SF Pl Prepos2 => ediniz+"ах" + } ; + g = Fem ; anim = Inanimate + } ; + +--oper dyadya : CommNoun = (yaEndAnimateDecl "дяд") ** {g = Masc; anim = Animate} ; +oper yaEndAnimateDecl: Str -> SubstFormDecl = \nyan -> + {s = table { + SF Sg Nom => nyan + "я" ; SF Sg Gen => nyan + "и" ; + SF Sg Dat => nyan + "е" ; + SF Sg Acc => nyan + "ю" ; + SF Sg Inst => nyan + "ей" ; + SF Sg Prepos => nyan + "е" ; + SF Sg Prepos2 => nyan + "е" ; + SF Pl Nom => nyan + "и" ; + SF Pl Gen => nyan + "ей" ; + SF Pl Inst => nyan + "ями" ; + SF Pl Prepos => nyan + "ях" ; + SF Pl Prepos2 => nyan + "ях" ; + SF Pl Dat => nyan + "ям" ; SF Pl Acc => nyan + "ей" + } + } ; + +--oper l_yaEndInAnimateDecl: Str -> SubstFormDecl = \kap -> +--{s = table { +-- SF Sg Nom => kap + "ля" ;-- SF Sg Gen => kap + "ли" ; +-- SF Sg Dat => kap + "ле" ; +-- SF Sg Acc => kap + "лю" ; +-- SF Sg Inst => kap + "лей" ; +-- SF Sg Prepos => kap + "ле" ; +-- SF Sg Prepos2 => kap + "ле" ; +-- SF Pl Nom => kap + "ли" ; +-- SF Pl Gen => kap + "ель" ; +-- SF Pl Inst => kap + "лями" ; +-- SF Pl Prepos => kap + "лях" ; +-- SF Pl Prepos2 => kap + "лях" ; +-- SF Pl Dat => kap + "лям" ;-- SF Pl Acc => kap + "ли" +-- } +-- } ; +-- + +-- further feminine classes added by Magda Gerritsen and Ulrich Real +oper oj_aEndInAnimateDecl: Str -> CommNoun = \svech -> + { s = table + { SF Sg Nom => svech+"а" ; + SF Sg Gen => svech+"ы" ; + SF Sg Dat => svech+"е" ; + SF Sg Acc => svech+"у" ; + SF Sg Inst => svech+"ой" ; + SF Sg Prepos => svech+"е" ; + SF Sg Prepos2 => svech+"е" ; + SF Pl Nom => svech+"ы" ; + SF Pl Gen => svech ; + SF Pl Dat => svech+"ам" ; + SF Pl Acc => svech+"ы" ; + SF Pl Inst => svech+"ами" ; + SF Pl Prepos => svech+"ах"; + SF Pl Prepos2 => svech+"ах" + } ; + g = Fem ; anim = Inanimate + } ; + +oper softSignEndDeclFemInanimate_ZH: Str -> SubstFormDecl = \noch -> + { s = table { + SF Sg Nom => noch+ "ь" ; + SF Sg Gen => noch+ "и" ; + SF Sg Dat => noch+ "и" ; + SF Sg Acc => noch+ "ь" ; + SF Sg Inst => noch+ "ью" ; + SF Sg Prepos => noch+ "и" ; + SF Sg Prepos2 => noch+ "и" ; + SF Pl Nom => noch+ "и" ; + SF Pl Gen => noch+ "ей" ; + SF Pl Dat => noch+ "ам" ; + SF Pl Acc => noch+ "и" ; + SF Pl Inst => noch+ "ами" ; + SF Pl Prepos => noch+ "ах"; + SF Pl Prepos2 => noch+ "ах" + } ; + g = Fem ; anim = Inanimate + } ; + +oper irregStemAnimateDecl: Str -> SubstFormDecl = \mat -> + { s = table { + SF Sg Nom => mat+ "ь" ; + SF Sg Gen => mat+ "ери" ; + SF Sg Dat => mat+ "ери" ; + SF Sg Acc => mat+ "ь" ; + SF Sg Inst => mat+ "ерью" ; + SF Sg Prepos => mat+ "ери" ; + SF Sg Prepos2 => mat+ "ери" ; + SF Pl Nom => mat+ "ери" ; + SF Pl Gen => mat+ "ерей" ; + SF Pl Dat => mat+ "ерям" ; + SF Pl Acc => mat+ "ерей" ; + SF Pl Inst => mat+ "ерями" ; + SF Pl Prepos => mat+ "ерях"; + SF Pl Prepos2 => mat+ "ерях" + } ; + g = Fem ; anim = Animate + } ; + +oper irregStemAnimateDeclInstr_MI: Str -> SubstFormDecl = \doch -> + {s = table { + SF Sg Nom => doch+ "ь" ; + SF Sg Gen => doch+ "ери" ; + SF Sg Dat => doch+ "ери" ; + SF Sg Acc => doch+ "ь" ; + SF Sg Inst => doch+ "ерью" ; + SF Sg Prepos => doch+ "ери" ; + SF Sg Prepos2 => doch+ "ери" ; + SF Pl Nom => doch+ "ери" ; + SF Pl Gen => doch+ "ерей" ; + SF Pl Dat => doch+ "ерям" ; + SF Pl Acc => doch+ "ерей" ; + SF Pl Inst => doch+ "ерьми" ; + SF Pl Prepos => doch+ "ерях"; + SF Pl Prepos2 => doch+ "ерях" + } ; + g = Fem ; anim = Animate + } ; + +oper softSignEndDeclFemInstr_MI: Str -> SubstFormDecl = \loshad -> + { s = table { + SF Sg Nom => loshad+ "ь" ; + SF Sg Gen => loshad+ "и" ; + SF Sg Dat => loshad+ "и" ; + SF Sg Acc => loshad+ "ь" ; + SF Sg Inst => loshad+ "ью" ; + SF Sg Prepos => loshad+ "и" ; + SF Sg Prepos2 => loshad+ "и" ; + SF Pl Nom => loshad+ "и" ; + SF Pl Gen => loshad+ "ей" ; + SF Pl Dat => loshad+ "ям" ; + SF Pl Acc => loshad+ "ей" ; + SF Pl Inst => loshad+ "ьми" ; + SF Pl Prepos => loshad+ "ях"; + SF Pl Prepos2 => loshad+ "ях" + } ; + g = Fem ; anim = Animate + } ; +-- +++ MG_UR: end of our feminine patterns +++ + + +-- preposition types added by Magda Gerritsen and Ulrich Real + +oper preposition_V: Str -> CommNoun = \les -> + { s = table + { SF Sg Nom => les+""; + SF Sg Gen => les+"а" ; + SF Sg Dat => les+"у" ; + SF Sg Acc => les+""; + SF Sg Inst => les+"ом" ; + SF Sg Prepos => les+"е" ; + SF Sg Prepos2 => les+"у" ; + SF Pl Nom => les+"ы" ; + SF Pl Gen => les+"ов"; + SF Pl Dat => les+"ам" ; + SF Pl Acc => les+"ы" ; + SF Pl Inst => les+"ами" ; + SF Pl Prepos => les+"ах"; + SF Pl Prepos2 => les+"ах" + } ; + g = Neut ; anim = Inanimate + } ; + +oper preposition_Na: Str -> CommNoun = \most -> + { s = table + { SF Sg Nom => most+""; + SF Sg Gen => most+"а" ; + SF Sg Dat => most+"у" ; + SF Sg Acc => most+""; + SF Sg Inst => most+"ом" ; + SF Sg Prepos => most+"е" ; + SF Sg Prepos2 => most+"у" ; + SF Pl Nom => most+"ы" ; + SF Pl Gen => most+"ов"; + SF Pl Dat => most+"ам" ; + SF Pl Acc => most+"ы" ; + SF Pl Inst => most+"ами" ; + SF Pl Prepos => most+"ах"; + SF Pl Prepos2 => most+"ах" + } ; + g = Neut ; anim = Inanimate + } ; +-- +++ MG_UR: end of our preposition patterns +++ + + +--oper oEnd_Decl: Str -> CommNoun = \bolshinstv -> +--{ s = table { +-- SF Sg Nom => bolshinstv+"о" ; +-- SF Sg Gen => bolshinstv+"а" ; +-- SF Sg Dat => bolshinstv+"у" ; +-- SF Sg Acc => bolshinstv+"о" ; +-- SF Sg Inst => bolshinstv+"ом" ; +-- SF Sg Prepos => bolshinstv+"е" ; +-- SF Sg Prepos2 => bolshinstv+"е" ; +-- SF Pl Nom => bolshinstv+"а" ; +-- SF Pl Gen => bolshinstv ; +-- SF Pl Dat => bolshinstv+"ам" ; +-- SF Pl Acc => bolshinstv+ "а" ; +-- SF Pl Inst => bolshinstv+"ами" ; +-- SF Pl Prepos => bolshinstv+"ах"; +-- SF Pl Prepos2 => bolshinstv+"ах" +-- } ; +-- g = Neut ; anim = Inanimate +--} ; + +oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> +{ s = table { + SF _ Nom => mnog+"о" ; + SF _ Gen => mnog +"их"; + SF _ Dat => mnog+"им" ; + SF _ Acc => mnog+"о" ; + SF _ Inst => mnog+"ими" ; + SF _ Prepos => mnog+"их"; + SF _ Prepos2 => mnog+"их" + } ; + g = Neut ; anim = Inanimate +} ; + +oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> + { s = table { + SF _ Nom => menshinstv+"а" ; + SF _ Gen => menshinstv; + SF _ Dat => menshinstv+"ам" ; + SF _ Acc => menshinstv+"ва" ; + SF _ Inst => menshinstv+"ами" ; + SF _ Prepos => menshinstv+"вах"; + SF _ Prepos2 => menshinstv+"вах" + } ; + g = Neut ; anim = Inanimate +} ; + +oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> + {s = table { + SF _ Nom => bolshinstv+"о" ; + SF _ Gen => bolshinstv+"а" ; + SF _ Dat => bolshinstv+"у" ; + SF _ Acc => bolshinstv+"о" ; + SF _ Inst => bolshinstv+"ом" ; + SF _ Prepos => bolshinstv+"е"; + SF _ Prepos2 => bolshinstv+"е" + } ; + g = Neut ; anim = Inanimate +} ; + +-- Note: Now we consider only the plural form of the pronoun "все" (all) +-- treated as an adjective (see AllDetPl definition). +-- The meaning "entire" is not considered, which allows us to form +-- the pronoun-adjective from the substantive form below: + +oper eEnd_Decl: Str -> CommNoun = \vs -> +{ s = table { + SF Sg Nom => vs+"е" ; + SF Sg Gen => vs+"ех" ; + SF Sg Dat => vs+"ем" ; + SF Sg Acc => vs+"ех" ; + SF Sg Inst => vs+"еми" ; + SF Sg Prepos => vs+"ех" ; + SF Sg Prepos2 => vs+"ех" ; + SF Pl Nom => vs+"е" ; + SF Pl Gen => vs +"ех"; + SF Pl Dat => vs+"ем" ; + SF Pl Acc => vs+ "ех" ; + SF Pl Inst => vs+"еми" ; + SF Pl Prepos => vs+"ех"; + SF Pl Prepos2 => vs+"ех" + } ; + g = Neut ; anim = Inanimate +} ; + +--mkAdjCommNounMascInanim: Adjective -> CommNoun = +--\a -> +--{ s = table { +-- SF Sg Nom => a.s ! AF Nom Inanimate (ASg Masc) ; +-- SF Sg Gen => a.s ! AF Gen Inanimate (ASg Masc) ; +-- SF Sg Dat => a.s ! AF Dat Inanimate (ASg Masc) ; +-- SF Sg Acc => a.s ! AF Acc Inanimate (ASg Masc) ; +-- SF Sg Inst => a.s ! AF Inst Inanimate (ASg Masc) ; +-- SF Sg Prepos => a.s ! AF Prepos Inanimate (ASg Masc) ; +-- SF Sg Prepos2 => a.s ! AF Prepos2 Inanimate (ASg Masc) ; +-- SF Pl Nom => a.s ! AF Nom Inanimate APl ; +-- SF Pl Gen => a.s ! AF Gen Inanimate APl; +-- SF Pl Dat => a.s ! AF Dat Inanimate APl ; +-- SF Pl Acc => a.s ! AF Acc Inanimate APl ; +-- SF Pl Inst => a.s ! AF Inst Inanimate APl ; +-- SF Pl Prepos => a.s ! AF Prepos Inanimate APl; +-- SF Pl Prepos2 => a.s ! AF Prepos2 Inanimate APl +-- }; +-- g = Masc ; +-- anim = Inanimate +--}; +----2 Adjectives +-- +---- Type Adjective only has positive degree while AdjDegr type +---- includes also comparative and superlative forms. +---- The later entries can be converted into the former using +---- "extAdjective" operation defined in the syntax module +---- and vice verca using "mkAdjDeg" operation. +-- +--oper +-- adjInvar: Str -> Adjective = \s -> { s = \\af => s }; +-- + kazhdujDet: Adjective = uy_j_EndDecl "кажд" ; + samuj: Adjective = uy_j_EndDecl "сам" ; +-- lubojDet: Adjective = uy_oj_EndDecl "люб" ; +-- drugojDet: Adjective = uy_oj_EndDecl "друг" ; +-- glaznoj: Adjective = uy_oj_EndDecl "глазн" ; + kotorujDet: Adjective = uy_j_EndDecl "котор"; + nekotorujDet: Adjective = uy_j_EndDecl "некотор"; + takoj: Adjective = i_oj_EndDecl "так" []; +-- kakojNibudDet: Adjective = i_oj_EndDecl "как" "-нибудь"; +-- kakojDet: Adjective = i_oj_EndDecl "как" []; +-- nikakojDet: Adjective = i_oj_EndDecl "никак" []; + bolshinstvoSgDet: Adjective = extAdjFromSubst (oEnd_SgDecl "большинств"); + mnogoSgDet: Adjective = extAdjFromSubst (kg_oEnd_SgDecl "мног"); + skolkoSgDet: Adjective = extAdjFromSubst (kg_oEnd_SgDecl "скольк"); + + bolshinstvoPlDet: Adjective = extAdjFromSubst (oEnd_PlDecl "большинств"); + + vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; + extAdjFromSubst: CommNoun -> Adjective = \ vse -> + {s = \\af => vse.s ! SF (numAF af) (caseAF af) } ; + +oper + AdjDegr : Type = {s : Degree => AdjForm => Str} ; + +oper mkAdjDeg: Adjective -> Str -> AdjDegr = \adj, s -> + { s = table + { + Posit => adj.s ; + Compar => \\af => s ; + Superl => \\af => samuj.s !af ++ adj.s ! af + } + }; + +--oper uzhasnuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "ужасн") "ужаснее"; +--oper schastlivyuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "счастлив") "счастливее"; +--oper deshevuj: AdjDegr = mkAdjDeg (uy_j_EndDecl "дешев") "дешевле"; +--oper staruj: AdjDegr = mkAdjDeg (uy_j_EndDecl "стар") "старше"; + +oper totDet: Adjective = {s = table { + AF Nom _ (ASg Masc) => "тот"; + AF Nom _ (ASg Fem) => "та"; + AF Nom _ (ASg Neut) => "то"; + AF Nom _ APl => "те"; + AF Acc Inanimate (ASg Masc) => "тот"; + AF Acc Animate (ASg Masc) => "того"; + AF Acc _ (ASg Fem) => "ту"; + AF Acc _ (ASg Neut) => "то"; + AF Acc Inanimate APl => "те"; + AF Acc Animate APl => "тех"; + 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 Prepos2 _ (ASg Masc) => "том"; + AF Prepos _ (ASg Fem) => "той"; + AF Prepos2 _ (ASg Fem) => "той"; + AF Prepos _ (ASg Neut) => "том"; + AF Prepos2 _ (ASg Neut) => "том"; + AF Prepos _ APl => "тех" ; + AF Prepos2 _ APl => "тех" ; + AdvF => "то" + } + } ; + +oper odinDet: Adjective = {s = table { + AF Nom _ (ASg Masc) => "один"; + AF Nom _ (ASg Fem) => "одна"; + AF Nom _ (ASg Neut) => "одно"; + AF Nom _ APl => "одни"; + AF Acc Inanimate (ASg Masc) => "один"; + AF Acc Animate (ASg Masc) => "одного"; + AF Acc _ (ASg Fem) => "одну"; + AF Acc _ (ASg Neut) => "одно"; + AF Acc Inanimate APl => "одни"; + AF Acc Animate APl => "одних"; + 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 Prepos2 _ (ASg Masc) => "одном"; + AF Prepos _ (ASg Fem) => "одной"; + AF Prepos2 _ (ASg Fem) => "одной"; + AF Prepos _ (ASg Neut) => "одном"; + AF Prepos2 _ (ASg Neut) => "одном"; + AF Prepos _ APl => "одних"; + AF Prepos2 _ APl => "одних"; + AdvF => "одно" + } + } ; + +oper etotDet: Adjective = {s = table { + AF Nom _ (ASg Masc) => "этот"; + AF Nom _ (ASg Fem) => "эта"; + AF Nom _ (ASg Neut) => "это"; + AF Nom _ APl => "эти"; + AF Acc Inanimate (ASg Masc) => "этот"; + AF Acc Animate (ASg Masc) => "этого"; + AF Acc _ (ASg Fem) => "эту"; + AF Acc _ (ASg Neut) => "это"; + AF Acc Inanimate APl => "эти"; + AF Acc Animate APl => "этих"; + 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 Prepos2 _ (ASg Masc) => "этом"; + AF Prepos _ (ASg Fem) => "этой"; + AF Prepos2 _ (ASg Fem) => "этой"; + AF Prepos _ (ASg Neut) => "этом"; + AF Prepos2 _ (ASg Neut) => "этом"; + AF Prepos _ APl => "этих"; + AF Prepos2 _ APl => "этих"; + AdvF => "это" + } + } ; + +oper vesDet: Adjective = {s = table { + AF Nom _ (ASg Masc) => "весь"; + AF Nom _ (ASg Fem) => "вся"; + AF Nom _ (ASg Neut) => "всё"; + AF Nom _ APl => "все"; + AF Acc Animate (ASg Masc) => "весь"; + AF Acc Inanimate (ASg Masc) => "всего"; + AF Acc _ (ASg Fem) => "всю"; + AF Acc _ (ASg Neut) => "всё"; + AF Acc Inanimate APl => "все"; + AF Acc Animate APl => "всех"; + 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 Prepos2 _ (ASg Masc) => "всём"; + AF Prepos _ (ASg Fem) => "всей"; + AF Prepos2 _ (ASg Fem) => "всей"; + AF Prepos _ (ASg Neut) => "всём"; + AF Prepos2 _ (ASg Neut) => "всём"; + AF Prepos _ APl => "всех" ; + AF Prepos2 _ 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 Neut) => s + "ого"; + AF Gen _ APl => s + "ых"; + AF Inst _ (ASg Masc) => s + "ым"; + AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s + "ом"; + AF Prepos _ (ASg Fem) => s + "ой"; + AF Prepos2 _ (ASg Fem) => s + "ой"; + AF Prepos _ (ASg Neut) => s + "ом"; + AF Prepos2 _ (ASg Neut) => s + "ом"; + AF Prepos _ APl => s + "ых"; + AF Prepos2 _ APl => s + "ых"; + AdvF => s +"о" + } + } ; + +oper ti_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 Neut) => s+"ьего"; + AF Gen _ APl => s+"ьих"; + AF Inst _ (ASg Masc) => s+"ьим"; + AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s+"ьем"; + AF Prepos _ (ASg Fem) => s+"ьей"; + AF Prepos2 _ (ASg Fem) => s+"ьей"; + AF Prepos _ (ASg Neut) => s+"ьем"; + AF Prepos2 _ (ASg Neut) => s+"ьем"; + AF Prepos _ APl => s+"ьих"; + AF Prepos2 _ APl => s+"ьих"; + AdvF => s + "ье" + } + } ; + +--oper shi_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 Neut) => s+"его"; +-- AF Gen _ APl => s+"их"; +-- AF Inst _ (ASg Masc) => s+"им"; +-- AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s+"ем"; +-- AF Prepos _ (ASg Fem) => s+"ей"; +-- AF Prepos2 _ (ASg Fem) => s+"ей"; +-- AF Prepos _ (ASg Neut) => s+"ем"; +-- AF Prepos2 _ (ASg Neut) => s+"ем"; +-- AF Prepos _ APl => s+"их"; +-- AF Prepos2 _ APl => s+"их"; +-- AdvF => s + "о" +-- } +-- } ; + +--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 _ (ASg Fem) => s+"ую"; + AF Acc _ (ASg Neut) => s+"ое"; + AF Acc Animate APl => s+"их"; + AF Acc Inanimate APl => s+"ие"; + AF Gen _ (ASg Masc) => s+"ого"; + AF Gen _ (ASg Fem) => s+"ой"; + AF Gen _ (ASg Neut) => s+"ого"; + AF Gen _ APl => s+"их"; + AF Inst _ (ASg Masc) => s+"им"; + AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s+"ом"; + AF Prepos _ (ASg Fem) => s+"ой"; + AF Prepos2 _ (ASg Fem) => s+"ой"; + AF Prepos _ (ASg Neut) => s+"ом"; + AF Prepos2 _ (ASg Neut) => s+"ом"; + AF Prepos _ APl => s+"их"; + AF Prepos2 _ APl => s+"их"; + AdvF => s + "о" + } + } ; + +oper shij_End_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 _ (ASg Fem) => s+"ую"; + AF Acc _ (ASg Neut) => s+"ое"; + AF Acc Animate APl => s+"их"; + AF Acc Inanimate APl => s+"ие"; + AF Gen _ (ASg Masc) => s+"его"; + AF Gen _ (ASg Fem) => s+"ей"; + AF Gen _ (ASg Neut) => s+"его"; + AF Gen _ APl => s+"их"; + AF Inst _ (ASg Masc) => s+"им"; + AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s+"ем"; + AF Prepos _ (ASg Fem) => s+"ей"; + AF Prepos2 _ (ASg Fem) => s+"ей"; + AF Prepos _ (ASg Neut) => s+"ем"; + AF Prepos2 _ (ASg Neut) => s+"ем"; + AF Prepos _ APl => s+"их"; + AF Prepos2 _ APl => s+"их"; + AdvF => s + "о" + } + } ; + +--oper bolshoj: AdjDegr = mkAdjDeg (i_oj_EndDecl "больш" []) "больше"; +--oper dorogoj: AdjDegr = mkAdjDeg (i_oj_EndDecl "дорог" []) "дороже"; + +oper i_oj_EndDecl : Str -> Str -> Adjective = \s, chastica ->{s = table { + AF Nom _ (ASg Masc) => s+"ой" + chastica ; + AF Nom _ (ASg Fem) => s+"ая"+ chastica ; + AF Nom _ (ASg Neut) => s+"ое"+ chastica ; + AF Nom _ APl => s+"ие"+ chastica ; + AF Acc Animate (ASg Masc) => s+"ого"+ chastica ; + AF Acc Inanimate (ASg Masc) => s+"ой"+ chastica ; + AF Acc _ (ASg Fem) => s+"ую"+ chastica ; + AF Acc _ (ASg Neut) => s+"ое"+ chastica ; + AF Acc Animate APl => s+"их"+ chastica ; + AF Acc Inanimate APl => s+"ие"+ chastica ; + AF Gen _ (ASg Masc) => s+"ого"+ chastica ; + AF Gen _ (ASg Fem) => s+"ой"+ chastica ; + AF Gen _ (ASg Neut) => s+"ого"+ chastica ; + AF Gen _ APl => s+"их"+ chastica ; + AF Inst _ (ASg Masc) => s+"им"+ chastica ; + AF Inst _ (ASg Fem) => s+"ой"+ chastica ; + AF Inst _ (ASg Neut) => s+"им"+ chastica ; + AF Inst _ APl => s+"ими"+ chastica ; + AF Dat _ (ASg Masc) => s+"ому"+ chastica ; + AF Dat _ (ASg Fem) => s+"ой"+ chastica ; + AF Dat _ (ASg Neut) => s+"ому"+ chastica ; + AF Dat _ APl => s+"им"+ chastica ; + AF Prepos _ (ASg Masc) => s+"ом"+ chastica ; + AF Prepos2 _ (ASg Masc) => s+"ом"+ chastica ; + AF Prepos _ (ASg Fem) => s+"ой"+ chastica ; + AF Prepos2 _ (ASg Fem) => s+"ой"+ chastica ; + AF Prepos _ (ASg Neut) => s+"ом"+ chastica ; + AF Prepos2 _ (ASg Neut) => s+"ом"+ chastica ; + AF Prepos _ APl => s+"их" + chastica; + AF Prepos2 _ APl => s+"их" + chastica; + AdvF => s + "о" + } + } ; +--oper molodoj: AdjDegr = mkAdjDeg (uy_oj_EndDecl "молод") "моложе"; + +oper uy_oj_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 Animate (ASg Masc) => s+"ого"; + AF Acc Inanimate (ASg Masc) => s+"ой"; + AF Acc _ (ASg Fem) => s+"ую"; + AF Acc _ (ASg Neut) => s+"ое"; + AF Acc Animate APl => s+"ых"; + AF Acc Inanimate APl => s+"ые"; + AF Gen _ (ASg Masc) => s+"ого"; + AF Gen _ (ASg Fem) => s+"ой"; + AF Gen _ (ASg Neut) => s+"ого"; + AF Gen _ APl => s+"ых"; + AF Inst _ (ASg Masc) => s+"ым"; + AF Inst _ (ASg Fem) => 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 Prepos2 _ (ASg Masc) => s+"ом"; + AF Prepos _ (ASg Fem) => s+"ой"; + AF Prepos2 _ (ASg Fem) => s+"ой"; + AF Prepos _ (ASg Neut) => s+"ом"; + AF Prepos2 _ (ASg Neut) => s+"ом"; + AF Prepos _ APl => s+"ых"; + AF Prepos2 _ APl => s+"ых"; + AdvF => s + "о" + } + } ; + +--oper prostuzhen: Adjective = shortDecl1 "простужен" ; +--oper beremenen: Adjective = shortDecl "беремен" ; +--oper need: Adjective = shortDecl "нуж" ; +--oper shortDecl1 : Str -> Adjective = \s ->{s = table { +-- AF _ _ (ASg Masc) => s; +-- AF _ _ (ASg Fem) => s+"а"; +-- AF _ _ (ASg Neut) => s+"о"; +-- AF _ _ APl => s+"ы" ; +-- AdvF => s + "о" +-- } +-- } ; +--oper shortDecl : Str -> Adjective = \s ->{s = table { +-- AF _ _ (ASg Masc) => s +"ен"; +-- AF _ _ (ASg Fem) => s+"на"; +-- AF _ _ (ASg Neut) => s+"но"; +-- AF _ _ APl => s+"ны" ; +-- AdvF => s + "о" +-- }-- } ; +-- +---- 2 Adverbs +-- +--oper vsegda: Adverb = { s = "всегда" } ; +--oper chorosho: Adverb = { s = "хорошо" } ; +-- +---- 2 Verbs +-- +---- Dummy verbum "have" that corresponds to the phrases like +---- "I have a headache" in English. The corresponding sentence +---- in Russian doesn't contain a verb: +-- +--oper have: Verbum = {s=\\ vf => "-" ; asp = Imperfective} ; +-- +---- There are two common conjugations +---- (according to the number and the person of the subject) +---- patterns in the present tense in the indicative mood. + +-- +++ MG_UR: new conjugation class 'Foreign' introduced +++ +param Conjugation = First | FirstE | Second | Mixed | Dolzhen | Foreign ; + + +--3 First conjugation (in Present) verbs : +oper verbIdti : Verbum = verbDecl Imperfective First "ид" "у" "шел" "иди" "идти"; + +--oper verbGulyat : Verbum = verbDecl Imperfective First "гуля" "ю" "гулял" "гуляй" "гулять"; +--oper verbVkluchat : Verbum = verbDecl Imperfective First "включа" "ю" "включал" "включай" "включать"; +oper verbSuchestvovat : Verbum = verbDecl Imperfective First "существу" "ю" "существовал" "существуй" "существовать"; +--oper verbVukluchat : Verbum = verbDecl Imperfective First "выключа" "ю" "выключал" "выключай" "выключать"; +--oper verbZhdat : Verbum = verbDecl Imperfective First "жд" "у" "ждал" "жди" "ждать" ; +--oper verbBegat : Verbum = verbDecl Imperfective First "бега" "ю" "бегал" "бегай" "бегать"; +--oper verbPrinimat : Verbum = verbDecl Imperfective First "принима" "ю" "принимал" "принимай" "принимать"; +--oper verbDokazuvat : Verbum = verbDecl Imperfective First "доказыва" "ю" "доказывал" "доказывай" "доказывать"; +--oper verbPredpochitat : Verbum = verbDecl Imperfective First "предпочита" "ю" "предпочитал" "предпочитай" "предпочитать"; +--oper verbOtpravlyat : Verbum = verbDecl Imperfective First "отправля" "ю" "отправлял" "отправляй" "отправлять"; +--oper verbSlomat : Verbum = verbDecl Perfective First "слома" "ю" "сломал" "сломай" "сломать"; + + +---- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) : +--oper verbDavat : Verbum = verbDecl Imperfective FirstE "да" "ю" "давал" "давай" "давать"; +--oper verbPit : Verbum = verbDecl Imperfective FirstE "пь" "ю" "пил" "пей" "пить"; +-- + + +oper verbByut : Verbum = verbDecl Perfective First "буд" "у" "был" "будь" "быть"; + +oper verbMoch : Verbum = verbDeclMoch Imperfective First "мог" "у" "мог" "моги" "мочь" "мож"; + +----3 Second conjugation (in Present) verbs : +-- +--oper verbLubit : Verbum = verbDecl Imperfective Second "люб" "лю" "любил" "люби" "любить"; +--oper verbGovorit : Verbum = verbDecl Imperfective Second "говор" "ю" "говорил" "говори" "говорить"; +-- +--oper verbBolet_2 : Verbum = verbDecl Imperfective Second "бол" "ю" "болел" "боли" "болеть"; +--oper verbPoranit : Verbum = verbDecl Perfective Second "поран" "ю" "поранил" "порань" "поранить"; +-- +-- Irregular Mixed: +oper verbKhotet : Verbum = verbDecl Imperfective Mixed "хоч" "у" "хотел" "хоти" "хотеть"; + +-- Irregular +oper verbDolzhen : Verbum = verbDecl Imperfective Dolzhen "долж" "ен" "долж" ["будь должен"] ["быть должным"] ; + + +-- further conjugation class added by Magda Gerritsen and Ulrich Real: +-- foreign words introduced in Russian + +oper verbOrganisuet : Verbum = verbDecl Imperfective Foreign "организу" "ю" "организовал" "организуй" "организовать"; + + +-- To reduces the redundancies in the definitions +-- we introduce some intermediate types, +-- so that the full type can be described as a combination +-- of the intermediate types. For example "AspectVoice" +-- is a type for defining a pattern for a particular +-- aspect and voice. + +oper AspectVoice: Type = { s : VerbConj => Str ; asp: Aspect } ; + +idetDozhd: Verbum -> Verbum = \idet -> {s = \\vf=>idet.s!vf ++ "дождь"; asp = Imperfective}; + +-- "PresentVerb" takes care of the present tense conjugation. + +param PresentVF = PRF GenNum Person; +oper PresentVerb : Type = PresentVF => Str ; + +oper presentConjDolzhen: Str -> Str -> PresentVerb = \del, sgP1End -> + table { + PRF APl _ => del+ "ны" ; + PRF (ASg Masc) P1 => del+ sgP1End ; + PRF (ASg Fem) P1 => del+ "на" ; + PRF (ASg Neut) P1 => del+ "но" ; + PRF (ASg Masc) P2 => del+ sgP1End ; + PRF (ASg Fem) P2 => del+ "на" ; + PRF (ASg Neut) P2 => del+ "но" ; + PRF (ASg Masc) P3 => del+ sgP1End ; + PRF (ASg Fem) P3 => del+ "на" ; + PRF (ASg Neut) P3 => del+ "но" }; + +-- +++ MG_UR: changed! +++ +oper presentConjMixed: Str -> Str -> PresentVerb = \del, sgP1End -> + table { + PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "чу" + PRF (ASg _) P2 => del+ "чешь" ; + PRF (ASg _) P3 => del+ "чет" ; + PRF APl P1 => del+ "тим" ; + PRF APl P2 => del+ "тите" ; + PRF APl P3 => del+ "тят" + }; + +-- +++ MG_UR: changed! (+ д) +++ +oper presentConj2: Str -> Str -> PresentVerb = \del, sgP1End -> +table { + PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "жу" + PRF (ASg _) P2 => del+ "дишь" ; + PRF (ASg _) P3 => del+ "дит" ; + PRF APl P1 => del+ "дим" ; + PRF APl P2 => del+ "дите" ; + PRF APl P3 => del+ "дят" + }; + +oper presentConj1E: Str -> Str -> PresentVerb = \del, sgP1End -> + table { + PRF (ASg _) P1 => del+ sgP1End ; + PRF (ASg _) P2 => del+ "ёшь" ; + PRF (ASg _) P3 => del+ "ёт" ; + PRF APl P1 => del+ "ём" ; + PRF APl P2 => del+ "ёте" ; + PRF APl P3 => del+ sgP1End + "т" + }; + +oper presentConj1: Str -> Str -> PresentVerb = \del, sgP1End -> + table { + PRF (ASg _) P1 => del+ sgP1End ; + PRF (ASg _) P2 => del+ "ешь" ; + PRF (ASg _) P3 => del+ "ет" ; + PRF APl P1 => del+ "ем" ; + PRF APl P2 => del+ "ете" ; + PRF APl P3 => del+ sgP1End + "т" + }; + +oper presentConj1Moch: Str -> Str -> Str -> PresentVerb = \del, sgP1End, altRoot -> + table { + PRF (ASg _) P1 => del + sgP1End ; + PRF (ASg _) P2 => altRoot + "ешь" ; + PRF (ASg _) P3 => altRoot + "ет" ; + PRF APl P1 => altRoot + "ем" ; + PRF APl P2 => altRoot + "ете" ; + PRF APl P3 => del+ sgP1End + "т" + }; + +-- "PastVerb" takes care of the past tense conjugation. + +param PastVF = PSF GenNum ; +oper PastVerb : Type = PastVF => Str ; +oper pastConj: Str -> PastVerb = \del -> + table { + PSF (ASg Masc) => del ; + PSF (ASg Fem) => del +"а" ; + PSF (ASg Neut) => del+"о" ; + PSF APl => del+ "и" + }; + +oper pastConjDolzhen: Str -> PastVerb = \del -> + table { + PSF (ASg Masc) => ["был "] + del + "ен" ; + PSF (ASg Fem) => ["была "] + del + "на" ; + PSF (ASg Neut) => ["было "] + del + "но" ; + PSF APl => ["были "] + del + "ны" + }; + +-- further class added by Magda Gerritsen and Ulrich Real +oper presentConjForeign: Str -> Str -> PresentVerb = \del, sgP1End -> + table { + PRF (ASg _) P1 => del+ sgP1End ; -- sgP1End "ю" + PRF (ASg _) P2 => del+ "ешь" ; + PRF (ASg _) P3 => del+ "ет" ; + PRF APl P1 => del+ "ем" ; + PRF APl P2 => del+ "ете" ; + PRF APl P3 => del+ "ют" +}; + +-- "verbDecl" sorts out verbs according to the aspect and voice parameters. +-- It produces the full conjugation table for a verb entry + +-- +++ MG_UR: new conjugation class 'Foreign' introduced +++ +oper verbDecl: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Verbum = + \a, c, del, sgP1End, sgMascPast, imperSgP2, inf -> case a of +{ Perfective => case c of { + First => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + FirstE => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1E del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + Second => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj2 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + Mixed => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConjMixed del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + Dolzhen => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConjDolzhen del sgP1End) (pastConjDolzhen sgMascPast)) (pastConjDolzhen sgMascPast); + Foreign => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConjForeign del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast) +} ; + Imperfective => case c of { + First => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + FirstE => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1E del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + Second => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj2 del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast); + Mixed => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConjMixed del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast) ; + Dolzhen => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConjDolzhen del sgP1End) (pastConjDolzhen sgMascPast)) (pastConjDolzhen sgMascPast); + Foreign => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConjForeign del sgP1End) (pastConj sgMascPast)) (pastConj sgMascPast) + } +}; + +-- for verbs like "мочь" ("can") with changing consonants (first conjugation): +-- "могу - можешь" +oper verbDeclMoch: Aspect -> Conjugation -> Str -> Str -> Str -> Str ->Str -> Str -> Verbum = + \a, c, del, sgP1End, sgMascPast, imperSgP2, inf, altRoot -> case a of + { Perfective => mkVerb (perfectiveActivePattern inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast)) (pastConj sgMascPast); + Imperfective => mkVerb (imperfectiveActivePattern inf imperSgP2 (presentConj1Moch del sgP1End altRoot) (pastConj sgMascPast)) (pastConj sgMascPast) + }; + + +-- "mkVerb" produce the passive forms from +-- the active forms using the "mkPassive" method. +-- Passive is expressed in Russian by so called reflexive verbs, +-- which are formed from the active form by suffixation. +oper mkVerb : AspectVoice -> PastVerb -> Verbum = \av1, pv -> { s = table { + VFORM Act vf => av1.s !vf; + VFORM Pass vf => (mkPassive av1 pv ).s ! vf + } ; + asp = av1.asp +}; + +-- vowels : Strs = strs { +-- "а" ; "е" ; "ё" ; "и" ; "о" ; "у" ; +-- "ы" ; "э" ; "ю" ; "я" +-- } ; +-- +oper mkPassive: AspectVoice -> PastVerb -> AspectVoice = \av, pv -> + { s = table { + VINF => av.s ! VINF + "ся"; + VIMP Sg P1 => av.s ! (VIMP Sg P1) +"сь" ; + VIMP Pl P1 => av.s ! (VIMP Pl P1) +"ся"; + VIMP Sg P2 => av.s ! (VIMP Sg P2 ) +"сь"; + VIMP Pl P2 => av.s! (VIMP Pl P2) +"сь"; + VIMP Sg P3 => av.s ! (VIMP Sg P3) +"ся"; + VIMP Pl P3 => av.s ! (VIMP Pl P3) +"ся"; + VSUB (ASg Masc) => pv ! (PSF (ASg Masc)) + "ся"++"бы"; + VSUB (ASg Fem) => pv ! (PSF (ASg Fem)) + "сь"++"бы"; + VSUB (ASg Neut) => pv ! (PSF (ASg Neut)) + "сь"++"бы"; + VSUB APl => pv ! (PSF APl) + "сь"+"бы" ; + VIND (ASg _) (VPresent P1) => + -- case av.asp of { Imperfective => + av.s ! (VIND (ASg Masc) (VPresent P1)) + "сь" ; + -- Perfective = > nonExist + -- } ; + VIND (ASg _) (VPresent P2) => av.s ! (VIND (ASg Masc) (VPresent P2))+ "ся" ; + VIND (ASg _) (VPresent P3) => av.s ! (VIND (ASg Masc) (VPresent P3))+ "ся" ; + VIND APl (VPresent P1) => av.s !( VIND APl (VPresent P1)) + "ся" ; + VIND APl (VPresent P2) => av.s !( VIND APl (VPresent P2)) + "сь" ; + VIND APl (VPresent P3) => av.s !( VIND APl (VPresent P3)) + "ся" ; + VIND (ASg _) (VFuture P1) => av.s ! (VIND (ASg Masc) (VFuture P1)) + "сь"; + VIND (ASg _) (VFuture P2) => av.s! (VIND (ASg Masc) (VFuture P2) )+ "ся"; + VIND (ASg _) (VFuture P3) => av.s! (VIND (ASg Masc) (VFuture P3)) + "ся"; + VIND APl (VFuture P1) => av.s! (VIND APl (VFuture P1) )+ "ся"; + VIND APl (VFuture P2) => av.s! (VIND APl (VFuture P2) )+ "сь"; + VIND APl (VFuture P3) => av.s! (VIND APl (VFuture P3)) + "ся"; + VIND (ASg Masc) VPast => av.s ! (VIND (ASg Masc) VPast ) + "ся"; + VIND (ASg Fem) VPast => av.s ! (VIND (ASg Fem) VPast ) + "сь"; + VIND (ASg Neut) VPast => av.s ! (VIND (ASg Neut) VPast) + "сь"; + VIND APl VPast => av.s ! (VIND APl VPast ) + "сь" + } ; + asp = av.asp +}; + +-- Generation the imperfective active pattern given +-- a number of basic conjugation forms. + +oper imperfectiveActivePattern : Str -> Str -> PresentVerb -> PastVerb -> AspectVoice = + \inf, imper, presentFuture, past -> { s= table { + VINF => inf ; + VIMP Sg P1 => "давайте" ++ inf ; + VIMP Pl P1 => "давайте" ++ inf ; + VIMP Sg P2 => imper ; + VIMP Pl P2 => imper+"те" ; + VIMP Sg P3 => "пусть" ++ presentFuture ! (PRF (ASg Masc) P3) ; + VIMP Pl P3 => "пусть" ++ presentFuture ! (PRF APl P3) ; + VSUB (ASg Masc) => past ! (PSF (ASg Masc)) ++"бы"; + VSUB (ASg Fem) => past ! (PSF (ASg Fem)) ++"бы"; + VSUB (ASg Neut) => past ! (PSF (ASg Neut) )++"бы"; + VSUB APl => past ! (PSF APl) ++"бы"; + VIND (ASg _) (VPresent P1) => presentFuture ! ( PRF (ASg Masc) P1); + VIND (ASg _) (VPresent P2) => presentFuture! (PRF (ASg Masc) P2) ; + VIND (ASg _) (VPresent P3) => presentFuture ! (PRF (ASg Masc) P3) ; + VIND APl (VPresent P1) => presentFuture ! (PRF APl P1); + VIND APl (VPresent P2) => presentFuture ! (PRF APl P2); + VIND APl (VPresent P3) => presentFuture ! (PRF APl P3); + VIND (ASg _) (VFuture P1) => "буду" ++ inf ; + VIND (ASg _) (VFuture P2) => "будешь" ++ inf ; + VIND (ASg _) (VFuture P3) => "будет" ++ inf ; + VIND APl (VFuture P1) => "будем" ++ inf ; + VIND APl (VFuture P2) => "будете" ++ inf ; + VIND APl (VFuture P3) => "будут" ++ inf ; + VIND (ASg Masc) VPast => past ! (PSF (ASg Masc)) ; + VIND (ASg Fem) VPast => past ! (PSF (ASg Fem) ) ; + VIND (ASg Neut) VPast => past ! (PSF (ASg Neut)) ; + VIND APl VPast => past ! (PSF APl) + } ; + asp = Imperfective +} ; + +oper perfectiveActivePattern: Str -> Str -> PresentVerb -> PastVerb -> AspectVoice = + \inf, imper, presentFuture, past -> { s= table { + VINF => inf ; + VIMP Sg P1 => "давайте"++ presentFuture ! (PRF (ASg Masc) P1); + VIMP Pl P1 => "давайте" ++ presentFuture ! (PRF APl P1); + VIMP Sg P2 => imper ; + VIMP Pl P2 => imper+"те" ; + VIMP Sg P3 => "пусть" ++ presentFuture ! (PRF (ASg Masc) P3) ; + VIMP Pl P3 => "пусть" ++ presentFuture ! (PRF APl P3) ; + VSUB (ASg Masc) => past ! (PSF (ASg Masc)) ++"бы"; + VSUB (ASg Fem) => past ! (PSF (ASg Fem)) ++"бы"; + + VSUB (ASg Neut) => past ! (PSF (ASg Neut) )++"бы"; + VSUB APl => past ! (PSF APl) ++"бы"; + VIND (ASg _) (VPresent _) => [] ; + VIND APl (VPresent P1) => nonExist ; + VIND APl (VPresent P2) => nonExist ; + VIND APl (VPresent P3) => [] ; + VIND (ASg _) (VFuture P1) => presentFuture ! (PRF (ASg Masc) P1) ; + VIND (ASg _) (VFuture P2) => presentFuture ! (PRF (ASg Masc) P2) ; + VIND (ASg _) (VFuture P3) => presentFuture ! (PRF (ASg Masc) P3) ; + VIND APl (VFuture P1) => presentFuture ! (PRF APl P1) ; + VIND APl (VFuture P2) => presentFuture ! (PRF APl P2) ; + VIND APl (VFuture P3) => presentFuture ! (PRF APl P3) ; + VIND (ASg Masc) VPast => past ! (PSF (ASg Masc)) ; + VIND (ASg Fem) VPast => past ! (PSF (ASg Fem) ) ; + VIND (ASg Neut) VPast => past ! (PSF (ASg Neut)) ; + VIND APl VPast => past ! (PSF APl) + } ; + asp = Perfective +} ; + +----2 Proper names are a simple kind of noun phrases. +-- +oper ProperName : Type = {s : Case => Str ; g : Gender ; anim : Animacy} ; +-- +-- mkCNProperName : CommNoun -> ProperName = \cn -> +--{s = \\c => cn.s! (SF Sg c); g=cn.g; anim = cn.anim }; +-- + mkProperNameMasc : Str -> Animacy -> ProperName = \ivan, anim -> + { s = table { Nom => ivan ; + Gen => ivan + "а"; + Dat => ivan + "у"; + Acc => case anim of + { Animate => ivan + "а"; + Inanimate => ivan + }; + Inst => ivan + "ом"; + Prepos => ivan + "е" ; + Prepos2 => ivan + "е" } ; + g = Masc; anim = anim }; + + mkProperNameFem : Str -> Animacy -> ProperName = \masha, anim -> + { s = table { Nom => masha + "а"; + Gen => masha + "и"; + Dat => masha + "е"; + Acc => masha + "у"; + Inst => masha + "ей"; + Prepos => masha + "е" ; + Prepos2 => masha + "е" } ; + g = Fem ; anim = anim }; + +}; diff --git a/lib/resource-1.0/russian/ParadigmsRus.gf b/lib/resource-1.0/russian/ParadigmsRus.gf index 39f9032d6..f52b613a3 100644 --- a/lib/resource-1.0/russian/ParadigmsRus.gf +++ b/lib/resource-1.0/russian/ParadigmsRus.gf @@ -1,603 +1,1039 @@ ---# -path=.:../abstract:../../prelude:../common - ---1 Russian Lexical Paradigms --- --- Janna Khegai 2003--2006 --- --- This is an API for the user of the resource grammar --- for adding lexical items. It gives functions for forming --- expressions of open categories: nouns, adjectives, verbs. --- --- Closed categories (determiners, pronouns, conjunctions) are --- accessed through the resource syntax API, $Structural.gf$. --- --- The main difference with $MorphoRus.gf$ is that the types --- referred to are compiled resource grammar types. We have moreover --- had the design principle of always having existing forms, rather --- than stems, as string arguments of the paradigms. --- --- The structure of functions for each word class $C$ is the following: --- first we give a handful of patterns that aim to cover all --- regular cases. Then we give a worst-case function $mkC$, which serves as an --- escape to construct the most irregular words of type $C$. --- --- The following modules are presupposed: - -resource ParadigmsRus = open - (Predef=Predef), - Prelude, - MorphoRus, - CatRus, - NounRus - in { - -flags coding=utf8 ; - ---2 Parameters --- --- To abstract over gender names, we define the following identifiers. - -oper - Gender : Type ; - masculine : Gender ; - feminine : Gender ; - neuter : Gender ; - --- To abstract over case names, we define the following. - Case : Type ; - - nominative : Case ; - genitive : Case ; - dative : Case ; - accusative : Case ; - instructive : Case ; - prepositional : Case ; - --- In some (written in English) textbooks accusative case --- is put on the second place. However, we follow the case order --- standard for Russian textbooks. - --- To abstract over number names, we define the following. - Number : Type ; - - singular : Number ; - plural : Number ; - - Animacy: Type ; - - animate: Animacy; - inanimate: Animacy; - - - ---2 Nouns - --- Best case: indeclinabe nouns: "кофе", "пальто", "ВУЗ". - - mkN : overload { - --- The regular function captures the variants for some popular nouns --- endings below: - - mkN : Str -> N ; - --- This function is for indeclinable nouns. - - mkN : Str -> Gender -> Animacy -> N ; - --- Worst case - give six singular forms: --- Nominative, Genetive, Dative, Accusative, Instructive and Prepositional; --- corresponding six plural forms and the gender. --- May be the number of forms needed can be reduced, --- but this requires a separate investigation. --- Animacy parameter (determining whether the Accusative form is equal --- to the Nominative or the Genetive one) is actually of no help, --- since there are a lot of exceptions and the gain is just one form less. - - mkN : (nomSg,_,_,_,_,_,_,_,_,_,_,prepPl : Str) -> Gender -> Animacy -> N ; - - --- мужчина, мужчины, мужчине, мужчину, мужчиной, мужчине --- мужчины, мужчин, мужчинам, мужчин, мужчинами, мужчинах - - } ; - - --- Here are some common patterns. The list is far from complete. - --- Feminine patterns. - - nMashina : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"машин-ой" - nEdinica : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"единиц-ей" - nZhenchina : Str -> N ; -- feminine, animate, ending with "-a" - nNoga : Str -> N ; -- feminine, inanimate, ending with "г_к_х-a" - nMalyariya : Str -> N ; -- feminine, inanimate, ending with "-ия" - nTetya : Str -> N ; -- feminine, animate, ending with "-я" - nBol : Str -> N ; -- feminine, inanimate, ending with "-ь"(soft sign) - --- Neuter patterns. - - nObezbolivauchee : Str -> N ; -- neutral, inanimate, ending with "-ee" - nProizvedenie : Str -> N ; -- neutral, inanimate, ending with "-e" - nChislo : Str -> N ; -- neutral, inanimate, ending with "-o" - nZhivotnoe : Str -> N ; -- masculine, inanimate, ending with "-ень" - --- Masculine patterns. - --- Ending with consonant: - nPepel : Str -> N ; -- masculine, inanimate, ending with "-ел"- "пеп-ла" - - nBrat: Str -> N ; -- animate, брат-ья - nStul: Str -> N ; -- same as above, but inanimate - nMalush : Str -> N ; -- малышей - nPotolok : Str -> N ; -- потол-ок - потол-ка - - -- the next four differ in plural nominative and/or accusative form(s) : - nBank: Str -> N ; -- банк-и (Nom=Acc) - nStomatolog : Str -> N ; -- same as above, but animate - nAdres : Str -> N ; -- адрес-а (Nom=Acc) - nTelefon : Str -> N ; -- телефон-ы (Nom=Acc) - - nNol : Str -> N ; -- masculine, inanimate, ending with "-ь" (soft sign) - nUroven : Str -> N ; -- masculine, inanimate, ending with "-ень" - --- Nouns used as functions need a preposition. The most common is with Genitive. - - mkFun : N -> Prep -> N2 ; - mkN2 : N -> N2 ; - mkN3 : N -> Prep -> Prep -> N3 ; - --- Proper names. - - mkPN : overload { - mkPN : Str -> PN ; - mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша" - mkPN : N -> PN ; - } ; - - - ---2 Adjectives - --- Non-comparison (only positive degree) one-place adjectives need 28 (4 by 7) --- forms in the worst case: - - --- (Masculine | Feminine | Neutral | Plural) * - --- (Nominative | Genitive | Dative | Accusative Inanimate | Accusative Animate | --- Instructive | Prepositional) - - --- Notice that 4 short forms, which exist for some adjectives are not included --- in the current description, otherwise there would be 32 forms for --- positive degree. - --- The regular function captures the variants for some popular adjective --- endings below. The first string agrument is the masculine singular form, --- the second is comparative: --- Invariable adjective is a special case, with only on string needed. - - mkA : overload { - mkA : Str -> A ; -- khaki, mini, hindi, netto - mkA : Str -> Str -> A ; - } ; - --- Some regular patterns depending on the ending. - - AStaruyj : Str -> Str -> A ; -- ending with "-ый" - AMalenkij : Str -> Str -> A ; -- ending with "-ий", Gen - "маленьк-ого" - AKhoroshij : Str -> Str -> A ; -- ending with "-ий", Gen - "хорош-его" - AMolodoj : Str -> Str -> A ; -- ending with "-ой", - -- plural - молод-ые" - AKakoj_Nibud : Str -> Str -> Str -> A ; -- ending with "-ой", - -- plural - "как-ие" - --- Two-place adjectives need a preposition and a case as extra arguments. - - mkA2 : A -> Str -> Case -> A2 ; -- "делим на" - --- Comparison adjectives need a positive adjective --- (28 forms without short forms). --- Taking only one comparative form (non-syntactic) and --- only one superlative form (syntactic) we can produce the --- comparison adjective with only one extra argument - --- non-syntactic comparative form. --- Syntactic forms are based on the positive forms. - - ---2 Adverbs - --- Adverbs are not inflected. - - mkAdv : Str -> Adv ; - ---2 Verbs --- --- In our lexicon description ("Verbum") there are 62 forms: --- 2 (Voice) by { 1 (infinitive) + [2(number) by 3 (person)](imperative) + --- [ [2(Number) by 3(Person)](present) + [2(Number) by 3(Person)](future) + --- 4(GenNum)(past) ](indicative)+ 4 (GenNum) (subjunctive) } --- Participles (Present and Past) and Gerund forms are not included, --- since they fuction more like Adjectives and Adverbs correspondingly --- rather than verbs. Aspect is regarded as an inherent parameter of a verb. --- Notice, that some forms are never used for some verbs. - -Voice: Type; -Aspect: Type; -Bool: Type; -Conjugation: Type ; - -first: Conjugation; -- "гуля-Ешь, гуля-Ем" -firstE: Conjugation; -- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) -second: Conjugation; -- "вид-Ишь, вид-Им" -mixed: Conjugation; -- "хоч-Ешь - хот-Им" -dolzhen: Conjugation; -- irregular - -true: Bool; -false: Bool; - -active: Voice ; -passive: Voice ; -imperfective: Aspect; -perfective: Aspect ; - - --- Common conjugation patterns are two conjugations: --- first - verbs ending with "-ать/-ять" and second - "-ить/-еть". --- Instead of 6 present forms of the worst case, we only need --- a present stem and one ending (singular, first person): --- "я люб-лю", "я жд-у", etc. To determine where the border --- between stem and ending lies it is sufficient to compare --- first person from with second person form: --- "я люб-лю", "ты люб-ишь". Stems shoud be the same. --- So the definition for verb "любить" looks like: --- regV Imperfective Second "люб" "лю" "любил" "люби" "любить"; --- --- There is no one-argument case. - - mkV : overload { - mkV : Aspect -> Conjugation -> (stemPrsSgP1,endPrsSgP1,pastSgP1,imp,inf : Str) -> V ; --- The worst case need 6 forms of the present tense in indicative mood --- ("я бегу", "ты бежишь", "он бежит", "мы бежим", "вы бежите", "они бегут"), --- a past form (singular, masculine: "я бежал"), an imperative form --- (singular, second person: "беги"), an infinitive ("бежать"). --- Inherent aspect should also be specified. - - mkV : Aspect -> (presSgP1,presSgP2,presSgP3,presPlP1,presPlP2,presPlP3,pastSgMasc,imp,inf: Str) -> V ; - - } ; - - - ---3 Two-place verbs - --- Two-place verbs, and the special case with direct object. Notice that --- a particle can be included in a $V$. - - mkV2 : overload { - mkV2 : V -> V2 ; -- "видеть", "любить" - mkV2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative - } ; - - ---3 Three-place verbs - - tvDirDir : V -> V3 ; - mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт" --- The definitions should not bother the user of the API. So they are --- hidden from the document. ---. - Gender = MorphoRus.Gender ; - Case = MorphoRus.Case ; - Number = MorphoRus.Number ; - Animacy = MorphoRus.Animacy; - Aspect = MorphoRus.Aspect; - Voice = MorphoRus.Voice ; - --Tense = Tense ; - Bool = Prelude.Bool ; - Conjugation = MorphoRus.Conjugation; -first = First ; -firstE = FirstE ; -second = Second ; -mixed = Mixed ; -dolzhen = Dolzhen; - - true = True; - false = False ; - masculine = Masc ; - feminine = Fem ; - neuter = Neut ; - nominative = Nom ; - accusative = Acc ; - dative = Dat ; - genitive = Gen ; - instructive = Inst ; - prepositional = Prepos ; - singular = Sg ; - plural = Pl ; - animate = Animate ; - inanimate = Inanimate ; - active = Act ; - passive = Pass ; - imperfective = Imperfective ; - perfective = Perfective ; - -- present = Present ; - --past = Past ; - -- Degree = Pos | Comp | Super ; - -- Person = P1 | P2 | P3 ; - -- AfterPrep = Yes | No ; - -- Possessive = NonPoss | Poss GenNum ; - --- Noun definitions - - mkIndeclinableNoun = \s,g, anim -> - { - s = table { SF _ _ => s } ; - g = g ; - anim = anim - } ** {lock_N = <>}; - - - mk12N = \nomSg, genSg, datSg, accSg, instSg, preposSg, - nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> - { - s = table { - SF Sg Nom => nomSg ; - SF Sg Gen => genSg ; - SF Sg Dat => datSg ; - SF Sg Acc => accSg ; - SF Sg Inst => instSg ; - SF Sg Prepos => preposSg ; - SF Pl Nom => nomPl ; - SF Pl Gen => genPl ; - SF Pl Dat => datPl ; - SF Pl Acc => accPl ; - SF Pl Inst => instPl ; - SF Pl Prepos => preposPl - } ; - g = g ; - anim = anim - } ** {lock_N = <>} ; - - -regN = \ray -> - let - ra = Predef.tk 1 ray ; - y = Predef.dp 1 ray ; - r = Predef.tk 2 ray ; - ay = Predef.dp 2 ray ; - rays = - case y of { - "а" => nMashina ray ; - "ь" => nBol ray ; - "я" => case ay of { - "ия" => nMalyariya ray; - _ => nTetya ray }; - "е" => case ay of { - "ее" => nObezbolivauchee ray ; - "ое" => nZhivotnoe ray ; - _ => nProizvedenie ray }; - "о" => nChislo ray; - _=> nStomatolog ray - } - in - rays ; - - - - nMashina = \s -> aEndInAnimateDecl s ** {lock_N = <>}; - nEdinica = \s -> ej_aEndInAnimateDecl s ** {lock_N = <>}; - nZhenchina = \s -> (aEndAnimateDecl s) ** { g = Fem ; anim = Animate } ** {lock_N = <>}; - nNoga = \s -> aEndG_K_KH_Decl s ** {lock_N = <>}; - nMalyariya = \s -> i_yaEndDecl s ** {lock_N = <>}; - nTetya = \s -> (yaEndAnimateDecl s) ** {g = Fem; anim = Animate; lock_N = <>} ; - nBol = \s -> softSignEndDeclFem s ** {lock_N = <>}; - --- Neuter patterns. - - nObezbolivauchee = \s -> eeEndInAnimateDecl s ** {lock_N = <>}; - nZhivotnoe = \s -> oeEndAnimateDecl s ** {lock_N = <>}; - nProizvedenie = \s -> eEndInAnimateDecl s ** {lock_N = <>}; - nChislo = \s -> oEndInAnimateDecl s ** {lock_N = <>}; - - --- Masculine patterns. - nBank = \s -> nullEndInAnimateDecl s ** {lock_N = <>}; - nStomatolog = \s -> nullEndAnimateDecl s ** {lock_N = <>}; - nMalush = \s -> shEndDeclMasc s ** {lock_N = <>}; - nPotolok = \s ->okEndDeclMasc s ** {lock_N = <>}; - - nBrat = \s -> nullEndAnimateDeclBrat s** {lock_N = <>}; - nStul = \s -> nullEndInAnimateDeclStul s** {lock_N = <>}; - - nAdres = \s -> nullEndInAnimateDecl2 s ** {lock_N = <>}; - nTelefon = \s -> nullEndInAnimateDecl1 s ** {lock_N = <>}; - nPepel = \s -> nullEndInAnimateDeclPepel s ** {lock_N = <>}; - - nNol = \s -> softSignEndDeclMasc s ** {lock_N = <>}; - nUroven = \s -> EN_softSignEndDeclMasc s ** {lock_N = <>}; - - --- An individual-valued function is a common noun together with the --- preposition prefixed to its argument ("клZ+ о' дома"). --- The situation is analogous to two-place adjectives and transitive verbs. --- --- We allow the genitive construction to be used as a variant of --- all function applications. It would definitely be too restrictive only --- to allow it when the required case is genitive. We don't know if there --- are counterexamples to the liberal choice we've made. - - mkFun f p = (UseN f) ** {s2 = p.s ; c = p.c}** {lock_N2 = <>} ; - --- The commonest cases are functions with Genitive. - mkN2 n = mkFun n nullPrep ; - nullPrep : Prep = {s = []; c= Gen; lock_Prep=<>} ; - - mkN3 f p r = (UseN f) ** {s2 = p.s ; c=p.c; s3=r.s ; c2=r.c; lock_N3 = <>} ; - - - mk3PN = \ivan, g, anim -> - case g of { - Masc => mkProperNameMasc ivan anim ; - _ => mkProperNameFem ivan anim - } ** {lock_PN =<>}; - nounPN n = {s=\\c => n.s! SF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; - --- On the top level, it is maybe $CN$ that is used rather than $N$, and --- $NP$ rather than $PN$. - - makeCN : N -> CN ; - makeNP : Str -> Gender -> Animacy -> NP ; - - makeCN = UseN; - - makeNP = \x,y,z -> UsePN (mk3PN x y z) ; - --- Adjective definitions - regA = \ray, comp -> - let - ay = Predef.dp 2 ray ; - rays = - case ay of { - "ый" => AStaruyj ray comp; - "ой" => AMolodoj ray comp; - "ий" => AMalenkij ray comp; - _=> AKhoroshij ray comp - } - in - rays ; - - adjInvar = \s -> { s = \\_,_ => s } ** {lock_A= <>}; - - AStaruyj s comp = mkAdjDeg (uy_j_EndDecl s) comp ** {lock_A = <>} ; - AKhoroshij s comp = mkAdjDeg (shij_End_Decl s) comp ** {lock_A= <>}; - AMalenkij s comp = mkAdjDeg (ij_EndK_G_KH_Decl s) comp ** {lock_A= <>}; - AMolodoj s comp = mkAdjDeg (uy_oj_EndDecl s) comp ** {lock_A= <>}; - AKakoj_Nibud s t comp = mkAdjDeg (i_oj_EndDecl s t) comp ** {lock_A= <>}; - - mkA2 a p c= a ** {s2 = p ; c = c; lock_A2 = <>}; --- mkADeg a s = mkAdjDeg a s ** {lock_ADeg = <>}; -- defined in morpho.RusU - --- ap a p = mkAdjPhrase a p ** {lock_AP = <>}; -- defined in syntax module - - mkAdv x = ss x ** {lock_Adv = <>} ; - --- Verb definitions - --- mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, - mk9V = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, - sgMascPast, imperSgP2, inf -> case asp of { - Perfective => - mkVerb (perfectiveActivePattern inf imperSgP2 - (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast)) - (pastConj sgMascPast) ** { lock_V=<> }; - Imperfective => - mkVerb (imperfectiveActivePattern inf imperSgP2 - (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast)) - (pastConj sgMascPast) ** { lock_V=<> } - }; - - oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb = - \sgP1, sgP2, sgP3, plP1, plP2, plP3 -> - table { - PRF (ASg _) P1 => sgP1 ; - PRF (ASg _) P2 => sgP2 ; - PRF (ASg _) P3 => sgP3 ; - PRF APl P1 => plP1 ; - PRF APl P2 => plP2 ; - PRF APl P3 => plP3 - }; - - regV a b c d e f g = verbDecl a b c d e f g ** {lock_V = <>} ; - -- defined in morpho.RusU.gf -{- - mkV a b = extVerb a b ** {lock_V = <>}; -- defined in types.RusU.gf - - mkPresentV = \aller, vox -> - { s = table { - VFin gn p => aller.s ! VFORM vox (VIND (VPresent (numGNum gn) p)) ; - VImper n p => aller.s ! VFORM vox (VIMP n p) ; - VInf => aller.s ! VFORM vox VINF ; - VSubj gn => aller.s ! VFORM vox (VSUB gn) - }; t = Present ; a = aller.asp ; w = vox ; lock_V = <>} ; --} - mk2V2 v p cas = v ** {s2 = p ; c = cas; lock_V2 = <>}; - dirV2 v = mk2V2 v [] Acc; - - - tvDirDir v = mkV3 v "" "" Acc Dat; - --- *Ditransitive verbs* are verbs with three argument places. --- We treat so far only the rule in which the ditransitive --- verb takes both complements to form a verb phrase. - - mkV3 v s1 s2 c1 c2 = v ** {s2 = s1; c = c1; s4 = s2; c2=c2; lock_V3 = <>}; - - ---------------------------- --- overloaded API started by AR 6/7/2007 - - mkN = overload { - mkN : Str -> N = regN ; - mkN : Str -> Gender -> Animacy -> N = mkIndeclinableNoun ; - mkN : (nomSg,_,_,_,_,_,_,_,_,_,_,prepPl : Str) -> Gender -> Animacy -> N = mk12N ; - } ; - - regN : Str -> N ; - mkIndeclinableNoun: Str -> Gender -> Animacy -> N ; - mk12N : (nomSg, genSg, datSg, accSg, instSg, preposSg, - nomPl, genPl, datPl, accPl, instPl, preposPl: Str) -> Gender -> Animacy -> N ; - - - mkPN = overload { - mkPN : Str -> PN = regPN ; - mkPN : Str -> Gender -> Animacy -> PN = mk3PN ; -- "Иван", "Маша" - mkPN : N -> PN = nounPN ; - } ; - - regPN : Str -> PN = \s -> nounPN (regN s) ; - mk3PN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша" - nounPN : N -> PN ; - --- mkADeg : A -> Str -> ADeg ; - --- On top level, there are adjectival phrases. The most common case is --- just to use a one-place adjective. --- ap : A -> IsPostfixAdj -> AP ; - - mkA = overload { - mkA : Str -> A = adjInvar ; -- khaki, mini, hindi, netto - mkA : Str -> Str -> A = regA ; - } ; - - regA : Str -> Str -> A ; - adjInvar : Str -> A ; -- khaki, mini, hindi, netto - --- mkVerbum : Aspect -> (presentSgP1,presentSgP2,presentSgP3, - - mkV = overload { - mkV : Aspect -> Conjugation -> (stemPrsSgP1,endPrsSgP1,pastSgP1,imp,inf : Str) -> V = regV ; - mkV : Aspect -> (presSgP1,presSgP2,presSgP3,presPlP1,presPlP2,presPlP3,pastSgMasc,imp,inf: Str) -> V = mk9V ; - - } ; - - regV :Aspect -> Conjugation -> (stemPresentSgP1,endingPresentSgP1, - pastSgP1,imperative,infinitive : Str) -> V ; - mk9V : Aspect -> (presentSgP1,presentSgP2,presentSgP3, - presentPlP1,presentPlP2,presentPlP3, - pastSgMasculine,imperative,infinitive: Str) -> V ; - - - mkV2 = overload { - mkV2 : V -> V2 = dirV2 ; -- "видеть", "любить" - mkV2 : V -> Str -> Case -> V2 = mk2V2 ; -- "войти в дом"; "в", accusative - } ; - - mk2V2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative - dirV2 : V -> V2 ; -- "видеть", "любить" - - - -} ; - +--# -path=.:../abstract:../../prelude:../common + +--1 Russian Lexical Paradigms +-- +-- Janna Khegai 2003--2006 +-- +-- This is an API for the user of the resource grammar +-- for adding lexical items. It gives functions for forming +-- expressions of open categories: nouns, adjectives, verbs. +-- +-- Closed categories (determiners, pronouns, conjunctions) are +-- accessed through the resource syntax API, $Structural.gf$. +-- +-- The main difference with $MorphoRus.gf$ is that the types +-- referred to are compiled resource grammar types. We have moreover +-- had the design principle of always having existing forms, rather +-- than stems, as string arguments of the paradigms. +-- +-- The structure of functions for each word class $C$ is the following: +-- first we give a handful of patterns that aim to cover all +-- regular cases. Then we give a worst-case function $mkC$, which serves as an +-- escape to construct the most irregular words of type $C$. +-- +-- The following modules are presupposed: + +resource ParadigmsRus = open + (Predef=Predef), + Prelude, + MorphoRus, + CatRus, + NounRus + in { + +flags coding=utf8 ; + +--2 Parameters +-- +-- To abstract over gender names, we define the following identifiers. + +oper + Gender : Type ; + masculine : Gender ; + feminine : Gender ; + neuter : Gender ; + +-- To abstract over case names, we define the following. + Case : Type ; + + nominative : Case ; + genitive : Case ; + dative : Case ; + accusative : Case ; + instructive : Case ; + prepositional : Case ; + +-- In some (written in English) textbooks accusative case +-- is put on the second place. However, we follow the case order +-- standard for Russian textbooks. + +-- To abstract over number names, we define the following. + Number : Type ; + + singular : Number ; + plural : Number ; + +--2 Nouns + +-- Best case: indeclinabe nouns: "кофе", "пальто", "ВУЗ". + Animacy: Type ; + + animate: Animacy; + inanimate: Animacy; + + mkIndeclinableNoun: Str -> Gender -> Animacy -> N ; + +-- Worst case - give six singular forms: +-- Nominative, Genetive, Dative, Accusative, Instructive and Prepositional; +-- corresponding six plural forms and the gender. +-- May be the number of forms needed can be reduced, +-- but this requires a separate investigation. +-- Animacy parameter (determining whether the Accusative form is equal +-- to the Nominative or the Genetive one) is actually of no help, +-- since there are a lot of exceptions and the gain is just one form less. + + -- +++ MG_UR: new case Prepos2 introduced! +++ + mkN : (nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, + nomPl, genPl, datPl, accPl, instPl, preposPl, prepos2Pl: Str) -> Gender -> Animacy -> N ; + + -- мужчина, мужчины, мужчине, мужчину, мужчиной, мужчине + -- мужчины, мужчин, мужчинам, мужчин, мужчинами, мужчинах + +-- The regular function captures the variants for some popular nouns +-- endings below: + + regN : Str -> N ; + + +-- Here are some common patterns. The list is far from complete. + +-- Feminine patterns. + + nMashina : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"машин-ой" + nEdinica : Str -> N ; -- feminine, inanimate, ending with "-а", Inst -"единиц-ей" + nZhenchina : Str -> N ; -- feminine, animate, ending with "-a" + nNoga : Str -> N ; -- feminine, inanimate, ending with "г_к_х-a" + nMalyariya : Str -> N ; -- feminine, inanimate, ending with "-ия" + nTetya : Str -> N ; -- feminine, animate, ending with "-я" + nBol : Str -> N ; -- feminine, inanimate, ending with "-ь"(soft sign) + +-- further classes added by Magda Gerritsen and Ulrich Real + nSvecha: Str -> N ; -- like nEdinica, but instrumental case with -oj + nMat: Str -> N ; -- irregular, changing stem, other example 'daughter' + nDoch: Str -> N ; -- like nMat but different instrumental case + nLoshad: Str -> N ; -- i-declination but instrumental plural -mi + nNoch: Str -> N ; -- like nBol but after ZH no "soft behaviour" + + +-- Neuter patterns. + + nObezbolivauchee : Str -> N ; -- neutral, inanimate, ending with "-ee" + nProizvedenie : Str -> N ; -- neutral, inanimate, ending with "-e" + nChislo : Str -> Str -> N ; -- neutral, inanimate, ending with "-o" +++ MG_UR: nChislo now expects two arguments +++ + nZhivotnoe : Str -> N ; -- masculine, inanimate, ending with "-ень" + +-- further classes added by Magda Gerritsen and Ulrich Real + nSlovo: Str -> N ; -- hard consonants and zh, ending with -o + nMorje: Str -> N ; -- weak consonants, ending with -e + nUchilishe: Str -> N ; -- like nSlovo but because not stressed (betont) of with -e +-- nOkno: Str -> N ; -- like nSlovo but without -o- and genetive plural with -o- in between; no longer needed because of nChislo with two arguments +++ +-- nKreslo: Str -> N ; -- like nSlovo but without -o- and genetive plural with -o- in between; no longer needed because of nChislo with two arguments +++ + nNebo: Str -> N ; -- irregular, other example 'chudo' (wonder) + nDerevo: Str -> N ; -- irregular, change of stem, other example 'krylo' (wing) + nVremja: Str -> N ; -- irregular total, the most important ones: 'imja' (name), 'plamja' (flame), 'znamja' (flag), 'semja' (seed) + + +-- Masculine patterns. + +-- Ending with consonant: + nPepel : Str -> N ; -- masculine, inanimate, ending with "-ел"- "пеп-ла" + nBrat: Str -> N ; -- animate, брат-ья + nStul: Str -> N ; -- same as above, but inanimate + nMalush : Str -> N ; -- малышей + nPotolok : Str -> N ; -- потол-ок - потол-ка + +-- the next four differ in plural nominative and/or accusative form(s) : + nBank: Str -> N ; -- банк-и (Nom=Acc) + nStomatolog : Str -> N ; -- same as above, but animate + nAdres : Str -> N ; -- адрес-а (Nom=Acc), +++ MG_UR: other examples: 'bereg, vecher, gorod, dom, lec, glaz, poezd' +++ + nTelefon : Str -> N ; -- телефон-ы (Nom=Acc) + nNol : Str -> N ; -- masculine, inanimate, ending with "-ь" (soft sign) + nUchitel : Str -> N ; -- masculine, animate, ending with "-ь" (soft sign) -- +++ MG_UR: added +++ + nUroven : Str -> N ; -- masculine, inanimate, ending with "-ень" + +-- further classes added by Magda Gerritsen and Ulrich Real + nStol: Str -> N ; -- masculine "standard" declination (most simple case), hard consonants + nSlovar : Str -> N ; -- masculine, inanimate, ending soft ending, instrumental case with -jo- + nMusej : Str -> N ; -- masculine, inanimate, without ending + nDvorec : Str -> N ; -- masculine, inanimate, ending like nEtazh but genetive with -o- and with missing vowel + nTovarish : Str -> N ; -- masculine, animate, ending like nEtazh but instrumental case with -e- + nMesjac : Str -> N ; -- masculine, inanimate, ending like nDvorec but genitive wiht -e- + nGrazhdanin : Str -> N ; -- masculine, animate, ending with "-anin" and change of stem + nRebenok : Str -> N ; -- masculine, little beings, change of stem + nPut : Str -> N ; -- unique irregular Form, frequent use of the word + nGospodin : Str -> N ; -- like nGrazhdanin, but nominative plural ending with -a + nDen : Str -> N ; -- masculine, animate, ending with "-ь" (soft sign) but without vowel + nDrug : Str -> N ; -- like nBrat, but change of stemm + nSyn : Str -> N ; -- like nDrug, but another stem + +-- further classes added by Magda Gerritsen and Ulrich Real +-- attention: these are not declension classes but classes in which +-- one case differs depending on the preposition used with it! + nLes : Str -> N ; -- preposition 'v' requires the case Prepos2 + nMost : Str -> N ; -- preposition 'na' requires the case Prepos2 + +-- Nouns used as functions need a preposition. The most common is with Genitive. + + mkFun : N -> Prep -> N2 ; + mkN2 : N -> N2 ; + mkN3 : N -> Prep -> Prep -> N3 ; + +-- Proper names. + + mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша" + nounPN : N -> PN ; + +-- On the top level, it is maybe $CN$ that is used rather than $N$, and +-- $NP$ rather than $PN$. + + mkCN : N -> CN ; + mkNP : Str -> Gender -> Animacy -> NP ; + + +--2 Adjectives + +-- Non-comparison (only positive degree) one-place adjectives need 28 (4 by 7) +-- forms in the worst case: + + +-- (Masculine | Feminine | Neutral | Plural) * + +-- (Nominative | Genitive | Dative | Accusative Inanimate | Accusative Animate | +-- Instructive | Prepositional) + + +-- Notice that 4 short forms, which exist for some adjectives are not included +-- in the current description, otherwise there would be 32 forms for +-- positive degree. + +-- mkA : ( : Str) -> A ; + +-- The regular function captures the variants for some popular adjective +-- endings below. The first string agrument is the masculine singular form, +-- the second is comparative: + + regA : Str -> Str -> A ; + + +-- Invariable adjective is a special case. + + adjInvar : Str -> A ; -- khaki, mini, hindi, netto + +-- Some regular patterns depending on the ending. + + AStaruyj : Str -> Str -> A ; -- ending with "-ый" + AMalenkij : Str -> Str -> A ; -- ending with "-ий", Gen - "маленьк-ого" + AKhoroshij : Str -> Str -> A ; -- ending with "-ий", Gen - "хорош-его" + AMolodoj : Str -> Str -> A ; -- ending with "-ой", + -- plural - молод-ые" + AKakoj_Nibud : Str -> Str -> Str -> A ; -- ending with "-ой", + -- plural - "как-ие" + +-- Two-place adjectives need a preposition and a case as extra arguments. + + mkA2 : A -> Str -> Case -> A2 ; -- "делим на" + +-- Comparison adjectives need a positive adjective +-- (28 forms without short forms). +-- Taking only one comparative form (non-syntactic) and +-- only one superlative form (syntactic) we can produce the +-- comparison adjective with only one extra argument - +-- non-syntactic comparative form. +-- Syntactic forms are based on the positive forms. + + +-- mkADeg : A -> Str -> ADeg ; + +-- On top level, there are adjectival phrases. The most common case is +-- just to use a one-place adjective. +-- ap : A -> IsPostfixAdj -> AP ; + +--2 Adverbs + +-- Adverbs are not inflected. + + mkAdv : Str -> Adv ; + +--2 Verbs +-- +-- In our lexicon description ("Verbum") there are 62 forms: +-- 2 (Voice) by { 1 (infinitive) + [2(number) by 3 (person)](imperative) + +-- [ [2(Number) by 3(Person)](present) + [2(Number) by 3(Person)](future) + +-- 4(GenNum)(past) ](indicative)+ 4 (GenNum) (subjunctive) } +-- Participles (Present and Past) and Gerund forms are not included, +-- since they fuction more like Adjectives and Adverbs correspondingly +-- rather than verbs. Aspect is regarded as an inherent parameter of a verb. +-- Notice, that some forms are never used for some verbs. + +Voice: Type; +Aspect: Type; +Bool: Type; +Conjugation: Type ; + +first: Conjugation; -- "гуля-Ешь, гуля-Ем" +firstE: Conjugation; -- Verbs with vowel "ё": "даёшь" (give), "пьёшь" (drink) +second: Conjugation; -- "вид-Ишь, вид-Им" +mixed: Conjugation; -- "хоч-Ешь - хот-Им" +dolzhen: Conjugation; -- irregular +foreign: Conjugation; -- foreign words which are used in Russian, +++ MG_UR: added +++ + + +true: Bool; +false: Bool; + +active: Voice ; +passive: Voice ; +imperfective: Aspect; +perfective: Aspect ; + + +-- The worst case need 6 forms of the present tense in indicative mood +-- ("я бегу", "ты бежишь", "он бежит", "мы бежим", "вы бежите", "они бегут"), +-- a past form (singular, masculine: "я бежал"), an imperative form +-- (singular, second person: "беги"), an infinitive ("бежать"). +-- Inherent aspect should also be specified. + +-- mkVerbum : Aspect -> (presentSgP1,presentSgP2,presentSgP3, + mkV : Aspect -> (presentSgP1,presentSgP2,presentSgP3, + presentPlP1,presentPlP2,presentPlP3, + pastSgMasculine,imperative,infinitive: Str) -> V ; + +-- Common conjugation patterns are two conjugations: +-- first - verbs ending with "-ать/-ять" and second - "-ить/-еть". +-- Instead of 6 present forms of the worst case, we only need +-- a present stem and one ending (singular, first person): +-- "я люб-лю", "я жд-у", etc. To determine where the border +-- between stem and ending lies it is sufficient to compare +-- first person from with second person form: +-- "я люб-лю", "ты люб-ишь". Stems shoud be the same. +-- So the definition for verb "любить" looks like: +-- regV Imperfective Second "люб" "лю" "любил" "люби" "любить"; + + regV :Aspect -> Conjugation -> (stemPresentSgP1,endingPresentSgP1, + pastSgP1,imperative,infinitive : Str) -> V ; + + +-- Two-place verbs, and the special case with direct object. Notice that +-- a particle can be included in a $V$. + + mkV2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative + mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт" + dirV2 : V -> V2 ; -- "видеть", "любить" + tvDirDir : V -> V3 ; + +-- The definitions should not bother the user of the API. So they are +-- hidden from the document. +--. + Gender = MorphoRus.Gender ; + Case = MorphoRus.Case ; + Number = MorphoRus.Number ; + Animacy = MorphoRus.Animacy; + Aspect = MorphoRus.Aspect; + Voice = MorphoRus.Voice ; + --Tense = Tense ; + Bool = Prelude.Bool ; + Conjugation = MorphoRus.Conjugation; +first = First ; +firstE = FirstE ; +second = Second ; +mixed = Mixed ; +dolzhen = Dolzhen; +foreign = Foreign; -- +++ MG_UR: added +++ + + true = True; + false = False ; + masculine = Masc ; + feminine = Fem ; + neuter = Neut ; + nominative = Nom ; + accusative = Acc ; + dative = Dat ; + genitive = Gen ; + instructive = Inst ; + prepositional = Prepos ; + singular = Sg ; + plural = Pl ; + animate = Animate ; + inanimate = Inanimate ; + active = Act ; + passive = Pass ; + imperfective = Imperfective ; + perfective = Perfective ; + -- present = Present ; + --past = Past ; + -- Degree = Pos | Comp | Super ; + -- Person = P1 | P2 | P3 ; + -- AfterPrep = Yes | No ; + -- Possessive = NonPoss | Poss GenNum ; + +-- Noun definitions + + mkIndeclinableNoun = \s,g, anim -> + { + s = table { SF _ _ => s } ; + g = g ; + anim = anim + } ** {lock_N = <>}; + + -- +++ MG_UR: new case Prepos2 introduced! +++ + mkN = \nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, + nomPl, genPl, datPl, accPl, instPl, preposPl, prepos2Pl, g, anim -> + { + s = table { + SF Sg Nom => nomSg ; + SF Sg Gen => genSg ; + SF Sg Dat => datSg ; + SF Sg Acc => accSg ; + SF Sg Inst => instSg ; + SF Sg Prepos => preposSg ; + SF Sg Prepos2 => prepos2Sg ; + SF Pl Nom => nomPl ; + SF Pl Gen => genPl ; + SF Pl Dat => datPl ; + SF Pl Acc => accPl ; + SF Pl Inst => instPl ; + SF Pl Prepos => preposPl ; + SF Pl Prepos2 => prepos2Pl + } ; + g = g ; + anim = anim + } ** {lock_N = <>} ; + + +regN = \ray -> + let + ra = Predef.tk 1 ray ; + y = Predef.dp 1 ray ; + r = Predef.tk 2 ray ; + ay = Predef.dp 2 ray ; + rays = + case y of { + "а" => nMashina ray ; + "ь" => nBol ray ; + "я" => case ay of { + "ия" => nMalyariya ray; + _ => nTetya ray }; + "е" => case ay of { + "ее" => nObezbolivauchee ray ; + "ое" => nZhivotnoe ray ; + _ => nProizvedenie ray }; + -- "о" => nChislo ray ; +++ MG_UR: commented out +++ + _=> nStomatolog ray + } + in + rays ; + + + nMashina = \s -> aEndInAnimateDecl s ** {lock_N = <>}; + nEdinica = \s -> ej_aEndInAnimateDecl s ** {lock_N = <>}; + nZhenchina = \s -> (aEndAnimateDecl s) ** { g = Fem ; anim = Animate } ** {lock_N = <>}; + nNoga = \s -> aEndG_K_KH_Decl s ** {lock_N = <>}; + nMalyariya = \s -> i_yaEndDecl s ** {lock_N = <>}; + nTetya = \s -> (yaEndAnimateDecl s) ** {g = Fem; anim = Animate; lock_N = <>} ; + nBol = \s -> softSignEndDeclFem s ** {lock_N = <>}; + +-- further classes added by Magda Gerritsen and Ulrich Real + nSvecha = \s -> oj_aEndInAnimateDecl s ** {lock_N = <>}; + nMat = \s -> irregStemAnimateDecl s ** {g = Fem; anim = Animate; lock_N = <>}; + nDoch = \s -> irregStemAnimateDeclInstr_MI s ** {g = Fem; anim = Animate; lock_N = <>}; + nLoshad = \s -> softSignEndDeclFemInstr_MI s ** {g = Fem; anim = Animate; lock_N = <>}; + nNoch = \s -> softSignEndDeclFemInanimate_ZH s ** {g = Fem; anim = Inanimate; lock_N = <>}; + + +-- Neuter patterns. + nObezbolivauchee = \s -> eeEndInAnimateDecl s ** {lock_N = <>}; + nZhivotnoe = \s -> oeEndAnimateDecl s ** {lock_N = <>}; + nProizvedenie = \s -> eEndInAnimateDecl s ** {lock_N = <>}; + nChislo = \s, o -> oEndInAnimateDecl3 s o ** {lock_N = <>}; -- +++ MG_UR: nChislo now expects two arguments +++ + +-- further classes added by Magda Gerritsen and Ulrich Real + nSlovo = \s -> hardCons_ZHInAnimateDecl s ** {lock_N = <>}; + nMorje = \s -> weakConsInAnimateDecl s ** {lock_N = <>}; + nUchilishe = \s -> hardCons_ZHInAnimateDeclE s ** {lock_N = <>}; + nNebo = \s -> irregPlInAnimateDecl s ** {lock_N = <>}; + nDerevo = \s -> irregPl_StemInAnimateDecl s ** {lock_N = <>}; + nVremja = \s -> irregTotalInAnimateDecl s ** {lock_N = <>}; + + +-- Masculine patterns. + nBank = \s -> nullEndInAnimateDecl s ** {lock_N = <>}; + nStomatolog = \s -> nullEndAnimateDecl s ** {lock_N = <>}; + nMalush = \s -> shEndDeclMasc s ** {lock_N = <>}; + nPotolok = \s ->okEndDeclMasc s ** {lock_N = <>}; + + nBrat = \s -> nullEndAnimateDeclBrat s** {lock_N = <>}; + nStul = \s -> nullEndInAnimateDeclStul s** {lock_N = <>}; + + nAdres = \s -> nullEndInAnimateDecl2 s ** {lock_N = <>}; + nTelefon = \s -> nullEndInAnimateDecl1 s ** {lock_N = <>}; + nPepel = \s -> nullEndInAnimateDeclPepel s ** {lock_N = <>}; + + nNol = \s -> softSignEndDeclMasc s ** {lock_N = <>}; + nUchitel = \s -> softSignEndDeclMascAnimate s ** {lock_N = <>}; -- +++ MG_UR: added +++ + nUroven = \s -> EN_softSignEndDeclMasc s ** {lock_N = <>}; + +-- further classes added by Magda Gerritsen and Ulrich Real + nStol = \s -> nullEndDecl s ** {lock_N = <>}; + nSlovar = \s -> softSignEndDeclMascInAnimateInstrJO s ** {lock_N = <>}; + nMusej = \s -> nullEndInAnimateDeclSoft s ** {lock_N = <>}; + nDvorec = \s -> ZH_EndInAnimateDeclSoftGenOWithout s ** {lock_N = <>}; + nTovarish = \s -> ZH_EndAnimateDeclSoftInstrE s ** {lock_N = <>}; + nMesjac = \s -> ZH_EndInAnimateDeclSoftGenE s ** {lock_N = <>}; + nGrazhdanin = \s -> PlStemChangeAnimateDecl s ** {lock_N = <>}; + nRebenok = \s -> LittleAnimalDecl s ** {lock_N = <>}; + nPut = \s -> UniqueIrregularDecl s ** {lock_N = <>}; + nGospodin = \s -> A_PlStemChangeAnimateDecl s ** {lock_N = <>}; + nDen = \s -> softSignEndDeclMascInAnimateGenEWithout s ** {lock_N = <>}; + nDrug = \s -> nullEndAnimateDeclDrug s** {lock_N = <>}; + nSyn = \s -> nullEndAnimateDeclSyn s** {lock_N = <>}; + +-- preposition types added by Magda Gerritsen and Ulrich Real + nLes = \s -> preposition_V s ** {lock_N = <>}; + nMost = \s -> preposition_Na s ** {lock_N = <>}; + + +-- An individual-valued function is a common noun together with the +-- preposition prefixed to its argument ("клZ+ о' дома"). +-- The situation is analogous to two-place adjectives and transitive verbs. +-- +-- We allow the genitive construction to be used as a variant of +-- all function applications. It would definitely be too restrictive only +-- to allow it when the required case is genitive. We don't know if there +-- are counterexamples to the liberal choice we've made. + + mkFun f p = (UseN f) ** {s2 = p.s ; c = p.c}** {lock_N2 = <>} ; + +-- The commonest cases are functions with Genitive. + mkN2 n = mkFun n nullPrep ; + nullPrep : Prep = {s = []; c= Gen; lock_Prep=<>} ; + + mkN3 f p r = (UseN f) ** {s2 = p.s ; c=p.c; s3=r.s ; c2=r.c; lock_N3 = <>} ; + + + mkPN = \ivan, g, anim -> + case g of { + Masc => mkProperNameMasc ivan anim ; + _ => mkProperNameFem ivan anim + } ** {lock_PN =<>}; + nounPN n = {s=\\c => n.s! SF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; + + mkCN = UseN; + + mkNP = \x,y,z -> UsePN (mkPN x y z) ; + +-- Adjective definitions + regA = \ray, comp -> + let + ay = Predef.dp 2 ray ; + rays = + case ay of { + "ый" => AStaruyj ray comp; + "ой" => AMolodoj ray comp; + "ий" => AMalenkij ray comp; + _=> AKhoroshij ray comp + } + in + rays ; + + adjInvar = \s -> { s = \\_,_ => s } ** {lock_A= <>}; + + AStaruyj s comp = mkAdjDeg (uy_j_EndDecl s) comp ** {lock_A = <>} ; + AKhoroshij s comp = mkAdjDeg (shij_End_Decl s) comp ** {lock_A= <>}; + AMalenkij s comp = mkAdjDeg (ij_EndK_G_KH_Decl s) comp ** {lock_A= <>}; + AMolodoj s comp = mkAdjDeg (uy_oj_EndDecl s) comp ** {lock_A= <>}; + AKakoj_Nibud s t comp = mkAdjDeg (i_oj_EndDecl s t) comp ** {lock_A= <>}; + + mkA2 a p c= a ** {s2 = p ; c = c; lock_A2 = <>}; +-- mkADeg a s = mkAdjDeg a s ** {lock_ADeg = <>}; -- defined in morpho.RusU + +-- ap a p = mkAdjPhrase a p ** {lock_AP = <>}; -- defined in syntax module + + mkAdv x = ss x ** {lock_Adv = <>} ; + +-- Verb definitions + +-- mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, + mkV = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, + sgMascPast, imperSgP2, inf -> case asp of { + Perfective => + mkVerb (perfectiveActivePattern inf imperSgP2 + (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast)) + (pastConj sgMascPast) ** { lock_V=<> }; + Imperfective => + mkVerb (imperfectiveActivePattern inf imperSgP2 + (presentConj sgP1 sgP2 sgP3 plP1 plP2 plP3) (pastConj sgMascPast)) + (pastConj sgMascPast) ** { lock_V=<> } + }; + + oper presentConj: (_,_,_,_,_,_: Str) -> PresentVerb = + \sgP1, sgP2, sgP3, plP1, plP2, plP3 -> + table { + PRF (ASg _) P1 => sgP1 ; + PRF (ASg _) P2 => sgP2 ; + PRF (ASg _) P3 => sgP3 ; + PRF APl P1 => plP1 ; + PRF APl P2 => plP2 ; + PRF APl P3 => plP3 + }; + + regV a b c d e f g = verbDecl a b c d e f g ** {lock_V = <>} ; + -- defined in morpho.RusU.gf +{- + mkV a b = extVerb a b ** {lock_V = <>}; -- defined in types.RusU.gf + + mkPresentV = \aller, vox -> + { s = table { + VFin gn p => aller.s ! VFORM vox (VIND (VPresent (numGNum gn) p)) ; + VImper n p => aller.s ! VFORM vox (VIMP n p) ; + VInf => aller.s ! VFORM vox VINF ; + VSubj gn => aller.s ! VFORM vox (VSUB gn) + }; t = Present ; a = aller.asp ; w = vox ; lock_V = <>} ; +-} + mkV2 v p cas = v ** {s2 = p ; c = cas; lock_V2 = <>}; + dirV2 v = mkV2 v [] Acc; + + + tvDirDir v = mkV3 v "" "" Acc Dat; + +-- *Ditransitive verbs* are verbs with three argument places. +-- We treat so far only the rule in which the ditransitive +-- verb takes both complements to form a verb phrase. + + mkV3 v s1 s2 c1 c2 = v ** {s2 = s1; c = c1; s4 = s2; c2=c2; lock_V3 = <>}; + + +----2 Parameters +---- +---- To abstract over gender names, we define the following identifiers. +-- +--oper +-- Gender : Type ; +-- +-- human : Gender ; +-- nonhuman : Gender ; +-- masculine : Gender ; +-- +---- To abstract over number names, we define the following. +-- +-- Number : Type ; +-- +-- singular : Number ; +-- plural : Number ; +-- +---- To abstract over case names, we define the following. +-- +-- Case : Type ; +-- +-- nominative : Case ; +-- genitive : Case ; +-- +---- Prepositions are used in many-argument functions for rection. +-- +-- Preposition : Type ; +-- +-- +----2 Nouns +-- +---- Worst case: give all four forms and the semantic gender. +-- +-- mkN : (man,men,man's,men's : Str) -> N ; +-- +---- The regular function captures the variants for nouns ending with +---- "s","sh","x","z" or "y": "kiss - kisses", "flash - flashes"; +---- "fly - flies" (but "toy - toys"), +-- +-- regN : Str -> N ; +-- +---- In practice the worst case is just: give singular and plural nominative. +-- +-- mk2N : (man,men : Str) -> N ; +-- +---- All nouns created by the previous functions are marked as +---- $nonhuman$. If you want a $human$ noun, wrap it with the following +---- function: +-- +-- genderN : Gender -> N -> N ; +-- +----3 Compound nouns +---- +---- A compound noun ia an uninflected string attached to an inflected noun, +---- such as "baby boom", "chief executive officer". +-- +-- compoundN : Str -> N -> N ; +-- +-- +----3 Relational nouns +---- +---- Relational nouns ("daughter of x") need a preposition. +-- +-- mkN2 : N -> Preposition -> N2 ; +-- +---- The most common preposition is "of", and the following is a +---- shortcut for regular relational nouns with "of". +-- +-- regN2 : Str -> N2 ; +-- +---- Use the function $mkPreposition$ or see the section on prepositions below to +---- form other prepositions. +---- +---- Three-place relational nouns ("the connection from x to y") need two prepositions. +-- +-- mkN3 : N -> Preposition -> Preposition -> N3 ; +-- +-- +----3 Relational common noun phrases +---- +---- In some cases, you may want to make a complex $CN$ into a +---- relational noun (e.g. "the old town hall of"). +-- +-- cnN2 : CN -> Preposition -> N2 ; +-- cnN3 : CN -> Preposition -> Preposition -> N3 ; +-- +---- +----3 Proper names and noun phrases +---- +---- Proper names, with a regular genitive, are formed as follows +-- +-- regPN : Str -> Gender -> PN ; -- John, John's +-- +---- Sometimes you can reuse a common noun as a proper name, e.g. "Bank". +-- +-- nounPN : N -> PN ; +-- +---- To form a noun phrase that can also be plural and have an irregular +---- genitive, you can use the worst-case function. +-- +-- mkNP : Str -> Str -> Number -> Gender -> NP ; +-- +----2 Adjectives +-- +---- Non-comparison one-place adjectives need two forms: one for +---- the adjectival and one for the adverbial form ("free - freely") +-- +-- mkA : (free,freely : Str) -> A ; +-- +---- For regular adjectives, the adverbial form is derived. This holds +---- even for cases with the variation "happy - happily". +-- +-- regA : Str -> A ; +-- +----3 Two-place adjectives +---- +---- Two-place adjectives need a preposition for their second argument. +-- +-- mkA2 : A -> Preposition -> A2 ; +-- +---- Comparison adjectives may two more forms. +-- +-- ADeg : Type ; +-- +-- mkADeg : (good,better,best,well : Str) -> ADeg ; +-- +---- The regular pattern recognizes two common variations: +---- "-e" ("rude" - "ruder" - "rudest") and +---- "-y" ("happy - happier - happiest - happily") +-- +-- regADeg : Str -> ADeg ; -- long, longer, longest +-- +---- However, the duplication of the final consonant is nor predicted, +---- but a separate pattern is used: +-- +-- duplADeg : Str -> ADeg ; -- fat, fatter, fattest +-- +---- If comparison is formed by "more, "most", as in general for +---- long adjective, the following pattern is used: +-- +-- compoundADeg : A -> ADeg ; -- -/more/most ridiculous +-- +---- From a given $ADeg$, it is possible to get back to $A$. +-- +-- adegA : ADeg -> A ; +-- +-- +----2 Adverbs +-- +---- Adverbs are not inflected. Most lexical ones have position +---- after the verb. Some can be preverbal (e.g. "always"). +-- +-- mkAdv : Str -> Adv ; +-- mkAdV : Str -> AdV ; +-- +---- Adverbs modifying adjectives and sentences can also be formed. +-- +-- mkAdA : Str -> AdA ; +-- +----2 Prepositions +---- +---- A preposition as used for rection in the lexicon, as well as to +---- build $PP$s in the resource API, just requires a string. +-- +-- mkPreposition : Str -> Preposition ; +-- mkPrep : Str -> Prep ; +-- +---- (These two functions are synonyms.) +-- +----2 Verbs +---- +---- Except for "be", the worst case needs five forms: the infinitive and +---- the third person singular present, the past indicative, and the +---- past and present participles. +-- +-- mkV : (go, goes, went, gone, going : Str) -> V ; +-- +---- The regular verb function recognizes the special cases where the last +---- character is "y" ("cry - cries" but "buy - buys") or "s", "sh", "x", "z" +---- ("fix - fixes", etc). +-- +-- regV : Str -> V ; +-- +---- The following variant duplicates the last letter in the forms like +---- "rip - ripped - ripping". +-- +-- regDuplV : Str -> V ; +-- +---- There is an extensive list of irregular verbs in the module $IrregularEng$. +---- In practice, it is enough to give three forms, +---- e.g. "drink - drank - drunk", with a variant indicating consonant +---- duplication in the present participle. +-- +-- irregV : (drink, drank, drunk : Str) -> V ; +-- irregDuplV : (get, got, gotten : Str) -> V ; +-- +-- +----3 Verbs with a particle. +---- +---- The particle, such as in "switch on", is given as a string. +-- +-- partV : V -> Str -> V ; +-- +----3 Reflexive verbs +---- +---- By default, verbs are not reflexive; this function makes them that. +-- +-- reflV : V -> V ; +-- +----3 Two-place verbs +---- +---- Two-place verbs need a preposition, except the special case with direct object. +---- (transitive verbs). Notice that a particle comes from the $V$. +-- +-- mkV2 : V -> Preposition -> V2 ; +-- +-- dirV2 : V -> V2 ; +-- +----3 Three-place verbs +---- +---- Three-place (ditransitive) verbs need two prepositions, of which +---- the first one or both can be absent. +-- +-- mkV3 : V -> Preposition -> Preposition -> V3 ; -- speak, with, about +-- dirV3 : V -> Preposition -> V3 ; -- give,_,to +-- dirdirV3 : V -> V3 ; -- give,_,_ +-- +----3 Other complement patterns +---- +---- Verbs and adjectives can take complements such as sentences, +---- questions, verb phrases, and adjectives. +-- +-- mkV0 : V -> V0 ; +-- mkVS : V -> VS ; +-- mkV2S : V -> Str -> V2S ; +-- mkVV : V -> VV ; +-- mkV2V : V -> Str -> Str -> V2V ; +-- mkVA : V -> VA ; +-- mkV2A : V -> Str -> V2A ; +-- mkVQ : V -> VQ ; +-- mkV2Q : V -> Str -> V2Q ; +-- +-- mkAS : A -> AS ; +-- mkA2S : A -> Str -> A2S ; +-- mkAV : A -> AV ; +-- mkA2V : A -> Str -> A2V ; +-- +---- Notice: categories $V2S, V2V, V2A, V2Q$ are in v 1.0 treated +---- just as synonyms of $V2$, and the second argument is given +---- as an adverb. Likewise $AS, A2S, AV, A2V$ are just $A$. +---- $V0$ is just $V$. +-- +-- V0, V2S, V2V, V2A, V2Q : Type ; +-- AS, A2S, AV, A2V : Type ; +-- +-- +----2 Definitions of paradigms +---- +---- The definitions should not bother the user of the API. So they are +---- hidden from the document. +----. +-- +-- Gender = MorphoEng.Gender ; +-- Number = MorphoEng.Number ; +-- Case = MorphoEng.Case ; +-- human = Masc ; +-- nonhuman = Neutr ; +-- masculine = Masc ; +-- feminine = Fem ; +-- singular = Sg ; +-- plural = Pl ; +-- nominative = Nom ; +-- genitive = Gen ; +-- +-- Preposition = Str ; +-- +-- regN = \ray -> +-- let +-- ra = Predef.tk 1 ray ; +-- y = Predef.dp 1 ray ; +-- r = Predef.tk 2 ray ; +-- ay = Predef.dp 2 ray ; +-- rays = +-- case y of { +-- "y" => y2ie ray "s" ; +-- "s" => ray + "es" ; +-- "z" => ray + "es" ; +-- "x" => ray + "es" ; +-- _ => case ay of { +-- "sh" => ray + "es" ; +-- "ch" => ray + "es" ; +-- _ => ray + "s" +-- } +-- } +-- in +-- mk2N ray rays ; +-- +-- mk2N = \man,men -> +-- let mens = case last men of { +-- "s" => men + "'" ; +-- _ => men + "'s" +-- } +-- in +-- mkN man men (man + "'s") mens ; +-- +-- mkN = \man,men,man's,men's -> +-- mkNoun man man's men men's ** {g = Neutr ; lock_N = <>} ; +-- +-- genderN g man = {s = man.s ; g = g ; lock_N = <>} ; +-- +-- compoundN s n = {s = \\x,y => s ++ n.s ! x ! y ; g=n.g ; lock_N = <>} ; +-- +-- mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; +-- regN2 n = mkN2 (regN n) (mkPreposition "of") ; +-- mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; +-- cnN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; +-- cnN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; +-- +-- regPN n g = nameReg n g ** {lock_PN = <>} ; +-- nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ; +-- mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ; +-- lock_NP = <>} ; +-- +-- mkA a b = mkAdjective a a a b ** {lock_A = <>} ; +-- regA a = regAdjective a ** {lock_A = <>} ; +-- +-- mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; +-- +-- ADeg = A ; ---- +-- +-- mkADeg a b c d = mkAdjective a b c d ** {lock_A = <>} ; +-- +-- regADeg happy = +-- let +-- happ = init happy ; +-- y = last happy ; +-- happie = case y of { +-- "y" => happ + "ie" ; +-- "e" => happy ; +-- _ => happy + "e" +-- } ; +-- happily = case y of { +-- "y" => happ + "ily" ; +-- _ => happy + "ly" +-- } ; +-- in mkADeg happy (happie + "r") (happie + "st") happily ; +-- +-- duplADeg fat = +-- mkADeg fat +-- (fat + last fat + "er") (fat + last fat + "est") (fat + "ly") ; +-- +-- compoundADeg a = +-- let ad = (a.s ! AAdj Posit) +-- in mkADeg ad ("more" ++ ad) ("most" ++ ad) (a.s ! AAdv) ; +-- +-- adegA a = a ; +-- +-- mkAdv x = ss x ** {lock_Adv = <>} ; +-- mkAdV x = ss x ** {lock_AdV = <>} ; +-- mkAdA x = ss x ** {lock_AdA = <>} ; +-- +-- mkPreposition p = p ; +-- mkPrep p = ss p ** {lock_Prep = <>} ; +-- +-- mkV a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ; +-- +-- regV cry = +-- let +-- cr = init cry ; +-- y = last cry ; +-- cries = (regN cry).s ! Pl ! Nom ; -- ! +-- crie = init cries ; +-- cried = case last crie of { +-- "e" => crie + "d" ; +-- _ => crie + "ed" +-- } ; +-- crying = case y of { +-- "e" => case last cr of { +-- "e" => cry + "ing" ; +-- _ => cr + "ing" +-- } ; +-- _ => cry + "ing" +-- } +-- in mkV cry cries cried cried crying ; +-- +-- regDuplV fit = +-- let fitt = fit + last fit in +-- mkV fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing") ; +-- +-- irregV x y z = let reg = (regV x).s in +-- mkV x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = [] ; lock_V = <>} ; +-- +-- irregDuplV fit y z = +-- let +-- fitting = (regDuplV fit).s ! VPresPart +-- in +-- mkV fit (fit + "s") y z fitting ; +-- +-- partV v p = verbPart v p ** {lock_V = <>} ; +-- reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ; +-- +-- mkV2 v p = v ** {s = v.s ; s1 = v.s1 ; c2 = p ; lock_V2 = <>} ; +-- dirV2 v = mkV2 v [] ; +-- +-- mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p ; c3 = q ; lock_V3 = <>} ; +-- dirV3 v p = mkV3 v [] p ; +-- dirdirV3 v = dirV3 v [] ; +-- +-- mkVS v = v ** {lock_VS = <>} ; +-- mkVV v = { +-- s = table {VVF vf => v.s ! vf ; _ => variants {}} ; +-- isAux = False ; lock_VV = <> +-- } ; +-- mkVQ v = v ** {lock_VQ = <>} ; +-- +-- V0 : Type = V ; +-- V2S, V2V, V2Q, V2A : Type = V2 ; +-- AS, A2S, AV : Type = A ; +-- A2V : Type = A2 ; +-- +-- mkV0 v = v ** {lock_V = <>} ; +-- mkV2S v p = mkV2 v p ** {lock_V2 = <>} ; +-- mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ; +-- mkVA v = v ** {lock_VA = <>} ; +-- mkV2A v p = mkV2 v p ** {lock_V2A = <>} ; +-- mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ; +-- +-- mkAS v = v ** {lock_A = <>} ; +-- mkA2S v p = mkA2 v p ** {lock_A = <>} ; +-- mkAV v = v ** {lock_A = <>} ; +-- mkA2V v p = mkA2 v p ** {lock_A2 = <>} ; +-- +} ; + diff --git a/lib/resource-1.0/russian/ResRus.gf b/lib/resource-1.0/russian/ResRus.gf index edfcf2533..7a901a597 100644 --- a/lib/resource-1.0/russian/ResRus.gf +++ b/lib/resource-1.0/russian/ResRus.gf @@ -1,416 +1,419 @@ ---# -path=.:../abstract:../common:../../prelude - ---1 Russian auxiliary operations. - --- This module contains operations that are needed to make the --- resource syntax work. To define everything that is needed to --- implement $Test$, it moreover contains regular lexical --- patterns needed for $Lex$. - -resource ResRus = ParamX ** open Prelude in { - -flags coding=utf8 ; optimize=all ; - ---2 Enumerated parameter types --- --- These types are the ones found in school grammars. --- Their parameter values are atomic. - --- Some parameters, such as $Number$, are inherited from $ParamX$. -param - Gender = Masc | Fem | Neut ; - Case = Nom | Gen | Dat | Acc | Inst | Prepos ; - Animacy = Animate | Inanimate ; - Voice = Act | Pass ; - Aspect = Imperfective | Perfective ; - RusTense = Present | PastRus | Future ; --- Degree = Pos | Comp | Super ; - AfterPrep = Yes | No ; - Possessive = NonPoss | Poss GenNum ; --- Anteriority = Simul | Anter ; - ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; - -- "naked infinitive" clauses - --- A number of Russian nouns have common gender. They can --- denote both males and females: "умница" (a clever person), "инженер" (an engineer). --- We overlook this phenomenon for now. - --- The AfterPrep parameter is introduced in order to describe --- the variations of the third person personal pronoun forms --- depending on whether they come after a preposition or not. - --- Declination forms depend on Case, Animacy , Gender: --- "большие дома" - "больших домов" (big houses - big houses'), --- Animacy plays role only in the Accusative case (Masc Sg and Plural forms): --- Accusative Animate = Genetive, Accusaive Inanimate = Nominative --- "я люблю большие дома-"я люблю больших мужчин" --- (I love big houses - I love big men); --- and on Number: "большой дом - "большие дома" --- (a big house - big houses). --- The plural never makes a gender distinction. - - 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 - } ; - - --- The Possessive parameter is introduced in order to describe --- the possessives of personal pronouns, which are used in the --- Genetive constructions like "моя мама" (my mother) instead of --- "мама моя" (the mother of mine). - ---2 For $Noun$ --- Nouns decline according to number and case. --- For the sake of shorter description these parameters are --- combined in the type SubstForm. -param - SubstForm = SF Number Case ; - - --- Real parameter types (i.e. ones on which words and phrases depend) --- are mostly hierarchical. The alternative would be cross-products of --- simple parameters, but this would usually overgenerate. - --- However, we use the cross-products in complex cases --- (for example, aspect and tense parameter in the verb description) --- where the relationship between the parameters are non-trivial --- even though we aware that some combinations do not exist --- (for example, present perfective does not exist, but removing --- this combination would lead to having different descriptions --- for perfective and imperfective verbs, which we do not want for the --- sake of uniformity). - -param PronForm = PF Case AfterPrep Possessive; - -oper Pronoun = { s : PronForm => Str ; n : Number ; p : Person ; - g: PronGen ; pron: Bool} ; - --- Gender is not morphologically determined for first --- and second person pronouns. - -param PronGen = PGen Gender | PNoGen ; - --- The following coercion is useful: - -oper - pgen2gen : PronGen -> Gender = \p -> case p of { - PGen g => g ; - PNoGen => variants {Masc ; Fem} --- the best we can do for ya, tu - } ; - - -oper - extCase: PronForm -> Case = \pf -> case pf of - { PF Nom _ _ => Nom ; - PF Gen _ _ => Gen ; - PF Dat _ _ => Dat ; - PF Inst _ _ => Inst ; - PF Acc _ _ => Acc ; - PF Prepos _ _ => Prepos - } ; - - mkPronForm: Case -> AfterPrep -> Possessive -> PronForm = - \c,n,p -> PF c n p ; - - CommNounPhrase: Type = {s : Number => Case => Str; g : Gender; anim : Animacy} ; - - NounPhrase : Type = { s : PronForm => Str ; n : Number ; - p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; - - mkNP : Number -> CommNounPhrase -> NounPhrase = \n,chelovek -> - {s = \\cas => chelovek.s ! n ! (extCase cas) ; - n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; - anim = chelovek.anim - } ; - - 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 } ; - - - - pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = \ona, anim, num -> - {s = ona.s ; n = num ; g = ona.g ; - pron = ona.pron; p = ona.p ; anim = anim } ; - - --- Agreement of $NP$ is a record. We'll add $Gender$ later. --- oper Agr = {n : Number ; p : Person} ; - - -----2 For $Verb$ - --- Mood is the main verb classification parameter. --- The verb mood can be infinitive, subjunctive, imperative, and indicative. - --- Note: subjunctive mood is analytical, i.e. formed from the past form of the --- indicative mood plus the particle "ли". That is why they have the same GenNum --- parameter. We choose to keep the "redundant" form in order to indicate --- the presence of the subjunctive mood in Russian verbs. - --- Aspect and Voice parameters are present in every mood, so Voice is put --- before the mood parameter in verb form description the hierachy. --- Moreover Aspect is regarded as an inherent parameter of a verb entry. --- The primary reason for that is that one imperfective form can have several --- perfective forms: "ломать" - "сломать" - "поломать" (to break). --- Besides, the perfective form could be formed from imperfective --- by prefixation, but also by taking a completely different stem: --- "говорить"-"сказать" (to say). In the later case it is even natural to --- regard them as different verb entries. --- Another reason is that looking at the Aspect as an inherent verb parameter --- seem to be customary in other similar projects: --- http://starling.rinet.ru/morph.htm - --- Note: Of course, the whole inflection table has many redundancies --- in a sense that many verbs do not have all grammatically possible --- forms. For example, passive does not exist for the verb --- "любить" (to love), but exists for the verb "ломаться" (to break). --- In present tense verbs do not conjugate according to Genus, --- so parameter GenNum instead Number is used for the sake of --- using for example as adjective in predication. - --- Depending on the tense verbs conjugate according to combinations --- of gender, person and number of the verb objects. --- Participles (Present and PastRus) and Gerund forms are not included in the --- current description. This is the verb type used in the lexicon: - -oper Verbum : Type = { s: VerbForm => Str ; asp : Aspect }; - -param - - VerbForm = VFORM Voice VerbConj ; - VerbConj = VIND GenNum VTense | VIMP Number Person | VINF | VSUB GenNum ; - VTense = VPresent Person | VPast | VFuture Person ; - -oper - getVTense : RusTense -> Person -> VTense= \t,p -> - case t of { Present => VPresent p ; PastRus => VPast; Future => VFuture p } ; - - getTense : Tense -> RusTense= \t -> - case t of { Pres => Present ; Fut => Future; _ => PastRus} ; - - - getVoice: VerbForm -> Voice = \vf -> - case vf of { - VFORM Act _ => Act; - VFORM Pass _ => Pass - }; -oper sebya : Case => Str =table { -Nom => ""; -Gen => "себя"; -Dat=> "себе"; -Acc => "себя"; -Inst => "собой"; -Prep =>"себе"}; - - Verb : Type = {s : ClForm => GenNum => Person => Str ; asp : Aspect ; w: Voice} ; --- Verb phrases are discontinuous: the parts of a verb phrase are --- (s) an inflected verb, (s2) verb adverbials (not negation though), and --- (s3) complement. This discontinuity is needed in sentence formation --- to account for word order variations. - - VerbPhrase : Type = Verb ** {s2: Str; s3 : Gender => Number => Str ; - negBefore: Bool} ; - - --- This is one instance of Gazdar's *slash categories*, corresponding to his --- $S/NP$. --- We cannot have - nor would we want to have - a productive slash-category former. --- Perhaps a handful more will be needed. --- --- 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*. - - SlashNounPhrase = Clause ** Complement ; - Clause = {s : Polarity => ClForm => Str} ; - --- This is the traditional $S -> NP VP$ rule. - - predVerbPhrase : NounPhrase -> VerbPhrase -> SlashNounPhrase = - \Ya, tebyaNeVizhu -> { s = \\b,clf => - let - { ya = Ya.s ! (mkPronForm Nom No NonPoss); - khorosho = tebyaNeVizhu.s2; - vizhu = tebyaNeVizhu.s ! clf !(gNum (pgen2gen Ya.g) Ya.n)! Ya.p; - tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n - } - in - ya ++ khorosho ++ vizhu ++ tebya; - s2= ""; - c = Nom -} ; - --- Questions are either direct ("Ты счастлив?") --- or indirect ("Потом он спросил счастлив ли ты"). - -param - QuestForm = DirQ | IndirQ ; - ----- The order of sentence is needed already in $VP$. --- --- Order = ODir | OQuest ; - -oper - getActVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Act (VIND (gNum g n) (VFuture p)); - ClIndic PastRus _ => 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) - }; - - getPassVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of - { ClIndic Future _ => VFORM Pass (VIND (gNum g n) (VFuture p)); - ClIndic PastRus _ => VFORM Pass (VIND (gNum g n) VPast); - ClIndic Present _ => VFORM Pass (VIND (gNum g n) (VPresent p)); - ClCondit => VFORM Pass (VSUB (gNum g n)); - ClInfinit => VFORM Pass VINF ; - ClImper => VFORM Pass (VIMP n p) - }; - - ---2 For $Adjective$ -param - AdjForm = AF Case Animacy GenNum | AdvF; - -oper - Complement = {s2 : Str ; c : Case} ; - -oper Refl ={s: Case => Str}; -oper sam: Refl= -{s = table{ - Nom => "сам"; - Gen => "себя"; - Dat => "себе"; - Acc => "себя"; - Inst => "собой"; - Prepos => "себе" - } -}; - - 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 } ; -- assuming pronoun "I" is a male - Pl => APl - } ; - -- _ => variants {ASg Masc ; ASg Fem} } ; - -- "variants" version cause "no term variants" error during linearization - - - -oper numGNum : GenNum -> Number = \gn -> - case gn of { APl => Pl ; _ => Sg } ; - -oper genGNum : GenNum -> Gender = \gn -> - case gn of { ASg Fem => Fem; ASg Masc => Masc; _ => Neut } ; - -oper numAF: AdjForm -> Number = \af -> - case af of { AdvF => Sg; AF _ _ gn => (numGNum gn) } ; - -oper genAF: AdjForm -> Gender = \af -> - case af of { AdvF => Neut; AF _ _ gn => (genGNum gn) } ; - -oper caseAF: AdjForm -> Case = \af -> - case af of { AdvF => Nom; AF c _ _ => c } ; - --- The Degree parameter should also be more complex, since most Russian --- adjectives have two comparative forms: --- attributive (syntactic (compound), declinable) - --- "более высокий" (corresponds to "more high") --- and predicative (indeclinable)- "выше" (higher) and more than one --- superlative forms: "самый высокий" (corresponds to "the most high") - --- "высочайший" (the highest). - --- Even one more parameter independent of the degree can be added, --- since Russian adjectives in the positive degree also have two forms: --- long (attributive and predicative) - "высокий" (high) and short (predicative) - "высок" --- although this parameter will not be exactly orthogonal to the --- degree parameter. --- Short form has no case declension, so in principle --- it can be considered as an additional case. - --- Note: although the predicative usage of the long --- form is perfectly grammatical, it can have a slightly different meaning --- compared to the short form. --- For example: "он - больной" (long, predicative) vs. --- "он - болен" (short, predicative). - ---3 Adjective phrases --- --- An adjective phrase may contain a complement, e.g. "моложе Риты". --- Then it is used as postfix in modification, e.g. "человек, моложе Риты". - - IsPostfixAdj = Bool ; - - --- Simple adjectives are not postfix: - --- Adjective type includes both non-degree adjective classes: --- possesive ("мамин"[mother's], "лисий" [fox'es]) --- and relative ("русский" [Russian]) adjectives. - - Adjective : Type = {s : AdjForm => Str} ; - --- A special type of adjectives just having positive forms --- (for semantic reasons) is useful, e.g. "финский". - - AdjPhrase = Adjective ** {p : IsPostfixAdj} ; - - - mkAdjPhrase : Adjective -> IsPostfixAdj -> AdjPhrase = \novuj ,p -> novuj ** {p = p} ; - -----2 For $Relative$ --- --- RAgr = RNoAg | RAg {n : Number ; p : Person} ; --- RCase = RPrep | RC Case ; --- ---2 For $Numeral$ - -param DForm = unit | teen | ten | hund ; -param Place = attr | indep ; -param Size = nom | sgg | plg ; ---param Gend = masc | fem | neut ; -oper mille : Size => Str = table { - {nom} => "тысяча" ; - {sgg} => "тысячи" ; - _ => "тысяч"} ; - -oper gg : Str -> Gender => Str = \s -> table {_ => s} ; - --- CardOrd = NCard | NOrd ; - -----2 Transformations between parameter types --- - -oper - - numSF: SubstForm -> Number = \sf -> case sf of - { - SF Sg _ => Sg ; - _ => Pl - } ; - - caseSF: SubstForm -> Case = \sf -> case sf of - { - SF _ Nom => Nom ; - SF _ Gen => Gen ; - SF _ Dat => Dat ; - SF _ Inst => Inst ; - SF _ Acc => Acc ; - SF _ Prepos => Prepos - } ; - -} +--# -path=.:../abstract:../common:../../prelude + +--1 Russian auxiliary operations. + +-- This module contains operations that are needed to make the +-- resource syntax work. To define everything that is needed to +-- implement $Test$, it moreover contains regular lexical +-- patterns needed for $Lex$. + +resource ResRus = ParamX ** open Prelude in { + +flags coding=utf8 ; optimize=all ; + +--2 Enumerated parameter types +-- +-- These types are the ones found in school grammars. +-- Their parameter values are atomic. + +-- Some parameters, such as $Number$, are inherited from $ParamX$. +param + Gender = Masc | Fem | Neut ; + Case = Nom | Gen | Dat | Acc | Inst | Prepos | Prepos2 ; -- +++ MG_UR: new case Prepos2 introduced! +++ + Animacy = Animate | Inanimate ; + Voice = Act | Pass ; + Aspect = Imperfective | Perfective ; + RusTense = Present | PastRus | Future ; +-- Degree = Pos | Comp | Super ; + AfterPrep = Yes | No ; + Possessive = NonPoss | Poss GenNum ; +-- Anteriority = Simul | Anter ; + ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; + -- "naked infinitive" clauses + +-- A number of Russian nouns have common gender. They can +-- denote both males and females: "умница" (a clever person), "инженер" (an engineer). +-- We overlook this phenomenon for now. + +-- The AfterPrep parameter is introduced in order to describe +-- the variations of the third person personal pronoun forms +-- depending on whether they come after a preposition or not. + +-- Declination forms depend on Case, Animacy , Gender: +-- "большие дома" - "больших домов" (big houses - big houses'), +-- Animacy plays role only in the Accusative case (Masc Sg and Plural forms): +-- Accusative Animate = Genetive, Accusaive Inanimate = Nominative +-- "я люблю большие дома-"я люблю больших мужчин" +-- (I love big houses - I love big men); +-- and on Number: "большой дом - "большие дома" +-- (a big house - big houses). +-- The plural never makes a gender distinction. + + 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 + } ; + + +-- The Possessive parameter is introduced in order to describe +-- the possessives of personal pronouns, which are used in the +-- Genetive constructions like "моя мама" (my mother) instead of +-- "мама моя" (the mother of mine). + +--2 For $Noun$ +-- Nouns decline according to number and case. +-- For the sake of shorter description these parameters are +-- combined in the type SubstForm. +param + SubstForm = SF Number Case ; + + +-- Real parameter types (i.e. ones on which words and phrases depend) +-- are mostly hierarchical. The alternative would be cross-products of +-- simple parameters, but this would usually overgenerate. + +-- However, we use the cross-products in complex cases +-- (for example, aspect and tense parameter in the verb description) +-- where the relationship between the parameters are non-trivial +-- even though we aware that some combinations do not exist +-- (for example, present perfective does not exist, but removing +-- this combination would lead to having different descriptions +-- for perfective and imperfective verbs, which we do not want for the +-- sake of uniformity). + +param PronForm = PF Case AfterPrep Possessive; + +oper Pronoun = { s : PronForm => Str ; n : Number ; p : Person ; + g: PronGen ; pron: Bool} ; + +-- Gender is not morphologically determined for first +-- and second person pronouns. + +param PronGen = PGen Gender | PNoGen ; + +-- The following coercion is useful: + +oper + pgen2gen : PronGen -> Gender = \p -> case p of { + PGen g => g ; + PNoGen => variants {Masc ; Fem} --- the best we can do for ya, tu + } ; + + +oper + extCase: PronForm -> Case = \pf -> case pf of + { PF Nom _ _ => Nom ; + PF Gen _ _ => Gen ; + PF Dat _ _ => Dat ; + PF Inst _ _ => Inst ; + PF Acc _ _ => Acc ; + PF Prepos _ _ => Prepos ; + PF Prepos2 _ _ => Prepos2 -- +++ MG_UR: added +++ + } ; + + mkPronForm: Case -> AfterPrep -> Possessive -> PronForm = + \c,n,p -> PF c n p ; + + CommNounPhrase: Type = {s : Number => Case => Str; g : Gender; anim : Animacy} ; + + NounPhrase : Type = { s : PronForm => Str ; n : Number ; + p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; + + mkNP : Number -> CommNounPhrase -> NounPhrase = \n,chelovek -> + {s = \\cas => chelovek.s ! n ! (extCase cas) ; + n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; + anim = chelovek.anim + } ; + + 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 } ; + + + + pron2NounPhraseNum : Pronoun -> Animacy -> Number -> NounPhrase = \ona, anim, num -> + {s = ona.s ; n = num ; g = ona.g ; + pron = ona.pron; p = ona.p ; anim = anim } ; + + +-- Agreement of $NP$ is a record. We'll add $Gender$ later. +-- oper Agr = {n : Number ; p : Person} ; + + +----2 For $Verb$ + +-- Mood is the main verb classification parameter. +-- The verb mood can be infinitive, subjunctive, imperative, and indicative. + +-- Note: subjunctive mood is analytical, i.e. formed from the past form of the +-- indicative mood plus the particle "ли". That is why they have the same GenNum +-- parameter. We choose to keep the "redundant" form in order to indicate +-- the presence of the subjunctive mood in Russian verbs. + +-- Aspect and Voice parameters are present in every mood, so Voice is put +-- before the mood parameter in verb form description the hierachy. +-- Moreover Aspect is regarded as an inherent parameter of a verb entry. +-- The primary reason for that is that one imperfective form can have several +-- perfective forms: "ломать" - "сломать" - "поломать" (to break). +-- Besides, the perfective form could be formed from imperfective +-- by prefixation, but also by taking a completely different stem: +-- "говорить"-"сказать" (to say). In the later case it is even natural to +-- regard them as different verb entries. +-- Another reason is that looking at the Aspect as an inherent verb parameter +-- seem to be customary in other similar projects: +-- http://starling.rinet.ru/morph.htm + +-- Note: Of course, the whole inflection table has many redundancies +-- in a sense that many verbs do not have all grammatically possible +-- forms. For example, passive does not exist for the verb +-- "любить" (to love), but exists for the verb "ломаться" (to break). +-- In present tense verbs do not conjugate according to Genus, +-- so parameter GenNum instead Number is used for the sake of +-- using for example as adjective in predication. + +-- Depending on the tense verbs conjugate according to combinations +-- of gender, person and number of the verb objects. +-- Participles (Present and PastRus) and Gerund forms are not included in the +-- current description. This is the verb type used in the lexicon: + +oper Verbum : Type = { s: VerbForm => Str ; asp : Aspect }; + +param + + VerbForm = VFORM Voice VerbConj ; + VerbConj = VIND GenNum VTense | VIMP Number Person | VINF | VSUB GenNum ; + VTense = VPresent Person | VPast | VFuture Person ; + +oper + getVTense : RusTense -> Person -> VTense= \t,p -> + case t of { Present => VPresent p ; PastRus => VPast; Future => VFuture p } ; + + getTense : Tense -> RusTense= \t -> + case t of { Pres => Present ; Fut => Future; _ => PastRus} ; + + + getVoice: VerbForm -> Voice = \vf -> + case vf of { + VFORM Act _ => Act; + VFORM Pass _ => Pass + }; +oper sebya : Case => Str =table { +Nom => ""; +Gen => "себя"; +Dat=> "себе"; +Acc => "себя"; +Inst => "собой"; +Prep =>"себе"}; + + Verb : Type = {s : ClForm => GenNum => Person => Str ; asp : Aspect ; w: Voice} ; +-- Verb phrases are discontinuous: the parts of a verb phrase are +-- (s) an inflected verb, (s2) verb adverbials (not negation though), and +-- (s3) complement. This discontinuity is needed in sentence formation +-- to account for word order variations. + + VerbPhrase : Type = Verb ** {s2: Str; s3 : Gender => Number => Str ; + negBefore: Bool} ; + + +-- This is one instance of Gazdar's *slash categories*, corresponding to his +-- $S/NP$. +-- We cannot have - nor would we want to have - a productive slash-category former. +-- Perhaps a handful more will be needed. +-- +-- 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*. + + SlashNounPhrase = Clause ** Complement ; + Clause = {s : Polarity => ClForm => Str} ; + +-- This is the traditional $S -> NP VP$ rule. + + predVerbPhrase : NounPhrase -> VerbPhrase -> SlashNounPhrase = + \Ya, tebyaNeVizhu -> { s = \\b,clf => + let + { ya = Ya.s ! (mkPronForm Nom No NonPoss); + khorosho = tebyaNeVizhu.s2; + vizhu = tebyaNeVizhu.s ! clf !(gNum (pgen2gen Ya.g) Ya.n)! Ya.p; + tebya = tebyaNeVizhu.s3 ! (pgen2gen Ya.g) ! Ya.n + } + in + ya ++ khorosho ++ vizhu ++ tebya; + s2= ""; + c = Nom +} ; + +-- Questions are either direct ("Ты счастлив?") +-- or indirect ("Потом он спросил счастлив ли ты"). + +param + QuestForm = DirQ | IndirQ ; + +---- The order of sentence is needed already in $VP$. +-- +-- Order = ODir | OQuest ; + +oper + getActVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of + { ClIndic Future _ => VFORM Act (VIND (gNum g n) (VFuture p)); + ClIndic PastRus _ => 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) + }; + + getPassVerbForm : ClForm -> Gender -> Number -> Person -> VerbForm = \clf,g,n, p -> case clf of + { ClIndic Future _ => VFORM Pass (VIND (gNum g n) (VFuture p)); + ClIndic PastRus _ => VFORM Pass (VIND (gNum g n) VPast); + ClIndic Present _ => VFORM Pass (VIND (gNum g n) (VPresent p)); + ClCondit => VFORM Pass (VSUB (gNum g n)); + ClInfinit => VFORM Pass VINF ; + ClImper => VFORM Pass (VIMP n p) + }; + + +--2 For $Adjective$ +param + AdjForm = AF Case Animacy GenNum | AdvF; + +oper + Complement = {s2 : Str ; c : Case} ; + +oper Refl ={s: Case => Str}; +oper sam: Refl= +{s = table{ + Nom => "сам"; + Gen => "себя"; + Dat => "себе"; + Acc => "себя"; + Inst => "собой"; + Prepos => "себе"; + Prepos2 => "себе" -- +++ MG_UR: added +++ + } +}; + + 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 } ; -- assuming pronoun "I" is a male + Pl => APl + } ; + -- _ => variants {ASg Masc ; ASg Fem} } ; + -- "variants" version cause "no term variants" error during linearization + + + +oper numGNum : GenNum -> Number = \gn -> + case gn of { APl => Pl ; _ => Sg } ; + +oper genGNum : GenNum -> Gender = \gn -> + case gn of { ASg Fem => Fem; ASg Masc => Masc; _ => Neut } ; + +oper numAF: AdjForm -> Number = \af -> + case af of { AdvF => Sg; AF _ _ gn => (numGNum gn) } ; + +oper genAF: AdjForm -> Gender = \af -> + case af of { AdvF => Neut; AF _ _ gn => (genGNum gn) } ; + +oper caseAF: AdjForm -> Case = \af -> + case af of { AdvF => Nom; AF c _ _ => c } ; + +-- The Degree parameter should also be more complex, since most Russian +-- adjectives have two comparative forms: +-- attributive (syntactic (compound), declinable) - +-- "более высокий" (corresponds to "more high") +-- and predicative (indeclinable)- "выше" (higher) and more than one +-- superlative forms: "самый высокий" (corresponds to "the most high") - +-- "высочайший" (the highest). + +-- Even one more parameter independent of the degree can be added, +-- since Russian adjectives in the positive degree also have two forms: +-- long (attributive and predicative) - "высокий" (high) and short (predicative) - "высок" +-- although this parameter will not be exactly orthogonal to the +-- degree parameter. +-- Short form has no case declension, so in principle +-- it can be considered as an additional case. + +-- Note: although the predicative usage of the long +-- form is perfectly grammatical, it can have a slightly different meaning +-- compared to the short form. +-- For example: "он - больной" (long, predicative) vs. +-- "он - болен" (short, predicative). + +--3 Adjective phrases +-- +-- An adjective phrase may contain a complement, e.g. "моложе Риты". +-- Then it is used as postfix in modification, e.g. "человек, моложе Риты". + + IsPostfixAdj = Bool ; + + +-- Simple adjectives are not postfix: + +-- Adjective type includes both non-degree adjective classes: +-- possesive ("мамин"[mother's], "лисий" [fox'es]) +-- and relative ("русский" [Russian]) adjectives. + + Adjective : Type = {s : AdjForm => Str} ; + +-- A special type of adjectives just having positive forms +-- (for semantic reasons) is useful, e.g. "финский". + + AdjPhrase = Adjective ** {p : IsPostfixAdj} ; + + + mkAdjPhrase : Adjective -> IsPostfixAdj -> AdjPhrase = \novuj ,p -> novuj ** {p = p} ; + +----2 For $Relative$ +-- +-- RAgr = RNoAg | RAg {n : Number ; p : Person} ; +-- RCase = RPrep | RC Case ; +-- +--2 For $Numeral$ + +param DForm = unit | teen | ten | hund ; +param Place = attr | indep ; +param Size = nom | sgg | plg ; +--param Gend = masc | fem | neut ; +oper mille : Size => Str = table { + {nom} => "тысяча" ; + {sgg} => "тысячи" ; + _ => "тысяч"} ; + +oper gg : Str -> Gender => Str = \s -> table {_ => s} ; + +-- CardOrd = NCard | NOrd ; + +----2 Transformations between parameter types +-- + +oper + + numSF: SubstForm -> Number = \sf -> case sf of + { + SF Sg _ => Sg ; + _ => Pl + } ; + + caseSF: SubstForm -> Case = \sf -> case sf of + { + SF _ Nom => Nom ; + SF _ Gen => Gen ; + SF _ Dat => Dat ; + SF _ Inst => Inst ; + SF _ Acc => Acc ; + SF _ Prepos => Prepos ; + SF _ Prepos2 => Prepos2 -- +++ MG_UR: added +++ + } ; + +} diff --git a/lib/resource-1.0/russian/StructuralRus.gf b/lib/resource-1.0/russian/StructuralRus.gf index 5ae9c6941..743057b91 100644 --- a/lib/resource-1.0/russian/StructuralRus.gf +++ b/lib/resource-1.0/russian/StructuralRus.gf @@ -1,134 +1,135 @@ ---# -path=.:../abstract:../common:../../prelude - -concrete StructuralRus of Structural = CatRus ** - open ResRus, MorphoRus, (P = ParadigmsRus), Prelude, NounRus, in { - - flags optimize=all ; coding=utf8 ; - -lin --- First mount the numerals. --- UseNumeral i = i ; - --- Then an alphabetical list of structural words - - above_Prep = { s = "над" ; c = Inst} ; - after_Prep = { s = "после" ; c = Gen }; --- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; - all_Predet = vseDetPl ** { g = PNoGen; c = Nom} ; - almost_AdA = {s= "почти"} ; - almost_AdN = {s= "почти"} ; - although_Subj = ss "хотя" ; - always_AdV = ss "всегда" ; - and_Conj = ss "и" ** {n = Pl} ; - because_Subj = ss ["потому что"] ; - before_Prep ={ s = "перед" ; c = Inst}; - behind_Prep = { s = "за" ; c = Inst }; - between_Prep = { s = "между" ; c = Inst}; - both7and_DConj = sd2 "как" [", так и"] ** {n = Pl} ; - but_PConj = ss "но" ; - by8agent_Prep = { s = ["с помощью"] ; c = Gen}; - by8means_Prep = { s = ["с помощью"] ; c = Gen}; - can8know_VV = verbMoch ; - can_VV = verbMoch ; - during_Prep = { s = ["в течение"] ; c = Gen}; - either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; --- comma is not visible in GUI! - every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ; - everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; - everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; - everywhere_Adv = ss "везде" ; - few_Det = (ij_EndK_G_KH_Decl "немног") **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom}; -- AMalenkij - first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj - from_Prep = { s = "от" ; c = Gen }; - he_Pron = pronOn ; - here_Adv = ss "здесь" ; - here7to_Adv = ss "сюда" ; - here7from_Adv = ss "отсюда" ; - how_IAdv = ss "как" ; - how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen}; - i_Pron = pronYa ; - if_Subj = ss "если" ; - in8front_Prep = { s = "перед" ; c = Inst}; - in_Prep = { s = "в" ; c = Prepos }; - it_Pron = pronOno ; - less_CAdv = ss "менее" ; - many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; - more_CAdv = ss "более" ; - most_Predet = 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 = { s = "на" ; c = Prepos }; - one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; ---AStaruyj : - only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom }; - or_Conj = ss "или" ** {n = Sg} ; - otherwise_PConj = ss "иначе" ; - part_Prep = { s = "" ; c = Nom}; -- missing in Russian - please_Voc = ss "пожалуйста" ; - possess_Prep = { s = "" ; c = Gen}; --- ?? AR 19/2/2004 - quite_Adv = ss "довольно" ; - she_Pron = pronOna ; - so_AdA = ss "так"; - somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>}); - someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ; - somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; - something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; - somewhere_Adv = ss "где-нибудь" ; - these_NP = UsePron (pronEti** {lock_Pron = <>}); -- missing in Russian - those_NP = UsePron (pronTe** {lock_Pron = <>}); -- missing in Russian - that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ; - that_NP = det2NounPhrase totDet ; -- inanimate form only - there_Adv = ss "там" ; - there7to_Adv = ss "туда" ; - there7from_Adv = ss "оттуда" ; - therefore_PConj = ss "следовательно" ; --- these_NDet = etotDet ** { g = PNoGen; c= Nom} ; --- they8fem_NP = UsePron pronOni Animate; - they_Pron = pronOni; - this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ; - this_NP = det2NounPhrase etotDet ; -- inanimate form only --- those_NDet = totDet ** {g = PNoGen; c= Nom} ; --- thou_NP = UsePron pronTu Animate; - through_Prep = { s = "через" ; c = Acc }; - to_Prep = { s = "к" ; c = Dat }; - too_AdA = ss "слишком" ; - under_Prep = { s = "под" ; c = Inst }; - very_AdA = ss "очень" ; - want_VV = verbKhotet ; - we_Pron = pronMu ; - whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl; - whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg; - when_IAdv = ss "когда" ; - when_Subj = ss "когда" ; - where_IAdv = ss "где" ; - whichPl_IDet = kotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; - whichSg_IDet = kotorujDet ** {n = Sg; g = PNoGen; c= Nom} ; - whoPl_IP = pron2NounPhraseNum pronKto Animate Pl; - whoSg_IP = pron2NounPhraseNum pronKto Animate Sg; - why_IAdv = ss "почему" ; - with_Prep = { s = "с" ; c = Inst}; - without_Prep = { s = "без" ; c = Gen}; - youPl_Pron = pronVu; - yes_Phr = ss ["Да ."] ; - youSg_Pron = pronVu; - youPol_Pron = pronVu; - ---- NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ; ---- AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ; ---- AnyNumDet = mkDeterminerNum (lubojDet ** {n = Pl; g = PNoGen; c= Nom} ); ---- NoNumDet = mkDeterminerNum (nikakojDet ** {n = Pl; g = PNoGen; c= Nom} ); ----NobodyNP = UsePron pronNikto Animate; ----NothingNP = UsePron pronNichto Inanimate; - --- In case of "neither.. no" expression double negation is not --- only possible, but also required in Russian. --- There is no means of control for this however in the resource grammar. ---- NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ; ---- NowhereNP = ss "нигде" ; ---- AgentPrep = { s = "" ; c = Nom}; -- missing in Russian -} - +--# -path=.:../abstract:../common:../../prelude + +concrete StructuralRus of Structural = CatRus ** + open ResRus, MorphoRus, (P = ParadigmsRus), Prelude, NounRus, in { + + flags optimize=all ; coding=utf8 ; + +lin +-- First mount the numerals. +-- UseNumeral i = i ; + +-- Then an alphabetical list of structural words + + above_Prep = { s = "над" ; c = Inst} ; + after_Prep = { s = "после" ; c = Gen }; +-- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; + all_Predet = vseDetPl ** { g = PNoGen; c = Nom} ; + almost_AdA = {s= "почти"} ; + almost_AdN = {s= "почти"} ; + although_Subj = ss "хотя" ; + always_AdV = ss "всегда" ; + and_Conj = ss "и" ** {n = Pl} ; + because_Subj = ss ["потому что"] ; + before_Prep ={ s = "перед" ; c = Inst}; + behind_Prep = { s = "за" ; c = Inst }; + between_Prep = { s = "между" ; c = Inst}; + both7and_DConj = sd2 "как" [", так и"] ** {n = Pl} ; + but_PConj = ss "но" ; + by8agent_Prep = { s = ["с помощью"] ; c = Gen}; + by8means_Prep = { s = ["с помощью"] ; c = Gen}; + can8know_VV = verbMoch ; + can_VV = verbMoch ; + during_Prep = { s = ["в течение"] ; c = Gen}; + either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; +-- comma is not visible in GUI! + every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ; + everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; + everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; + everywhere_Adv = ss "везде" ; + few_Det = (ij_EndK_G_KH_Decl "немног") **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom}; -- AMalenkij + first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj + from_Prep = { s = "от" ; c = Gen }; + he_Pron = pronOn ; + here_Adv = ss "здесь" ; + here7to_Adv = ss "сюда" ; + here7from_Adv = ss "отсюда" ; + how_IAdv = ss "как" ; + how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen}; + i_Pron = pronYa ; + if_Subj = ss "если" ; + in8front_Prep = { s = "перед" ; c = Inst}; + --in_Prep = { s = "в" ; c = Prepos }; + in_Prep = { s = "в" ; c = Prepos2 } ; -- +++ MG_UR: new case Prepos2 introduced! +++ + it_Pron = pronOno ; + less_CAdv = ss "менее" ; + many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; + more_CAdv = ss "более" ; + most_Predet = 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 = { s = "на" ; c = Prepos }; + on_Prep = { s = "на" ; c = Prepos2 }; -- +++ MG_UR: new case Prepos2 introduced! +++ + one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; +--AStaruyj : + only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom }; + or_Conj = ss "или" ** {n = Sg} ; + otherwise_PConj = ss "иначе" ; + part_Prep = { s = "" ; c = Nom}; -- missing in Russian + please_Voc = ss "пожалуйста" ; + possess_Prep = { s = "" ; c = Gen}; --- ?? AR 19/2/2004 + quite_Adv = ss "довольно" ; + she_Pron = pronOna ; + so_AdA = ss "так"; + somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>}); + someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ; + somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; + something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; + somewhere_Adv = ss "где-нибудь" ; + these_NP = UsePron (pronEti** {lock_Pron = <>}); -- missing in Russian + those_NP = UsePron (pronTe** {lock_Pron = <>}); -- missing in Russian + that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ; + that_NP = det2NounPhrase totDet ; -- inanimate form only + there_Adv = ss "там" ; + there7to_Adv = ss "туда" ; + there7from_Adv = ss "оттуда" ; + therefore_PConj = ss "следовательно" ; +-- these_NDet = etotDet ** { g = PNoGen; c= Nom} ; +-- they8fem_NP = UsePron pronOni Animate; + they_Pron = pronOni; + this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ; + this_NP = det2NounPhrase etotDet ; -- inanimate form only +-- those_NDet = totDet ** {g = PNoGen; c= Nom} ; +-- thou_NP = UsePron pronTu Animate; + through_Prep = { s = "через" ; c = Acc }; + to_Prep = { s = "к" ; c = Dat }; + too_AdA = ss "слишком" ; + under_Prep = { s = "под" ; c = Inst }; + very_AdA = ss "очень" ; + want_VV = verbKhotet ; + we_Pron = pronMu ; + whatPl_IP = pron2NounPhraseNum pronChto Inanimate Pl; + whatSg_IP = pron2NounPhraseNum pronChto Inanimate Sg; + when_IAdv = ss "когда" ; + when_Subj = ss "когда" ; + where_IAdv = ss "где" ; + whichPl_IDet = kotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; + whichSg_IDet = kotorujDet ** {n = Sg; g = PNoGen; c= Nom} ; + whoPl_IP = pron2NounPhraseNum pronKto Animate Pl; + whoSg_IP = pron2NounPhraseNum pronKto Animate Sg; + why_IAdv = ss "почему" ; + with_Prep = { s = "с" ; c = Inst}; + without_Prep = { s = "без" ; c = Gen}; + youPl_Pron = pronVu; + yes_Phr = ss ["Да ."] ; + youSg_Pron = pronVu; + youPol_Pron = pronVu; + +--- NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ; +--- AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ; +--- AnyNumDet = mkDeterminerNum (lubojDet ** {n = Pl; g = PNoGen; c= Nom} ); +--- NoNumDet = mkDeterminerNum (nikakojDet ** {n = Pl; g = PNoGen; c= Nom} ); +---NobodyNP = UsePron pronNikto Animate; +---NothingNP = UsePron pronNichto Inanimate; + +-- In case of "neither.. no" expression double negation is not +-- only possible, but also required in Russian. +-- There is no means of control for this however in the resource grammar. +--- NeitherNor = sd2 "ни" [", ни"] ** {n = Sg} ; +--- NowhereNP = ss "нигде" ; +--- AgentPrep = { s = "" ; c = Nom}; -- missing in Russian +}