1
0
forked from GitHub/gf-rgl

=made changes to UseCl by correcting tense linearization. Added some extras. Peparing to extend GF

This commit is contained in:
David Bamutura
2020-06-25 17:11:47 +03:00
parent a21df23da5
commit 203ea9c061
11 changed files with 534 additions and 108 deletions

View File

@@ -16,6 +16,11 @@ lin
{-Assumed that a PrepNP is always Acc-} {-Assumed that a PrepNP is always Acc-}
PrepNP prep np = {s = prep.s ++ np.s ! Acc; agr = AgrNo}; -- aha meza 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 --PositAdvAdj : A -> Adv ; -- warmly
--"Impossible to implement because each is lexically different word." --"Impossible to implement because each is lexically different word."
{- {-

View File

@@ -20,6 +20,9 @@ lincat
[CN] = {s1,s2 : Number => Case => Str}; [CN] = {s1,s2 : Number => Case => Str};
[DAP] = {s1,s2 : Str ; n : Number}; [DAP] = {s1,s2 : Str ; n : Number};
-} -}
{- {-
--1 Conjunction: Coordination --1 Conjunction: Coordination

View File

@@ -17,7 +17,7 @@ lin
bread_N = mkN "omugati" MU_MI; bread_N = mkN "omugati" MU_MI;
car_N = mkN "emootoka" N_N ; car_N = mkN "emootoka" N_N ;
cat_N = mkN "enjangu" 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 ; child_N = mkN "omwana" MU_BA ;
city_N = mkN "ekibúga" KI_BI; --orurêmbo pl endêmbo city_N = mkN "ekibúga" KI_BI; --orurêmbo pl endêmbo
cloud_N = mkN "ekikyu" KI_BI ; cloud_N = mkN "ekikyu" KI_BI ;
@@ -25,6 +25,7 @@ lin
cow_N = mkN "ente" N_N ; cow_N = mkN "ente" N_N ;
dog_N = mkN "embwa" N_N ; dog_N = mkN "embwa" N_N ;
--person_N = mkN "omuntu" "abantu" MU_BA ; --person_N = mkN "omuntu" "abantu" MU_BA ;
eye_N = mkN "eriisho" RI_MA;
fire_N = mkN "omuriro" MU_MI ; fire_N = mkN "omuriro" MU_MI ;
fish_N = mkN "eky'ényanja" KI_BI ; fish_N = mkN "eky'ényanja" KI_BI ;
flower_N = mkN "ekimuri" KI_BI ; flower_N = mkN "ekimuri" KI_BI ;
@@ -44,9 +45,11 @@ lin
horse_N = mkN "embaráàsi" N_N ; horse_N = mkN "embaráàsi" N_N ;
house_N = mkN "enju" N_N ; house_N = mkN "enju" N_N ;
language_N = mkN "orurími" "endími" RU_N ; language_N = mkN "orurími" "endími" RU_N ;
meat_N = mkN "enyama" N_N;
man_N = mkN "omushaija" MU_BA ; man_N = mkN "omushaija" MU_BA ;
milk_N = mkN "amate" ZERO_MA ; milk_N = mkN "amate" ZERO_MA ;
music_N = mkN "music" ZERO_ZERO ; -- I have not found the translation 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, river_N = mkN "omugyera" MU_MI ; --omurîndi,
sea_N = mkN "enyanja" N_N ; sea_N = mkN "enyanja" N_N ;
ship_N = mkN "ekyombo" KI_BI ; -- eméèri [NC_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 ; water_N = mkN "amáìzi" ZERO_MA ;
wine_N = mkN "víìnyo" ZERO_ZERO ; wine_N = mkN "víìnyo" ZERO_ZERO ;
woman_N = mkN "omwishiki" MU_BA ; 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 --Proper Nouns
john_PN = mkPN "Yohana" (AgP3 Sg MU_BA) False; john_PN = mkPN "Yohana" (AgP3 Sg MU_BA) False;
paris_PN = mkPN "Paris" (AgP3 Sg N_N) True; --Noun class for places??? 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; black_A = mkAdjective "kwirangura" Post False False;
blue_A = mkAdjective "buuru" Post True True ; blue_A = mkAdjective "buuru" Post True True ;
clean_A = mkAdjective "yonjo" Post False False; --: A ; 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 ; good_A =mkAdjective "rungi" Post False False; --: A ;
heavy_A = mkAdjective "rikuremeera" Post False False; --: A ; --notice ri as a verb is heavy_A = mkAdjective "kuremeera" 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 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 ; new_A = mkAdjective "sya" Post False False; --: A ;
old_A = mkAdjective "kúru" Post False False; --: A ; old_A = mkAdjective "kúru" Post False False; --: A ;
ready_A = mkAdjective "eteekateekire" Post False False; --: A ; ready_A = mkAdjective "eteekateekire" Post False False; --: A ;
red_A = mkAdjective "kutukura" Post False False; --: A ; red_A = mkAdjective "kutukura" Post False False; --: A ;
small_A = mkAdjective "kye" Post False False; 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 ; white_A = mkAdjective "rikwera" Post False False;--: A ;
yellow_A = mkAdjective "kinekye" Post True True;--: A ; or yero, or kyenju yellow_A = mkAdjective "kinekye" Post True True;--: A ; or yero, or kyenju
young_A = mkAdjective "to" Post False False;--: A ; young_A = mkAdjective "to" Post False False;--: A ;
green_A =mkAdjective "kijubwe" Post False True; green_A =mkAdjective "kijubwe" Post False True;
thin_A = mkAdjective "kye" Post False False;
--ditransitive verbs --ditransitive verbs
bite_V2 = mkV2 "rum"; bite_V2 = mkV2 "rum";
@@ -96,7 +103,7 @@ lin
fear_V2 = mkV2 "tiin"; fear_V2 = mkV2 "tiin";
find_V2 = mkV2 "bon" ; --: V2 ; -- many words; kureeba, kubóna,kushanga, kumamya,kujumbura find_V2 = mkV2 "bon" ; --: V2 ; -- many words; kureeba, kubóna,kushanga, kumamya,kujumbura
kill_V2 = mkV2 "it"; --: V2 ; kill_V2 = mkV2 "it"; --: V2 ;
love_V2 = mkV2 "kûnd"; --: V2 ; love_V2 = mkV2 "kûnd" "da" "zire"; --: V2 ;
read_V2 = mkV2 "shom";--: V2 ; read_V2 = mkV2 "shom";--: V2 ;
see_V2 = mkV2 "reeb"; --: V2 ; see_V2 = mkV2 "reeb"; --: V2 ;
teach_V2 = mkV2 "shomes" ; --: V2 ; or kwegyesa teach_V2 = mkV2 "shomes" ; --: V2 ; or kwegyesa
@@ -113,12 +120,13 @@ lin
-- Intransitive verbs -- Intransitive verbs
come_V = mkV "ij"; 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" ; jump_V = mkV "guruk" ;
play_V = mkV "záàn"; --: V ; play_V = mkV "záàn"; --: V ;
live_V = mkV "tuur" ; --manyF: kutuura i.e. live somewhere, stay = kuráàra live_V = mkV "tuur" ; --manyF: kutuura i.e. live somewhere, stay = kuráàra
run_V = mkV "íruk"; -- : V ; run_V = mkV "íruk"; -- : V ;
sleep_V = mkV "nyama" ; --: V ;--Kugwejegyera, kubyama sleep_V = mkV "gwejegyer" ; --: V ;--Kugwejegyera, kubyama
swim_V = mkV "og"; --: V ; swim_V = mkV "og"; --: V ;
travel_V = mkV "gyen" "da" "zire" ;--: V ; travel_V = mkV "gyen" "da" "zire" ;--: V ;
walk_V = mkV "ribá" "ta" "si"; --: V ; or kuribata Runynakore it is different walk_V = mkV "ribá" "ta" "si"; --: V ; or kuribata Runynakore it is different
@@ -143,7 +151,7 @@ lin
now_Adv = mkAdv "hati" AgrNo; now_Adv = mkAdv "hati" AgrNo;
--far_Adv = mkAdv "hare"; --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)) ; father_N2 = mkN2 (mkN "tata" ZERO_BAA) (lin Prep (mkPrep [] [] True)) ;
@@ -151,6 +159,247 @@ lin
alas_Interj ={s="ryakareeba"; }; --: Interj ; 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 oper
aboutP = mkPrep "about" ; aboutP = mkPrep "about" ;
atP = mkPrep "at" ; atP = mkPrep "at" ;

View File

@@ -18,14 +18,8 @@ lin
--UsePron pron = pron; -- the result of use pron is a NounPhrase --UsePron pron = pron; -- the result of use pron is a NounPhrase
--MassNP : CN -> NP ; -- (beer) --MassNP : CN -> NP ; -- (beer)
MassNP cn = {s = \\_ =>cn.s ! Sg ! Complete; agr = AgP3 Sg cn.gender; nounCat = ComNoun}; --: CN -> NP ; -- milk 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 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 ; UseN noun = noun ;
--Noun = {s : NounType=>Number => Str ; nc : NClass} ; --Noun = {s : NounType=>Number => Str ; nc : NClass} ;
@@ -39,7 +33,7 @@ lin
}; };
<Post, False> => case ap.isPrep of { <Post, False> => case ap.isPrep of {
False => { 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; ++ ap.s ! AgP3 Sg KI_BI;
gender = cn.gender; nounCat = cn.nounCat gender = cn.gender; nounCat = cn.nounCat
}; };
@@ -62,7 +56,8 @@ lin
}; -- big house }; -- big house
--RelCN : CN -> RS -> CN ; -- house that John bought --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. A predeterminer is any word that modifies a noun Phrase.
@@ -95,8 +90,8 @@ lin
-- quantifier and an optional numeral can be discerned. -- quantifier and an optional numeral can be discerned.
--DetQuant : Quant -> Num -> Det ; -- these five --DetQuant : Quant -> Num -> Det ; -- these five
DetQuant quant num = case quant.isPron of { DetQuant quant num = case quant.isPron of {
True => {s=[]; s2 = quant.s2; ntype = Incomplete; 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;};
False => {s= quant.s.s ! Nom; s2 =\\_ =>[]; ntype = Complete; num = num.n; pos=Pre; doesAgree = quant.doesAgree} -- 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 --DetQuantOrd : Quant -> Num -> Ord -> Det ; -- these five best
@@ -106,13 +101,15 @@ lin
ntype = Complete; ntype = Complete;
num = num.n; num = num.n;
pos = Pre; pos = Pre;
doesAgree = True doesAgree = True;
numeralS = num.s;
numeralExists = num.numeralExists
}; };
NumSg = {s=\\_=>[]; n=Sg}; --Num NumSg = {s=\\_=>[]; n=Sg; numeralExists=False}; --Num
NumPl = {s=\\_=>[]; n=Pl}; --Num NumPl = {s=\\_=>[]; n=Pl; numeralExists=False}; --Num
--NumCard : Card -> Num ; -- one/five [explicit numeral] --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} ; --Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ;
IndefArt = {s={s=\\_=>[]; third = \\_,_=>[];agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron=False}; 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 DefArt = {s={s =\\_=>[]; third = \\_,_=>[]; agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron = False}; -- noun with initial vowel
@@ -151,7 +148,9 @@ lin
ntype = dap.ntype ; ntype = dap.ntype ;
num = dap.num ; num = dap.num ;
pos = dap.pos; pos = dap.pos;
doesAgree= True doesAgree= True;
numeralS = dap.numeralS;
numeralExists=dap.numeralExists;
}; };
--DetDAP : Det -> DAP ; -- this (or that) --DetDAP : Det -> DAP ; -- this (or that)

View File

@@ -37,6 +37,7 @@ oper
mkV3 = overload { mkV3 = overload {
mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]}; mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]};
mkV3 : Str -> Str ->Str -> Verb3 = \root ,s1,s2 ->mkV2 root s1 s2 ** {comp2 =[]}; mkV3 : Str -> Str ->Str -> Verb3 = \root ,s1,s2 ->mkV2 root s1 s2 ** {comp2 =[]};
--mkV3 : Str -> Str ->Str ->Str ->Verb3 =\root, s1, s2, prep
}; };

View File

@@ -62,6 +62,7 @@ lin
--UttAP : AP -> Utt ; -- fine --UttAP : AP -> Utt ; -- fine
--UttInterj : Interj -> Utt ; -- alas --UttInterj : Interj -> Utt ; -- alas
UttInterj interj = let agr = AgMUBAP2 Pl in {s= mkObjClitic agr ++ interj.s}; UttInterj interj = let agr = AgMUBAP2 Pl in {s= mkObjClitic agr ++ interj.s};
{- {-
--1 Phrase: Phrases and Utterances --1 Phrase: Phrases and Utterances

View File

@@ -64,11 +64,13 @@ param
PrepForm = Form1 | Form2; -- omu and omuri, aha, ahari PrepForm = Form1 | Form2; -- omu and omuri, aha, ahari
-- for Extra Tenses not implemented -- for Extra Tenses not implemented
-- would be better if I had alliases -- would be better if I had alliases
TensesExtra = RemotePast | ImmediatePast | RemoteFuture; Tenses = RemotePast|NearPast | ImmediatePast |ExPres|NearFut |RemoteFut;
-- for Extra Aspects not implemented -- for Extra Aspects not implemented
-- would be better if I had alliases -- 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, Complete = Nouns with IV,
Incomplete = Nouns without IV: important for use with pre-determiners 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 ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool};
Adjective : Type = {s : Str ; position : Position; isProper : Bool; isPrep: Bool}; Adjective : Type = {s : Str ; position : Position; isProper : Bool; isPrep: Bool};
mkAdjective: Str -> Position -> Bool -> Bool -> Adjective = \ a , pos, isProper, isPrep -> 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: TO DO:
@@ -642,6 +644,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ;
AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "aga"; 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) HA => mkClitic "aha" ; -- of place HA
AgP3 ( Pl) MU => mkClitic "omu" ; -- of place MU AgP3 ( Pl) MU => mkClitic "omu" ; -- of place MU
AgP3 ( Pl) KU => mkClitic "oku" ; -- of place KU 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 _ => 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 -- TThis is for demonstrative pronouns which can also be use as Quantifiers
-- How can it be done without code repeation? -- 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 (KA_BU | RU_BU) => mkClitic "obu" ;
--AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; --AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ;
--AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "aga"; --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 ) HA => mkClitic "aho" ; -- of place HA
AgP3 (Sg ) MU => mkClitic "omwo" ; -- of place MU AgP3 (Sg ) MU => mkClitic "omwo" ; -- of place MU
AgP3 (Sg ) KU => mkClitic "okwo" ; -- of place KU 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{ mkIPPref : Agreement =>Str = table{
AgMUBAP1 Sg => mkClitic "o"; AgMUBAP1 Sg => mkClitic "o";
AgMUBAP1 Pl => mkClitic "ba" ; AgMUBAP1 Pl => mkClitic "ba" ;
@@ -1034,7 +1173,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
4. Cardinal numbers 4. Cardinal numbers
6. Ordinal 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 mkDet : Str -> NounState -> Number -> Position -> Determiner
= \ det, ns, num,pos -> = \ det, ns, num,pos ->
{ {
@@ -1043,7 +1182,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
ntype = ns; ntype = ns;
num = num; num = num;
pos = pos; pos = pos;
doesAgree = False doesAgree = False;
numeralS = \\_ => []; -- A true determiner is not a quantifier
numeralExists = False;
}; };
-- Pronouns must have agreement because they are used -- Pronouns must have agreement because they are used
@@ -1097,9 +1238,12 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
let subjClitic = mkSubjClitic (AgP3 det.num cn.gender) let subjClitic = mkSubjClitic (AgP3 det.num cn.gender)
in in
case <det.pos, det.num> of { case <det.pos, det.num> of {
<Post, Pl> => {s = \\_=> subjClitic ++ cn.s!det.num! det.ntype ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; <Post, Pl> => {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};
<Post, Sg> => {s = \\_=>cn.s!det.num! det.ntype ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat}; <Post, Sg> => {s = \\_=>cn.s!det.num! det.ntype ++ subjClitic ++ det.s2 ! AgP3 det.num cn.gender; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat};
<Pre, n> => { s =\\_ => det.s ++ cn.s !n ! det.ntype; agr = AgP3 det.num cn.gender; nounCat = cn.nounCat} --; <Pre, n> => 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}
}
--<PostDeterminer, PFalse> => {s = \\_=> cn.s!det.ntype!det.num; agr = AgP3 det.num cn.gender } --<PostDeterminer, PFalse> => {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; glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a;
--Number determining element --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 = VerbPhrase ** { c : Str };
VPSlash : Type = { VPSlash : Type = {

View File

@@ -26,7 +26,7 @@ lin
case <temp.t,temp.a, pol.p> of { case <temp.t,temp.a, pol.p> of {
<Pres,Simul, Pos> => case cl.isPresBlank of { <Pres,Simul, Pos> => case cl.isPresBlank of {
True => {s = subj ++ clitic ++ root ++ compl}; 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-} {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-}
<Pres,Simul, Neg> => case cl.isPresBlank of { <Pres,Simul, Neg> => case cl.isPresBlank of {
@@ -46,32 +46,33 @@ lin
<Past,Simul, Pos> => case cl.isPerfBlank of { <Past,Simul, Pos> => case cl.isPerfBlank of {
True => {s = subj ++ clitic ++ "ka" ++ Predef.BIND ++ root ++ compl}; _ => {s = subj ++ clitic ++ "ka" ++ Predef.BIND ++ root ++ Predef.BIND ++ presRestOfVerb ++ compl}--;
False => {s = subj ++ clitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ 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-} {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-}
<Past,Simul, Neg> => case cl.isPerfBlank of { <Past,Simul, Neg> => case cl.isPerfBlank of {
True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ root ++ compl}; True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ Predef.BIND ++ "ra" ++
False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ Predef.BIND ++ root ++ Predef.BIND ++ "ire" ++ compl};
root ++ pastRestOfVerb ++ compl} False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "ra" ++ Predef.BIND ++
root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
<Past,Anter, Pos> => case cl.isPerfBlank of { <Past,Anter, Pos> => case cl.isPerfBlank of {
True => {s = subj ++ clitic ++ "kaba" ++Predef.BIND ++ clitic ++ True => {s = subj ++ clitic ++ "kaba" ++Predef.BIND ++ clitic ++
root ++ compl}; root ++ Predef.BIND ++ "ire"++ compl};
False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "a" ++ Predef.BIND ++ False => {s = subj ++ clitic ++ "kaba" ++ clitic ++
root ++ Predef.BIND ++ pastRestOfVerb ++ compl} root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
<Past,Anter, Neg> =>case cl.isPerfBlank of { <Past,Anter, Neg> =>case cl.isPerfBlank of {
True => {s = subj ++ clitic ++ "ka" ++Predef.BIND ++ clitic ++ True => {s = subj ++ clitic ++ "ka" ++Predef.BIND ++ clitic ++
root ++ compl}; root ++ Predef.BIND ++ "ire"++ compl};
False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "taa" ++ Predef.BIND ++ False => {s = subj ++ clitic ++ "kaba" ++ clitic ++ "ta" ++ Predef.BIND ++
root ++ Predef.BIND ++ pastRestOfVerb ++ compl} root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
<Fut,Simul, Pos> => case cl.isPresBlank of { <Fut,Simul, Pos> => case cl.isPresBlank of {
True => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za ku" ++ Predef.BIND ++ --choice of za over ija 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 False => {s = subj ++ "ni" ++ Predef.BIND ++clitic ++ "za ku" ++ Predef.BIND ++ --choice of za over ija
root ++ Predef.BIND ++ presRestOfVerb ++ compl} 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-} {-Note: when I use pol.s instead of ti, the word alignment instead becomes worse-}
<Fut,Simul, Neg> => case cl.isPresBlank of { <Fut,Simul, Neg> => 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}; 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} root ++ BIND ++ presRestOfVerb ++ compl}
}; };
<Fut,Anter, Pos> => case cl.isPerfBlank of { <Fut,Anter, Pos> => 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}; 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} root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
<Fut,Anter, Neg> => case cl.isPerfBlank of { <Fut,Anter, Neg> => 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}; root ++ "ire" ++ compl};
False => {s = subj ++ "ni" ++ Predef.BIND ++ clitic ++ "za kuba" ++ clitic ++ "taka" ++ Predef.BIND ++ False => {s = subj ++ Predef.BIND ++ clitic ++ "raaba " ++ clitic ++ "ta" ++ Predef.BIND ++
root ++ pastRestOfVerb ++ compl} root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
<Cond,Simul, Pos> => case cl.isPresBlank of { <Cond,Simul, Pos> => case cl.isPresBlank of {
True => {s = subj ++ clitic ++ "kaa" ++Predef.BIND ++ root ++ compl}; True => {s = subj ++ clitic ++ "kaa" ++Predef.BIND ++ root ++ compl};
@@ -142,8 +143,8 @@ lin
_ => mkRPs!RSubj! AgP3 Sg MU_BA _ => mkRPs!RSubj! AgP3 Sg MU_BA
}; };
robjClitic = case rcl.agr of { robjClitic = case rcl.agr of {
AgrYes a => mkRPs!RObj! a; AgrYes a => mkRPsNoClitic!RObj! a;
_ => mkRPs!RObj! AgP3 Sg MU_BA _ => mkRPsNoClitic!RObj! AgP3 Sg MU_BA
}; };
presSimul = vMorphs ! VFPres; --this is not delivering the string presSimul = vMorphs ! VFPres; --this is not delivering the string
presAnt = vMorphs ! VFPastPart; --this is not delivering the string presAnt = vMorphs ! VFPastPart; --this is not delivering the string
@@ -186,7 +187,7 @@ lin
<Past,Simul, Pos> => { <Past,Simul, Pos> => {
s = table { s = table {
RF RSubj => subj ++ rsubjClitic ++ root ++ Predef.BIND ++ pastRestOfVerb ++ compl; 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 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 <vp.isCompApStem, vp.containsAdV> of {
<False,True> => {
s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk
subjAgr = np.agr; subjAgr = np.agr;
pres = vp.pres; pres = vp.pres;
@@ -297,9 +299,10 @@ lin
pastPart = mkVerbPastPart vp.root; -- subject pastPart = mkVerbPastPart vp.root; -- subject
-} -}
--root = vp.root ; --root = vp.root ;
compl = vp.comp compl = vp.adV
}; };
True => {
<_, _> => {
s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk
subjAgr = np.agr; subjAgr = np.agr;
pres = vp.pres; pres = vp.pres;
@@ -320,8 +323,6 @@ lin
} }
};--: NP -> VP -> Cl ; -- John walks / John does not walk };--: NP -> VP -> Cl ; -- John walks / John does not walk
{- {-
Note: It seems mkSubjClitic comes with a Predef.BIND already Note: It seems mkSubjClitic comes with a Predef.BIND already
prepared for the next token to bind. prepared for the next token to bind.
@@ -382,9 +383,25 @@ lin
--AdvSlash : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today --AdvSlash : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
--SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks --SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
--SlashVS : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves --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};
{- {-

View File

@@ -15,19 +15,20 @@ concrete StructuralCgg of Structural = CatCgg **
lin lin
--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 };
a_Det = {s =[] ; s2 = \\_ => []; ntype = Complete; num = Sg; pos = Pre; doesAgree = False}; --: Det ; indefinite singular ---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}; -- : Det ;indefinite plural ---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}; --: Det ; -- definite singular ---s thePl_Det = {s =[]; ntype = Complete; num = Pl; pos = PreDeterminer}; --: Det ;definite 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} ; 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} ; 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} ; 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); 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); 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); 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); 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); 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 -- default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and
it_Pron = { it_Pron = {
s = \\_=>[]; s = \\_=>[];
@@ -97,7 +98,7 @@ lin
n = Sg 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 ; 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 ; 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 ; 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-} {-End of Quantifiers-}
@@ -165,7 +166,7 @@ lin
whatPl_IP = { s= "ki"; n = IPl; isVerbSuffix = True; requiresIPPrefix = False; aux=[]; endOfSentence = True} ; -- what (plural) 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) 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) 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. --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 ; how_IAdv = {s ="ta"; requiresSubjPrefix = True; endOfSentence =True}; --: IAdv ;
--how8much_IAdv = {s ="kwiga"; s2requireSubjPrefix = True};--: IAdv ; --how8much_IAdv = {s ="kwiga"; s2requireSubjPrefix = True};--: IAdv ;
@@ -192,7 +193,9 @@ lin
ntype = Complete; ntype = Complete;
num = Sg; num = Sg;
pos = Pre; pos = Pre;
doesAgree = True doesAgree = True;
numeralS=\\_=>[];
numeralExists = False
}; };
somePl_Det = somePl_Det =
{ {
@@ -201,7 +204,9 @@ lin
ntype = Complete; ntype = Complete;
num = Pl; num = Pl;
pos = Pre; pos = Pre;
doesAgree = True doesAgree = True;
numeralS=\\_=>[];
numeralExists = False
};--: Det ; };--: Det ;
want_VV = {s = "yend"; pres="da"; perf = "zire"; isPresBlank = False; want_VV = {s = "yend"; pres="da"; perf = "zire"; isPresBlank = False;
@@ -219,6 +224,8 @@ lin
--somewhere_Adv : Adv ; --somewhere_Adv : Adv ;
that_Subj = ss "ngu" ; that_Subj = ss "ngu" ;
when_Subj = ss "obu";
because_Subj = ss "ahabwokuba";
--Adjective modifying Adverbs --Adjective modifying Adverbs
almost_AdA = {s="haihi"; position=Pre}; --: AdA ; almost_AdA = {s="haihi"; position=Pre}; --: AdA ;

View File

@@ -194,7 +194,7 @@ lin
isCompApStem = False; isCompApStem = False;
agr = AgrNo; agr = AgrNo;
isRegular = vp.isRegular; isRegular = vp.isRegular;
adv = []; adv = adv.s;
containsAdv =True; containsAdv =True;
adV =[]; adV =[];
containsAdV = False containsAdV = False