From 2498fe7ee81920dd4cebfcf302247beb852b3780 Mon Sep 17 00:00:00 2001 From: krasimir Date: Sat, 5 Apr 2008 17:18:47 +0000 Subject: [PATCH] Major refactoring -> lexical aspect; word order in VP --- lib/resource/bulgarian/CatBul.gf | 4 +- lib/resource/bulgarian/IdiomBul.gf | 30 +-- lib/resource/bulgarian/LexiconBul.gf | 204 +++++++++---------- lib/resource/bulgarian/MorphoBul.gf | 9 +- lib/resource/bulgarian/MorphoFunsBul.gf | 13 ++ lib/resource/bulgarian/NounBul.gf | 2 +- lib/resource/bulgarian/ParadigmsBul.gf | 108 +++++----- lib/resource/bulgarian/PhraseBul.gf | 2 +- lib/resource/bulgarian/ResBul.gf | 252 +++++++++++++----------- lib/resource/bulgarian/SentenceBul.gf | 10 +- lib/resource/bulgarian/StructuralBul.gf | 39 ++-- lib/resource/bulgarian/VerbBul.gf | 8 +- 12 files changed, 362 insertions(+), 319 deletions(-) diff --git a/lib/resource/bulgarian/CatBul.gf b/lib/resource/bulgarian/CatBul.gf index 2c4ac9098..82571ed11 100644 --- a/lib/resource/bulgarian/CatBul.gf +++ b/lib/resource/bulgarian/CatBul.gf @@ -51,8 +51,8 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in { -- Verb VP = { - s : ResBul.Tense => Anteriority => Polarity => Agr => Bool => Str ; - imp : Polarity => Number => Str ; + s : ResBul.Tense => Anteriority => Polarity => Agr => Bool => Aspect => Str ; + imp : Polarity => Number => Aspect => Str ; ad : Bool => Str ; s2 : Agr => Str ; subjRole : Role diff --git a/lib/resource/bulgarian/IdiomBul.gf b/lib/resource/bulgarian/IdiomBul.gf index d8b7a5dcb..6ec3f00c5 100644 --- a/lib/resource/bulgarian/IdiomBul.gf +++ b/lib/resource/bulgarian/IdiomBul.gf @@ -24,16 +24,13 @@ concrete IdiomBul of Idiom = CatBul ** open Prelude, ParadigmsBul, ResBul in { agr=agrP3 (GSg Neut); - present = verb.s ! (VPres (numGenNum agr.gn) agr.p) ; - aorist = verb.s ! (VAorist (numGenNum agr.gn) agr.p) ; - perfect = verb.s ! (VPerfect (aform agr.gn Indef (RObj Acc))) ; + present = verb ! (VPres (numGenNum agr.gn) agr.p) ; + aorist = verb ! (VAorist (numGenNum agr.gn) agr.p) ; + perfect = verb ! (VPerfect (aform agr.gn Indef (RObj Acc))) ; - auxPres = auxBe [] ! VPres (numGenNum agr.gn) agr.p ; - auxAorist = auxBe [] ! VAorist (numGenNum agr.gn) agr.p ; - auxPerfect = auxBe [] ! VPerfect (aform agr.gn Indef (RObj Acc)) ; - auxCondS = auxWould [] ! VAorist (numGenNum agr.gn) agr.p ; - auxCondA = auxCondS ++ - auxBe [] ! VPerfect (aform agr.gn Indef (RObj Acc)) ; + auxPres = auxBe ! VPres (numGenNum agr.gn) agr.p ; + auxAorist = auxBe ! VAorist (numGenNum agr.gn) agr.p ; + auxCondS = auxWould ! VAorist (numGenNum agr.gn) agr.p ; v : {aux1:Str; aux2:Str; main:Str} = case of { @@ -43,8 +40,7 @@ concrete IdiomBul of Idiom = CatBul ** open Prelude, ParadigmsBul, ResBul in { => {aux1=[]; aux2=auxAorist; main=perfect} ; => {aux1="ще"; aux2=[]; main=present} ; => {aux1="ще"++auxPres; aux2=[]; main=perfect} ; - => {aux1=auxCondS; aux2=[]; main=perfect} ; - => {aux1=auxCondA; aux2=[]; main=perfect} + => {aux1=auxCondS; aux2=[]; main=perfect} } ; in case o of { @@ -58,8 +54,16 @@ concrete IdiomBul of Idiom = CatBul ** open Prelude, ParadigmsBul, ResBul in { mkQuestion (ss (ip.s ! Nom)) (mkClause "there" (agrP3 ip.n) (predAux auxBe)) ; -} - ProgrVP vp = vp ; + ProgrVP vp = { + s = \\t,a,p,agr,q,asp => vp.s ! t ! a ! p ! agr ! q ! Imperf ; + imp = \\p,n,_ => vp.imp ! p ! n ! Imperf ; + ad = vp.ad ; + s2 = vp.s2 ; + subjRole = vp.subjRole + } ; - ImpPl1 vp = {s = "нека" ++ vp.s ! Pres ! Simul ! Pos ! {gn = GPl ; p = P1} ! False ++ vp.s2 ! {gn = GPl ; p = P1}} ; + ImpPl1 vp = {s = let verbs = vp.s ! Pres ! Simul ! Pos ! {gn = GPl ; p = P1} ! False ! Imperf ; + in "нека" ++ vp.s2 ! {gn = GPl ; p = P1} + } ; } diff --git a/lib/resource/bulgarian/LexiconBul.gf b/lib/resource/bulgarian/LexiconBul.gf index b60bf933b..f29f8be3d 100644 --- a/lib/resource/bulgarian/LexiconBul.gf +++ b/lib/resource/bulgarian/LexiconBul.gf @@ -8,18 +8,18 @@ flags lin airplane_N = mkN007 "самолет" ; - answer_V2S = mkV2S (mkV187 "отговарям") naP ; + answer_V2S = mkV2S (actionV (mkV187 "отговарям") (mkV173 "отговоря")) naP ; apartment_N = mkN007 "апартамент" ; apple_N = mkN041 "ябълка" ; art_N = mkN054 "изкуство" ; - ask_V2Q = mkV2Q (mkV186 "питам") noPrep ; + ask_V2Q = mkV2Q (stateV (mkV186 "питам")) noPrep ; baby_N = mkN065 "бебе" ; bad_A = mkA076 "лош" ; bank_N = mkN041 "банка" ; beautiful_A = mkA076 "красив" ; - become_VA = mkVA (mkV152 "стана") ; + become_VA = mkVA (actionV (mkV186 "ставам") (mkV152 "стана")) ; beer_N = mkN041 "бира" ; - beg_V2V = mkV2V (mkV173 "моля") noPrep zaP ; + beg_V2V = mkV2V (stateV (mkV173 "моля")) noPrep zaP ; big_A = mkA081 "голям" ; bike_N = mkN061 "колело" ; bird_N = mkN041 "птица" ; @@ -31,12 +31,12 @@ lin boss_N = mkN001 "шеф" ; boy_N = mkN065 "момче" ; bread_N = mkN001 "хляб" ; - break_V2 = dirV2 (mkV173 "чупя") ; + break_V2 = dirV2 (actionV (mkV173 "чупя") (mkV173 "счупя")) ; broad_A = mkA079 "обширен" ; brother_N2 = prepN2 (mkN025 "брат") naP ; brown_A = mkA076 "кафяв" ; butter_N = mkN054 "масло" ; - buy_V2 = dirV2 (mkV173 "купя") ; + buy_V2 = dirV2 (actionV (mkV186 "купувам") (mkV173 "купя")) ; camera_N = mkN041 "камера" ; cap_N = mkN041 "шапка" ; car_N = mkN041 "кола" ; @@ -50,50 +50,50 @@ lin city_N = mkN001 "град" ; clean_A = mkA076 "чист" ; clever_A = mkA079 "умен" ; - close_V2 = dirV2 (mkV173 "затворя") ; + close_V2 = dirV2 (actionV (mkV187 "затварям") (mkV173 "затворя")) ; coat_N = mkN054 "палто" ; cold_A = mkA076 "студен" ; - come_V = mkV146a "дойда" ; + come_V = actionV (mkV165 "ида") (mkV146a "дойда") ; computer_N = mkN009 "компютър" ; country_N = mkN041 "държава" ; cousin_N = mkN007a "братовчед" ; cow_N = mkN041 "крава" ; - die_V = mkV186 "умирам" ; + die_V = actionV (mkV186 "умирам") (mkV150a "умра") ; dirty_A = mkA079 "мръсен" ; distance_N3 = prepN3 (mkN072 "разстояние") otP doP ; doctor_N = mkN007a "доктор" ; dog_N = mkN065 "куче" ; door_N = mkN041 "врата" ; - drink_V2 = dirV2 (mkV163 "пия") ; + drink_V2 = dirV2 (stateV (mkV163 "пия")) ; easy_A2V = mkA2V (mkA079 "лесен") zaP ; - eat_V2 = dirV2 (mkV169 "ям") ; + eat_V2 = dirV2 (stateV (mkV169 "ям")) ; empty_A = mkA079 "празен" ; enemy_N = mkN001 "враг" ; factory_N = mkN041 "фабрика" ; father_N2 = prepN2 (mkN038 "баща") naP ; - fear_VS = mkVS (mkV186 "страхувам") ; - find_V2 = dirV2 (mkV173 "намеря") ; + fear_VS = mkVS (stateV (mkV186 "страхувам")) ; + find_V2 = dirV2 (actionV (mkV186 "намирам") (mkV173 "намеря")) ; fish_N = mkN041 "риба" ; floor_N = mkN007 "етаж" ; fridge_N = mkN007 "фризер" ; friend_N = mkN031a "приятел" ; fruit_N = mkN001 "плод" ; fun_AV = mkAV (mkA079 "забавен") ; - forget_V2 = dirV2 (mkV173 "забравя") ; + forget_V2 = dirV2 (actionV (mkV187 "забравям") (mkV173 "забравя")) ; garden_N = mkN041 "градина" ; girl_N = mkN065 "момиче" ; glove_N = mkN041 "ръкавица" ; gold_N = mkN054 "злато" ; good_A = mkA080 "добър" ; - go_V = mkV186 "отивам" ; + go_V = actionV (mkV186 "отивам") (mkV146 "отида") ; green_A = mkA076 "зелен" ; harbour_N = mkN066 "пристанище" ; - hate_V2 = dirV2 (mkV173 "мразя") ; + hate_V2 = dirV2 (stateV (mkV173 "мразя")) ; hat_N = mkN041 "шапка" ; - have_V2 = dirV2 (mkV186 "имам") ; - hear_V2 = dirV2 (mkV186 "чувам") ; + have_V2 = dirV2 (stateV (mkV186 "имам")) ; + hear_V2 = dirV2 (actionV (mkV186 "чувам") (mkV163 "чуя")) ; hill_N = mkN001 "хълм" ; - hope_VS = mkVS (reflV (mkV186 "надявам") Acc) ; + hope_VS = mkVS (reflV (stateV (mkV186 "надявам")) Acc) ; horse_N = mkN035 "кон" ; hot_A = mkA076 "горещ" ; house_N = mkN041 "къща" ; @@ -101,19 +101,19 @@ lin industry_N = mkN047 "индустрия" ; iron_N = mkN057 "желязо" ; king_N = mkN035a "цар" ; - know_V2 = dirV2 (mkV162 "зная") ; + know_V2 = dirV2 (stateV (mkV162 "зная")) ; lake_N = mkN054 "езеро" ; lamp_N = mkN041 "лампа" ; - learn_V2 = dirV2 (mkV176 "уча") ; + learn_V2 = dirV2 (stateV (mkV176 "уча")) ; leather_N = mkN041 "кожа" ; - leave_V2 = dirV2 (mkV173 "оставя") ; - like_V2 = dirV2 (mkV186 "харесвам") ; - listen_V2 = dirV2 (mkV186 "слушам") ; - live_V = mkV160 "живея" ; + leave_V2 = dirV2 (actionV (mkV187 "оставям") (mkV173 "оставя")) ; + like_V2 = dirV2 (actionV (mkV186 "харесвам") (mkV186 "харесам")) ; + listen_V2 = dirV2 (stateV (mkV186 "слушам")) ; + live_V = stateV (mkV160 "живея") ; long_A = mkA080 "дълъг" ; - lose_V2 = dirV2 (mkV173 "губя") ; + lose_V2 = dirV2 (actionV (mkV173 "губя") (mkV173 "загубя")) ; love_N = mkN049 "любов" ; - love_V2 = dirV2 (mkV186 "обичам") ; + love_V2 = dirV2 (stateV (mkV186 "обичам")) ; man_N = mkN024 "мъж" ; married_A2 = mkA2 (mkA076 "женен") zaP ; meat_N = mkN054 "месо" ; @@ -127,22 +127,22 @@ lin newspaper_N = mkN014 "вестник" ; oil_N = mkN065 "олио" ; old_A = mkA076 "стар" ; - open_V2 = dirV2 (mkV187 "отварям") ; - paint_V2A = mkV2A (mkV186 "рисувам") noPrep ; + open_V2 = dirV2 (actionV (mkV187 "отварям") (mkV173 "отворя")) ; + paint_V2A = mkV2A (actionV (mkV186 "рисувам") (mkV186 "нарисувам")) noPrep ; paper_N = mkN047 "хартия" ; paris_PN = mkPN "Париж" Masc ; peace_N = mkN040a "мир" ; pen_N = mkN041 "писалка" ; planet_N = mkN041 "планета" ; plastic_N = mkN041 "пластмаса" ; - play_V2 = dirV2 (mkV161 "играя") ; + play_V2 = dirV2 (stateV (mkV161 "играя")) ; policeman_N = mkN032a "полицай" ; priest_N = mkN014 "свещеник" ; probable_AS = mkAS (mkA079 "вероятен") ; queen_N = mkN041 "кралица" ; radio_N = mkN054 "радио" ; - rain_V0 = mkV0 (mkV174 "вали") ; - read_V2 = dirV2 (mkV145 "чета") ; + rain_V0 = mkV0 (stateV (mkV174 "вали")) ; + read_V2 = dirV2 (stateV (mkV145 "чета")) ; red_A = mkA076 "червен" ; religion_N = mkN047 "религия" ; restaurant_N = mkN007 "ресторант" ; @@ -150,15 +150,15 @@ lin rock_N = mkN041 "скала" ; roof_N = mkN007 "покрив" ; rubber_N = mkN041 "гума" ; - run_V = (mkV186 "бягам") ; - say_VS = mkVS (mkV186 "казвам") ; + run_V = stateV (mkV186 "бягам") ; + say_VS = mkVS (actionV (mkV186 "казвам") (mkV156 "кажа")) ; school_N = mkN066 "училище" ; science_N = mkN041 "наука" ; sea_N = mkN065 "море" ; - seek_V2 = dirV2 (mkV173 "търся") ; - see_V2 = dirV2 (mkV186 "виждам") ; - sell_V3 = dirV3 (mkV186 "продавам") naP ; - send_V3 = dirV3 (mkV186 "пращам") doP ; + seek_V2 = dirV2 (stateV (mkV173 "търся")) ; + see_V2 = dirV2 (actionV (mkV186 "виждам") (mkV181 "видя")) ; + sell_V3 = dirV3 (stateV (mkV186 "продавам")) naP ; + send_V3 = dirV3 (actionV (mkV186 "пращам") (mkV173 "пратя")) doP ; sheep_N = mkN044 "овца" ; ship_N = mkN007 "кораб" ; shirt_N = mkN041 "риза" ; @@ -167,11 +167,11 @@ lin short_A = mkA076 "къс" ; silver_N = mkN054 "сребро" ; sister_N = mkN041a "сестра" ; - sleep_V = mkV182 "спя" ; + sleep_V = stateV (mkV182 "спя") ; small_A = mkA080 "малък" ; snake_N = mkN047 "змия" ; sock_N = mkN007 "чорап" ; - speak_V2 = dirV2 (mkV173 "говоря") ; + speak_V2 = dirV2 (stateV (mkV173 "говоря")) ; star_N = mkN041 "звезда" ; steel_N = mkN041 "стомана" ; stone_N = mkN017 "камък" ; @@ -179,47 +179,47 @@ lin student_N = mkN007a "студент" ; stupid_A = mkA076 "глупав" ; sun_N = mkN066 "слънце" ; - switch8off_V2 = dirV2 (mkV186 "изключвам") ; - switch8on_V2 = dirV2 (mkV186 "включвам") ; + switch8off_V2 = dirV2 (actionV (mkV186 "изключвам") (mkV176 "изключа")) ; + switch8on_V2 = dirV2 (actionV (mkV186 "включвам") (mkV176 "включа")) ; table_N = mkN041 "маса" ; - talk_V3 = mkV3 (mkV173 "говоря") naP zaP ; + talk_V3 = mkV3 (stateV (mkV173 "говоря")) naP zaP ; teacher_N = mkN031a "учител" ; - teach_V2 = dirV2 (mkV186 "преподавам") ; + teach_V2 = dirV2 (actionV (mkV186 "преподавам") (mkV168 "преподам")) ; television_N = mkN047 "телевизия" ; thick_A = mkA076 "дебел" ; thin_A = mkA080 "тънък" ; train_N = mkN001 "влак" ; - travel_V = mkV186 "пътувам" ; + travel_V = stateV (mkV186 "пътувам") ; tree_N = mkN061 "дърво" ; ugly_A = mkA076 "глупав" ; - understand_V2 = dirV2 (mkV186 "разбирам") ; + understand_V2 = dirV2 (actionV (mkV186 "разбирам") (mkV170 "разбера")) ; university_N = mkN007 "университет" ; village_N = mkN054 "село" ; - wait_V2 = prepV2 (mkV186 "чакам") zaP ; - walk_V = mkV173 "ходя" ; + wait_V2 = prepV2 (stateV (mkV186 "чакам")) zaP ; + walk_V = stateV (mkV173 "ходя") ; warm_A = mkA080 "топъл" ; war_N = mkN041 "война" ; - watch_V2 = dirV2 (mkV186 "гледам") ; + watch_V2 = dirV2 (stateV (mkV186 "гледам")) ; water_N = mkN041 "вода" ; white_A = mkA081 "бял" ; window_N = mkN008 "прозорец" ; wine_N = mkN054 "вино" ; - win_V2 = dirV2 (mkV174 "победя") ; + win_V2 = dirV2 (actionV (mkV186 "побеждавам") (mkV174 "победя")) ; woman_N = mkN041a "жена" ; - wonder_VQ = mkVQ (reflV (mkV173 "чудя") Acc) ; + wonder_VQ = mkVQ (reflV (actionV (mkV186 "учудвам") (mkV173 "чудя")) Acc) ; wood_N = mkN041 "дървесина" ; - write_V2 = dirV2 (mkV159 "пиша") ; + write_V2 = dirV2 (stateV (mkV159 "пиша")) ; yellow_A = mkA076 "жълт" ; young_A = mkA076 "млад" ; - do_V2 = dirV2 (mkV160a "върша") ; + do_V2 = dirV2 (stateV (mkV160a "върша")) ; now_Adv = mkAdv "сега" ; already_Adv = mkAdv "вече" ; song_N = mkN050 "песен" ; - add_V3 = dirV3 (mkV186 "събирам") sP ; + add_V3 = dirV3 (actionV (mkV186 "събирам") (mkV170 "събера")) sP ; number_N = mkN054 "число" ; - put_V2 = prepV2 (mkV186 "слагам") noPrep ; - stop_V = mkV150 "спра" ; - jump_V = mkV176 "скоча" ; + put_V2 = prepV2 (actionV (mkV186 "слагам") (mkV176 "сложа")) noPrep ; + stop_V = actionV (mkV186 "спирам") (mkV150 "спра") ; + jump_V = actionV (mkV186 "скачам") (mkV176 "скоча") ; left_Ord = mkA081 "ляв" ** {nonEmpty=True} ; right_Ord = mkA084 "десен" ** {nonEmpty=True} ; far_Adv = mkAdv "далече" ; @@ -299,52 +299,52 @@ lin wing_N = mkN056 "крило" ; worm_N = mkN032 "червей" ; year_N = mkN041 "година" ; - blow_V = mkV186 "духам" ; - breathe_V = dirV2 (mkV186 "дишам") ; - burn_V = mkV187 "изгарям" ; - dig_V = mkV161 "копая" ; - fall_V = mkV186 "падам" ; - float_V = mkV186 "плавам" ; - flow_V = mkV148 "тека" ; - fly_V = mkV177 "летя" ; - freeze_V = mkV186 "замръзвам" ; - give_V3 = dirV3 (mkV186 "давам") naP ; - laugh_V = reflV (mkV160 "смея") Acc ; - lie_V = mkV178 "лежа" ; - play_V = mkV161 "играя" ; - sew_V = mkV163 "шия" ; - sing_V = mkV164 "пея" ; - sit_V = mkV177 "седя" ; - smell_V = mkV159 "мириша" ; - spit_V = mkV163 "плюя" ; - stand_V = mkV180 "стоя" ; - swell_V = mkV186 "надувам" ; - swim_V = mkV186 "плувам" ; - think_V = mkV173 "мисля" ; - turn_V = mkV186 "обръщам" ; - vomit_V = mkV186 "повръщам" ; + blow_V = stateV (mkV186 "духам") ; + breathe_V = dirV2 (stateV (mkV186 "дишам")) ; + burn_V = actionV (mkV187 "изгарям") (mkV177 "изгоря") ; + dig_V = stateV (mkV161 "копая") ; + fall_V = actionV (mkV186 "падам") (mkV152 "падна") ; + float_V = stateV (mkV186 "плавам") ; + flow_V = stateV (mkV148 "тека") ; + fly_V = stateV (mkV177 "летя") ; + freeze_V = stateV (mkV186 "замръзвам") ; + give_V3 = dirV3 (actionV (mkV186 "давам") (mkV186 "дам")) naP ; + laugh_V = reflV (stateV (mkV160 "смея")) Acc ; + lie_V = stateV (mkV178 "лежа") ; + play_V = stateV (mkV161 "играя") ; + sew_V = stateV (mkV163 "шия") ; + sing_V = stateV (mkV164 "пея") ; + sit_V = stateV (mkV177 "седя") ; + smell_V = stateV (mkV159 "мириша") ; + spit_V = stateV (mkV163 "плюя") ; + stand_V = stateV (mkV180 "стоя") ; + swell_V = actionV (mkV186 "надувам") (mkV163 "надуя") ; + swim_V = stateV (mkV186 "плувам") ; + think_V = stateV (mkV173 "мисля") ; + turn_V = actionV (mkV186 "обръщам") (mkV152 "обърна") ; + vomit_V = actionV (mkV186 "повръщам") (mkV152 "повърна") ; - bite_V2 = dirV2 (mkV154 "хапя") ; - count_V2 = dirV2 (mkV175 "броя") ; - cut_V2 = dirV2 (mkV157 "режа") ; - fear_V2 = dirV2 (reflV (mkV186 "страхувам") Acc) ; - fight_V2 = dirV2 (reflV (mkV173 "боря") Acc) ; - hit_V2 = dirV2 (mkV173 "ударя") ; - hold_V2 = dirV2 (mkV179 "държа") ; - hunt_V2 = dirV2 (mkV174 "ловя") ; - kill_V2 = dirV2 (mkV163 "убия") ; - pull_V2 = dirV2 (mkV186 "дърпам") ; - push_V2 = dirV2 (mkV186 "бутам") ; - rub_V2 = dirV2 (mkV163 "трия") ; - scratch_V2 = dirV2 (mkV186 "драскам") ; - split_V2 = dirV2 (mkV174 "разделя") ; - squeeze_V2 = dirV2 (mkV186 "стискам") ; - stab_V2 = dirV2 (mkV186 "промушвам") ; - suck_V2 = dirV2 (mkV155 "суча") ; - throw_V2 = dirV2 (mkV173 "хвърля") ; - tie_V2 = dirV2 (mkV186 "връзвам") ; - wash_V2 = dirV2 (mkV163 "мия") ; - wipe_V2 = dirV2 (mkV159 "бърша") ; + bite_V2 = dirV2 (stateV (mkV154 "хапя")) ; + count_V2 = dirV2 (stateV (mkV175 "броя")) ; + cut_V2 = dirV2 (stateV (mkV157 "режа")) ; + fear_V2 = dirV2 (reflV (stateV (mkV186 "страхувам")) Acc) ; + fight_V2 = dirV2 (reflV (stateV (mkV173 "боря")) Acc) ; + hit_V2 = dirV2 (actionV (mkV187 "удрям") (mkV173 "ударя")) ; + hold_V2 = dirV2 (stateV (mkV179 "държа")) ; + hunt_V2 = dirV2 (stateV (mkV174 "ловя")) ; + kill_V2 = dirV2 (actionV (mkV186 "убивам") (mkV163 "убия")) ; + pull_V2 = dirV2 (stateV (mkV186 "дърпам")) ; + push_V2 = dirV2 (stateV (mkV186 "бутам")) ; + rub_V2 = dirV2 (stateV (mkV163 "трия")) ; + scratch_V2 = dirV2 (actionV (mkV186 "драскам") (mkV152 "драсна")) ; + split_V2 = dirV2 (actionV (mkV187 "разделям") (mkV174 "разделя")) ; + squeeze_V2 = dirV2 (actionV (mkV186 "стискам") (mkV152 "стисна")) ; + stab_V2 = dirV2 (actionV (mkV186 "промушвам") (mkV176 "промуша")) ; + suck_V2 = dirV2 (stateV (mkV155 "суча")) ; + throw_V2 = dirV2 (actionV (mkV187 "хвърлям") (mkV173 "хвърля")) ; + tie_V2 = dirV2 (actionV (mkV186 "връзвам") (mkV156 "вържа")) ; + wash_V2 = dirV2 (stateV (mkV163 "мия")) ; + wipe_V2 = dirV2 (stateV (mkV159 "бърша")) ; grammar_N = mkN041 "граматика" ; language_N = mkN014 "език" ; diff --git a/lib/resource/bulgarian/MorphoBul.gf b/lib/resource/bulgarian/MorphoBul.gf index 7e65d2faf..b37cc57fc 100644 --- a/lib/resource/bulgarian/MorphoBul.gf +++ b/lib/resource/bulgarian/MorphoBul.gf @@ -38,9 +38,9 @@ oper --2 Verbs - mkVerb : (_,_,_,_,_,_,_,_,_:Str) -> V = - \cheta,chete,chetoh,chetqh,chel,chetql,cheten,chetqst,cheti -> { - s = table { + mkVerb : (_,_,_,_,_,_,_,_,_:Str) -> VTable = + \cheta,chete,chetoh,chetqh,chel,chetql,cheten,chetqst,cheti -> + table { VPres Sg P1 => cheta; VPres Sg P2 => chete + "ш"; VPres Sg P3 => chete; @@ -99,9 +99,6 @@ oper _ => chete + "йки" } } ; - vtype = VNormal ; - lock_V = <> - } ; --2 Nouns diff --git a/lib/resource/bulgarian/MorphoFunsBul.gf b/lib/resource/bulgarian/MorphoFunsBul.gf index f257ce490..ce270e9a2 100644 --- a/lib/resource/bulgarian/MorphoFunsBul.gf +++ b/lib/resource/bulgarian/MorphoFunsBul.gf @@ -50,7 +50,20 @@ oper phrasalV : V -> Case -> V ; phrasalV v c = {s = v.s; vtype = VPhrasal c; lock_V=<>} ; + + actionV : VTable -> VTable -> V ; + actionV imperf perf = { + s = table {Imperf=>imperf; Perf=>perf}; + vtype = VNormal; + lock_V=<> + } ; + stateV : VTable -> V ; + stateV vtable = { + s = \\_=>vtable; + vtype = VNormal; + lock_V=<> + } ; --3 Zero-place verbs -- diff --git a/lib/resource/bulgarian/NounBul.gf b/lib/resource/bulgarian/NounBul.gf index 5693e9c2f..68869f971 100644 --- a/lib/resource/bulgarian/NounBul.gf +++ b/lib/resource/bulgarian/NounBul.gf @@ -44,7 +44,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { } ; PPartNP np v2 = { - s = \\c => np.s ! c ++ v2.s ! VPassive (aform np.a.gn Indef c) ; + s = \\c => np.s ! c ++ v2.s ! Perf ! VPassive (aform np.a.gn Indef c) ; a = np.a } ; diff --git a/lib/resource/bulgarian/ParadigmsBul.gf b/lib/resource/bulgarian/ParadigmsBul.gf index 53f15f1d6..985cfa5f1 100644 --- a/lib/resource/bulgarian/ParadigmsBul.gf +++ b/lib/resource/bulgarian/ParadigmsBul.gf @@ -867,7 +867,7 @@ oper (v0) (v0) (v0) ; - mkV142 : Str -> V ; + mkV142 : Str -> VTable ; mkV142 base = let v0 = tk 3 base in mkVerb (v0+"съм") (v0+"е") @@ -878,7 +878,7 @@ oper (v0+"-") (v0+"-") (v0+"бъди") ; - mkV143 : Str -> V ; + mkV143 : Str -> VTable ; mkV143 base = let v0 = tk 3 base in mkVerb (v0+"ъда") (v0+"ъде") @@ -889,7 +889,7 @@ oper (v0+"-") (v0+"ъдещ") (v0+"ъди") ; - mkV144 : Str -> V ; + mkV144 : Str -> VTable ; mkV144 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") @@ -900,7 +900,7 @@ oper (v0+"-") (v0+"-") (v0+"-") ; - mkV145 : Str -> V ; + mkV145 : Str -> VTable ; mkV145 base = let v0 = tk 2 base; v1 = last (tk 1 base) in mkVerb (v0+v1+"а") @@ -912,7 +912,7 @@ oper (v0+v1+"ен") (v0+v1+"ящ") (v0+v1+"и") ; - mkV145a : Str -> V ; + mkV145a : Str -> VTable ; mkV145a base = let v0 = tk 3 base; v1 = last (tk 2 base) in mkVerb (v0+v1+"са") @@ -924,7 +924,7 @@ oper (v0+v1+"сен") (v0+v1+"сящ") (v0+v1+"си") ; - mkV145b : Str -> V ; + mkV145b : Str -> VTable ; mkV145b base = let v0 = tk 2 base in mkVerb (v0+"та") (v0+"те") @@ -935,7 +935,7 @@ oper (v0+"-") (v0+"тящ") (v0+"ти") ; - mkV146 : Str -> V ; + mkV146 : Str -> VTable ; mkV146 base = let v0 = tk 2 base in mkVerb (v0+"да") (v0+"де") @@ -946,7 +946,7 @@ oper (v0+"-") (v0+"-") (v0+"ди") ; - mkV146a : Str -> V ; + mkV146a : Str -> VTable ; mkV146a base = let v0 = tk 3 base in mkVerb (v0+"йда") (v0+"йде") @@ -957,7 +957,7 @@ oper (v0+"-") (v0+"-") (v0+"йди") ; - mkV147 : Str -> V ; + mkV147 : Str -> VTable ; mkV147 base = let v0 = tk 3 base in mkVerb (v0+"яза") (v0+"езе") @@ -968,7 +968,7 @@ oper (v0+"-") (v0+"-") (v0+"ез") ; - mkV148 : Str -> V ; + mkV148 : Str -> VTable ; mkV148 base = let v0 = tk 2 base in mkVerb (v0+"ка") (v0+"че") @@ -979,7 +979,7 @@ oper (v0+"чен") (v0+"чащ") (v0+"чи") ; - mkV149 : Str -> V ; + mkV149 : Str -> VTable ; mkV149 base = let v0 = tk 3 base in mkVerb (v0+"ека") (v0+"ече") @@ -990,7 +990,7 @@ oper (v0+"ечен") (v0+"-") (v0+"ечи") ; - mkV150 : Str -> V ; + mkV150 : Str -> VTable ; mkV150 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") @@ -1001,7 +1001,7 @@ oper (v0+"ян") (v0+"-") (v0+"и") ; - mkV150a : Str -> V ; + mkV150a : Str -> VTable ; mkV150a base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") @@ -1012,7 +1012,7 @@ oper (v0+"-") (v0+"-") (v0+"и") ; - mkV151 : Str -> V ; + mkV151 : Str -> VTable ; mkV151 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") @@ -1023,7 +1023,7 @@ oper (v0+"ящ") (v0+"ан") (v0+"и") ; - mkV152 : Str -> V ; + mkV152 : Str -> VTable ; mkV152 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") @@ -1034,7 +1034,7 @@ oper (v0+"ат") (v0+"-") (v0+"и") ; - mkV152a : Str -> V ; + mkV152a : Str -> VTable ; mkV152a base = let v0 = tk 4 base in mkVerb (v0+"ягна") (v0+"егне") @@ -1045,7 +1045,7 @@ oper (v0+"ягнат") (v0+"-") (v0+"егни") ; - mkV153 : Str -> V ; + mkV153 : Str -> VTable ; mkV153 base = let v0 = tk 3 base in mkVerb (v0+"яна") (v0+"ене") @@ -1056,7 +1056,7 @@ oper (v0+"янат") (v0+"-") (v0+"ени") ; - mkV154 : Str -> V ; + mkV154 : Str -> VTable ; mkV154 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"е") @@ -1067,7 +1067,7 @@ oper (v0+"ан") (v0+"ещ") (v0+"и") ; - mkV155 : Str -> V ; + mkV155 : Str -> VTable ; mkV155 base = let v0 = tk 2 base in mkVerb (v0+"ча") (v0+"че") @@ -1078,7 +1078,7 @@ oper (v0+"-") (v0+"чещ") (v0+"чи") ; - mkV156 : Str -> V ; + mkV156 : Str -> VTable ; mkV156 base = let v0 = tk 2 base in mkVerb (v0+"жа") (v0+"же") @@ -1089,7 +1089,7 @@ oper (v0+"зан") (v0+"-") (v0+"жи") ; - mkV157 : Str -> V ; + mkV157 : Str -> VTable ; mkV157 base = let v0 = tk 3 base in mkVerb (v0+"ежа") (v0+"еже") @@ -1100,7 +1100,7 @@ oper (v0+"язан") (v0+"ежещ") (v0+"ежи") ; - mkV158 : Str -> V ; + mkV158 : Str -> VTable ; mkV158 base = let v0 = tk 2 base in mkVerb (v0+"жа") (v0+"же") @@ -1111,7 +1111,7 @@ oper (v0+"ган") (v0+"жещ") (v0+"жи") ; - mkV159 : Str -> V ; + mkV159 : Str -> VTable ; mkV159 base = let v0 = tk 2 base in mkVerb (v0+"ша") (v0+"ше") @@ -1122,7 +1122,7 @@ oper (v0+"сан") (v0+"шещ") (v0+"ши") ; - mkV160 : Str -> V ; + mkV160 : Str -> VTable ; mkV160 base = let v0 = tk 2 base in mkVerb (v0+"ея") (v0+"ее") @@ -1133,7 +1133,7 @@ oper (v0+"ян") (v0+"еещ") (v0+"ей") ; - mkV160a : Str -> V ; + mkV160a : Str -> VTable ; mkV160a base = let v0 = tk 2 base in mkVerb (v0+"ея") (v0+"ее") @@ -1144,7 +1144,7 @@ oper (v0+"ан") (v0+"еещ") (v0+"ей") ; - mkV161 : Str -> V ; + mkV161 : Str -> VTable ; mkV161 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"е") @@ -1155,7 +1155,7 @@ oper (v0+"н") (v0+"ещ") (v0+"й") ; - mkV161a : Str -> V ; + mkV161a : Str -> VTable ; mkV161a base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"е") @@ -1166,7 +1166,7 @@ oper (v0+"т") (v0+"ещ") (v0+"й") ; - mkV162 : Str -> V ; + mkV162 : Str -> VTable ; mkV162 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"е") @@ -1177,7 +1177,7 @@ oper (v0+"-") (v0+"ещ") (v0+"й") ; - mkV163 : Str -> V ; + mkV163 : Str -> VTable ; mkV163 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"е") @@ -1188,7 +1188,7 @@ oper (v0+"т") (v0+"ещ") (v0+"й") ; - mkV164 : Str -> V ; + mkV164 : Str -> VTable ; mkV164 base = let v0 = tk 2 base in mkVerb (v0+"ея") (v0+"ее") @@ -1199,18 +1199,18 @@ oper (v0+"ят") (v0+"еещ") (v0+"ей") ; - mkV165 : Str -> V ; + mkV165 : Str -> VTable ; mkV165 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"е") - (v0+"-") + (v0+"ох") (v0+"ех") (v0+"-") (v0+"ел") (v0+"-") (v0+"ещ") (v0+"и") ; - mkV166 : Str -> V ; + mkV166 : Str -> VTable ; mkV166 base = let v0 = tk 2 base in mkVerb (v0+"га") (v0+"же") @@ -1221,7 +1221,7 @@ oper (v0+"-") (v0+"жещ") (v0+"-") ; - mkV167 : Str -> V ; + mkV167 : Str -> VTable ; mkV167 base = let v0 = tk 2 base in mkVerb (v0+"ка") (v0+"че") @@ -1232,7 +1232,7 @@ oper (v0+"кан") (v0+"чещ") (v0+"чи") ; - mkV168 : Str -> V ; + mkV168 : Str -> VTable ; mkV168 base = let v0 = tk 1 base in mkVerb (v0+"м") (v0+"де") @@ -1243,7 +1243,7 @@ oper (v0+"ден") (v0+"-") (v0+"й") ; - mkV169 : Str -> V ; + mkV169 : Str -> VTable ; mkV169 base = let v0 = tk 1 base in mkVerb (v0+"м") (v0+"де") @@ -1254,7 +1254,7 @@ oper (v0+"ден") (v0+"дещ") (v0+"ж") ; - mkV170 : Str -> V ; + mkV170 : Str -> VTable ; mkV170 base = let v0 = tk 3 base in mkVerb (v0+"ера") (v0+"ере") @@ -1265,7 +1265,7 @@ oper (v0+"ран") (v0+"ерящ") (v0+"ери") ; - mkV171 : Str -> V ; + mkV171 : Str -> VTable ; mkV171 base = let v0 = tk 2 base in mkVerb (v0+"ма") (v0+"ме") @@ -1276,7 +1276,7 @@ oper (v0+"т") (v0+"-") (v0+"ми") ; - mkV172 : Str -> V ; + mkV172 : Str -> VTable ; mkV172 base = let v0 = tk 4 base in mkVerb (v0+"ълна") (v0+"ълне") @@ -1287,7 +1287,7 @@ oper (v0+"ълнат") (v0+"ълнещ") (v0+"ълни") ; - mkV173 : Str -> V ; + mkV173 : Str -> VTable ; mkV173 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1298,7 +1298,7 @@ oper (v0+"ен") (v0+"ещ") (v0+"и") ; - mkV174 : Str -> V ; + mkV174 : Str -> VTable ; mkV174 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1309,7 +1309,7 @@ oper (v0+"ен") (v0+"ящ") (v0+"и") ; - mkV175 : Str -> V ; + mkV175 : Str -> VTable ; mkV175 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1320,7 +1320,7 @@ oper (v0+"ен") (v0+"ящ") (v0+"й") ; - mkV176 : Str -> V ; + mkV176 : Str -> VTable ; mkV176 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"и") @@ -1331,7 +1331,7 @@ oper (v0+"ен") (v0+"ещ") (v0+"и") ; - mkV177 : Str -> V ; + mkV177 : Str -> VTable ; mkV177 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1342,7 +1342,7 @@ oper (v0+"ян") (v0+"ящ") (v0+"и") ; - mkV178 : Str -> V ; + mkV178 : Str -> VTable ; mkV178 base = let v0 = tk 1 base in mkVerb (v0+"а") (v0+"и") @@ -1353,7 +1353,7 @@ oper (v0+"-") (v0+"ащ") (v0+"и") ; - mkV179 : Str -> V ; + mkV179 : Str -> VTable ; mkV179 base = let v0 = tk 4 base in mkVerb (v0+"ържа") (v0+"ържи") @@ -1364,7 +1364,7 @@ oper (v0+"ържан") (v0+"ържащ") (v0+"ръж") ; - mkV180 : Str -> V ; + mkV180 : Str -> VTable ; mkV180 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1375,7 +1375,7 @@ oper (v0+"-") (v0+"ящ") (v0+"й") ; - mkV181 : Str -> V ; + mkV181 : Str -> VTable ; mkV181 base = let v0 = tk 2 base in mkVerb (v0+"дя") (v0+"ди") @@ -1386,7 +1386,7 @@ oper (v0+"дян") (v0+"-") (v0+"ж") ; - mkV182 : Str -> V ; + mkV182 : Str -> VTable ; mkV182 base = let v0 = tk 1 base in mkVerb (v0+"я") (v0+"и") @@ -1397,7 +1397,7 @@ oper (v0+"-") (v0+"ящ") (v0+"и") ; - mkV183 : Str -> V ; + mkV183 : Str -> VTable ; mkV183 base = let v0 = tk 3 base in mkVerb (v0+"ежа") (v0+"ежи") @@ -1408,7 +1408,7 @@ oper (v0+"язан") (v0+"ежещ") (v0+"ежи") ; - mkV184 : Str -> V ; + mkV184 : Str -> VTable ; mkV184 base = let v0 = tk 3 base in mkVerb (v0+"еля") (v0+"ели") @@ -1419,7 +1419,7 @@ oper (v0+"лян") (v0+"елещ") (v0+"ели") ; - mkV185 : Str -> V ; + mkV185 : Str -> VTable ; mkV185 base = let v0 = tk 3 base in mkVerb (v0+"оля") (v0+"оли") @@ -1430,7 +1430,7 @@ oper (v0+"лан") (v0+"олещ") (v0+"оли") ; - mkV186 : Str -> V ; + mkV186 : Str -> VTable ; mkV186 base = let v0 = tk 2 base in mkVerb (v0+"ам") (v0+"а") @@ -1441,7 +1441,7 @@ oper (v0+"ан") (v0+"ащ") (v0+"ай") ; - mkV187 : Str -> V ; + mkV187 : Str -> VTable ; mkV187 base = let v0 = tk 2 base in mkVerb (v0+"ям") (v0+"я") diff --git a/lib/resource/bulgarian/PhraseBul.gf b/lib/resource/bulgarian/PhraseBul.gf index ca6119dfe..6e3b82b72 100644 --- a/lib/resource/bulgarian/PhraseBul.gf +++ b/lib/resource/bulgarian/PhraseBul.gf @@ -14,7 +14,7 @@ concrete PhraseBul of Phrase = CatBul ** open Prelude, ResBul in { UttNP np = {s = np.s ! RSubj} ; UttVP vp = {s = vp.ad ! False ++ "да" ++ - vp.s ! Pres ! Simul ! Pos ! agrP3 (GSg Neut) ! False ++ + vp.s ! Pres ! Simul ! Pos ! agrP3 (GSg Neut) ! False ! Perf ++ vp.s2 ! agrP3 (GSg Neut)} ; UttAdv adv = adv ; diff --git a/lib/resource/bulgarian/ResBul.gf b/lib/resource/bulgarian/ResBul.gf index ba96902aa..6667ea28c 100644 --- a/lib/resource/bulgarian/ResBul.gf +++ b/lib/resource/bulgarian/ResBul.gf @@ -44,6 +44,8 @@ resource ResBul = ParamX ** open Prelude in { --2 For $Verb$ + Aspect = Imperf | Perf ; + VForm = VPres Number Person | VAorist Number Person @@ -186,14 +188,16 @@ resource ResBul = ParamX ** open Prelude in { oper -- For $Verb$. + VTable = VForm => Str ; + Verb : Type = { - s : VForm => Str ; - vtype : VType + s : Aspect => VTable ; + vtype : VType } ; VP : Type = { - s : Tense => Anteriority => Polarity => Agr => Bool => Str ; - imp : Polarity => Number => Str ; + s : Tense => Anteriority => Polarity => Agr => Bool => Aspect => Str ; + imp : Polarity => Number => Aspect => Str ; ad : Bool => Str ; -- sentential adverb s2 : Agr => Str ; subjRole : Role @@ -201,53 +205,75 @@ resource ResBul = ParamX ** open Prelude in { predV : Verb -> VP = \verb -> - { s = \\t,a,p,agr,q => let - clitic = case verb.vtype of { - VNormal => {s=[]; agr=agr} ; - VMedial c => {s=reflClitics ! c; agr=agr} ; - VPhrasal c => {s=personalClitics ! c ! agr.gn ! agr.p; agr={gn=GSg Neut; p=P3}} - } ; + { s = \\t,a,p,agr,q,asp => + let clitic = case verb.vtype of { + VNormal => {s=[]; agr=agr} ; + VMedial c => {s=reflClitics ! c; agr=agr} ; + VPhrasal c => {s=personalClitics ! c ! agr.gn ! agr.p; agr={gn=GSg Neut; p=P3}} + } ; - present = verb.s ! (VPres (numGenNum clitic.agr.gn) clitic.agr.p) ; - aorist = verb.s ! (VAorist (numGenNum clitic.agr.gn) clitic.agr.p) ; - perfect = verb.s ! (VPerfect (aform clitic.agr.gn Indef (RObj Acc))) ; + present = verb.s ! asp ! (VPres (numGenNum clitic.agr.gn) clitic.agr.p) ; + presentImperf = verb.s ! Imperf ! (VPres (numGenNum clitic.agr.gn) clitic.agr.p) ; + aorist = verb.s ! asp ! (VAorist (numGenNum clitic.agr.gn) clitic.agr.p) ; + perfect = verb.s ! asp ! (VPerfect (aform clitic.agr.gn Indef (RObj Acc))) ; + + auxPres = auxBe ! VPres (numGenNum clitic.agr.gn) clitic.agr.p ; + auxAorist = auxBe ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ; + auxCond = auxWould ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ; + + apc : Str -> Str = \s -> + case of { + => clitic.s++s++auxPres ; + _ => auxPres++s++clitic.s + } ; - auxPres = auxBe clitic.s ! VPres (numGenNum clitic.agr.gn) clitic.agr.p ; - auxAorist = auxBe clitic.s ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ; - auxPerfect = auxBe clitic.s ! VPerfect (aform clitic.agr.gn Indef (RObj Acc)) ; - auxCondS = auxWould clitic.s ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ; - auxCondA = auxCondS ++ - auxBe [] ! VPerfect (aform clitic.agr.gn Indef (RObj Acc)) ; - - verbs : {aux:Str; main:Str} - = case of { - => {aux=clitic.s; main=present} ; - => {aux=auxPres; main=perfect} ; - => {aux=clitic.s; main=aorist} ; - => {aux=auxAorist; main=perfect} ; - => {aux=clitic.s; main=present} ; - => {aux=auxPres; main=perfect} ; - => {aux=auxCondS; main=perfect} ; - => {aux=auxCondA; main=perfect} - } ; - li = case q of {True => "ли"; False => []} ; - aux = case p of { - Pos => case t of { - Fut => {s1="ще"++verbs.aux; s2=li} ; - _ => case q of {True => {s1=[]; s2="ли"++verbs.aux}; - False => {s1=verbs.aux; s2=[]}} - } ; - Neg => case t of { - Fut => {s1="не"++"ще"++verbs.aux; s2=li} ; - _ => case q of {True => {s1="не"++verbs.aux; s2="ли"}; - False => {s1="не"++verbs.aux; s2=[]}} - } - } - in aux.s1 ++ verbs.main ++ aux.s2; - imp = \\p,n => let ne = case p of {Pos => []; Neg => "не"} ; - in ne ++ verb.s ! VImperative n ; + vf1 : Str -> {s1 : Str; s2 : Str} = \s -> + case p of { + Pos => case q of {True => {s1=[]; s2="ли"++apc []}; + False => {s1=apc []; s2=[]}} ; + Neg => {s1="не"++apc li; s2=[]} + } ; + + vf2 : Str -> {s1 : Str; s2 : Str} = \s -> + case p of { + Pos => case q of {True => {s1=[]; s2="ли"++s}; + False => {s1=s; s2=[]}} ; + Neg => case verb.vtype of + {VNormal => {s1="не"; s2=li} ; + _ => {s1="не"++s++li; s2=[]}} + } ; + + vf3 : Str -> {s1 : Str; s2 : Str} = \s -> + case p of { + Pos => {s1="ще"++s; s2=li} ; + Neg => {s1="няма"++li++"да"++s; s2=[]} + } ; + + vf4 : Str -> {s1 : Str; s2 : Str} = \s -> + case p of { + Pos => {s1= s++li++clitic.s; s2=[]} ; + Neg => {s1="не"++s++li++clitic.s; s2=[]} + } ; + + verbs : {aux:{s1:Str; s2:Str}; main:Str} + = case of { + => {aux=vf2 clitic.s; main=presentImperf} ; + => {aux=vf1 clitic.s; main=perfect} ; + => {aux=vf2 clitic.s; main=aorist} ; + => {aux=vf4 auxAorist; main=perfect} ; + => {aux=vf3 clitic.s; main=present} ; + => {aux=vf3 (apc []); main=perfect} ; + => {aux=vf4 auxCond ; main=perfect} + } + + in verbs.aux.s1 ++ verbs.main ++ verbs.aux.s2 ; + imp = \\p,n,asp => + case p of { + Pos => verb.s ! asp ! VImperative n ; + Neg => "не" ++ verb.s ! Imperf ! VImperative n + } ; ad = \\_ => [] ; s2 = \\_ => [] ; subjRole = case verb.vtype of { @@ -265,62 +291,62 @@ resource ResBul = ParamX ** open Prelude in { subjRole = vp.subjRole } ; - auxBe : Str -> VForm => Str = \se -> + auxBe : VTable = table { - VPres Sg P1 => "съм" ++ se ; - VPres Sg P2 => "си" ++ se ; - VPres Sg P3 => se ++ "е" ; - VPres Pl P1 => "сме" ++ se ; - VPres Pl P2 => "сте" ++ se ; - VPres Pl P3 => "са" ++ se ; - VAorist Sg P1 => "бях" ++ se ; - VAorist Sg P2 => "беше" ++ se ; - VAorist Sg P3 => se ++ "беше" ; - VAorist Pl P1 => "бяхме" ++ se ; - VAorist Pl P2 => "бяхте" ++ se ; - VAorist Pl P3 => "бяха" ++ se ; - VImperfect Sg P1 => "бях" ++ se ; - VImperfect Sg _ => "беше" ++ se ; - VImperfect Pl P1 => "бяхме" ++ se ; - VImperfect Pl P2 => "бяхте" ++ se ; - VImperfect Pl P3 => "бяха" ++ se ; - VPerfect aform => regAdjective "бил" ! aform ++ se ; - VPluPerfect aform => regAdjective "бил" ! aform ++ se ; - VPassive aform => regAdjective "бъден" ! aform ++ se ; - VPresPart aform => regAdjective "бъдещ" ! aform ++ se ; - VImperative Sg => "бъди" ++ se ; - VImperative Pl => "бъдете" ++ se ; - VGerund => "бидейки" ++ se + VPres Sg P1 => "съм" ; + VPres Sg P2 => "си" ; + VPres Sg P3 => "е" ; + VPres Pl P1 => "сме" ; + VPres Pl P2 => "сте" ; + VPres Pl P3 => "са" ; + VAorist Sg P1 => "бях" ; + VAorist Sg _ => "беше" ; + VAorist Pl P1 => "бяхме" ; + VAorist Pl P2 => "бяхте" ; + VAorist Pl P3 => "бяха" ; + VImperfect Sg P1 => "бях" ; + VImperfect Sg _ => "беше" ; + VImperfect Pl P1 => "бяхме" ; + VImperfect Pl P2 => "бяхте" ; + VImperfect Pl P3 => "бяха" ; + VPerfect aform => regAdjective "бил" ! aform ; + VPluPerfect aform => regAdjective "бил" ! aform ; + VPassive aform => regAdjective "бъден" ! aform ; + VPresPart aform => regAdjective "бъдещ" ! aform ; + VImperative Sg => "бъди" ; + VImperative Pl => "бъдете" ; + VGerund => "бидейки" } ; - auxWould : Str -> VForm => Str = \se -> + auxWould : VTable = table { - VPres Sg P1 => "бъда" ++ se ; - VPres Sg P2 => "бъдеш" ++ se ; - VPres Sg P3 => se ++ "бъде" ; - VPres Pl P1 => "бъдем" ++ se ; - VPres Pl P2 => "бъдете" ++ se ; - VPres Pl P3 => "бъдат" ++ se ; - VAorist Sg P1 => "бих" ++ se ; - VAorist Sg _ => "би" ++ se ; - VAorist Pl P1 => "бихме" ++ se ; - VAorist Pl P2 => "бихте" ++ se ; - VAorist Pl P3 => "биха" ++ se ; - VImperfect Sg P1 => "бъдех" ++ se ; - VImperfect Sg _ => "бъдеше" ++ se ; - VImperfect Pl P1 => "бъдехме" ++ se ; - VImperfect Pl P2 => "бъдехте" ++ se ; - VImperfect Pl P3 => "бъдеха" ++ se ; - VPerfect aform => regAdjective "бил" ! aform ++ se ; - VPluPerfect aform => regAdjective "бъдел" ! aform ++ se ; - VPassive aform => regAdjective "бъден" ! aform ++ se ; - VPresPart aform => regAdjective "бъдещ" ! aform ++ se ; - VImperative Sg => "бъди" ++ se ; - VImperative Pl => "бъдете" ++ se ; - VGerund => "бъдейки" ++ se + VPres Sg P1 => "бъда" ; + VPres Sg P2 => "бъдеш" ; + VPres Sg P3 => "бъде" ; + VPres Pl P1 => "бъдем" ; + VPres Pl P2 => "бъдете" ; + VPres Pl P3 => "бъдат" ; + VAorist Sg P1 => "бих" ; + VAorist Sg _ => "би" ; + VAorist Pl P1 => "бихме" ; + VAorist Pl P2 => "бихте" ; + VAorist Pl P3 => "биха" ; + VImperfect Sg P1 => "бъдех" ; + VImperfect Sg _ => "бъдеше" ; + VImperfect Pl P1 => "бъдехме" ; + VImperfect Pl P2 => "бъдехте" ; + VImperfect Pl P3 => "бъдеха" ; + VPerfect aform => regAdjective "бил" ! aform ; + VPluPerfect aform => regAdjective "бъдел" ! aform ; + VPassive aform => regAdjective "бъден" ! aform ; + VPresPart aform => regAdjective "бъдещ" ! aform ; + VImperative Sg => "бъди" ; + VImperative Pl => "бъдете" ; + VGerund => "бъдейки" } ; - verbBe : Verb = {s=auxBe []; vtype=VNormal} ; + verbBe : Verb = {s=\\_=>auxBe ; vtype=VNormal} ; + verbWould : Verb = {s=\\_=>auxWould ; vtype=VNormal} ; reflClitics : Case => Str = table {Acc => "се"; Dat => "си"} ; @@ -382,23 +408,23 @@ resource ResBul = ParamX ** open Prelude in { -- For $Sentence$. - Clause : Type = { - s : Tense => Anteriority => Polarity => Order => Str - } ; + Clause : Type = { + s : Tense => Anteriority => Polarity => Order => Str + } ; - mkClause : Str -> Agr -> VP -> Clause = - \subj,agr,vp -> { - s = \\t,a,b,o => - let - verb : Bool => Str - = \\q => vp.ad ! q ++ vp.s ! t ! a ! b ! agr ! q ; - compl = vp.s2 ! agr - in case o of { - Main => subj ++ verb ! False ++ compl ; - Inv => verb ! False ++ compl ++ subj ; - Quest => subj ++ verb ! True ++ compl - } - } ; + mkClause : Str -> Agr -> VP -> Clause = + \subj,agr,vp -> { + s = \\t,a,p,o => + let + verb : Bool => Str + = \\q => vp.ad ! q ++ vp.s ! t ! a ! p ! agr ! q ! Perf ; + compl = vp.s2 ! agr + in case o of { + Main => subj ++ verb ! False ++ compl ; + Inv => verb ! False ++ compl ++ subj ; + Quest => subj ++ verb ! True ++ compl + } + } ; -- For $Numeral$. diff --git a/lib/resource/bulgarian/SentenceBul.gf b/lib/resource/bulgarian/SentenceBul.gf index 2560e1c37..164a0fbb1 100644 --- a/lib/resource/bulgarian/SentenceBul.gf +++ b/lib/resource/bulgarian/SentenceBul.gf @@ -10,7 +10,7 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in { ImpVP vp = { s = \\p,gn => let agr = {gn = gn ; p = P2} ; - verb = vp.imp ! p ! numGenNum gn ; + verb = vp.imp ! p ! numGenNum gn ! Perf ; compl = vp.s2 ! agr in verb ++ compl @@ -22,10 +22,10 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in { SlashVVV2 np vv v2 = mkClause (np.s ! RSubj) np.a (let vp = predV vv - in { s = \\t,a,p,agr,q => vp.s ! t ! a ! p ! agr ! q ++ "да" ++ v2.s ! (VPres (numGenNum agr.gn) agr.p) ; + in { s = \\t,a,p,agr,q,asp => vp.s ! t ! a ! p ! agr ! q ! asp ++ "да" ++ v2.s ! Perf ! (VPres (numGenNum agr.gn) agr.p) ; imp = vp.imp ; - ad = vp.ad ; - s2 = vp.s2 ; + ad = vp.ad ; + s2 = vp.s2 ; subjRole = vp.subjRole }) ** {c2 = v2.c2} ; @@ -44,7 +44,7 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in { EmbedS s = {s = "," ++ "че" ++ s.s} ; EmbedQS qs = {s = qs.s ! QIndir} ; - EmbedVP vp = {s = vp.ad ! False ++ "да" ++ vp.s ! Pres ! Simul ! Pos ! {gn=GSg Masc; p=P1} ! False} ; + EmbedVP vp = {s = vp.ad ! False ++ "да" ++ vp.s ! Pres ! Simul ! Pos ! {gn=GSg Masc; p=P1} ! False ! Perf} ; UseCl t a p cl = { s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! Main diff --git a/lib/resource/bulgarian/StructuralBul.gf b/lib/resource/bulgarian/StructuralBul.gf index b5016fd88..65546ba31 100644 --- a/lib/resource/bulgarian/StructuralBul.gf +++ b/lib/resource/bulgarian/StructuralBul.gf @@ -19,7 +19,7 @@ concrete StructuralBul of Structural = CatBul ** but_PConj = ss "но" ; by8agent_Prep = mkPrep "чрез" Acc ; by8means_Prep = mkPrep "чрез" Acc ; - can8know_VV, can_VV = mkVV (mkV166 "мога") ; + can8know_VV, can_VV = mkVV (stateV (mkV166 "мога")) ; during_Prep = mkPrep ["по време на"] Acc ; either7or_DConj = sd2 "или" "или" ** {n = Sg} ; everybody_NP = mkNP "всеки" (GSg Masc) P3 ; @@ -48,22 +48,23 @@ concrete StructuralBul of Structural = CatBul ** more_CAdv = {s=[]; sn="повече"} ; most_Predet = {s = \\_ => "повечето"} ; much_Det = mkDeterminerSg "много" "много" "много"; - must_VV = mkVV { - s = table { - VPres _ _ => "трябва" ; - VAorist _ _ => "трябваше" ; - VImperfect _ _ => "трябвало" ; - VPerfect _ => "трябвало" ; - VPluPerfect _ => "трябвало" ; - VPassive _ => "трябвало" ; - VPresPart _ => "трябвало" ; - VImperative Sg => "трябвай" ; - VImperative Pl => "трябвайте" ; - VGerund => "трябвайки" - } ; - vtype=VNormal ; - lock_V=<> - } ; + must_VV = + mkVV { + s = \\_=>table { + VPres _ _ => "трябва" ; + VAorist _ _ => "трябваше" ; + VImperfect _ _ => "трябвало" ; + VPerfect aform => regAdjective "трябвал" ! aform ; + VPluPerfect aform => regAdjective "трябвал" ! aform ; + VPassive aform => regAdjective "трябвал" ! aform ; + VPresPart aform => regAdjective "трябвал" ! aform ; + VImperative Sg => "трябвай" ; + VImperative Pl => "трябвайте" ; + VGerund => "трябвайки" + } ; + vtype=VNormal ; + lock_V=<> + } ; no_Phr = ss "не" ; on_Prep = mkPrep "на" Acc ; ---- one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED @@ -77,7 +78,7 @@ concrete StructuralBul of Structural = CatBul ** she_Pron = mkPron "тя" "нея" "и" "неин" "нейния" "нейният" "нейна" "нейната" "нейно" "нейното" "нейни" "нейните" (GSg Fem) P3 ; so_AdA = ss "толкова" ; somebody_NP = mkNP "някой" (GSg Masc) P3 ; - someSg_Det = mkDeterminerSg "някой" "някое" "някоя" ; + someSg_Det = mkDeterminerSg "някой" "някоя" "някое" ; somePl_Det = mkDeterminerPl "някои" ; something_NP = mkNP "нещо" (GSg Neut) P3 ; somewhere_Adv = ss "някъде" ; @@ -97,7 +98,7 @@ concrete StructuralBul of Structural = CatBul ** to_Prep = mkPrep "до" Acc ; under_Prep = mkPrep "под" Acc ; very_AdA = ss "много" ; - want_VV = mkVV (mkV186 "искам") ; + want_VV = mkVV (stateV (mkV186 "искам")) ; we_Pron = mkPron "ние" "нас" "ни" "наш" "нашия" "нашият" "наша" "нашата" "наше" "нашето" "наши" "нашите" GPl P1 ; whatPl_IP = mkIP "какви" "какви" GPl ; whatSg_IP = mkIP "какъв" "какъв" (GSg Masc) ; diff --git a/lib/resource/bulgarian/VerbBul.gf b/lib/resource/bulgarian/VerbBul.gf index 60c57f948..3fa17f5ac 100644 --- a/lib/resource/bulgarian/VerbBul.gf +++ b/lib/resource/bulgarian/VerbBul.gf @@ -9,7 +9,9 @@ concrete VerbBul of Verb = CatBul ** open Prelude, ResBul, ParadigmsBul in { insertObj (\\_ => v.c2.s ++ np.s ! RObj v.c2.c ++ v.c3.s ++ np2.s ! RObj v.c3.c) (predV v) ; ComplVV vv vp = { - s = \\t,a,p,agr,q => (predV vv).s ! t ! a ! p ! agr ! q ++ vp.ad ! False ++ "да" ++ vp.s ! Pres ! Simul ! Pos ! agr ! False ; + s = \\t,a,p,agr,q,asp => let vv_verb = (predV vv).s ! t ! a ! p ! agr ! q ! asp ; + vp_verb = vp.s ! Pres ! Simul ! Pos ! agr ! False ! Perf ; + in vv_verb ++ vp.ad ! False ++ "да" ++ vp_verb ; imp = vp.imp ; ad = \\_ => [] ; s2 = vp.s2 ; @@ -28,7 +30,7 @@ concrete VerbBul of Verb = CatBul ** open Prelude, ResBul, ParadigmsBul in { AdvVP vp adv = insertObj (\\_ => adv.s) vp ; AdVVP adv vp = { - s = \\t,a,p,agr,q => vp.s ! t ! a ! p ! agr ! False ; + s = \\t,a,p,agr,q,asp => vp.s ! t ! a ! p ! agr ! False ! asp ; imp = vp.imp ; ad = \\q => vp.ad ! q ++ adv.s ++ case q of {True => "ли"; False => []} ; s2 = vp.s2 ; @@ -37,7 +39,7 @@ concrete VerbBul of Verb = CatBul ** open Prelude, ResBul, ParadigmsBul in { ReflV2 v = predV (reflV (v ** {lock_V=<>}) v.c2.c) ; - PassV2 v = insertObj (\\a => v.s ! VPassive (aform a.gn Indef (RObj Acc))) (predV verbBe) ; + PassV2 v = insertObj (\\a => v.s ! Perf ! VPassive (aform a.gn Indef (RObj Acc))) (predV verbWould) ; UseVS, UseVQ = \vv -> {s = vv.s; c2 = noPrep; vtype = vv.vtype} ; -- no "to"