From 9f1738124ee3f3aeaf57a64e0312ea8074bdaa59 Mon Sep 17 00:00:00 2001 From: "dana.dannells" Date: Sun, 27 May 2012 21:37:58 +0000 Subject: [PATCH] Hebrew RGL files added --- lib/src/hebrew/AdjectiveHeb.gf | 10 + lib/src/hebrew/AdverbHeb.gf | 9 + lib/src/hebrew/CatHeb.gf | 58 +++++ lib/src/hebrew/GrammarHeb.gf | 24 ++ lib/src/hebrew/LangHeb.gf | 12 + lib/src/hebrew/LexiconHeb.gf | 378 ++++++++++++++++++++++++++++ lib/src/hebrew/MorphoHeb.gf | 5 + lib/src/hebrew/NounHeb.gf | 58 +++++ lib/src/hebrew/ParadigmsHeb.gf | 420 ++++++++++++++++++++++++++++++++ lib/src/hebrew/PatternsHeb.gf | 88 +++++++ lib/src/hebrew/PhraseHeb.gf | 14 ++ lib/src/hebrew/ResHeb.gf | 172 +++++++++++++ lib/src/hebrew/SentenceHeb.gf | 16 ++ lib/src/hebrew/StructuralHeb.gf | 53 ++++ lib/src/hebrew/TenseHeb.gf | 17 ++ lib/src/hebrew/VerbHeb.gf | 13 + 16 files changed, 1347 insertions(+) create mode 100644 lib/src/hebrew/AdjectiveHeb.gf create mode 100644 lib/src/hebrew/AdverbHeb.gf create mode 100644 lib/src/hebrew/CatHeb.gf create mode 100644 lib/src/hebrew/GrammarHeb.gf create mode 100644 lib/src/hebrew/LangHeb.gf create mode 100644 lib/src/hebrew/LexiconHeb.gf create mode 100644 lib/src/hebrew/MorphoHeb.gf create mode 100644 lib/src/hebrew/NounHeb.gf create mode 100644 lib/src/hebrew/ParadigmsHeb.gf create mode 100644 lib/src/hebrew/PatternsHeb.gf create mode 100644 lib/src/hebrew/PhraseHeb.gf create mode 100644 lib/src/hebrew/ResHeb.gf create mode 100644 lib/src/hebrew/SentenceHeb.gf create mode 100644 lib/src/hebrew/StructuralHeb.gf create mode 100644 lib/src/hebrew/TenseHeb.gf create mode 100644 lib/src/hebrew/VerbHeb.gf diff --git a/lib/src/hebrew/AdjectiveHeb.gf b/lib/src/hebrew/AdjectiveHeb.gf new file mode 100644 index 000000000..1c5e972b7 --- /dev/null +++ b/lib/src/hebrew/AdjectiveHeb.gf @@ -0,0 +1,10 @@ +concrete AdjectiveHeb of Adjective = CatHeb ** open ResHeb, Prelude in { + + flags coding=utf8 ; + + lin + + UseA adj = adj ; + + +} diff --git a/lib/src/hebrew/AdverbHeb.gf b/lib/src/hebrew/AdverbHeb.gf new file mode 100644 index 000000000..13fd26819 --- /dev/null +++ b/lib/src/hebrew/AdverbHeb.gf @@ -0,0 +1,9 @@ +concrete AdverbHeb of Adverb = CatHeb ** open ResHeb, Prelude in { + + flags coding=utf8 ; + + lin + + PrepNP prep np = { s = prep.s ++ (np.s ! Nom).obj} ; + +} diff --git a/lib/src/hebrew/CatHeb.gf b/lib/src/hebrew/CatHeb.gf new file mode 100644 index 000000000..83a1b9bf2 --- /dev/null +++ b/lib/src/hebrew/CatHeb.gf @@ -0,0 +1,58 @@ +--# -path=alltenses + +concrete CatHeb of Cat = CommonX - [Utt,Tense,Temp] ** open ResHeb, Prelude, ParamX in { + + flags optimize=all_subs ; + + lincat + + S = {s : Mood => Str} ; + Utt = {s : Str} ; + Cl = ResHeb.Cl ; -- {s : TenseHeb => Polarity => Str} ; + VP = ResHeb.VP ; -- {v : Verb ; obj : Str} ; + VPSlash = ResHeb.VP ; -- TODO VPSlash in Res "titel le-johan" + Comp = {s : Agr => Str} ; + NP = ResHeb.NP ; -- {s : Case => {obj : Str} ; a : Agr ; isDef : Bool ; sp : Species} ; + CN = ResHeb.Noun ; -- {s : Number => Species => Str ; g: Gender} ; + Det = ResHeb.Det ; -- {s : Gender => Str ; n : Number ; sp : Species; isDef : Bool} ; + Pron = {s : Case => {obj : Str} ; a : Agr ; isDef : Bool ; sp : Species} ; + Num, Ord = ResHeb.Num ; -- {s : Case => Str; n : Number} ; + Card = {s : Str} ; -- {s : CardForm => Str; n : Number} ; + Quant = {s : ResHeb.Number => Gender => Str ; sp : Species; isDef : Bool; isSNum : Bool} ; + AP = ResHeb.AP ; -- {s : Number => Species => Gender => Str } ; + + N = ResHeb.Noun ; -- {s : Number => Species => Str ; g: Gender } ; + A = ResHeb.Adj ; -- {s : Number => Species => Gender => Str} ; + V, VV, VS, VQ, VA = ResHeb.Verb ; -- {s : Tense => VPerNumGen => Str } ; + V2, V2A = ResHeb.Verb2 ; -- Verb ** {c : Case} ; + PN = ResHeb.PN ; -- {s : Case => Str; g : Gender} ; + Prep = ResHeb.Prep ; + ClSlash = ResHeb.ClSlash ; + Temp = {s : Str ; t : TenseHeb ; a : Anteriority} ; + Tense = {s : Str ; t : TenseHeb} ; + +A2 = {s : Str} ; +Conj = {s : Str} ; +Digits = {s : Str} ; +IComp = {s : Str} ; +IDet = {s : Str} ; +IP = {s : Str} ; +IQuant = {s : Str} ; +Imp = {s : Str} ; +N2 = {s : Str} ; +N3 = {s : Str} ; +Numeral = {s : Str} ; +Predet = {s : Str} ; +QCl = {s : Str} ; +QS = {s : Str} ; +RCl = {s : Str} ; +RP = {s : Str} ; +RS = {s : Str} ; +SSlash = {s : Str} ; +Subj = {s : Str} ; +V2Q = {s : Str} ; +V2S = {s : Str} ; +V2V = {s : Str} ; +V3 = {s : Str} ; + +} diff --git a/lib/src/hebrew/GrammarHeb.gf b/lib/src/hebrew/GrammarHeb.gf new file mode 100644 index 000000000..e8102f7c4 --- /dev/null +++ b/lib/src/hebrew/GrammarHeb.gf @@ -0,0 +1,24 @@ +--# -path=.:../abstract:../common:prelude + +concrete GrammarHeb of Grammar = + NounHeb, + VerbHeb, + AdjectiveHeb, + AdverbHeb, +-- NumeralHeb, + SentenceHeb, +-- QuestionHeb, +-- IdiomHeb, +-- RelativeHeb, +-- ConjunctionHeb, + PhraseHeb, +-- TextHeb, + StructuralHeb, + TenseHeb + ** { + flags coding=utf8 ; + + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} ; diff --git a/lib/src/hebrew/LangHeb.gf b/lib/src/hebrew/LangHeb.gf new file mode 100644 index 000000000..876a12e3d --- /dev/null +++ b/lib/src/hebrew/LangHeb.gf @@ -0,0 +1,12 @@ +--# -path=alltenses + +concrete LangHeb of Lang = + GrammarHeb, + LexiconHeb + ** { + flags coding=utf8 ; + + +flags startcat = Phr ; unlexer = text ; lexer = text ; coding = utf8 ; + +} ; diff --git a/lib/src/hebrew/LexiconHeb.gf b/lib/src/hebrew/LexiconHeb.gf new file mode 100644 index 000000000..586f9e3a4 --- /dev/null +++ b/lib/src/hebrew/LexiconHeb.gf @@ -0,0 +1,378 @@ +--# -path=alltenses + +concrete LexiconHeb of Lexicon = CatHeb ** + open ParadigmsHeb, ResHeb, Prelude in { + + +flags + coding=utf8 ; + +lin + +--add_V3 =""; +airplane_N = mkN "" "" Masc; +--alas_Interj =""; +--already_Adv = "" ; +animal_N = mkN "" "" Masc; +--answer_V2S = dirV2 (mkVPaal "") ; +apartment_N = mkN "" "" Masc; +apple_N = mkN "" "" Masc; +art_N = mkN "" "" Masc; +ashes_N = mkN "" "" Masc; +--ask_V2Q = "" ; +baby_N = mkN "" "" Masc; +back_N = mkN "" "" Masc; +bad_A = regA "rO" ; +bank_N = mkN "" "" Masc; +bark_N = mkN "" "" Masc; +beautiful_A = regA "yph" ; +--become_VA =""; +beer_N = mkN "" "" Masc; +--beg_V2V = dirV2 (mkVPaal "") ; +belly_N = mkN "" "" Masc; +big_A = regA "gdwl"; +bike_N = mkN "" "" Masc; +bird_N = mkN "" "" Masc; +--bite_V2 = dirV2 (mkVPaal "") ; +black_A = regA "sHwr" ; +blood_N = mkN "" "" Masc; +--blow_V = mkVPaal "" ; +blue_A = regA "Hkwl" ; +boat_N = mkN "" "" Masc; +bone_N = mkN "" "" Masc; +book_N = mkN "" "" Masc; +boot_N = mkN "" "" Masc; +boss_N = mkN "" "" Masc; +boy_N = mkN "" "" Masc; +bread_N = mkN "" "" Masc; +--break_V2 = dirV2 (mkVPaal "") ; +breast_N = mkN "" "" Masc; +--breathe_V = mkVPaal "" ; +--broad_A = "" ; +brown_A = regA "Hwm" ; +--burn_V = mkVPaal "" ; +butter_N = mkN "" "" Masc; +--buy_V2 = dirV2 (mkVPaal "qnh") ; +camera_N = mkN "" "" Masc; +cap_N = mkN "" "" Masc; +car_N = mkN "" "" Masc; +carpet_N = mkN "" "" Masc; +cat_N = mkN "" "" Masc; +ceiling_N = mkN "" "" Masc; +cheese_N = mkN "" "" Masc; +child_N = mkN "" "" Masc; +church_N = mkN "" "" Masc; +city_N = mkN "" "" Masc; +clean_A = regA "nqy" ; +clever_A = regA "Hkm" ; +close_V2 = dirV2 (mkVPaal "Sgr") ; +cloud_N = mkN "" "" Masc; +coat_N = mkN "" "" Masc; +cold_A = regA "qr" ; +--come_V = mkVPaal "bA" ; +computer_N = mkN "" "" Masc; +--correct_A = "" ; +--count_V2 = dirV2 (mkVPaal "") ; +country_N = mkN "" "" Masc; +cousin_N = mkN "" "" Masc; +cow_N = mkN "" "" Masc; +--cut_V2 = dirV2 (mkVPaal "") ; +day_N = mkN "" "" Masc; +--die_V = mkVPaal "" ; +dig_V = mkVPaal "Hpr" ; +--dirty_A = "" ; +--distance_N3 = mkN "" "" Masc; +do_V2 = dirV2 (mkVPaal "Osh") ; +doctor_N = mkN "" "" Masc; +dog_N = mkN "" "" Masc; +door_N = mkN "" "" Masc; +drink_V2 = dirV2 (mkVPaal "sth") ; +dry_A = regA "ybs" ; +--dull_A = "" ; +dust_N = mkN "" "" Masc; +ear_N = mkN "" "" Masc; +earth_N = mkN "" "" Masc; +--easy_A2V = "" ; +eat_V2 = dirV2 (mkVPaal "Akl") ; +egg_N = mkN "" "" Masc; +empty_A = regA "ryq" ; +enemy_N = mkN "" "" Masc; +eye_N = mkN "" "" Masc; +factory_N = mkN "" "" Masc; +fall_V = mkVPaal "npl" ; +--far_Adv = "rHwq" ; +fat_N = mkN "" "" Masc; +--father_N2 = mkN "" "" Masc; +--fear_V2 = dirV2 (mkVPaal "") ; +--fear_VS = mkVPaal "" ; +feather_N = mkN "" "" Masc; +fight_V2 = dirV2 (mkVPaal "lHm") ; --nipal +find_V2 = dirV2 (mkVPaal "mZA") ; +fingernail_N = mkN "" "" Masc; +fire_N = mkN "" "" Masc; +fish_N = mkN "" "" Masc; +--float_V = mkVPaal "" ; +floor_N = mkN "" "" Masc; +flow_V = mkVPaal "prH" ; +flower_N = mkN "" "" Masc; +--fly_V = mkVPaal "" ; +fog_N = mkN "" "" Masc; +foot_N = mkN "" "" Masc; +forest_N = mkN "" "" Masc; +forget_V2 = dirV2 (mkVPaal "skH") ; +freeze_V = mkVPaal "qpA" ; +fridge_N = mkN "" "" Masc; +friend_N = mkN "" "" Masc; +fruit_N = mkN "" "" Masc; +full_A = regA "mlA" ; +--fun_AV = "" ; +garden_N = mkN "" "" Masc; +girl_N = mkN "" "" Masc; +--give_V3 = "" ; +glove_N = mkN "" "" Masc; +go_V = mkVPaal "hlk" ; +gold_N = mkN "" "" Masc; +good_A = regA "Twb" ; +grammar_N = mkN "" "" Masc; +grass_N = mkN "" "" Masc; +guts_N = mkN "" "" Masc; +hair_N = mkN "" "" Masc; +hand_N = mkN "" "" Masc; +harbour_N = mkN "" "" Masc; +hat_N = mkN "" "" Masc; +--hate_V2 = dirV2 (mkVPaal "") ; +head_N = mkN "" "" Masc; +hear_V2 = dirV2 (mkVPaal "smO") ; +heart_N = mkN "" "" Masc; +heavy_A = regA "kbd" ; +hill_N = mkN "" "" Masc; +hit_V2 = dirV2 (mkVPaal "pgO") ; +hold_V2 = dirV2 (mkVPaal "tpS") ; +--hope_VS = mkVPaal "" ; +horn_N = mkN "" "" Masc; +horse_N = mkN "" "" Masc; +hot_A = regA "Hm" ; +house_N = mkN "byt" "btyM" Masc; +--hunt_V2 = dirV2 (mkVPaal "") ; +husband_N = mkN "" "" Masc; +ice_N = mkN "" "" Masc; +important_A = regA "Hswb" ; +industry_N = mkN "" "" Masc; +iron_N = mkN "" "" Masc; +john_PN = mkPN "gwN" Masc; +jump_V = mkVPaal "qpZ" ; +kill_V2 = dirV2 (mkVPaal "hrg") ; +king_N = mkN "" "" Masc; +knee_N = mkN "" "" Masc; +know_V2 = dirV2 (mkVPaal "ydO") ; +--know_VQ = mkVPaal "" ; +--know_VS = mkVPaal "" ; +lake_N = mkN "" "" Masc; +lamp_N = mkN "" "" Masc; +language_N = mkN "" "" Masc; +laugh_V = mkVPaal "ZHq" ; +leaf_N = mkN "" "" Masc; +learn_V2 = dirV2 (mkVPaal "lmd") ; +leather_N = mkN "Owr" Masc; -- no pl +leave_V2 = dirV2 (mkVPaal "Ozb") ; +--left_Ord = ""; +lie_V = mkVPaal "sqr" ; -- pial (paal kal) +like_V2 = dirV2 (mkVPaal "Ahb") ; +listen_V2 = dirV2 (mkVPaal "smO") ; -- +--live_V = mkVPaal "Hy" ; +liver_N = mkN "" "" Masc; +long_A = regA "Arwk" ; +lose_V2 = dirV2 (mkVPaal "Abd") ; +louse_N = mkN "" "" Masc; +love_N = mkN "" "" Masc; +love_V2 = dirV2 (mkVPaal "Ahb") ; +man_N = mkN "Ays" "AnsyM" Masc; +--married_A2 = "" ; +meat_N = mkN "" "" Masc; +milk_N = mkN "" "" Masc; +moon_N = mkN "" "" Masc; +--mother_N2 = mkN "" "" Masc; +mountain_N = mkN "" "" Masc; +mouth_N = mkN "" "" Masc; +music_N = mkN "" "" Masc; +name_N = mkN "sm" "smwt" Masc; +narrow_A = regA "Zr" ; +near_A = regA "qrwb" ; +neck_N = mkN "" "" Masc; +new_A = regA "Hds" ; +newspaper_N = mkN "Otwn" "Otwnym" Masc; +night_N = mkN "" "" Masc; +nose_N = mkN "" "" Masc; +now_Adv ={s= ""} ; +number_N = mkN "" "" Masc; +oil_N = mkN "smN" Masc; -- Mass noun +old_A = regA "ysn" ; +open_V2 = dirV2 (mkVPaal "ptH") ; +paint_V2A = dirV2 (mkVPaal "Zyr") ; +paper_N = mkN "" "" Masc; +paris_PN = mkPN "pryz" Fem; +peace_N = mkN "" "" Masc; +pen_N = mkN "" "" Masc; +person_N = mkN "" "" Masc; +planet_N = mkN "" "" Masc; +plastic_N = mkN "" "" Masc; +--play_V = mkVPaal "" ; +--play_V2 = dirV2 (mkVPaal "") ; +policeman_N = mkN "" "" Masc; +priest_N = mkN "" "" Masc; +--probable_AS = "" ; +--pull_V2 = dirV2 (mkVPaal "") ; +--push_V2 = dirV2 (mkVPaal "") ; +--put_V2 = dirV2 (mkVPaal "") ; +queen_N = mkN "" "" Masc; +question_N = mkN "" "" Masc; +radio_N = mkN "" "" Masc; +rain_N = mkN "" "" Masc; +--rain_V0 = mkVPaal "" ; +read_V2 = dirV2 (mkVPaal "qrA") ; +ready_A = regA "mwkn" ; +reason_N = mkN "" "" Masc; +--red_A = "" ; +religion_N = mkN "" "" Masc; +restaurant_N = mkN "" "" Masc; +--right_Ord = "" ; +river_N = mkN "" "" Masc; +road_N = mkN "" "" Masc; +rock_N = mkN "" "" Masc; +roof_N = mkN "" "" Masc; +root_N = mkN "" "" Masc; +rope_N = mkN "" "" Masc; +--rotten_A = "" ; +--round_A = "" ; +--rub_V2 = dirV2 (mkVPaal "") ; +rubber_N = mkN "" "" Masc; +rule_N = mkN "" "" Masc; +--run_V = mkVPaal "" ; +salt_N = mkN "" "" Masc; +sand_N = mkN "" "" Masc; +--say_VS = mkVPaal "" ; +school_N = mkN "" "" Masc; +science_N = mkN "" "" Masc; +--scratch_V2 = dirV2 (mkVPaal "") ; +sea_N = mkN "" "" Masc; +see_V2 = dirV2 (mkVPaal "rAh") ; +seed_N = mkN "" "" Masc; +--seek_V2 = dirV2 (mkVPaal "") ; +sell_V3 = {s = "" }; +send_V3 = {s = ""} ; +--sew_V = mkVPaal "" ; +sharp_A = regA "Hd" ; +sheep_N = mkN "" "" Masc; +ship_N = mkN "" "" Masc; +shirt_N = mkN "" "" Masc; +shoe_N = mkN "" "" Masc; +shop_N = mkN "" "" Masc; +short_A = regA "qZr" ; +silver_N = mkN "" "" Masc; +--sing_V = mkVPaal "" ; +sister_N = mkN "" "" Masc; +sit_V = mkVPaal "ysb" ; +skin_N = mkN "" "" Masc; +sky_N = mkN "" "" Masc; +sleep_V = mkVPaal "ysn" ; --pual +small_A = regA "qTN"; +--smell_V = mkVPaal "" ; +smoke_N = mkN "" "" Masc; +smooth_A = regA "Hlq" ; +snake_N = mkN "" "" Masc; +snow_N = mkN "" "" Masc; +sock_N = mkN "" "" Masc; +song_N = mkN "" "" Masc; +speak_V2 = dirV2 (mkVPaal "dbr") ; +--spit_V = mkVPaal "" ; +--split_V2 = dirV2 (mkVPaal "") ; +squeeze_V2 = dirV2 (mkVPaal "lHZ") ; +stab_V2 = dirV2 (mkVPaal "dqr") ; +stand_V = mkVPaal "Omd" ; +star_N = mkN "" "" Masc; +steel_N = mkN "" "" Masc; +stick_N = mkN "" "" Masc; +stone_N = mkN "" "" Masc; +--stop_V = mkVPaal "" ; +stove_N = mkN "" "" Masc; +straight_A = regA "ysr" ; +student_N = mkN "" "" Masc; +stupid_A = regA2 "" ; +--suck_V2 = dirV2 (mkVPaal "") ; +sun_N = mkN "" "" Masc; +--swell_V = mkVPaal "" ; +swim_V = mkVPaal "sHh" ; +--switch8off_V2 = dirV2 (mkVPaal "") ; +--switch8on_V2 = dirV2 (mkVPaal "") ; +table_N = mkN "" "" Masc; +tail_N = mkN "" "" Masc; +--talk_V3 = ""; +teach_V2 = dirV2 (mkVPaal "lmd") ; --piel +teacher_N = mkN "" "" Masc; +television_N = mkN "" "" Masc; +thick_A = regA2 "" ; +thin_A = regA2 "" ; +think_V = mkVPaal "Hsb" ; -- pual +throw_V2 = dirV2 (mkVPaal "zrq") ; +tie_V2 = dirV2 (mkVPaal "hdq") ; --hifhil +--today_Adv = "" ; +tongue_N = mkN "" "" Masc; +tooth_N = mkN "" "" Masc; +train_N = mkN "" "" Masc; +travel_V = mkVPaal "nSO" ; +tree_N = mkN "" "" Masc; +turn_V = mkVPaal "pnh" ; -- hiphil +ugly_A = regA2 "" ; +uncertain_A = regA2 "" ; +--understand_V2 = dirV2 (mkVPaal "") ; +university_N = mkN "" "" Masc; +village_N = mkN "" "" Masc; +vomit_V = mkVPaal "plT" ; +--wait_V2 = dirV2 (mkVPaal "") ; +war_N = mkN "" "" Masc; +walk_V = mkVPaal "ZOd" ; +warm_A = regA2 "" ; +wash_V2 = dirV2 (mkVPaal "rHZ") ; +watch_V2 = dirV2 (mkVPaal "smr") ; +water_N = mkN "" "" Masc; +wet_A = regA2 "" ; +white_A = regA2 "lbN" ; +wide_A = regA2 "" ; +wife_N = mkN "" "" Masc; +--win_V2 = dirV2 (mkVPaal "") ; +woman_N = mkN "Aysh" "nsyM" Fem ; +wind_N = mkN "" "" Masc; +window_N = mkN "" "" Masc; +wine_N = mkN "" "" Masc; +wing_N = mkN "" "" Masc; +--wipe_V2 = dirV2 (mkVPaal "") ; +--wonder_VQ = mkVPaal "" ; +wood_N = mkN "OZ" "OZym" Masc; +worm_N = mkN "" "" Masc; +year_N = mkN "" "" Masc; +write_V2 = dirV2 (mkVPaal "ktb") ; +yellow_A = regA2 "" ; +young_A = regA2 ""; + + + --man_N = mkN "Ays" "AnsyM" Masc; + --woman_N = mkN "Aysh" "nsyM" Fem ; + --house_N = mkN "byt" "btyM" Masc; + --leg_N = mkN "rgl" "rglyyM" "rglyyM" Fem; + --store_N = mkN "Hnwt" "Hnwywt" Fem; + --chair_N = mkN "kSA" "kSAwt" Masc; + --eyes_N = mkN "OyN" "OynyyM" "OynyyM" Fem; + --spoon_N = mkN "kP" Fem; + --big_A = regA "gdwl"; + --small_A = regA "qTN"; + --green_A = regA "yrwq"; + --delicious_A = regA2 "nhdr"; + --italian_A = regA2 "AyTlqy"; + --write_V2 = dirV2 (mkVPaal "ktb") ; + --finish_V = mkVPaal "gmr" ; + --walk_V = mkVPaal "ZOd" ; + --arrive_V = mkVHifhil2 "ngO" ; + --express_V = mkVHifhil2 "nbO" ; + --love_V2 = dirV2 (mkVPaal "Ahb") ; + --please_V2 = dirV2 (mkVPaal "Spq") ; +} diff --git a/lib/src/hebrew/MorphoHeb.gf b/lib/src/hebrew/MorphoHeb.gf new file mode 100644 index 000000000..f60e3391d --- /dev/null +++ b/lib/src/hebrew/MorphoHeb.gf @@ -0,0 +1,5 @@ +--# -path=.:../common:../../prelude + +resource MorphoHeb = open Prelude, Predef in { + +} diff --git a/lib/src/hebrew/NounHeb.gf b/lib/src/hebrew/NounHeb.gf new file mode 100644 index 000000000..647570a7d --- /dev/null +++ b/lib/src/hebrew/NounHeb.gf @@ -0,0 +1,58 @@ +concrete NounHeb of Noun = CatHeb ** open ResHeb, Prelude in { + + flags optimize=all_subs ; coding=utf8 ; + + lin + + DetCN det cn = { + s = \\c => {obj = cn.s ! det.n ! det.sp ++ det.s ! cn.g } ; + isDef = det.isDef ; + sp = det.sp ; + a = Ag cn.g det.n Per3 + } ; + + AdjCN ap cn = + let + g = cn.g + in { + s = \\sp => table {n => cn.s ! sp ! n ++ ap.s ! sp ! n ! g} ; + g = g + } ; + + UseN n = n ; + + DefArt = { + s = \\_,_ => "" ; + n = Sg ; + sp = Def ; + isSNum, isDef = True + } ; + + IndefArt = { + s = \\_,_ => "" ; + n = Sg ; + sp = Indef ; + isSNum, isDef = False + } ; + + DetQuant quant num = { + s = \\g => quant.s ! num.n ! g ++ num.s ! Nom ; --- fix case + n = num.n; + sp = Def ; + isDef = True ; + isSNum = False + } ; + + NumSg = {s = \\_ => []; n = Sg} ; + NumPl = {s = \\_ => []; n = Pl} ; + + UsePN pn = { + s = \\c => {obj = pn.s ! Nom} ; --TODO define a function for case + a = Ag pn.g Sg Per3; + sp = Def ; + isDef = False + } ; + + UsePron p = p ; + +} diff --git a/lib/src/hebrew/ParadigmsHeb.gf b/lib/src/hebrew/ParadigmsHeb.gf new file mode 100644 index 000000000..abdc53ff3 --- /dev/null +++ b/lib/src/hebrew/ParadigmsHeb.gf @@ -0,0 +1,420 @@ + --# -path=.:../abstract:../../prelude:../common + + resource ParadigmsHeb = open + Predef, + Prelude, + MorphoHeb, + ResHeb, + CatHeb + in { + + flags optimize = noexpand; coding=utf8 ; + + oper + + mkNoun : (bait,batim,batimD : Str) -> Gender -> Noun = \bait,batim,batimD,g -> { + s = table { + Sg => table{Indef => bait ; Def => defH bait}; + Pl => table{Indef => batim ; Def => defH batim} ; + Dl => table{Indef => batimD ; Def => defH batimD} + } ; + g=g ; + }; + + -- For some nouns it is not possible to infer the gender from the pefix, + -- depending on the gender, a noun can either end with yM or wt. + + regNoun2 : Str -> Gender -> Noun = \root,g -> + case root of { + heret + c@? => table { + Masc => mkNoun root (heret + replaceLastLet (c) + "yM" ) ("") g; + Fem => mkNoun root (heret + replaceLastLet (c) + "wt") ("") g + } ! g + } ; + + -- For regular nouns, it is possible to infer the gender from the pefix. + + regNoun : Str -> Noun = + \root -> case root of { + malc + "h" => mkNoun root (malc + "wt") ("") Fem ; + mecon + "yt" => mkNoun root (mecon + "ywt") ("") Fem ; -- (it -> iyot) + khan + "wt" => mkNoun root (khan + "ywt") ("") Fem; -- (ut -> uyot) + tsalakh + "t" => mkNoun root (tsalakh + "wt") ("") Fem ; -- (at -> ot) + _ => mkNoun root (root + "yM") ("") Masc + } ; + + mkN = overload { + mkN : (root: Str) -> Noun = regNoun ; + mkN : (kaf : Str) -> Gender-> Noun = regNoun2 ; + mkN : (bait, batim : Str) -> Gender -> Noun = \bait,batim -> mkNoun bait batim ""; + mkN : (regel, raglayim, raglaim : Str) -> Gender -> Noun = mkNoun ; + } ; + + mkProperNoun : Str -> Gender -> PN = \str,gen -> + { + s = \\_ => str ; + g = gen ; + lock_PN = <> + } ; + + mkPron : (s,a,d : Str) -> Gender -> Number -> Person -> Pron = + \s,a,d,g,n,p -> { + s = + table { + Nom => {obj = s} ; + Acc => {obj = a} ; + Dat => {obj = []} + }; + isDef = False ; + sp = Indef ; + a = Ag g n p ; + lock_Pron = <> + } ; + + mkPrep : Str -> Bool -> Prep = \prepstr,ispre -> + { + s = prepstr; + isPre = ispre ; lock_Prep = <> + } ; + + + mkPN = overload { + mkPN : Str -> Gender -> PN + = mkProperNoun ; + } ; + + + regA : Str -> Adj = \root + -> case root of { + kaTan + c@? => mkAdj root (kaTan + replaceLastLet (c) + "h") (kaTan + + replaceLastLet (c) + "yM") (kaTan + replaceLastLet (c) + "wt") + }; + + regA2 : Str -> Adj = \bwleT + -> mkAdj bwleT ( bwleT + "t") ( bwleT + "yM" ) (bwleT + "wt" ); + + mkAdj : (_,_,_,_ : Str) -> Adj = \tov,tova,tovim,tovot -> { + s = table { + Sg => table { + Indef => table { Masc => tov ; Fem => tova } ; + Def => table { Masc => defH tov ; Fem => defH tova } + } ; + _ => table { + Indef => table {Masc => tovim ; Fem => tovot } ; + Def => table { Masc => defH tovim ; Fem => defH tovot } + } + } + }; + + mkAdv = overload { + mkAdv : Str -> Adv = \s -> {s = s ; lock_Adv = <>} ; + } ; + + + dirV2: Verb -> Verb2 =\v -> + { + s = v.s ; + c = Acc + } ; + + + mkVPaal : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern root C1aC2aC3ti ; + Vp1Pl => appPattern root C1aC2aC3nu ; + + Vp2Sg Masc => appPattern root C1aC2aC3ta ; + Vp2Sg Fem => appPattern root C1aC2aC3t ; + Vp2Pl Masc => appPattern root C1aC2aC3tem ; + Vp2Pl Fem => appPattern root C1aC2aC3ten ; + + Vp3Sg Masc => appPattern root C1aC2aC3 ; + Vp3Sg Fem => appPattern root C1aC2aC3a ; + Vp3Pl Masc => appPattern root C1aC2aC3u ; + Vp3Pl Fem => appPattern root C1aC2aC3u + } ; + + Part => table { + Vp1Sg => appPattern root C1oC2eC3 ; + Vp1Pl => appPattern root C1oC2C3im ; + + Vp2Sg Masc => appPattern root C1oC2eC3 ; + Vp2Sg Fem => appPattern root C1oC2eC3et ; + Vp2Pl Masc => appPattern root C1oC2C3im ; + Vp2Pl Fem => appPattern root C1oC2C3ot ; + + Vp3Sg Masc => appPattern root C1oC2eC3; + Vp3Sg Fem => appPattern root C1oC2eC3et ; + Vp3Pl Masc => appPattern root C1oC2C3im ; + Vp3Pl Fem => appPattern root C1oC2C3ot + } ; + + Imperf => table { + Vp1Sg => appPattern root eC1C2oC3 ; + Vp1Pl => appPattern root niC1C2oC3 ; + + Vp2Sg Masc => appPattern root tiC1C2oC3 ; + Vp2Sg Fem => appPattern root tiC1C2eC3i ; + Vp2Pl Masc => appPattern root tiC1C2eC3o ; + Vp2Pl Fem => appPattern root tiC1C2eC3o ; + + Vp3Sg Masc => appPattern root yiC1C2oC3 ; + Vp3Sg Fem => appPattern root tiC1C2oC3 ; + Vp3Pl Masc => appPattern root yiC1C2eC3u ; + Vp3Pl Fem => appPattern root yiC1C2eC3u + } + } + } ; + +mkVHifhil : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern root hiC1C2aC3ti ; + Vp1Pl => appPattern root hiC1C2aC3nu ; + + Vp2Sg Masc => appPattern root hiC1C2aC3ta ; + Vp2Sg Fem => appPattern root hiC1C2aC3t ; + Vp2Pl Masc => appPattern root hiC1C2aC3tem ; + Vp2Pl Fem => appPattern root hiC1C2aC3ten ; + + Vp3Sg Masc => appPattern root hiC1C2iC3 ; + Vp3Sg Fem => appPattern root hiC1C2iC3a ; + Vp3Pl Masc => appPattern root hiC1C2iC3u ; + Vp3Pl Fem => appPattern root hiC1C2iC3u + } ; + + Part => table { + Vp1Sg => appPattern root C1oC2eC3 ; + Vp1Pl => appPattern root C1oC2C3im ; + + Vp2Sg Masc => appPattern root C1oC2eC3 ; + Vp2Sg Fem => appPattern root C1oC2eC3et ; + Vp2Pl Masc => appPattern root C1oC2C3im ; + Vp2Pl Fem => appPattern root C1oC2C3ot ; + + Vp3Sg Masc => appPattern root C1oC2eC3; + Vp3Sg Fem => appPattern root C1oC2eC3et ; + Vp3Pl Masc => appPattern root C1oC2C3im ; + Vp3Pl Fem => appPattern root C1oC2C3ot + }; + Imperf => table { + Vp1Sg => appPattern root eC1C2oC3 ; + Vp1Pl => appPattern root niC1C2oC3 ; + + Vp2Sg Masc => appPattern root tiC1C2oC3 ; + Vp2Sg Fem => appPattern root tiC1C2eC3i ; + Vp2Pl Masc => appPattern root tiC1C2eC3o ; + Vp2Pl Fem => appPattern root tiC1C2eC3o ; + + Vp3Sg Masc => appPattern root yiC1C2oC3 ; + Vp3Sg Fem => appPattern root tiC1C2oC3 ; + Vp3Pl Masc => appPattern root yiC1C2eC3u ; + Vp3Pl Fem => appPattern root yiC1C2eC3u + } + } + } ; + +mkVHifhil2 : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern2 root hiC1C2aC3ti ; + Vp1Pl => appPattern2 root hiC1C2aC3nu ; + + Vp2Sg Masc => appPattern2 root hiC1C2aC3ta ; + Vp2Sg Fem => appPattern2 root hiC1C2aC3t ; + Vp2Pl Masc => appPattern2 root hiC1C2aC3tem ; + Vp2Pl Fem => appPattern2 root hiC1C2aC3ten ; + + Vp3Sg Masc => appPattern2 root hiC1C2iC3 ; + Vp3Sg Fem => appPattern2 root hiC1C2iC3a ; + Vp3Pl Masc => appPattern2 root hiC1C2iC3u ; + Vp3Pl Fem => appPattern2 root hiC1C2iC3u + } ; + + Part => table { + Vp1Sg => appPattern2 root C1oC2eC3 ; + Vp1Pl => appPattern2 root C1oC2C3im ; + + Vp2Sg Masc => appPattern2 root C1oC2eC3 ; + Vp2Sg Fem => appPattern2 root C1oC2eC3et ; + Vp2Pl Masc => appPattern2 root C1oC2C3im ; + Vp2Pl Fem => appPattern2 root C1oC2C3ot ; + + Vp3Sg Masc => appPattern2 root C1oC2eC3; + Vp3Sg Fem => appPattern2 root C1oC2eC3et ; + Vp3Pl Masc => appPattern2 root C1oC2C3im ; + Vp3Pl Fem => appPattern2 root C1oC2C3ot + } ; + Imperf => table { + Vp1Sg => appPattern2 root eC1C2oC3 ; + Vp1Pl => appPattern2 root niC1C2oC3 ; + + Vp2Sg Masc => appPattern2 root tiC1C2oC3 ; + Vp2Sg Fem => appPattern2 root tiC1C2eC3i ; + Vp2Pl Masc => appPattern2 root tiC1C2eC3o ; + Vp2Pl Fem => appPattern2 root tiC1C2eC3o ; + + Vp3Sg Masc => appPattern2 root yiC1C2oC3 ; + Vp3Sg Fem => appPattern2 root tiC1C2oC3 ; + Vp3Pl Masc => appPattern2 root yiC1C2eC3u ; + Vp3Pl Fem => appPattern2 root yiC1C2eC3u + } + } + } ; + +mkVHitpael : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern root hitC1C2aC3ti ; + Vp1Pl => appPattern root hitC1C2aC3nu ; + + Vp2Sg Masc => appPattern root hitC1C2aC3ta ; + Vp2Sg Fem => appPattern root hitC1C2aC3t ; + Vp2Pl Masc => appPattern root hitC1C2aC3tem ; + Vp2Pl Fem => appPattern root hitC1C2aC3ten ; + + Vp3Sg Masc => appPattern root hitC1C2iC3 ; + Vp3Sg Fem => appPattern root hitC1C2iC3a ; + Vp3Pl Masc => appPattern root hitC1C2iC3u ; + Vp3Pl Fem => appPattern root hitC1C2iC3u + } ; + + Part => table { + Vp1Sg => appPattern root C1oC2eC3 ; + Vp1Pl => appPattern root C1oC2C3im ; + + Vp2Sg Masc => appPattern root C1oC2eC3 ; + Vp2Sg Fem => appPattern root C1oC2eC3et ; + Vp2Pl Masc => appPattern root C1oC2C3im ; + Vp2Pl Fem => appPattern root C1oC2C3ot ; + + Vp3Sg Masc => appPattern root C1oC2eC3; + Vp3Sg Fem => appPattern root C1oC2eC3et ; + Vp3Pl Masc => appPattern root C1oC2C3im ; + Vp3Pl Fem => appPattern root C1oC2C3ot + }; + + Imperf => table { + Vp1Sg => appPattern root tiC1C2oC3 ; + Vp1Pl => appPattern root tiC1C2oC3 ; + + Vp2Sg Masc => appPattern root titC1C2C3 ; + Vp2Sg Fem => appPattern root titC1C2C3i ; + Vp2Pl Masc => appPattern root titC1C2C3o ; + Vp2Pl Fem => appPattern root titC1C2C3nah ; + + Vp3Sg Masc => appPattern root yitC1C2C3 ; + Vp3Sg Fem => appPattern root titC1C2C3 ; + Vp3Pl Masc => appPattern root yitC1C2C3u ; + Vp3Pl Fem => appPattern root titC1C2C3nah + } + } + } ; + +mkVHufal : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern root hiC1C2aC3ti ; + Vp1Pl => appPattern root hiC1C2aC3nu ; + + Vp2Sg Masc => appPattern root hiC1C2aC3ta ; + Vp2Sg Fem => appPattern root hiC1C2aC3t ; + Vp2Pl Masc => appPattern root hiC1C2aC3tem ; + Vp2Pl Fem => appPattern root hiC1C2aC3ten ; + + Vp3Sg Masc => appPattern root hoC1C2C3 ; + Vp3Sg Fem => appPattern root hoC1C2C3a ; + Vp3Pl Masc => appPattern root hoC1C2C3u ; + Vp3Pl Fem => appPattern root hoC1C2C3u + } ; + + Part => table { + Vp1Sg => appPattern root C1oC2eC3 ; + Vp1Pl => appPattern root C1oC2C3im ; + + Vp2Sg Masc => appPattern root C1oC2eC3 ; + Vp2Sg Fem => appPattern root C1oC2eC3et ; + Vp2Pl Masc => appPattern root C1oC2C3im ; + Vp2Pl Fem => appPattern root C1oC2C3ot ; + + Vp3Sg Masc => appPattern root C1oC2eC3; + Vp3Sg Fem => appPattern root C1oC2eC3et ; + Vp3Pl Masc => appPattern root C1oC2C3im ; + Vp3Pl Fem => appPattern root C1oC2C3ot + } ; + + Imperf => table { + Vp1Sg => appPattern root eC1C2C3 ; + Vp1Pl => appPattern root niC1C2C3 ; + + Vp2Sg Masc => appPattern root taC1C2aC3 ; + Vp2Sg Fem => appPattern root taC1C2eC3i ; + Vp2Pl Masc => appPattern root taC1C2eC3o ; + Vp2Pl Fem => appPattern root taC1C2aC3nah ; + + Vp3Sg Masc => appPattern root yaC1C2aC3 ; + Vp3Sg Fem => appPattern root taC1C2aC3 ; + Vp3Pl Masc => appPattern root yaC1C2aC3u ; + Vp3Pl Fem => appPattern root taC1C2aC3nah + } + } + } ; + +mkVPual : Str -> Verb = \v -> + let root = getRoot v + in {s = table { + Perf => table { + Vp1Sg => appPattern root C1uC2aC3ti ; + Vp1Pl => appPattern root C1uC2aC3nu ; + + Vp2Sg Masc => appPattern root C1uC2aC3ti ; + Vp2Sg Fem => appPattern root C1uC2aC3t ; + Vp2Pl Masc => appPattern root C1uC2aC3tem ; + Vp2Pl Fem => appPattern root C1uC2aC3ten ; + + Vp3Sg Masc => appPattern root hoC1C2C3 ; + Vp3Sg Fem => appPattern root hoC1C2C3a ; + Vp3Pl Masc => appPattern root hoC1C2C3u ; + Vp3Pl Fem => appPattern root hoC1C2C3u + } ; + + Part => table { + Vp1Sg => appPattern root C1oC2eC3 ; + Vp1Pl => appPattern root C1oC2C3im ; + + Vp2Sg Masc => appPattern root C1oC2eC3 ; + Vp2Sg Fem => appPattern root C1oC2eC3et ; + Vp2Pl Masc => appPattern root C1oC2C3im ; + Vp2Pl Fem => appPattern root C1oC2C3ot ; + + Vp3Sg Masc => appPattern root C1oC2eC3; + Vp3Sg Fem => appPattern root C1oC2eC3et ; + Vp3Pl Masc => appPattern root C1oC2C3im ; + Vp3Pl Fem => appPattern root C1oC2C3ot + }; + + Imperf => table { + Vp1Sg => appPattern root eC1C2C3 ; + Vp1Pl => appPattern root niC1C2C3 ; + + Vp2Sg Masc => appPattern root taC1C2aC3 ; + Vp2Sg Fem => appPattern root taC1C2eC3i ; + Vp2Pl Masc => appPattern root taC1C2eC3o ; + Vp2Pl Fem => appPattern root taC1C2aC3nah ; + + Vp3Sg Masc => appPattern root yaC1C2aC3 ; + Vp3Sg Fem => appPattern root taC1C2aC3 ; + Vp3Pl Masc => appPattern root yaC1C2aC3u ; + Vp3Pl Fem => appPattern root taC1C2aC3nah + } + } + } ; + + + } diff --git a/lib/src/hebrew/PatternsHeb.gf b/lib/src/hebrew/PatternsHeb.gf new file mode 100644 index 000000000..a975b5b49 --- /dev/null +++ b/lib/src/hebrew/PatternsHeb.gf @@ -0,0 +1,88 @@ +resource PatternsHeb = { + +flags coding=utf8 ; + +oper + +C1aC2aC3ti = {C1 ="" ; C1C2=""; C2C3 =""; C3="ty"}; +C1aC2aC3nu = { C1 = "" ; C1C2=""; C2C3 =""; C3="nw"}; +C1aC2aC3ta = { C1 = "" ; C1C2=""; C2C3 =""; C3="ta"}; +C1aC2aC3t = { C1 = "" ; C1C2=""; C2C3 =""; C3="t"}; +C1aC2aC3tem = { C1 = "" ; C1C2=""; C2C3 =""; C3="teM"}; +C1aC2aC3ten = { C1 = "" ; C1C2=""; C2C3 =""; C3="teN"}; +C1aC2aC3 = { C1 = "" ; C1C2=""; C2C3 =""; C3=""}; +C1aC2aC3a = { C1 = "" ; C1C2=""; C2C3 =""; C3="h"}; +C1aC2aC3u = { C1 = "" ; C1C2=""; C2C3 =""; C3="w"}; + +C1oC2eC3 = { C1 = "" ; C1C2="w"; C2C3 =""; C3=""}; +C1oC2eC3et = { C1 = "" ; C1C2="w"; C2C3 =""; C3="t"}; +C1oC2C3im = { C1 = "" ; C1C2="w"; C2C3 =""; C3="yM"}; +C1oC2C3ot = { C1 = "" ; C1C2="w"; C2C3 =""; C3="wt"}; + +eC1C2oC3 = { C1 = "y" ; C1C2=""; C2C3 =""; C3=""}; +niC1C2oC3 = { C1 = "n" ; C1C2=""; C2C3 =""; C3=""}; +tiC1C2oC3 = { C1 = "t" ; C1C2=""; C2C3 =""; C3=""}; +tiC1C2eC3i = { C1 = "t" ; C1C2=""; C2C3 ="e"; C3="y"}; +tiC1C2eC3o = { C1 = "t" ; C1C2=""; C2C3 ="e"; C3="w"}; + +yiC1C2oC3 = { C1 = "y" ; C1C2=""; C2C3 =""; C3=""}; +yiC1C2eC3u = { C1 = "y" ; C1C2=""; C2C3 =""; C3="w"}; + +hiC1C2aC3ti = {C1 ="h" ; C1C2=""; C2C3 =""; C3="ty"}; +hiC1C2aC3nu = { C1 = "h" ; C1C2=""; C2C3 =""; C3="nw"}; +hiC1C2aC3ta = { C1 = "h" ; C1C2=""; C2C3 =""; C3="ta"}; +hiC1C2aC3t = { C1 = "h" ; C1C2=""; C2C3 =""; C3="t"}; +hiC1C2aC3tem= { C1 = "h" ; C1C2=""; C2C3 =""; C3="teM"}; +hiC1C2aC3ten = { C1 = "h" ; C1C2=""; C2C3 =""; C3="teN"}; +hiC1C2iC3= { C1 = "h" ; C1C2=""; C2C3 ="y"; C3=""}; +hiC1C2iC3a= { C1 = "h" ; C1C2=""; C2C3 ="y"; C3="h"}; +hiC1C2iC3u = { C1 = "h" ; C1C2=""; C2C3 ="y"; C3="w"}; + +hitC1C2aC3ti = {C1 ="ht" ; C1C2=""; C2C3 =""; C3="ty"}; +hitC1C2aC3nu = { C1 = "ht" ; C1C2=""; C2C3 =""; C3="nw"}; +hitC1C2aC3ta = { C1 = "ht" ; C1C2=""; C2C3 =""; C3="ta"}; +hitC1C2aC3t = { C1 = "ht" ; C1C2=""; C2C3 =""; C3="t"}; +hitC1C2aC3tem= { C1 = "ht" ; C1C2=""; C2C3 =""; C3="teM"}; +hitC1C2aC3ten = { C1 = "ht" ; C1C2=""; C2C3 =""; C3="teN"}; +hitC1C2iC3= { C1 = "ht" ; C1C2=""; C2C3 ="y"; C3=""}; +hitC1C2iC3a= { C1 = "ht" ; C1C2=""; C2C3 ="y"; C3="h"}; +hitC1C2iC3u = { C1 = "ht" ; C1C2=""; C2C3 ="y"; C3="w"}; + + +titC1C2C3 = { C1 = "tt" ; C1C2=""; C2C3 =""; C3=""}; +titC1C2C3i = { C1 = "tt" ; C1C2=""; C2C3 =""; C3="y"}; +titC1C2C3o = { C1 = "tt" ; C1C2=""; C2C3 =""; C3="w"}; +titC1C2C3nah = { C1 = "tt" ; C1C2=""; C2C3 =""; C3="nah"}; + +yitC1C2C3 = { C1 = "y" ; C1C2=""; C2C3 =""; C3=""}; +yitC1C2C3u = { C1 = "y" ; C1C2=""; C2C3 =""; C3="w"}; + + +hoC1C2C3= { C1 = "ho" ; C1C2=""; C2C3 =""; C3=""}; +hoC1C2C3a= { C1 = "ho" ; C1C2=""; C2C3 =""; C3="h"}; +hoC1C2C3u = { C1 = "ho" ; C1C2=""; C2C3 =""; C3="w"}; + + +eC1C2C3 = { C1 = "a" ; C1C2=""; C2C3 =""; C3=""}; +niC1C2C3 = { C1 = "n" ; C1C2=""; C2C3 =""; C3=""}; + +taC1C2aC3 = { C1 = "t" ; C1C2=""; C2C3 =""; C3=""}; +taC1C2eC3i = { C1 = "t" ; C1C2=""; C2C3 =""; C3="y"}; +taC1C2eC3o = { C1 = "t" ; C1C2=""; C2C3 =""; C3="w"}; +taC1C2aC3nah = { C1 = "t" ; C1C2=""; C2C3 =""; C3="nh"}; + +yaC1C2aC3 = { C1 = "y" ; C1C2=""; C2C3 =""; C3=""}; +taC1C2aC3 = { C1 = "t" ; C1C2=""; C2C3 =""; C3=""}; +yaC1C2aC3u = { C1 = "y" ; C1C2=""; C2C3 =""; C3="w"}; +taC1C2aC3nah = { C1 = "t" ; C1C2=""; C2C3 =""; C3="nh"}; + + +C1uC2aC3 = { C1 = "" ; C1C2="w"; C2C3 =""; C3=""}; +C1uC2aC3nu = { C1 = "" ; C1C2="w"; C2C3 =""; C3=""}; + +C1uC2aC3ti = { C1 = "ht" ; C1C2="w"; C2C3 =""; C3="ti"}; +C1uC2aC3t = { C1 = "ht" ; C1C2="w"; C2C3 =""; C3="t"}; +C1uC2aC3tem= { C1 = "ht" ; C1C2="w"; C2C3 =""; C3="teM"}; +C1uC2aC3ten = { C1 = "ht" ; C1C2="w"; C2C3 =""; C3="teN"}; + +} diff --git a/lib/src/hebrew/PhraseHeb.gf b/lib/src/hebrew/PhraseHeb.gf new file mode 100644 index 000000000..3c4436e05 --- /dev/null +++ b/lib/src/hebrew/PhraseHeb.gf @@ -0,0 +1,14 @@ +concrete PhraseHeb of Phrase = CatHeb ** open Prelude, ResHeb in { + + flags coding=utf8 ; + + lin + + PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; + UttAdv adv = {s = adv.s} ; + UttNP np = {s = (np.s ! Nom).obj } ; + + NoPConj = {s = []} ; + NoVoc = {s = []} ; + +} diff --git a/lib/src/hebrew/ResHeb.gf b/lib/src/hebrew/ResHeb.gf new file mode 100644 index 000000000..8b6d32479 --- /dev/null +++ b/lib/src/hebrew/ResHeb.gf @@ -0,0 +1,172 @@ +--# -path=alltenses + +-- (c) 2011 Dana Dannells +-- Licensed under LGPL +-- Compiled with GF version 3.3 + +resource ResHeb = PatternsHeb ** open Prelude, ParamX in { + + flags coding=utf8 ; + +param + + Number = Sg | Pl | Dl ; + Gender = Masc | Fem ; + Species = Def | Indef ; + Case = Nom | Acc | Dat ; + Agr = Ag Gender Number Person; + Person = Per1 | Per2 | Per3 ; + Voice = Active | Passive | Reflexive ; + VPerNumGen = Vp1Sg | Vp1Pl | Vp2Sg Gender | Vp2Pl Gender | Vp3Sg Gender | Vp3Pl Gender ; + TenseHeb = Perf | Part | Imperf ; + NPForm = Verbal | Nominal ; + Size = One | Two | ThreeTen | Teen | NonTeen | Hundreds | None ; + Mood = Ind | Con ; + + +oper + + Cl = {s : TenseHeb => Anteriority => Polarity => Str}; + NP = {s : Case => {obj : Str} ; a : Agr ; isDef : Bool ; sp : Species } ; + AP = {s : Number => Species => Gender => Str } ; + PN = {s : Case => Str; g : Gender} ; + + ClSlash : Type = { + s : TenseHeb => Polarity => Str ; + c2 : Prep + } ; + + VP : Type = { + s : TenseHeb => Polarity =>VPerNumGen => Str; + obj : Str; + pred : Comp; + isPred : Bool; --indicates if there is a predicate (xabar) + s2 : Str + } ; + + VPSlash = VP ** {c2 : Case} ; + + Prep = {s : Str ; isPre : Bool} ; + + mkClause : Str -> VPerNumGen -> VP -> Cl = + \subj,png,vp -> { + s = \\t,a,p => + let + verb = vp.s ! t ! p ! png ; + obj = vp.obj; + gn = png2gn png ; + pred = vp.pred.s ! gn ! Nom + in + subj ++ obj ++ pred ++ verb ; + } ; + + agr2png : Agr -> VPerNumGen = \a -> + case a of { + Ag g n p => chooseForm g n p + } ; + + png2gn : VPerNumGen -> {g : Gender; n : Number} = \png -> + case png of { + Vp1Sg => {n = Sg ; g =Masc} ; + Vp1Pl => {n = Pl ; g =Masc} ; + Vp2Sg g => {n = Sg ; g = g} ; + Vp2Pl g => {n = Pl ; g = g} ; + Vp3Sg g => {n = Sg ; g = g} ; + Vp3Pl g => {n = Pl ; g = g} + } ; + + pronNP : (s,a,d : Str) -> Gender -> Number -> Person -> NP = + \s,a,d,g,n,p -> { + s = + table { + Nom => {obj = s} ; + Acc => {obj = a} ; + Dat => {obj = []} + } ; + isDef = False ; + sp = Indef ; + a = Ag g n p + } ; + + agrV : Verb -> TenseHeb -> Agr -> Str = \v,t,a -> case a of { + Ag g n p => v.s ! t ! (chooseForm g n p) + } ; + + chooseForm : Gender -> Number -> Person -> VPerNumGen = \g,n,p-> + case of { + <_,Sg,Per1> => Vp1Sg; + <_,Pl,Per1> => Vp1Pl; + <_,Sg,Per2> => Vp2Sg g ; + <_,Pl,Per2> => Vp2Pl g ; + <_,Sg,Per3> => Vp3Sg g ; + <_,Pl,Per3> => Vp3Pl g ; + _ => Vp3Sg g --Masc + } ; + + + Noun : Type = {s : Number => Species => Str ; g : Gender} ; + Adj : Type = {s : Number => Species => Gender => Str} ; + Verb : Type = {s : TenseHeb => VPerNumGen => Str } ; + Verb2 : Type = Verb ** {c : Case} ; + + Pattern : Type = {C1, C1C2, C2C3, C3 : Str}; + Root : Type = {C1,C2,C3 : Str}; -- most verb roots consist of three consonants + Root4 : Type = Root ** {C4 : Str}; -- for verb roots with four consonants + + AAgr = { g : Gender ; n : Number} ; + + Comp : Type = { + s : AAgr => Case => Str + } ; + + replaceLastLet : Str -> Str = \c -> + case c of {"P" => "p" ; "M" => "m" ; "N" => "n" ; "Z." => "Z" ; "K" => "k"; _ => c} ; + + Num, Ord : Type = {s : Case => Str; n : Number} ; + Det : Type = {s : Gender => Str ; n : Number ; sp : Species; isDef : Bool} ; + + defH : Str -> Str = \cn -> + case cn of {_ => "h" + cn} ; + + insertObj : NP -> VP -> VP = \np,vp -> + let + nps = np.s ! Acc + in + { s = vp.s; + obj = nps.obj; + s2 = vp.s2; + pred = vp.pred; + isPred = vp.isPred + } ; + + insertObj2 : Comp -> NP -> VP -> VP = \c,np,vp -> + let + nps = np.s ! Acc + in + { s = vp.s; + obj = nps.obj; + s2 = vp.s2; + pred = vp.pred; + isPred = vp.isPred + } ; + + predV : Verb -> VP = \v -> + { s = \\t,p,png => v.s ! t ! png ; obj = [] ; s2 = []; + pred = { s = \\_,_ => []}; + isPred = False + } ; + + appPattern : Root -> Pattern -> Str = \r,p -> + p.C1 + r.C1 + p.C1C2 + r.C2 + p.C2C3 + r.C3 + p.C3 ; + + -- remove the first letter + appPattern2 : Root -> Pattern -> Str = \r,p -> + p.C1 + p.C1C2 + r.C2 + p.C2C3 + r.C3 + p.C3 ; + + getRoot : Str -> Root = \s -> case s of { + C1@? + C2@? + C3 => {C1 = C1 ; C2 = C2 ; C3 = C3} ; + _ => Predef.error ("cannot get root from" ++ s) + } ; + + +} diff --git a/lib/src/hebrew/SentenceHeb.gf b/lib/src/hebrew/SentenceHeb.gf new file mode 100644 index 000000000..ec00b2b62 --- /dev/null +++ b/lib/src/hebrew/SentenceHeb.gf @@ -0,0 +1,16 @@ +concrete SentenceHeb of Sentence = CatHeb ** open ResHeb, Prelude in { + + flags optimize=all_subs ; coding=utf8 ; + + lin + + PredVP np vp = mkClause (np.s ! Nom).obj (agr2png np.a) vp ; + + UseCl t p cl = { + s = \\_ => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p + } ; + + --UseSlash + -- SlashVP + +} diff --git a/lib/src/hebrew/StructuralHeb.gf b/lib/src/hebrew/StructuralHeb.gf new file mode 100644 index 000000000..62b4b5a0d --- /dev/null +++ b/lib/src/hebrew/StructuralHeb.gf @@ -0,0 +1,53 @@ +concrete StructuralHeb of Structural = CatHeb ** + open MorphoHeb, ResHeb, ParadigmsHeb, Prelude in { + + flags optimize=all ; coding=utf8 ; + + lin + + this_Quant = { + s = table { + Sg => table { Masc => "hzh" ; Fem => "hzAt" } ; + _ => table {_ => "hAlh" } + }; + + sp = Def ; + isDef = True ; + isSNum = True -- TODO isNum + } ; + + + that_Quant = { + s = table { + Sg => table { Masc => "hhwA" ; Fem => "hhyA" } ; -- that + _ => table {_ => "hhN" } -- those + }; + + sp = Def ; + isDef = True ; + isSNum = True -- TODO isNum + + }; + + he_Pron = mkPron "hwA" "Awtw" "bw" Masc Sg Per3 ; + i_Pron = mkPron "Any" "Awty" "ly" Masc Sg Per1 ; --both fem and masc nom, acc, gen + it_Pron = mkPron "zh" "" "" Masc Sg Per1 ; + she_Pron = mkPron "hyA" "Awth" "lh" Fem Sg Per3 ; + they_Pron = mkPron "hM" "hncnw" "lhM" Masc Pl Per1 ; + we_Pron = mkPron "AnHnw" "Awtnw" "lnw" Masc Pl Per1; --both fem and masc + youSg_Pron = mkPron "At" "" "" Fem Sg Per2 ; -- add Masc in extra + youPl_Pron = mkPron "AtN" "" "" Fem Sg Per2 ; + youPol_Pron = mkPron "AtN" "" "" Fem Sg Per2 ; + + above_Prep = mkPrep "mOl" False; + after_Prep = mkPrep "AHry" False; + by8agent_Prep = mkPrep "Ol ydy" False ; + --by8means_Prep = mkPrep "" False ; + there_Adv = mkAdv "sm" ; + there7to_Adv = ss "lsm" ; + there7from_Adv = ss "msm" ; + somewhere_Adv = ss ""; +-- now_Adv = ss "Oksyw"; + + but_PConj = ss "Abl" ; +} diff --git a/lib/src/hebrew/TenseHeb.gf b/lib/src/hebrew/TenseHeb.gf new file mode 100644 index 000000000..ba4878857 --- /dev/null +++ b/lib/src/hebrew/TenseHeb.gf @@ -0,0 +1,17 @@ +concrete TenseHeb of Tense = CatHeb [Tense,Temp], TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** open ResHeb, Prelude in { + +flags coding = utf8 ; + + lin + + TTAnt t a = { + s = t.s ++ a.s ; + t = t.t ; + a = a.a + } ; + + TPres, TCond = {s = []} ** {t = Perf} ; + TFut = {s = []} ** {t = Imperf } ; + TPast = {s = []} ** {t = Part} ; + +} diff --git a/lib/src/hebrew/VerbHeb.gf b/lib/src/hebrew/VerbHeb.gf new file mode 100644 index 000000000..0f1fb5b77 --- /dev/null +++ b/lib/src/hebrew/VerbHeb.gf @@ -0,0 +1,13 @@ +concrete VerbHeb of Verb = CatHeb ** open Prelude, ResHeb in { + + flags optimize=all_subs ; flags coding=utf8 ; + + lin + + UseV = predV ; + + ComplSlash vp np = insertObj np vp ; + + SlashV2a v = predV v ** {c2 = v.c2} ; + +}