1
0
forked from GitHub/gf-rgl

1. Created Linearization types for V2V as Res.Verb ** {comp,c3 : Str ; typ : Res.VVType} ; but however I have eerors with mkV2 overload methods and lock_C fields. I cannot seem to find out the reason for the error.

This commit is contained in:
David Bamutura
2020-10-12 17:31:40 +03:00
parent 7a07513f8e
commit 7c997ea280
5 changed files with 408 additions and 400 deletions

View File

@@ -6,14 +6,14 @@ param
oper oper
ListX = {s1,s2 : Str} ; ListX = {s1,s2 : Str} ;
twoStr : (x,y : Str) -> ListX = \x,y -> twoStr : (x,y : Str) -> ListX = \x,y -> --stores two strings in a record
{s1 = x ; s2 = y} ; {s1 = x ; s2 = y} ;
consStr : Str -> ListX -> Str -> ListX = \comma,xs,x -> consStr : Str -> ListX -> Str -> ListX = \comma,xs,x ->
{s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ; {s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ;
twoSS : (_,_ : SS) -> ListX = \x,y -> twoSS : (_,_ : SS) -> ListX = \x,y -> --stores two string records into one record
twoStr x.s y.s ; twoStr x.s y.s ;
consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> -- Combines and a record into a record separated by a comma.
consStr comma xs x.s ; consStr comma xs x.s ;
Conjunction : Type = SS ; Conjunction : Type = SS ;
@@ -33,7 +33,7 @@ oper
-- all this lifted to tables -- all this lifted to tables
ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; --Type family for tables
twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y -> twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y ->
{s1 = x.s ; s2 = y.s} ; {s1 = x.s ; s2 = y.s} ;

View File

@@ -34,7 +34,7 @@ lincat
V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep" V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep"
V2,V2Q, V2S = Res.Verb2; V2,V2Q, V2S = Res.Verb2;
V2A,V3 = Res.Verb3; -- three-place verb e.g. "show" V2A,V3 = Res.Verb3; -- three-place verb e.g. "show"
V2V = Res.Verb ** {comp,c3 : Str ; typ : Res.VVType} ;
VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm" VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm"
N = Res.Noun ; -- common noun e.g. "house" N = Res.Noun ; -- common noun e.g. "house"

View File

@@ -24,7 +24,7 @@ lin
computer_N = mkN "kanyabwêngye" ZERO_ZERO ; --kanyabwêngye, embiikabwengye, kompyuta computer_N = mkN "kanyabwêngye" ZERO_ZERO ; --kanyabwêngye, embiikabwengye, kompyuta
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" MU_BA ;
eye_N = mkN "eriisho" RI_MA; 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 ;
@@ -68,7 +68,6 @@ lin
--Adjectives --Adjectives
bad_A = mkAdjective "bi" Post False False; --False means the adjective is a stem and comes after the complete noun bad_A = mkAdjective "bi" Post False False; --False means the adjective is a stem and comes after the complete noun
--beautiful_A = mkAdjective "rungi" False;
big_A = mkAdjective "hango" Post False False; big_A = mkAdjective "hango" Post False False;
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 ;
@@ -158,298 +157,257 @@ lin
distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (lin Prep (mkPrep "kurunga" "" False)) (lin Prep (mkPrep "mpáka" "" False)); --could orugyendo work in its place? distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (lin Prep (mkPrep "kurunga" "" False)) (lin Prep (mkPrep "mpáka" "" False)); --could orugyendo work in its place?
alas_Interj ={s="ryakareeba"; }; --: Interj ; alas_Interj ={s="ryakareeba"; }; --: Interj ;
-- New Lexicon
switch8off_V2 = mkV2 "raza" "za" "riize"; switch8off_V2 = mkV2 "raza" "za" "riize";
television_N = mkN "TV" N_N; television_N = mkN "TV" N_N;
doctor_N = mkN "omushaho" MU_BA; doctor_N = mkN "omushaho" MU_BA;
clever_A =mkAdjective "amagyezi" Post False True; clever_A =mkAdjective "amagyezi" Post False True;
laugh_V = mkV "sheka"; laugh_V = mkV "sheka";
beautiful_A = mkAdjective "rungi" Post False False;
airplane_N = mkN "endegye" N_N; 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; year_N = mkN "omwaka" "emyaka" MU_MI;
-- New Lexicon
{-
Perhaps create an adverb form whose
surface realisation comes from verb tense e.g nagyenzire implies I have alredy gone.
-}
already_Adv = mkAdv "" AgrNo; -- Already is realized as a verb form
answer_V2S = mkV2S (mkV "garu" "kamu" "kiremu") noPrep;
apartment_N = mkN "apatimenti" "apatimenti" N_N;
art_N = mkN "aati" "aati" N_N;
ashes_N = mkN "eiju" "eiju" N_N;
ask_V2Q = mkV2Q (mkV2 "bunza" "za" "rize") noPrep;
back_N = mkN "omugongo" MU_MI;
bank_N = mkN "banka" "banka" N_N;
bark_N = mkN "ask for the Rukiga equivalent of bark" N_N; --TODO find actual word
beg_V2V = mkV2V (mkV "shab" "a" "ire") noPrep toP ;
belly_N = mkN "eibondo" "amabondo" I_MA ;
blow_V = mkV "hag" "a" "ire" ;
bone_N = mkN "eigufa" "amagufa" I_MA ;
boot_N = mkN "buuntu" "buuntu" N_N ;
boss_N = mkN "mukama" "bakama" MU_BA ;
breast_N = mkN "eibere" "amabere" I_MA ;
breathe_V = mkV "is" "a" "ire";
broad_A = mkAdjective "TODO : Ask for the right word" Post False False;
--Note: younger brother. mukuru and others
brother_N2 = mkN2 (mkN "murumuna" "barumuna" MU_BA) (mkPrep "" "" True) ;
newspaper_N = mkN "eihurire" I_MA;
night_N = mkN "ekiro" N_ZERO;
nose_N = mkN "enyindo" N_N;
--number_N = mkN "enamba" N_N -- TODO look out for the correct word
oil_N = mkN "amajuta" N_N;
open_V2 = mkV2 "yingura" "ura" "wire";
-- 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
-- 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
-- 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
-- paint_V2A
-- paper_N
-- peace_N
-- pen_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
-- End of New Lexicon -- End of New Lexicon
oper oper
aboutP = mkPrep "about" ; aboutP = mkPrep "TODO : find rukiga equivalent of about" "" False ;
atP = mkPrep "at" ; atP = mkPrep "TODO : find rukiga equivalent of at" "" False ;
forP = mkPrep "for" ; forP = mkPrep "TODO : find rukiga equivalent of for" "" False;
fromP = mkPrep "kurunga" "" False; fromP = mkPrep "kurunga" "" False;
inP = mkPrep "omu" "omuri" False; inP = mkPrep "omu" "omuri" False;
onP = mkPrep "aha" "ahari" False; onP = mkPrep "aha" "ahari" False;
toP = mkPrep "aha" [] False; toP = mkPrep ("ku" ++ Predef.BIND) [] False;
--noPrep = mkPrep [] [] False;
{-
--Old LexiconCgg.gf
burn_V = mkV "sya" ;
die_V = mkV "fa" ;
fly_V = mkV "guruka" ;
run_V = mkV "iruka" ;
sleep_V = mkV "byama" ;
walk_V = mkV "tabula" ;
bird_N = mkN "ekinyonyi" KI_BI ;
boat_N = mkN "eryato" RI_MA ;
book_N = mkN "ekitabo" KI_BI ;
boy_N = mkN "omwojo" "abojo" MU_BA ;
car_N = mkN "emootoka" N_N ;
chair_N = mkN "entebbe" N_N;
cloud_N = mkN "ekikyu" KI_BI ;
person_N = mkN "omuntu" "abantu" MU_BA ;
girl_N = mkN "omwishiki" MU_BA ;
shoe_N = mkN "ekaito" N_N ;
table_N = mkN "emeza" N_N ;
bad_A = mkAdjective "bi" False; --False means the adjective is a stem and comes after the complet noun
beautiful_A = mkAdjective "rungi" False;
far_Adv = mkAdv "hare";
now_Adv = mkAdv "hati";
today_Adv = mkAdv "erizooba";
bite_V2 = mkV2 "ruma";
break_V2 = mkV2 "henda";
buy_V2 = mkV2 "gura";
close_V2 = mkV2 "kinga";
count_V2 = mkV2 "bara";
cut_V2 = mkV2 "shara";
do_V2 = mkV2 "kora";
drink_V2 = mkV2 "nywa";
eat_V2 = mkV2 "rya";
fear_V2 = mkV2 "tiina";
-------------------------Differences Rukiga only--------------------
airplane_N : mkN "endegye" N_N;
-}
} }

View File

@@ -27,12 +27,14 @@ oper
mkV : Str -> Verb mkV : Str -> Verb
= \root -> lin V (smartVerb root); --{s =root; pres =[]; perf = []; morphs= mkVerbMorphs; isRegular = True}; --only those verbs whose conjugation involves change of last letter and are done in the same way in both runyankore and rukiga = \root -> lin V (smartVerb root); --{s =root; pres =[]; perf = []; morphs= mkVerbMorphs; isRegular = True}; --only those verbs whose conjugation involves change of last letter and are done in the same way in both runyankore and rukiga
mkV : Str -> Str ->Str -> Verb mkV : Str -> Str ->Str -> Verb
= \root, restPres, restPerf ->lin V (mkVerb root restPres restPerf); --{s =root; pres =restPres; perf = restPerf; morphs= mkVerbMorphs; isRegular = False}; = \root, restPres, restPerf ->lin V (mkVerb root restPres restPerf);
mkV : Str -> Str ->Str ->Str -> Bool -> Verb
= \root, restPres, restPerf, p, bool ->lin V (mkVerbV2X root restPres restPerf p bool);
}; };
mkV2 = overload { mkV2 = overload {
mkV2 : Str -> Verb2 = \root ->mkV root ** {comp =[]}; mkV2 : Str -> V2 = \root ->dirV2 (smartVerb root); --** {comp =[] ; isCompN2 = False};
mkV2 : Str -> Str ->Str -> Verb2 = \root, s1, s2 ->mkV root s1 s2 ** {comp =[]}; mkV2 : Str -> Str ->Str -> V2 = \root, s1, s2 ->dirV2 (mkVerb root s1 s2); --** {comp =[] ; isCompN2 = False};
}; };
mkV3 = overload { mkV3 = overload {
mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]}; mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]};
@@ -44,36 +46,37 @@ oper
--3 Relational nouns --3 Relational nouns
mkN2 : overload { mkN2 : overload {
mkN2 : Str -> N2 ; -- reg. noun, prep. "of" --% --mkN2 : Str -> N2 ; -- reg. noun, prep. "of" --%
mkN2 : N -> N2 ; -- e.g. wife of (default prep. to) --mkN2 : N -> N2 ; -- e.g. wife of (default prep. to)
mkN2 : N -> Str -> N2 ; -- access to --% --mkN2 : N -> Str -> N2 ; -- access to --%
mkN2 : N -> Prep -> N2 ; -- e.g. access to mkN2 : N -> Prep -> N2 ; -- e.g. access to
mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --% --mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --%
} ; } ;
--3 Relational nouns mkN2 = overload {
mkN2 : N -> Prep -> N2 = prepN2 ;
mkN2 : overload { --mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPrep s);
mkN2 : Str -> N2; -- reg. noun, prep. "of" --% --mkN2 : Str -> Str -> N2 = \n,s -> prepN2 (regN n) (mkPrep s);
mkN2 : N -> N2 ; -- e.g. wife of (default prep. to) --mkN2 : N -> N2 = \n -> prepN2 n (mkPrep "of") ;
mkN2 : N -> Str -> N2 ; -- access to --% --mkN2 : Str -> N2 = \s -> prepN2 (regN s) (mkPrep "of")
mkN2 : N -> Prep -> N2 ; -- e.g. access to
mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --%
} ; } ;
mkN2 : N -> Prep -> N2 ; -- mkN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
mkN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{ -- False => lin N2 (n ** {c2 =\\_=> p.s}) ;
-- True => lin N2 (n ** {c2 = mkGenPrepWithIV }) --avoiding lock_C fields
-- };
prepN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
False => lin N2 (n ** {c2 =\\_=> p.s}) ; False => lin N2 (n ** {c2 =\\_=> p.s}) ;
True => lin N2 (n ** {c2 = mkGenPrepWithIVClitic}) --avoiding lock_C fields True => lin N2 (n ** {c2 = mkGenPrepWithIV }) --avoiding lock_C fields
}; };
-- Three-place relational nouns ("the connection from x to y") need two prepositions. -- Three-place relational nouns ("the connection from x to y") need two prepositions.
mkN3 : N -> Prep -> Prep -> N3 ; -- e.g. connection from x to y mkN3 : N -> Prep -> Prep -> N3 ; -- e.g. connection from x to y
mkN3 = \n,p,q -> case <p.isGenPrep,q.isGenPrep> of{ mkN3 = \n,p,q -> case <p.isGenPrep,q.isGenPrep> of{
<False,False> => lin N3 ( lin N2 (n ** {c2 =\\_=> p.s}) ** {c3 =\\_=> q.s}); --method of avoiding lock_C fields <False,False> => lin N3 ( lin N2 (n ** {c2 =\\_=> p.s}) ** {c3 =\\_=> q.s}); --method of avoiding lock_C fields
<True, False> => n ** {c2 = mkGenPrepWithIVClitic ; c3 =\\_=> q.s; lock_N2 = <>;lock_N3 = <>} ; <True, False> => n ** {c2 = mkGenPrepWithIV ; c3 =\\_=> q.s; lock_N2 = <>;lock_N3 = <>} ;
<False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIVClitic; lock_N2 = <>;lock_N3 = <>} ; <False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIV; lock_N2 = <>;lock_N3 = <>} ;
<True,True> => n ** {c2 = mkGenPrepWithIVClitic; c3 = mkGenPrepWithIVClitic; lock_N2 = <>; lock_N3 = <>} <True,True> => n ** {c2 = mkGenPrepWithIV; c3 = mkGenPrepWithIV; lock_N2 = <>; lock_N3 = <>}
}; };
mkVS : V -> VS ; -- sentence-compl e.g. say (that S) mkVS : V -> VS ; -- sentence-compl e.g. say (that S)
@@ -84,28 +87,52 @@ oper
mkVA : V -> VA ; -- e.g. become (AP) mkVA : V -> VA ; -- e.g. become (AP)
mkVA v = lin VA v ; mkVA v = lin VA v ;
{-
prepV2 v p = lin V2 {s = v.s ; p = v.p ; c2 = p.s ; isRefl = v.isRefl} ;
dirV2 v = prepV2 v noPrep ;
mkV2S : V -> Prep -> V2S ; -- e.g. tell (NP) (that S)
mkV2S v p = lin V2S (prepV2 v p) ;
--mkPrep : Str -> Str ->Bool -> Preposition ; -- e.g. "in front of"
mkPrep : Str -> Str ->Bool -> Preposition;
mkPrep first other bool = lin Prep {
s = first ;
other = other;
isGenPrep = bool
};
prepV2 : V -> Prep -> V2 ;
prepV2 v p = lin V2 {s = v.s ;
pres = v.pres ;
perf = v.perf ;
isPresBlank = v.isPresBlank ;
isPerfBlank = v.isPerfBlank;
isRegular = v.isRegular;
p = v.p ;
isRefl = v.isRefl;
comp = p.s;
isCompN2 = p.isGenPrep}; --; isRefl = v.isRefl} ;
dirV2 : V -> V2 = \v -> prepV2 v noPrep ;
noPrep = mkPrep [] [] False;
--2 Prepositions --2 Prepositions
-- --
-- A preposition as used for rection in the lexicon, as well as to -- A preposition as used for rection in the lexicon, as well as to
-- build $PP$s in the resource API, just requires a string. -- build $PP$s in the resource API, just requires a string.
mkPrep : Str -> Prep ; -- e.g. "in front of" -- mkPrep : Str -> Str ->Bool -> Prep ; -- e.g. "in front of"
--mkPost : Str -> Prep ; -- e.g. "ago" -- noPrep : Prep; -- no preposition
noPrep : Prepostion; -- no preposition -- noPrep = mkPrep [] [] False;
noPrep = mkPrep [] ;
-} --mkVQ : V -> VQ ; -- e.g. wonder (QS)
{- mkV2Q : V -> Prep -> V2Q ; -- e.g. ask (NP) (QS)
mkV2Q v p = lin V2Q (prepV2 v p) ;
--V2V verbs --V2V verbs
mkV2V = overload { mkV2V = overload {
mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (regV s) ** {c3 = [] ; typ = VVAux}) ; -- mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (mkV s) ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ; mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ; mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
} ; } ;
{-
mkV2V : overload { mkV2V : overload {
mkV2V : Str -> V2V ; mkV2V : Str -> V2V ;

View File

@@ -40,6 +40,8 @@ param
ImpPol = ImpPos | ImpNeg; ImpPol = ImpPos | ImpNeg;
INumber = ISg | IPl | INeut; INumber = ISg | IPl | INeut;
-- copied from the English Resource Grammar
VVType = VVAux | VVInf | VVPresPart ; -- can do / try to do / start doing
{- {-
--there are several and i.e. --there are several and i.e.
-- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, ) -- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, )
@@ -54,7 +56,7 @@ param
AgrExist = AgrNo | AgrYes Agreement; AgrExist = AgrNo | AgrYes Agreement;
--Position = PostDeterminer | PreDeterminer ; --Position = PostDeterminer | PreDeterminer ;
Position = Post | Pre; Position = Post | Pre;
Variants = V1|V2; --Variants = V1|V2;
--Functional forms of the regular verb --Functional forms of the regular verb
Mood = Infinitive | Imperative | Subjunctive | Perfective; Mood = Infinitive | Imperative | Subjunctive | Perfective;
VerbCat = Simple | Prepositional | Causative; VerbCat = Simple | Prepositional | Causative;
@@ -115,6 +117,21 @@ oper
isPerfBlank = False; isPerfBlank = False;
--morphs = mkVerbMorphs; --morphs = mkVerbMorphs;
isRegular = False; isRegular = False;
p = [];
isRefl = False
};
-- creates a verb of type that has particles (prepositions or
--adverbials. this is for phrasal verbs)
mkVerbV2X : Str ->Str ->Str ->Str -> Bool->Verb = \rad, end1,end2, p, bool ->{
s = rad;
pres = end1;
perf = end2;
isPresBlank = False;
isPerfBlank = False;
--morphs = mkVerbMorphs;
isRegular = False;
p = p;
isRefl = bool
}; };
--These are regular verbs with {a-ire} entry in the dictionary --These are regular verbs with {a-ire} entry in the dictionary
smartVerb : Str ->Verb = \rad ->{ smartVerb : Str ->Verb = \rad ->{
@@ -125,6 +142,8 @@ oper
isPresBlank = False; isPresBlank = False;
isPerfBlank = False; isPerfBlank = False;
isRegular = True; isRegular = True;
p = [];
isRefl = False
}; };
{- Smart paradigm {- Smart paradigm
@@ -915,69 +934,69 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
_ => mkClitic "XX" -- error checking for any case not catered for _ => mkClitic "XX" -- error checking for any case not catered for
}; };
-- Genetive Preposition: simple "of" without Initila vowel -- Genetive Preposition: simple "of" without Initila vowel. It does not combine
mkGenPrepNoIVClitic : Agreement -> Str = \a -> case a of { mkGenPrepNoIV : Agreement -> Str = \a -> case a of {
AgMUBAP1 n => mkClitics "wa" "ba" n; AgMUBAP1 Sg => "wa";
--AgMUBAP1 Pl => "aba" ; AgMUBAP1 Pl => "ba" ;
AgMUBAP2 n => mkClitics "wa" "ba" n; --probably an error check your grammar book AgMUBAP2 Sg => "wa" ; --probably an error check your grammar book
--AgMUBAP2 Pl => "aba" ; AgMUBAP2 Pl => "ba" ;
AgP3 n MU_BA => mkClitics "wa" "ba" n; AgP3 Sg MU_BA => "wa" ;
--AgP3 Pl MU_BA => "aba" ; AgP3 Pl MU_BA => "ba" ;
AgP3 Pl ZERO_BU => mkClitic "bwa" ; AgP3 Pl ZERO_BU => "bwa" ;
AgP3 Sg BU_MA => mkClitic "bwa" ; AgP3 Sg BU_MA => "bwa" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "bwa" ; AgP3 Pl (KA_BU | RU_BU) => "bwa" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "bya" ; AgP3 Pl (KI_BI | ZERO_BI) => "bya" ;
AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "ga"; AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "ga";
AgP3 (Sg | Pl) HA => mkClitic "ha" ; -- of place HA AgP3 (Sg | Pl) HA => "ha" ; -- of place HA
AgP3 (Sg | Pl) MU => mkClitic "mwa" ; -- of place MU AgP3 (Sg | Pl) MU => "mwa" ; -- of place MU
AgP3 (Sg | Pl) KU => mkClitic "ya" ; -- of place KU AgP3 (Sg | Pl) KU => "ya" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "rya" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) => "rya" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "ka" ; AgP3 Sg (KA_ZERO | KA_BU) => "ka" ;
AgP3 Sg KI_BI => mkClitic "kya" ; AgP3 Sg KI_BI => "kya" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "kwa" ; AgP3 Sg (KU_ZERO | KU_MA) => "kwa" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "gwa" ; AgP3 Sg (MU_MI | MU_ZERO) => "gwa" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "rwa" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "rwa" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "twa" ; AgP3 Pl (ZERO_TU | KA_TU) => "twa" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ya" ; AgP3 Sg (ZERO_ZERO | N_N) => "ya" ;
AgP3 Pl ZERO_MI =>mkClitic "ya" ; AgP3 Pl ZERO_MI => "ya" ;
AgP3 Pl MU_MI => mkClitic "emi"; AgP3 Pl MU_MI => "emi";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "za" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "za" ;
AgP3 Sg GU_GA => mkClitic "gwa" ; AgP3 Sg GU_GA => "gwa" ;
AgP3 Pl GU_GA => mkClitic "ga" ; AgP3 Pl GU_GA => "ga" ;
_ => mkClitic "Error mkGenPrepNoIVClitic" -- error checking for any case not catered for _ => Predef.error "Error mkGenPrepNoIV" -- error checking for any case not catered for
}; };
-- Genetive Preposition: simple "of" with Initil vowel -- Genetive Preposition: simple "of" with Initil vowel
mkGenPrepWithIVClitic : Agreement => Str = table { mkGenPrepWithIV : Agreement => Str = table {
AgMUBAP1 n => mkClitics "owa" "aba" n; AgMUBAP1 Sg => "owa" ;
--AgMUBAP1 Pl => "aba" ; AgMUBAP1 Pl => "aba" ;
AgMUBAP2 n => mkClitics "owa" "aba" n; --probably an error check your grammar book AgMUBAP2 Sg => "owa" ; --probably an error check your grammar book
--AgMUBAP2 Pl => "aba" ; AgMUBAP2 Pl => "aba" ;
AgP3 n MU_BA => mkClitics "owa" "aba" n; AgP3 Sg MU_BA => "owa" ;
--AgP3 Pl MU_BA => "aba" ; AgP3 Pl MU_BA => "aba" ;
AgP3 Pl ZERO_BU => mkClitic "obwa" ; AgP3 Pl ZERO_BU => "obwa" ;
AgP3 Sg BU_MA => mkClitic "obwa" ; AgP3 Sg BU_MA => "obwa" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "obwa" ; AgP3 Pl (KA_BU | RU_BU) => "obwa" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebya" ; AgP3 Pl (KI_BI | ZERO_BI) => "ebya" ;
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) => "aga";
AgP3 (Sg | Pl) HA => mkClitic "aha" ; -- of place HA AgP3 (Sg | Pl) HA => "aha" ; -- of place HA
AgP3 (Sg | Pl) MU => mkClitic "amwa" ; -- of place MU AgP3 (Sg | Pl) MU => "amwa" ; -- of place MU
AgP3 (Sg | Pl) KU => mkClitic "aya" ; -- of place KU AgP3 (Sg | Pl) KU => "aya" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "arya" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) => "arya" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aka" ; AgP3 Sg (KA_ZERO | KA_BU) => "aka" ;
AgP3 Sg KI_BI => mkClitic "ekya" ; AgP3 Sg KI_BI => "ekya" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "okwa" ; AgP3 Sg (KU_ZERO | KU_MA) => "okwa" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogwa" ; AgP3 Sg (MU_MI | MU_ZERO) => "ogwa" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "orwa" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "orwa" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otwa" ; AgP3 Pl (ZERO_TU | KA_TU) => "otwa" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "eya" ; AgP3 Sg (ZERO_ZERO | N_N) => "eya" ;
AgP3 Pl ZERO_MI =>mkClitic "eya" ; AgP3 Pl ZERO_MI => "eya" ;
AgP3 Pl MU_MI => mkClitic "emi"; AgP3 Pl MU_MI => "emi";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "eza" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "eza" ;
AgP3 Sg GU_GA => mkClitic "ogwa" ; AgP3 Sg GU_GA => "ogwa" ;
AgP3 Pl GU_GA => mkClitic "aga" ; AgP3 Pl GU_GA => "aga" ;
_ => mkClitic "Error mkGenPrepWithIVClitic" -- error checking for any case not catered for _ => Predef.error "Error in mkGenPrepWithIVClitic : no pattern matched" -- error checking for any case not catered for
}; };
@@ -1253,13 +1272,11 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
-- Structural -- Structural
-- prepositions sometimes have two kinds, near or far i.e omu or omuri -- prepositions sometimes have two kinds, near or far i.e omu or omuri
-- ho -- We ignore the distal dexis to be entered as a separate lemma
Preposition = {s,other : Str; isGenPrep : Bool}; -- Instead str for positional arguments 1 & 2 cater for prepositions that inflect with Number
mkPrep : Str -> Str ->Bool -> Preposition = \ first, other, isGenPrep -> { -- while str for positional argument 3 caters for those that do not inflect with Number
s = first ; Preposition : Type = {s : Str; other : Str; isGenPrep : Bool};
other = other;
isGenPrep = isGenPrep
};
NounPhrase : Type = {s :Case => Str; agr : Agreement}; NounPhrase : Type = {s :Case => Str; agr : Agreement};
{- {-
Operation to create Noun Phrases from a Determiner and Nouns. Operation to create Noun Phrases from a Determiner and Nouns.
@@ -1308,7 +1325,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
--morphs: VFormMini => VerbMorphPos=> Str; --morphs: VFormMini => VerbMorphPos=> Str;
isPresBlank : Bool; isPresBlank : Bool;
isPerfBlank : Bool; isPerfBlank : Bool;
isRegular:Bool isRegular: Bool;
p : Str; -- some verbs have particles such as prepositions and adverbial that give the verb a meaning different from what would be automatically deduced
isRefl : Bool
}; };
GVerb : Type = { GVerb : Type = {
@@ -1327,7 +1346,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
Because of the fusion, I have deffered including this in Because of the fusion, I have deffered including this in
the compPrep. Actually, it is going to be empty in the next version the compPrep. Actually, it is going to be empty in the next version
-} -}
Verb2 : Type = Verb ** {comp:Str}; Verb2 : Type = Verb ** {comp: Str; isCompN2: Bool};
Verb3 : Type = Verb2 ** {comp2 : Str} ; Verb3 : Type = Verb2 ** {comp2 : Str} ;
{- {-
Given a root, can you form the different verbforms? Given a root, can you form the different verbforms?
@@ -1385,7 +1404,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
--morphs= mkVerbMorphs; --morphs= mkVerbMorphs;
isPresBlank = True; isPresBlank = True;
isPerfBlank = True; isPerfBlank = True;
isRegular=False isRegular=False;
p = [];
isRefl = False
}; };
mkBecome : Verb ={ mkBecome : Verb ={
s = "b" ; s = "b" ;
@@ -1394,7 +1415,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
isPresBlank = False; isPresBlank = False;
isPerfBlank = False; isPerfBlank = False;
--morphs= mkVerbMorphs; --morphs= mkVerbMorphs;
isRegular=False isRegular=False;
p = [];
isRefl = False
}; };
@@ -1538,7 +1561,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
glue: Str -> Str ->Str =\ x, y -> x ++ BIND ++ y; glue: Str -> Str ->Str =\ x, y -> x ++ BIND ++ y;
--Concatenates two strings for the genetive case --Concatenates two strings for the genetive case
glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a; glueGen: Agreement ->Str = \ a -> mkGenPrepNoIV a ++ BIND ++ mkGenAdjSuffix a;
--Number determining element --Number determining element
Numer : Type = { s: Agreement => Str ; n : Number; numeralExists:Bool}; Numer : Type = { s: Agreement => Str ; n : Number; numeralExists:Bool};