From 203ea9c06164ea362f2c1af1fc6ed98ce1680d22 Mon Sep 17 00:00:00 2001 From: David Bamutura Date: Thu, 25 Jun 2020 17:11:47 +0300 Subject: [PATCH] =made changes to UseCl by correcting tense linearization. Added some extras. Peparing to extend GF --- src/rukiga/AdverbCgg.gf | 5 + src/rukiga/ConjunctionCgg.gf | 3 + src/rukiga/LexiconCgg.gf | 273 +++++++++++++++++++++++++++++++++-- src/rukiga/NounCgg.gf | 33 ++--- src/rukiga/ParadigmsCgg.gf | 1 + src/rukiga/PhraseCgg.gf | 1 + src/rukiga/RelativeCgg.gf | 56 +++---- src/rukiga/ResCgg.gf | 168 +++++++++++++++++++-- src/rukiga/SentenceCgg.gf | 71 +++++---- src/rukiga/StructuralCgg.gf | 29 ++-- src/rukiga/VerbCgg.gf | 2 +- 11 files changed, 534 insertions(+), 108 deletions(-) diff --git a/src/rukiga/AdverbCgg.gf b/src/rukiga/AdverbCgg.gf index fc135f5c7..9ab670a2e 100755 --- a/src/rukiga/AdverbCgg.gf +++ b/src/rukiga/AdverbCgg.gf @@ -15,6 +15,11 @@ lin {-Assumed that a PrepNP is always Acc-} PrepNP prep np = {s = prep.s ++ np.s ! Acc; agr = AgrNo}; -- aha meza + + -- Subordinate clauses can function as adverbs. + + --SubjS : Subj -> S -> Adv ; -- when she sleeps + SubjS subjunctive sent = {s=subjunctive.s ++ sent.s; agr=AgrNo}; --PositAdvAdj : A -> Adv ; -- warmly --"Impossible to implement because each is lexically different word." diff --git a/src/rukiga/ConjunctionCgg.gf b/src/rukiga/ConjunctionCgg.gf index f6c38aeea..ad798af1c 100755 --- a/src/rukiga/ConjunctionCgg.gf +++ b/src/rukiga/ConjunctionCgg.gf @@ -20,6 +20,9 @@ lincat [CN] = {s1,s2 : Number => Case => Str}; [DAP] = {s1,s2 : Str ; n : Number}; -} + + + {- --1 Conjunction: Coordination diff --git a/src/rukiga/LexiconCgg.gf b/src/rukiga/LexiconCgg.gf index d623ff1b3..b8439999d 100755 --- a/src/rukiga/LexiconCgg.gf +++ b/src/rukiga/LexiconCgg.gf @@ -17,7 +17,7 @@ lin bread_N = mkN "omugati" MU_MI; car_N = mkN "emootoka" N_N ; cat_N = mkN "enjangu" N_N ; - --chair_N = mkN "entebbe" N_N ; + chair_N = mkN "entebbe" N_N ; child_N = mkN "omwana" MU_BA ; city_N = mkN "ekibúga" KI_BI; --orurêmbo pl endêmbo cloud_N = mkN "ekikyu" KI_BI ; @@ -25,6 +25,7 @@ lin cow_N = mkN "ente" N_N ; dog_N = mkN "embwa" N_N ; --person_N = mkN "omuntu" "abantu" MU_BA ; + eye_N = mkN "eriisho" RI_MA; fire_N = mkN "omuriro" MU_MI ; fish_N = mkN "eky'ényanja" KI_BI ; flower_N = mkN "ekimuri" KI_BI ; @@ -44,9 +45,11 @@ lin horse_N = mkN "embaráàsi" N_N ; house_N = mkN "enju" N_N ; language_N = mkN "orurími" "endími" RU_N ; + meat_N = mkN "enyama" N_N; man_N = mkN "omushaija" MU_BA ; milk_N = mkN "amate" ZERO_MA ; music_N = mkN "music" ZERO_ZERO ; -- I have not found the translation + rule_N = mkN "akiragiro" KI_BI; river_N = mkN "omugyera" MU_MI ; --omurîndi, sea_N = mkN "enyanja" N_N ; ship_N = mkN "ekyombo" KI_BI ; -- eméèri [NC_n_n] @@ -56,7 +59,9 @@ lin water_N = mkN "amáìzi" ZERO_MA ; wine_N = mkN "víìnyo" ZERO_ZERO ; woman_N = mkN "omwishiki" MU_BA ; - + reason_N = mkN "enshoonga" N_N; + sheep_N = mkN "entaama" N_N; + hat_N = mkN "enkofira" N_N; --Proper Nouns john_PN = mkPN "Yohana" (AgP3 Sg MU_BA) False; paris_PN = mkPN "Paris" (AgP3 Sg N_N) True; --Noun class for places??? @@ -68,20 +73,22 @@ lin black_A = mkAdjective "kwirangura" Post False False; blue_A = mkAdjective "buuru" Post True True ; clean_A = mkAdjective "yonjo" Post False False; --: A ; - cold_A = mkAdjective "rikufuka" Post False False; --: A ; + cold_A = mkAdjective "kufuka" Post False False; --: A ; + correct_A = mkAdjective "hikire" Post False False; --: A ; good_A =mkAdjective "rungi" Post False False; --: A ; - heavy_A = mkAdjective "rikuremeera" Post False False; --: A ; --notice ri as a verb is - hot_A = mkAdjective "rikwotsya" Post False False; -- rikutagata -- problematic words like hot we need a new set of clitics + heavy_A = mkAdjective "kuremeera" Post False False; --: A ; --notice ri as a verb is + hot_A = mkAdjective "kwosya" Post False False; -- rikutagata -- problematic words like hot we need a new set of clitics new_A = mkAdjective "sya" Post False False; --: A ; old_A = mkAdjective "kúru" Post False False; --: A ; ready_A = mkAdjective "eteekateekire" Post False False; --: A ; - red_A = mkAdjective "ríkutukura" Post False False; --: A ; + red_A = mkAdjective "kutukura" Post False False; --: A ; small_A = mkAdjective "kye" Post False False; - warm_A = mkAdjective "rikutagata" Post False False;--: A ; + warm_A = mkAdjective "kutagata" Post False False;--: A ; white_A = mkAdjective "rikwera" Post False False;--: A ; yellow_A = mkAdjective "kinekye" Post True True;--: A ; or yero, or kyenju young_A = mkAdjective "to" Post False False;--: A ; green_A =mkAdjective "kijubwe" Post False True; + thin_A = mkAdjective "kye" Post False False; --ditransitive verbs bite_V2 = mkV2 "rum"; @@ -96,13 +103,13 @@ lin fear_V2 = mkV2 "tiin"; find_V2 = mkV2 "bon" ; --: V2 ; -- many words; kureeba, kubóna,kushanga, kumamya,kujumbura kill_V2 = mkV2 "it"; --: V2 ; - love_V2 = mkV2 "kûnd"; --: V2 ; + love_V2 = mkV2 "kûnd" "da" "zire"; --: V2 ; read_V2 = mkV2 "shom";--: V2 ; see_V2 = mkV2 "reeb"; --: V2 ; teach_V2 = mkV2 "shomes" ; --: V2 ; or kwegyesa understand_V2 = mkV2 "étegyerez"; --: V2 ; wait_V2 = mkV2 "tegyerez"; --: V2 ; - + -- ditransitive verbs add_V3 = mkV3 "gáìt"; give_V3 = mkV3 "héére" "za" "ize"; @@ -113,12 +120,13 @@ lin -- Intransitive verbs come_V = mkV "ij"; - go_V = mkV "gyend"; --: V ; -- Many words: kuza, kuraba,kutoora, kugyenda=go away, kushuma=go down + die_V = mkV "f"; + go_V = mkV "gyen" "da" "zire"; --: V ; -- Many words: kuza, kuraba,kutoora, kugyenda=go away, kushuma=go down jump_V = mkV "guruk" ; play_V = mkV "záàn"; --: V ; live_V = mkV "tuur" ; --manyF: kutuura i.e. live somewhere, stay = kuráàra run_V = mkV "íruk"; -- : V ; - sleep_V = mkV "nyama" ; --: V ;--Kugwejegyera, kubyama + sleep_V = mkV "gwejegyer" ; --: V ;--Kugwejegyera, kubyama swim_V = mkV "og"; --: V ; travel_V = mkV "gyen" "da" "zire" ;--: V ; walk_V = mkV "ribá" "ta" "si"; --: V ; or kuribata Runynakore it is different @@ -143,7 +151,7 @@ lin now_Adv = mkAdv "hati" AgrNo; --far_Adv = mkAdv "hare"; - --today_Adv = mkAdv "erizooba" AgrNo; + today_Adv = mkAdv "erizooba" AgrNo; father_N2 = mkN2 (mkN "tata" ZERO_BAA) (lin Prep (mkPrep [] [] True)) ; @@ -151,6 +159,247 @@ lin alas_Interj ={s="ryakareeba"; }; --: Interj ; + +-- New Lexicon + switch8off_V2 = mkV2 "raza" "za" "riize"; + television_N = mkN "TV" N_N; + doctor_N = mkN "omushaho" MU_BA; + clever_A =mkAdjective "amagyezi" Post False True; + laugh_V = mkV "sheka"; + + airplane_N = mkN "endegye" N_N; +{-- + answer_V2S + apartment_N + art_N + ashes_N + ask_V2Q + back_N + bank_N + bark_N + beautiful_A + beg_V2V + belly_N + blow_V + bone_N + boot_N + boss_N + breast_N + breathe_V + broad_A + brother_N2 + brown_A + burn_V + butter_N + camera_N + cap_N + carpet_N + ceiling_N + cheese_N + church_N + coat_N + country_N + cousin_N + day_N + dig_V + dirty_A + doctor_N + door_N + dry_A + dull_A + dust_N + ear_N + earth_N + easy_A2V + egg_N + empty_A + enemy_N + factory_N + fall_V + far_Adv + fat_N + feather_N + fight_V2 + fingernail_N + float_V + floor_N + flow_V + fly_V + fog_N + foot_N + forest_N + forget_V2 + freeze_V + fridge_N + fruit_N + full_A + fun_AV + garden_N + glove_N + gold_N + grass_N + guts_N + hair_N + hand_N + harbour_N + hat_N + hate_V2 + head_N + hear_V2 + heart_N + hill_N + hit_V2 + hold_V2 + horn_N + hunt_V2 + husband_N + ice_N + important_A + industry_N + iron_N + king_N + knee_N + know_V2 + lake_N + lamp_N + leaf_N + learn_V2 + leather_N + leave_V2 + left_Ord + leg_N + lie_V + like_V2 + listen_V2 + liver_N + long_A + lose_V2 + louse_N + love_N + married_A2 + moon_N + mother_N2 + mountain_N + mouth_N + name_N + narrow_A + near_A + neck_N + newspaper_N + night_N + nose_N + number_N + oil_N + open_V2 + paint_V2A + paper_N + peace_N + pen_N + person_N + planet_N + plastic_N + play_V2 + policeman_N + priest_N + probable_AS + pull_V2 + push_V2 + put_V2 + queen_N + question_N + radio_N + rain_N + rain_V0 + religion_N + restaurant_N + right_Ord + road_N + rock_N + roof_N + root_N + rope_N + rotten_A + round_A + rub_V2 + rubber_N + salt_N + sand_N + school_N + science_N + scratch_V2 + seed_N + seek_V2 + sew_V + sharp_A + shirt_N + shoe_N + shop_N + short_A + silver_N + sing_V + sister_N + sit_V + skin_N + sky_N + smell_V + smoke_N + smooth_A + snake_N + snow_N + sock_N + song_N + speak_V2 + spit_V + split_V2 + squeeze_V2 + stab_V2 + stand_V + steel_N + stick_N + stone_N + stop_V + stove_N + straight_A + student_N + stupid_A + suck_V2 + sun_N + swell_V + switch8on_V2 + table_N + tail_N + teacher_N + thick_A + think_V + throw_V2 + tie_V2 + tongue_N + tooth_N + turn_V + ugly_A + uncertain_A + university_N + village_N + vomit_V + war_N + wash_V2 + watch_V2 + wet_A + wide_A + wife_N + win_V2 + wind_N + window_N + wing_N + wipe_V2 + wonder_VQ + wood_N + worm_N + write_V2 + +--} +year_N = mkN "omwaka" "emyaka" MU_MI; +-- End of New Lexicon oper aboutP = mkPrep "about" ; atP = mkPrep "at" ; diff --git a/src/rukiga/NounCgg.gf b/src/rukiga/NounCgg.gf index a17bd3241..9d9eb41fa 100755 --- a/src/rukiga/NounCgg.gf +++ b/src/rukiga/NounCgg.gf @@ -18,20 +18,14 @@ lin --UsePron pron = pron; -- the result of use pron is a NounPhrase --MassNP : CN -> NP ; -- (beer) MassNP cn = {s = \\_ =>cn.s ! Sg ! Complete; agr = AgP3 Sg cn.gender; nounCat = ComNoun}; --: CN -> NP ; -- milk - --DetCN det cn = mkDeterminer det cn; --Should be nemed mkDetCN + --DetCN det cn = mkDeterminer det cn; --Should be named mkDetCN DetCN det cn = mkDetCN det cn; -- the man - {- - case det.pos of{ - PreDeterminer =>{s = det.s ++ cn.s!det.ntype!det.num} ; - PostDeterminer=>{s = cn.s!det.ntype!det.num ++ mkNCParticles!SubjM!AgP3 det.num cn.nc + det.s} - }; --use a function because code is becoming long - -} UseN noun = noun ; --Noun = {s : NounType=>Number => Str ; nc : NClass} ; --AdjCN ap cn = {s=\\ntype, num=>cn.s!ntype!num ++ ap.s!AgP3 num cn.nc; nc=cn.nc}; --AdjCN : AP -> CN -> CN ; -- big house - AdjCN ap cn = + AdjCN ap cn = case of { => { s = \\ num, ns =>ap.s ! AgP3 num cn.gender ++ cn.s ! num ! ns ; @@ -39,7 +33,7 @@ lin }; => case ap.isPrep of { False => { - s = \\ num, ns => cn.s ! num ! ns ++ mkAdjPronIVClitic (AgP3 num cn.gender) + s = \\ num, ns => cn.s ! num ! ns ++ mkAdjClitic ! (AgP3 num cn.gender) ++ ap.s ! AgP3 Sg KI_BI; gender = cn.gender; nounCat = cn.nounCat }; @@ -62,7 +56,8 @@ lin }; -- big house --RelCN : CN -> RS -> CN ; -- house that John bought - RelCN cn rs = {s=\\n,ns => cn.s !n ! ns ++ rs.s! (RF RObj); gender = cn.gender; nounCat = cn.nounCat}; + --RelCN cn rs = {s=\\n,ns => cn.s !n ! ns ++ rs.s! (RF RObj); gender = cn.gender; nounCat = cn.nounCat}; + RelCN cn rs = {s=\\n,ns => cn.s !n ! ns ++ mkRPsNoClitic !RObj ! (AgP3 n cn.gender) ++ rs.s! (RF RObj); gender = cn.gender; nounCat = cn.nounCat}; {- A predeterminer is any word that modifies a noun Phrase. @@ -95,8 +90,8 @@ lin -- quantifier and an optional numeral can be discerned. --DetQuant : Quant -> Num -> Det ; -- these five DetQuant quant num = case quant.isPron of { - True => {s=[]; s2 = quant.s2; ntype = Incomplete; num = num.n; pos=Pre; doesAgree = quant.doesAgree}; - False => {s= quant.s.s ! Nom; s2 =\\_ =>[]; ntype = Complete; num = num.n; pos=Pre; doesAgree = quant.doesAgree} -- + False => {s=[]; s2 = quant.s2; ntype = Incomplete; num = num.n; pos=Pre; doesAgree = quant.doesAgree; numeralS = num.s; numeralExists=num.numeralExists;}; + True => {s= quant.s.s ! Nom; s2 =\\_ =>[]; ntype = Complete; num = num.n; pos=Pre; doesAgree = quant.doesAgree; numeralS = num.s; numeralExists=num.numeralExists;} -- }; --DetQuantOrd : Quant -> Num -> Ord -> Det ; -- these five best @@ -106,13 +101,15 @@ lin ntype = Complete; num = num.n; pos = Pre; - doesAgree = True + doesAgree = True; + numeralS = num.s; + numeralExists = num.numeralExists }; - NumSg = {s=\\_=>[]; n=Sg}; --Num - NumPl = {s=\\_=>[]; n=Pl}; --Num + NumSg = {s=\\_=>[]; n=Sg; numeralExists=False}; --Num + NumPl = {s=\\_=>[]; n=Pl; numeralExists=False}; --Num --NumCard : Card -> Num ; -- one/five [explicit numeral] - NumCard card = {s =\\agr =>card.s ! agr; n=card.n }; + NumCard card = {s =\\agr =>card.s ! agr; n=card.n; numeralExists=True; }; --Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ; IndefArt = {s={s=\\_=>[]; third = \\_,_=>[];agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron=False}; DefArt = {s={s =\\_=>[]; third = \\_,_=>[]; agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron = False}; -- noun with initial vowel @@ -151,7 +148,9 @@ lin ntype = dap.ntype ; num = dap.num ; pos = dap.pos; - doesAgree= True + doesAgree= True; + numeralS = dap.numeralS; + numeralExists=dap.numeralExists; }; --DetDAP : Det -> DAP ; -- this (or that) diff --git a/src/rukiga/ParadigmsCgg.gf b/src/rukiga/ParadigmsCgg.gf index b94ad45c1..3480876cd 100755 --- a/src/rukiga/ParadigmsCgg.gf +++ b/src/rukiga/ParadigmsCgg.gf @@ -37,6 +37,7 @@ oper mkV3 = overload { mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]}; mkV3 : Str -> Str ->Str -> Verb3 = \root ,s1,s2 ->mkV2 root s1 s2 ** {comp2 =[]}; + --mkV3 : Str -> Str ->Str ->Str ->Verb3 =\root, s1, s2, prep }; diff --git a/src/rukiga/PhraseCgg.gf b/src/rukiga/PhraseCgg.gf index 4c8f20f8a..92b6e3fb5 100755 --- a/src/rukiga/PhraseCgg.gf +++ b/src/rukiga/PhraseCgg.gf @@ -62,6 +62,7 @@ lin --UttAP : AP -> Utt ; -- fine --UttInterj : Interj -> Utt ; -- alas UttInterj interj = let agr = AgMUBAP2 Pl in {s= mkObjClitic agr ++ interj.s}; + {- --1 Phrase: Phrases and Utterances diff --git a/src/rukiga/RelativeCgg.gf b/src/rukiga/RelativeCgg.gf index 97cf02de2..b3aa7f3bd 100755 --- a/src/rukiga/RelativeCgg.gf +++ b/src/rukiga/RelativeCgg.gf @@ -61,34 +61,34 @@ lin whichRel = RF RSubj; }; - --RelSlash : RP -> ClSlash -> RCl ; -- whom John loves - RelSlash rp clSlash = - let comp = case clSlash.complType of{ - Ap => clSlash.ap; - Adverbial => clSlash.adv; - AdverbialVerb => clSlash.adV; - _ => [] - }; - isCompApStem = case clSlash.complType of{ - Adverbial => True; - _ => False - }; - in - { - s = clSlash.s; - agr = AgrYes clSlash.subjAgr; - rp = rp.s; - --rObjVariant2 = rp.rObjVariant2; - pres = clSlash.pres; - perf = clSlash.perf; - root = clSlash.root; - --morphs = clSlash.morphs; - isPresBlank = clSlash.isPresBlank; - isPerfBlank = clSlash.isPerfBlank; - compl = comp; - isCompApStem = isCompApStem; - whichRel = RF RObj; - }; + --RelSlash : RP -> ClSlash -> RCl ; -- whom John loves + RelSlash rp clSlash = + let comp = case clSlash.complType of{ + Ap => clSlash.ap; + Adverbial => clSlash.adv; + AdverbialVerb => clSlash.adV; + _ => [] + }; + isCompApStem = case clSlash.complType of{ + Adverbial => True; + _ => False + }; + in + { + s = clSlash.s; + agr = AgrYes clSlash.subjAgr; + rp = rp.s; + --rObjVariant2 = rp.rObjVariant2; + pres = clSlash.pres; + perf = clSlash.perf; + root = clSlash.root; + --morphs = clSlash.morphs; + isPresBlank = clSlash.isPresBlank; + isPerfBlank = clSlash.isPerfBlank; + compl = comp; + isCompApStem = isCompApStem; + whichRel = RF RObj; + }; {- --1 Relative clauses and pronouns diff --git a/src/rukiga/ResCgg.gf b/src/rukiga/ResCgg.gf index 355978ad0..1fb382f89 100755 --- a/src/rukiga/ResCgg.gf +++ b/src/rukiga/ResCgg.gf @@ -64,11 +64,13 @@ param PrepForm = Form1 | Form2; -- omu and omuri, aha, ahari -- for Extra Tenses not implemented -- would be better if I had alliases - TensesExtra = RemotePast | ImmediatePast | RemoteFuture; + Tenses = RemotePast|NearPast | ImmediatePast |ExPres|NearFut |RemoteFut; -- for Extra Aspects not implemented -- would be better if I had alliases - Aspect = Performative | Perfect | Resultative | Retrospective | Habitual | Progressive | Persitive; + Aspect = Performative | Perfect | Resultative | Retrospective | Habitual | Progressive | Persitive; + + {- Complete = Nouns with IV, Incomplete = Nouns without IV: important for use with pre-determiners @@ -525,7 +527,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { --Adjective : Type = {s : Str ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool}; Adjective : Type = {s : Str ; position : Position; isProper : Bool; isPrep: Bool}; mkAdjective: Str -> Position -> Bool -> Bool -> Adjective = \ a , pos, isProper, isPrep -> - { s = a ; position = pos ; isPre = True; isProper = isProper; isPrep = isPrep}; + { s = a ; position = pos ; isPre = False; isProper = isProper; isPrep = isPrep}; {- TO DO: @@ -642,6 +644,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "aga"; + AgP3 Sg ZERO_MA => mkClitic "aga"; AgP3 ( Pl) HA => mkClitic "aha" ; -- of place HA AgP3 ( Pl) MU => mkClitic "omu" ; -- of place MU AgP3 ( Pl) KU => mkClitic "oku" ; -- of place KU @@ -661,6 +664,76 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { _ => mkClitic "XXXThisThese" -- error checking for any case not catered for }; + + -- TThis is for demonstrative pronouns which can also be use as Quantifiers + -- These are self-standing + -- How can it be done without code repeation? + mkThisNoClitic = table{ + AgMUBAP1 Sg => "ogu"; + AgMUBAP1 Pl => "aba" ; + AgMUBAP2 Sg => "ogu"; --probably an error check your grammar book + AgMUBAP2 Pl => "aba" ; + AgP3 Sg MU_BA => "ogu"; + AgP3 Pl MU_BA => "aba" ; + AgP3 Pl ZERO_BU => "obu" ; + AgP3 Sg BU_MA => "obu" ; + AgP3 Pl (KA_BU | RU_BU) => "obu" ; + AgP3 Pl (KI_BI | ZERO_BI) => "ebi" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "aga"; + AgP3 Sg ZERO_MA => "aga"; + AgP3 ( Pl) HA => "aha" ; -- of place HA + AgP3 ( Pl) MU => "omu" ; -- of place MU + AgP3 ( Pl) KU => "oku" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) => "eri" ; + AgP3 Sg (KA_ZERO | KA_BU) => "aka" ; + AgP3 Sg KI_BI => "eki" ; + AgP3 Sg (KU_ZERO | KU_MA) => "oku" ; + AgP3 Sg (MU_MI | MU_ZERO) => "ogu" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "oru" ; + AgP3 Pl (ZERO_TU | KA_TU) => "otu" ; + AgP3 Sg (ZERO_ZERO | N_N) => "egi" ; + AgP3 Pl ZERO_MI => "egi" ; + AgP3 Pl MU_MI => "egi"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "ezi" ; + AgP3 Sg GU_GA => "ogu" ; + AgP3 Pl GU_GA => "aga" ; + _ => "XXXThisThese" -- error checking for any case not catered for + + }; + + mkAdjClitic = table{ + AgMUBAP1 Sg => "ogu"; + AgMUBAP1 Pl => "aba" ; + AgMUBAP2 Sg => "ogu"; --probably an error check your grammar book + AgMUBAP2 Pl => "aba" ; + AgP3 Sg MU_BA => "ogu"; + AgP3 Pl MU_BA => "aba" ; + AgP3 Pl ZERO_BU => "obu" ; + AgP3 Sg BU_MA => "obu" ; + AgP3 Pl (KA_BU | RU_BU) => "obu" ; + AgP3 Pl (KI_BI | ZERO_BI) => "ebi" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "aga"; + AgP3 Sg ZERO_MA => "aga"; + AgP3 ( Pl) HA => "aha" ; -- of place HA + AgP3 ( Pl) MU => "omu" ; -- of place MU + AgP3 ( Pl) KU => "oku" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) => "eri" ; + AgP3 Sg (KA_ZERO | KA_BU) => "aka" ; + AgP3 Sg KI_BI => "eki" ; + AgP3 Sg (KU_ZERO | KU_MA) => "oku" ; + AgP3 Sg (MU_MI | MU_ZERO) => "ogu" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "oru" ; + AgP3 Pl (ZERO_TU | KA_TU) => "otu" ; + AgP3 Sg (ZERO_ZERO | N_N) => "en" ; + AgP3 Pl ZERO_MI => "egi" ; + AgP3 Pl MU_MI => "egi"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "ezi" ; + AgP3 Sg GU_GA => "ogu" ; + AgP3 Pl GU_GA => "aga" ; + _ => "XXXThisThese" -- error checking for any case not catered for + + }; + {- -- TThis is for demonstrative pronouns which can also be use as Quantifiers -- How can it be done without code repeation? @@ -744,6 +817,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { --AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; --AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; --AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "aga"; + AgP3 Sg ZERO_MA => mkClitic "agwo"; AgP3 (Sg ) HA => mkClitic "aho" ; -- of place HA AgP3 (Sg ) MU => mkClitic "omwo" ; -- of place MU AgP3 (Sg ) KU => mkClitic "okwo" ; -- of place KU @@ -960,6 +1034,71 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { } }; + mkRPsNoClitic : RCase => Agreement =>Str = table{ + RSubj => table { + AgMUBAP1 Sg => "o"; + AgMUBAP1 Pl => "aba" ; + AgMUBAP2 Sg => "o"; + AgMUBAP2 Pl => "aba" ; + AgP3 Sg MU_BA => "o"; + AgP3 Pl MU_BA => "aba" ; + AgP3 Pl ZERO_BU => "obu" ; + AgP3 Sg BU_MA => "obu" ; + AgP3 Pl (KA_BU | RU_BU) => "obu" ; + AgP3 Pl (KI_BI | ZERO_BI) => "ebi" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "aga"; + AgP3 (Sg ) HA => "aha" ; -- of place HA + AgP3 (Sg ) MU => "aha" ; -- of place MU + AgP3 (Sg ) KU => "e" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) => "eri" ; + AgP3 Sg (KA_ZERO | KA_BU) => "aka" ; + AgP3 Sg KI_BI => "eki" ; + AgP3 Sg (KU_ZERO | KU_MA) => "oku" ; + AgP3 Sg (MU_MI | MU_ZERO) => "ogu" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "oru" ; + AgP3 Pl (ZERO_TU | KA_TU) => "otu" ; + AgP3 Sg (ZERO_ZERO | N_N) => "e" ; + AgP3 Pl ZERO_MI => "e" ; + AgP3 Pl MU_MI => "e"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "ezi" ; + AgP3 Sg GU_GA => "ogu" ; + AgP3 Pl GU_GA => "aga" ; + _ => "XXXThat" -- error checking for any case not catered for + + }; + _ => table { + AgMUBAP1 Sg => "ou"; + AgMUBAP1 Pl => "abu" ; --note: abu or abi is used. GF does not allow free variation. However, abu is more natural + AgMUBAP2 Sg => "ou"; --probably an error check your grammar book + AgMUBAP2 Pl => "abu" ; + AgP3 Sg MU_BA => "o"; + AgP3 Pl MU_BA => "abu" ; + AgP3 Pl ZERO_BU => "obu" ; + AgP3 Sg BU_MA => "obu" ; + AgP3 Pl (KA_BU | RU_BU) => "obu" ; + AgP3 Pl (KI_BI | ZERO_BI) => "ebi" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "agu"; + AgP3 (Sg ) HA => "ahu" ; -- of place HA + AgP3 (Sg ) MU => "ahu" ; -- of place MU + AgP3 (Sg ) KU => "ei" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) => "eri" ; + AgP3 Sg (KA_ZERO | KA_BU) => "aku" ; + AgP3 Sg KI_BI => "eki" ; + AgP3 Sg (KU_ZERO | KU_MA) => "oku" ; + AgP3 Sg (MU_MI | MU_ZERO) => "ogu" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "oru" ; + AgP3 Pl (ZERO_TU | KA_TU) => "otu" ; + AgP3 Sg (ZERO_ZERO | N_N) => "ei" ; + AgP3 Pl ZERO_MI => "ei" ; + AgP3 Pl MU_MI => "ei"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "ezi" ; + AgP3 Sg GU_GA => "ogu" ; + AgP3 Pl GU_GA => "agu" ; + _ => mkClitic "XXXThat" -- error checking for any case not catered for + + } + }; + mkIPPref : Agreement =>Str = table{ AgMUBAP1 Sg => mkClitic "o"; AgMUBAP1 Pl => mkClitic "ba" ; @@ -1034,7 +1173,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { 4. Cardinal numbers 6. Ordinal numbers -} - Determiner : Type = {s : Str ; s2: Agreement=>Str; ntype : NounState ; num : Number ; pos : Position; doesAgree: Bool}; + Determiner : Type = {s : Str ; s2: Agreement=>Str; ntype : NounState ; num : Number ; pos : Position; doesAgree: Bool; numeralS:Agreement=>Str; numeralExists : Bool}; mkDet : Str -> NounState -> Number -> Position -> Determiner = \ det, ns, num,pos -> { @@ -1043,7 +1182,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { ntype = ns; num = num; pos = pos; - doesAgree = False + doesAgree = False; + numeralS = \\_ => []; -- A true determiner is not a quantifier + numeralExists = False; }; -- Pronouns must have agreement because they are used @@ -1096,13 +1237,16 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { mkDetCN : Determiner -> Noun -> NounPhrase = \ det, cn -> let subjClitic = mkSubjClitic (AgP3 det.num cn.gender) in - case of { - => {s = \\_=> subjClitic ++ cn.s!det.num! det.ntype ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; - => {s = \\_=>cn.s!det.num! det.ntype ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; - => { s =\\_ => det.s ++ cn.s !n ! det.ntype; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat} --; + case of { + => {s = \\_=> subjClitic ++ cn.s!det.num! det.ntype ++ subjClitic ++ det.s2 !AgP3 det.num cn.gender; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; + => {s = \\_=>cn.s!det.num! det.ntype ++ subjClitic ++ det.s2 ! AgP3 det.num cn.gender; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; + => case det.numeralExists of { + False => { s =\\_ => det.s2 !(AgP3 det.num cn.gender) ++ cn.s !n ! Complete; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; + True => { s =\\_ => cn.s !n ! Complete ++ det.numeralS ! (AgP3 n cn.gender); agr = AgP3 det.num cn.gender; nounCat = cn.nounCat} + } -- => {s = \\_=> cn.s!det.ntype!det.num; agr = AgP3 det.num cn.gender } - }; - + }; + @@ -1351,7 +1495,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of { glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a; --Number determining element - Numer : Type = { s: Agreement => Str ; n : Number}; + Numer : Type = { s: Agreement => Str ; n : Number; numeralExists:Bool}; --VPSlash : Type = VerbPhrase ** { c : Str }; VPSlash : Type = { diff --git a/src/rukiga/SentenceCgg.gf b/src/rukiga/SentenceCgg.gf index 8b61cb4af..9c4e35c16 100755 --- a/src/rukiga/SentenceCgg.gf +++ b/src/rukiga/SentenceCgg.gf @@ -26,7 +26,7 @@ lin case of { => case cl.isPresBlank of { True => {s = subj ++ clitic ++ root ++ compl}; - False => {s = subj ++ clitic ++ root ++ Predef.BIND ++ compl} + False => {s = subj ++ clitic ++ root ++ Predef.BIND ++ presRestOfVerb ++ compl} }; {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-} => case cl.isPresBlank of { @@ -46,32 +46,33 @@ lin => case cl.isPerfBlank of { - True => {s = subj ++ clitic ++ "ka" ++ Predef.BIND ++ root ++ compl}; - False => {s = subj ++ clitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl} + _ => {s = subj ++ clitic ++ "ka" ++ Predef.BIND ++ root ++ Predef.BIND ++ presRestOfVerb ++ compl}--; + --False => {s = subj ++ clitic ++ "ka" ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-} => case cl.isPerfBlank of { - True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ root ++ compl}; - False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ - root ++ pastRestOfVerb ++ compl} + True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ Predef.BIND ++ "ra" ++ + Predef.BIND ++ root ++ Predef.BIND ++ "ire" ++ compl}; + False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "ra" ++ Predef.BIND ++ + root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; => case cl.isPerfBlank of { True => {s = subj ++ clitic ++ "kaba" ++Predef.BIND ++ clitic ++ - root ++ compl}; - False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "a" ++ Predef.BIND ++ + root ++ Predef.BIND ++ "ire"++ compl}; + False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; =>case cl.isPerfBlank of { True => {s = subj ++ clitic ++ "ka" ++Predef.BIND ++ clitic ++ - root ++ compl}; - False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "taa" ++ Predef.BIND ++ + root ++ Predef.BIND ++ "ire"++ compl}; + False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "ta" ++ Predef.BIND ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; => case cl.isPresBlank of { True => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za ku" ++ Predef.BIND ++ --choice of za over ija - root ++ compl}; + root ++ "a" ++ compl}; False => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za ku" ++ Predef.BIND ++ --choice of za over ija root ++ Predef.BIND ++ presRestOfVerb ++ compl} }; @@ -79,23 +80,23 @@ lin {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-} => case cl.isPresBlank of { - True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "kuza ku" ++ Predef.BIND ++ + True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "raaza ku" ++ Predef.BIND ++ root ++ compl}; - False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "kuza ku" ++ Predef.BIND ++ + False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "raaza ku" ++ Predef.BIND ++ root ++ BIND ++ presRestOfVerb ++ compl} }; => case cl.isPerfBlank of { - True => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za kuba" ++ Predef.BIND ++ clitic ++ --choice of za over ija + True => {s = subj ++ Predef.BIND ++clitic ++ "raaba" ++ clitic ++ --choice of za over ija root ++ Predef.BIND ++ "ire" ++ compl}; - False => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za kuba" ++ Predef.BIND ++ clitic ++ --choice of za over ija + False => {s = subj ++ Predef.BIND ++clitic ++ "raaba" ++ clitic ++ --choice of za over ija root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; => case cl.isPerfBlank of { - True => {s = subj ++ "ni" ++ Predef.BIND ++ clitic ++ "za kuba" ++ clitic ++ Predef.BIND ++ + True => {s = subj ++ Predef.BIND ++ clitic ++ "raaba " ++ clitic ++ "ta"++ Predef.BIND ++ root ++ "ire" ++ compl}; - False => {s = subj ++ "ni" ++ Predef.BIND ++ clitic ++ "za kuba" ++ clitic ++ "taka" ++ Predef.BIND ++ - root ++ pastRestOfVerb ++ compl} + False => {s = subj ++ Predef.BIND ++ clitic ++ "raaba " ++ clitic ++ "ta" ++ Predef.BIND ++ + root ++ Predef.BIND ++ pastRestOfVerb ++ compl} }; => case cl.isPresBlank of { True => {s = subj ++ clitic ++ "kaa" ++Predef.BIND ++ root ++ compl}; @@ -142,8 +143,8 @@ lin _ => mkRPs!RSubj! AgP3 Sg MU_BA }; robjClitic = case rcl.agr of { - AgrYes a => mkRPs!RObj! a; - _ => mkRPs!RObj! AgP3 Sg MU_BA + AgrYes a => mkRPsNoClitic!RObj! a; + _ => mkRPsNoClitic!RObj! AgP3 Sg MU_BA }; presSimul = vMorphs ! VFPres; --this is not delivering the string presAnt = vMorphs ! VFPastPart; --this is not delivering the string @@ -186,7 +187,7 @@ lin => { s = table { RF RSubj => subj ++ rsubjClitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl; - RF RObj => subj ++ robjClitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl; + RF RObj => robjClitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl; Such_That => "kugira ngu" ++ subjClitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl } }; @@ -279,8 +280,9 @@ lin }; - PredVP np vp = case vp.isCompApStem of{ - False => { + + PredVP np vp = case of { + => { s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk subjAgr = np.agr; pres = vp.pres; @@ -297,9 +299,10 @@ lin pastPart = mkVerbPastPart vp.root; -- subject -} --root = vp.root ; - compl = vp.comp + compl = vp.adV }; - True => { + + <_, _> => { s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk subjAgr = np.agr; pres = vp.pres; @@ -319,8 +322,6 @@ lin compl = mkSubjClitic np.agr ++ vp.comp --mkSubjClitic np.agr ++ Predef.BIND ++ vp.comp } };--: NP -> VP -> Cl ; -- John walks / John does not walk - - {- Note: It seems mkSubjClitic comes with a Predef.BIND already @@ -382,9 +383,25 @@ lin --AdvSlash : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today --SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks --SlashVS : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves + --2 Embedded sentences +-- Sentences, questions, and infinitival phrases can be used as +-- subjects and (adverbial) complements. + --EmbedS : S -> SC ; -- that she goes + --EmbedQS : QS -> SC ; -- who goes + --EmbedVP : VP -> SC ; -- to go + EmbedVP vp = case vp.isPresBlank of { + TRUE => {s= "oku" ++ Predef.BIND ++ vp.s ++ BIND ++ "a"}; + _ => {s= "oku" ++ Predef.BIND ++ vp.s ++ BIND ++ vp.pres} + }; +-- An adverb can be added to the beginning of a sentence, either with comma ("externally") +-- or without: + + --AdvS : Adv -> S -> S ; -- then I will go home + --ExtAdvS : Adv -> S -> S ; -- next week, I will go home + ExtAdvS adv s = {s=adv.s ++ "," ++ s.s}; {- diff --git a/src/rukiga/StructuralCgg.gf b/src/rukiga/StructuralCgg.gf index 64ec1527b..1d0f0d804 100755 --- a/src/rukiga/StructuralCgg.gf +++ b/src/rukiga/StructuralCgg.gf @@ -15,19 +15,20 @@ concrete StructuralCgg of Structural = CatCgg ** lin --Determiner : Type = {s : Str ; s2: Agreement=>Str; ntype : NounState ; num : Number ; pos : Position; doesAgree: Bool }; - a_Det = {s =[] ; s2 = \\_ => []; ntype = Complete; num = Sg; pos = Pre; doesAgree = False}; --: Det ; indefinite singular ---s - aPl_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Pl; pos = Pre; doesAgree = False}; -- : Det ;indefinite plural ---s - the_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Sg; pos = Pre; doesAgree = False}; --: Det ; -- definite singular ---s thePl_Det = {s =[]; ntype = Complete; num = Pl; pos = PreDeterminer}; --: Det ;definite plural ---s + a_Det = {s =[] ; s2 = \\_ => []; ntype = Complete; num = Sg; pos = Pre; doesAgree = False; numeralS=\\_=>[]; numeralExists = False}; --: Det ; indefinite singular ---s + aPl_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Pl; pos = Pre; doesAgree = False; numeralS=\\_=>[]; numeralExists = False}; -- : Det ;indefinite plural ---s + the_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Sg; pos = Pre; doesAgree = False; numeralS=\\_=>[]; numeralExists = False}; --: Det ; -- definite singular ---s thePl_Det = {s =[]; ntype = Complete; num = Pl; pos = PreDeterminer}; --: Det ;definite plural ---s - every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=Pre; doesAgree = False} ; - few_Det = {s="kye"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=Post; doesAgree = False} ; - many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=Post; doesAgree = False} ; + every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=Pre; doesAgree = False; numeralS=\\_=>[]; numeralExists = False} ; + few_Det = {s="kye"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=Post; doesAgree = False; numeralS=\\_=>[]; numeralExists = False} ; + many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=Post; doesAgree = False; numeralS=\\_=>[]; numeralExists = False} ; i_Pron = {s = table{Gen => glueGen (AgMUBAP1 Sg); _=> mkSStand (AgMUBAP1 Sg)}; third = \\_,_=>[]; agr = AgrYes (AgMUBAP1 Sg)};--mkPron "nyowe" "nyowe" (AgMUBAP1 Sg); youSg_Pron = {s = table{Gen => glueGen (AgMUBAP2 Sg); _=>mkSStand (AgMUBAP2 Sg)}; third = \\_,_=>[]; agr = AgrYes(AgMUBAP2 Sg)};--mkPron "iwe" "we" (AgMUBAP2 Sg); he_Pron, she_Pron = {s = table{Gen => glueGen (AgP3 Sg MU_BA); _=>mkSStand (AgP3 Sg MU_BA)}; third = \\_,_=>[]; agr = AgrYes(AgP3 Sg MU_BA)};--mkPron "uwe" "uwe" (AgP3 Sg MU_BA); we_Pron = {s = table{Gen => glueGen (AgMUBAP1 Pl); _=>mkSStand (AgMUBAP1 Pl)}; third = \\_,_=>[]; agr = AgrYes (AgMUBAP1 Pl)}; --mkPron "itwe" "itwe" (AgMUBAP1 Pl); youPl_Pron = {s = table{Gen => glueGen (AgMUBAP2 Pl); _=>mkSStand (AgMUBAP2 Pl)}; third = \\_,_=>[]; agr =AgrYes (AgMUBAP2 Pl)};--mkPron "imwe" "imwe" (AgMUBAP2 Pl); they_Pron = {s = table{Gen => glueGen AgP3 Pl MU_BA; _=>mkSStand (AgP3 Pl MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "bo" "bo" (AgP3 Pl MU_BA); + they_Pron = {s = table{Gen => glueGen (AgP3 Pl MU_BA); _=>mkSStand (AgP3 Pl MU_BA)}; third = \\_,_=>[]; agr =AgrYes (AgP3 Pl MU_BA)};--mkPron "bo" "bo" (AgP3 Pl MU_BA); -- default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and it_Pron = { s = \\_=>[]; @@ -97,7 +98,7 @@ lin n = Sg }; - have_V2 ={s= "ine"; pres=[]; perf =[]; isPresBlank = False; + have_V2 ={s= "in"; pres="e"; perf ="e"; isPresBlank = False; isPerfBlank = False; morphs = mkVerbMorphs; comp = []; isRegular=False}; --: V2 ; {- @@ -145,7 +146,7 @@ lin that_Quant = {s={s = \\_=>[]; third =\\_,_=>[]; agr = AgrNo}; s2 = mkThat; doesAgree = True; isPron = False}; --: Quant ; this_Quant = {s={s = \\_=>[]; third =\\_,_=>[]; agr = AgrNo}; s2 = mkThis; doesAgree = True; isPron = False}; --: Quant ; - no_Quant = {s ={s=\\_=>"tihariho";third =\\_,_=>[]; agr=AgrNo}; s2 =\\_=> []; doesAgree = False; isPron = False};--: Quant ; + no_Quant = {s ={s=\\_=>"tihariho";third =\\_,_=>[]; agr=AgrNo}; s2 =\\_=> "tihariho"; doesAgree = False; isPron = False};--: Quant ; {-End of Quantifiers-} @@ -165,7 +166,7 @@ lin whatPl_IP = { s= "ki"; n = IPl; isVerbSuffix = True; requiresIPPrefix = False; aux=[]; endOfSentence = True} ; -- what (plural) whatSg_IP = { s= "ki"; n = ISg; isVerbSuffix = True; requiresIPPrefix = False; aux=[]; endOfSentence = True}; --: IP ; -- what (singular) whoPl_IP = { s= "ha"; n = IPl; isVerbSuffix = True; requiresIPPrefix = False; aux="ni"; endOfSentence = True} ;--: IP ; -- who (plural) - whoSg_IP = { s= "ha"; n = ISg; isVerbSuffix = True; requiresIPPrefix = False; aux=[]; endOfSentence = True}; --: IP ; -- who (singular) + whoSg_IP = { s= "ha"; n = ISg; isVerbSuffix = True; requiresIPPrefix = False; aux="ni"; endOfSentence = True}; --: IP ; -- who (singular) --You may need to use booleans to indicate that you need these tables rather than carrying them. how_IAdv = {s ="ta"; requiresSubjPrefix = True; endOfSentence =True}; --: IAdv ; --how8much_IAdv = {s ="kwiga"; s2requireSubjPrefix = True};--: IAdv ; @@ -192,7 +193,9 @@ lin ntype = Complete; num = Sg; pos = Pre; - doesAgree = True + doesAgree = True; + numeralS=\\_=>[]; + numeralExists = False }; somePl_Det = { @@ -201,7 +204,9 @@ lin ntype = Complete; num = Pl; pos = Pre; - doesAgree = True + doesAgree = True; + numeralS=\\_=>[]; + numeralExists = False };--: Det ; want_VV = {s = "yend"; pres="da"; perf = "zire"; isPresBlank = False; @@ -219,6 +224,8 @@ lin --somewhere_Adv : Adv ; that_Subj = ss "ngu" ; + when_Subj = ss "obu"; + because_Subj = ss "ahabwokuba"; --Adjective modifying Adverbs almost_AdA = {s="haihi"; position=Pre}; --: AdA ; diff --git a/src/rukiga/VerbCgg.gf b/src/rukiga/VerbCgg.gf index f2832cfcc..44e778ff9 100755 --- a/src/rukiga/VerbCgg.gf +++ b/src/rukiga/VerbCgg.gf @@ -194,7 +194,7 @@ lin isCompApStem = False; agr = AgrNo; isRegular = vp.isRegular; - adv = []; + adv = adv.s; containsAdv =True; adV =[]; containsAdV = False