1
0
forked from GitHub/gf-rgl

Merge pull request #360 from bamutra/master

Request for Merge
This commit is contained in:
Inari Listenmaa
2020-10-27 10:44:42 +01:00
committed by GitHub
13 changed files with 952 additions and 697 deletions

View File

@@ -4,6 +4,7 @@ Amh,Amharic,amharic,,,,,n,n,,n
Ara,Arabic,arabic,,,,,,y,,y Ara,Arabic,arabic,,,,,,y,,y
Bul,Bulgarian,bulgarian,,,y,,,,,y Bul,Bulgarian,bulgarian,,,y,,,,,y
Cat,Catalan,catalan,Romance,,y,,,,y,y Cat,Catalan,catalan,Romance,,y,,,,y,y
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y
Chi,Chinese (simplified),chinese,,,,,,,,y Chi,Chinese (simplified),chinese,,,,,,,,y
Cze,Czech,czech,,,,,,n,,y Cze,Czech,czech,,,,,,n,,y
Dan,Danish,danish,Scand,,y,,,,,y Dan,Danish,danish,Scand,,y,,,,,y
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis
4 Ara Arabic arabic y y
5 Bul Bulgarian bulgarian y y
6 Cat Catalan catalan Romance y y y
7 Cgg Rukiga rukiga y y n n y y
8 Chi Chinese (simplified) chinese y
9 Cze Czech czech n y
10 Dan Danish danish Scand y y

View File

@@ -4,24 +4,42 @@ param
ListSize = TwoElem | ManyElem ; ListSize = TwoElem | ManyElem ;
oper oper
-- Type of [X] for any X whose lincat is {s : Str}.
-- example : ListX = {s1 = "a , b" ; s2 = "c"}
ListX = {s1,s2 : Str} ; ListX = {s1,s2 : Str} ;
-- Helper funs for twoSS and conjSS
twoStr : (x,y : Str) -> ListX = \x,y -> twoStr : (x,y : Str) -> ListX = \x,y ->
{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 } ;
-- Create a ListX from two Xs. Example:
-- x = {s = "here"} ;
-- y = {s = "there"} ;
-- twoSS x y ==> {s1 = "here" ; s2 = "there"}
twoSS : (_,_ : SS) -> ListX = \x,y -> twoSS : (_,_ : SS) -> ListX = \x,y ->
twoStr x.s y.s ; twoStr x.s y.s ;
-- Add new X to a ListX, along with a separator. Example:
-- comma = ","
-- xs = {s1 = "here" ; s2 = "there"}
-- x = {s = "everywhere"}
-- consSS comma xs x ==> {s1 = "here , there" ; s2 = "everywhere"}
consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> consSS : Str -> ListX -> SS -> ListX = \comma,xs,x ->
consStr comma xs x.s ; consStr comma xs x.s ;
Conjunction : Type = SS ; Conjunction : Type = SS ;
ConjunctionDistr : Type = {s1 : Str ; s2 : Str} ; ConjunctionDistr : Type = {s1 : Str ; s2 : Str} ;
-- Form an X from Conjunction and ListX. Example:
-- or = {s = "and"}
-- xs = {s1 = "here , there" ; s2 = "everywhere"}
-- conjunctX or xs = {s = "here, there and everywhere"}
conjunctX : Conjunction -> ListX -> Str = \or,xs -> conjunctX : Conjunction -> ListX -> Str = \or,xs ->
xs.s1 ++ or.s ++ xs.s2 ; xs.s1 ++ or.s ++ xs.s2 ;
-- Like conjunctX, but conjunction has two parts: "both here and there"
conjunctDistrX : ConjunctionDistr -> ListX -> Str = \or,xs -> conjunctDistrX : ConjunctionDistr -> ListX -> Str = \or,xs ->
or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2 ; or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2 ;
@@ -33,6 +51,9 @@ oper
-- all this lifted to tables -- all this lifted to tables
-- Type for a table with the given parameter P on the LHS.
-- For example, if the lincat for X is {s : Number => Str},
-- then the lincat for [X] should be ListTable Number, which expands to {s1, s2 : Number => Str}.
ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ;
twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y -> twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y ->

View File

@@ -6,7 +6,7 @@ concrete CatCgg of Cat = CommonX -[Adv,IAdv, AdA]**
lincat lincat
Imp = {s : Res. ImpPol=> Str} ; Imp = {s : Res.ImpPol=> Str} ;
QS = {s : Str} ; QS = {s : Str} ;
-- Note: SS is a shorthand for {s:Str}, defined in Prelude.gf -- Note: SS is a shorthand for {s:Str}, defined in Prelude.gf
@@ -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"
@@ -92,7 +92,7 @@ lincat
Digits = {s : Res.CardOrd => Res.Agreement=>Str ; n : Res.Number ; tail : Px.DTail} ; Digits = {s : Res.CardOrd => Res.Agreement=>Str ; n : Res.Number ; tail : Px.DTail} ;
Ord = {s :Res.Agreement=>Str; position:Res.Position} ; Ord = {s :Res.Agreement=>Str; position:Res.Position} ;
Card = {s :Res.Agreement=>Str; n : Res.Number} ; Card = {s :Res.Agreement=>Str; n : Res.Number} ;
A2 = Res.Adjective ** { c2 : Str ; isPre : Bool} ;
DAP = Res.Determiner ; DAP = Res.Determiner ;
N2 = Res.Noun ** {c2 : Res.Agreement =>Str}; -- relational noun e.g. "son" N2 = Res.Noun ** {c2 : Res.Agreement =>Str}; -- relational noun e.g. "son"
Prep = Res.Preposition; -- preposition, or just case e.g. "in" Prep = Res.Preposition; -- preposition, or just case e.g. "in"
@@ -106,6 +106,10 @@ linref
VP =\vp -> vp.adv ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++vp.comp2 ++ vp.ap; VP =\vp -> vp.adv ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++vp.comp2 ++ vp.ap;
VPSlash =\vpslash -> vpslash.s ++ BIND ++ vpslash.pres; VPSlash =\vpslash -> vpslash.s ++ BIND ++ vpslash.pres;
lindef
A2 = \s -> {s = s; position = Res.Post; isProper = False;
isPrep = False; isNeg = False;c2 = ""; isPre = True};
--1 Cat: the Category System --1 Cat: the Category System

View File

@@ -1,8 +1,11 @@
--# -path=.:../prelude:../abstract:../common --# -path=.:../prelude:../abstract:../common
concrete IdiomCgg of Idiom = CatCgg ** concrete IdiomCgg of Idiom = CatCgg **
open Prelude, ResCgg in { open Prelude,Predef, ResCgg in {
lin
ImpPl1 vp = {s="tu" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ BIND ++ "6e"}; -- let's go
{- {-
--1 Idiom: Idiomatic Expressions --1 Idiom: Idiomatic Expressions

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 ;
@@ -67,28 +67,27 @@ lin
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???
--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; --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 False;
big_A = mkAdjective "hango" Post False False; black_A = mkAdjective "kwirangura" Post False False False;
black_A = mkAdjective "kwirangura" Post False False; blue_A = mkAdjective "buuru" Post True True False ;
blue_A = mkAdjective "buuru" Post True True ; clean_A = mkAdjective "yonjo" Post False False False ; --: A ;
clean_A = mkAdjective "yonjo" Post False False; --: A ; cold_A = mkAdjective "kufuka" Post False False False ; --: A ;
cold_A = mkAdjective "kufuka" Post False False; --: A ; correct_A = mkAdjective "hikire" Post False False False; --: A ;
correct_A = mkAdjective "hikire" Post False False; --: A ; good_A =mkAdjective "rungi" Post False False False; --: A ;
good_A =mkAdjective "rungi" Post False False; --: A ; heavy_A = mkAdjective "kuremeera" Post False 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 "kwosya" Post False 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 False; --: A ;
new_A = mkAdjective "sya" Post False False; --: A ; old_A = mkAdjective "kúru" Post False False False; --: A ;
old_A = mkAdjective "kúru" Post False False; --: A ; ready_A = mkAdjective "eteekateekire" Post False False False; --: A ;
ready_A = mkAdjective "eteekateekire" Post False False; --: A ; red_A = mkAdjective "kutukura" Post False False False; --: A ;
red_A = mkAdjective "kutukura" Post False False; --: A ; small_A = mkAdjective "kye" Post False False False;
small_A = mkAdjective "kye" Post False False; warm_A = mkAdjective "kutagata" Post False False False;--: A ;
warm_A = mkAdjective "kutagata" Post False False;--: A ; white_A = mkAdjective "rikwera" Post False False False;--: A ;
white_A = mkAdjective "rikwera" Post False False;--: A ; yellow_A = mkAdjective "kinekye" Post True True False;--: A ; or yero, or kyenju
yellow_A = mkAdjective "kinekye" Post True True;--: A ; or yero, or kyenju young_A = mkAdjective "to" Post False False False;--: A ;
young_A = mkAdjective "to" Post False False;--: A ; green_A =mkAdjective "kijubwe" Post False True False;
green_A =mkAdjective "kijubwe" Post False True; thin_A = mkAdjective "kye" Post False False False;
thin_A = mkAdjective "kye" Post False False;
--ditransitive verbs --ditransitive verbs
bite_V2 = mkV2 "rum"; bite_V2 = mkV2 "rum";
@@ -149,7 +148,7 @@ lin
--beg_V2V : V2V ; --beg_V2V : V2V ;
--Adverbs --Adverbs
now_Adv = mkAdv "hati" AgrNo; now_Adv = mkAdv "hati" AgrNo;
--far_Adv = mkAdv "hare"; far_Adv = mkAdv "hare" AgrNo;
today_Adv = mkAdv "erizooba" AgrNo; today_Adv = mkAdv "erizooba" AgrNo;
@@ -158,298 +157,256 @@ 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 False;
laugh_V = mkV "sheka"; laugh_V = mkV "shek";
beautiful_A = mkAdjective "rungi" Post False False False;
airplane_N = mkN "endegye" N_N; airplane_N = mkN "endegye" N_N;
{-- year_N = mkN "omwaka" "emyaka" MU_MI;
answer_V2S
apartment_N -- New Lexicon
art_N {-
ashes_N Perhaps create an adverb form whose
ask_V2Q surface realisation comes from verb tense e.g nagyenzire implies I have alredy gone.
back_N -}
bank_N already_Adv = mkAdv "" AgrNo; -- Already is realized as a verb form
bark_N --answer_V2S = mkV2S (mkV "garu" "kamu" "kiremu") noPrep;
beautiful_A apartment_N = mkN "apatimenti" "apatimenti" N_N;
beg_V2V art_N = mkN "aati" "aati" N_N;
belly_N ashes_N = mkN "eiju" "eiju" N_N;
blow_V --ask_V2Q = mkV2Q (mkV2 "bunza" "za" "rize") noPrep;
bone_N back_N = mkN "omugongo" MU_MI;
boot_N bank_N = mkN "banka" "banka" N_N;
boss_N bark_N = mkN "ask for the Rukiga equivalent of bark" N_N; --TODO find actual word
breast_N beg_V2V = mkV2V (mkV "shab" "a" "ire") noPrep toP ;
breathe_V belly_N = mkN "eibondo" "amabondo" I_MA ;
broad_A blow_V = mkV "hag" "a" "ire" ;
brother_N2 bone_N = mkN "eigufa" "amagufa" I_MA ;
brown_A boot_N = mkN "buuntu" "buuntu" N_N ;
burn_V boss_N = mkN "mukama" "bakama" MU_BA ;
butter_N breast_N = mkN "eibere" "amabere" I_MA ;
camera_N breathe_V = mkV "is" "a" "ire";
cap_N broad_A = mkAdjective "TODO : Ask for the right word for broad" Post False False False;
carpet_N --Note: younger brother. mukuru and others
ceiling_N --brother_N2 = mkN2 (mkN "murumuna" "barumuna" MU_BA) (mkPrep "" "" True) ;
cheese_N newspaper_N = mkN "eihurire" I_MA;
church_N night_N = mkN "ekiro" N_ZERO;
coat_N nose_N = mkN "enyindo" N_N;
country_N --number_N = mkN "enamba" N_N -- TODO look out for the correct word
cousin_N oil_N = mkN "amajuta" N_N;
day_N open_V2 = mkV2 "yingura" "ura" "wire";
dig_V brown_A = mkAdjective "TODO: Get the right word for brown" Post False True False;
dirty_A burn_V = mkV "batur" "a" "ire";
doctor_N butter_N = mkN "amajuta g'ente" "amajuta g'ente" N_N;
door_N camera_N = mkN "kamera" "kamera" ZERO_ZERO;
dry_A cap_N = mkN "TODO-enkofiira" "enkofiira" N_N;
dull_A carpet_N = mkN "kapeti" "kapeti" ZERO_ZERO;
dust_N ceiling_N = mkN "TO-DO:silingi" "TO-DO:silingi" N_N;
ear_N cheese_N = mkN "TO-DO" "TO-DO" N_N;
earth_N church_N = mkN "ekelezia" "amakelezia" N_N;
easy_A2V coat_N = mkN "kabuti" "kabuti" ZERO_ZERO;
egg_N country_N = mkN "eihanga" "amahanga" I_MA;
empty_A cousin_N = mkN "munyanyako" "banyanyako" MU_BA;
enemy_N day_N = mkN "eizooba" "amazoba" I_MA;
factory_N dig_V = mkV "hiing" "a" "ire";
fall_V dirty_A = mkAdjective "rofa" Post False False False;
far_Adv door_N = mkN "orwigi" "enyigi" RU_N;
fat_N dry_A = mkAdjective "yoma" Post False False False;
feather_N dull_A = mkAdjective "TODO: find out word for dull" Post False False False;
fight_V2 dust_N = mkN "omucuucu" "omucuucu" ZERO_ZERO;
fingernail_N ear_N = mkN "okutu" "amatu" KU_MA;
float_V earth_N = mkN "ensi" "ensi" N_N;
floor_N easy_A2V = mkA2V "yaguhi" Post False False False;
flow_V egg_N = mkN "eihuri" "amahuri" I_MA;
fly_V empty_A = mkAdjective "rimu busha" Post False True False;
fog_N enemy_N = mkN "TODO : cofirm omurabe" "TODO : cofirm abarabe" MU_BA;
foot_N factory_N = mkN "TODO : cofirm fakatore" "TODO : cofirm fakatore" N_N;
forest_N fall_V = mkV "gw" "a" "ire";
forget_V2 fat_N = mkN "ebishaju" "ebishaju" ZERO_ZERO;
freeze_V feather_N = mkN "ekyoya" "ebyoya" KI_BI;
fridge_N fight_V2 = mkV2 "rwan" "a" "ire";
fruit_N fingernail_N = mkN "ekyara ky'engaro" "ebyara by'engaro" KI_BI;
full_A --float_V
fun_AV --floor_N
garden_N flow_V = mkV "TODO: confirm himintuk" "a" "ire";
glove_N fly_V = mkV "guruk" "a" "ire";
gold_N fog_N = mkN "TODO word for fog" "TODO word for fog" N_N;
grass_N foot_N = mkN "ekigyere" "ebigyere" KI_BI;
guts_N forest_N = mkN "eihamba" "amahamba" I_MA;
hair_N forget_V2 = mkV2 "yebw" "a" "ire";
hand_N freeze_V = mkV "kwat" "a" "sire";
harbour_N fridge_N = mkN "firigi" "firigi" ZERO_ZERO;
hat_N fruit_N = mkN "ekijuma" "ebijuma" KI_BI;
hate_V2 full_A = mkAdjective "injwire" Post False True False;
head_N --fun_AV = mkAdjective
hear_V2 garden_N = mkN "omusiri" "emisiri" MU_MI;
heart_N glove_N = mkN "gilavu" "gilavu" ZERO_ZERO;
hill_N gold_N = mkN "TODO:feza" "TODO:feza" ZERO_ZERO;
hit_V2 grass_N = mkN "akanyaasi" "obunyaasi" KA_BU;
hold_V2 guts_N = mkN "orubondo" "amabondo" RU_MA;
horn_N hair_N = mkN "eishokye" "eishokye" N_N;
hunt_V2 hand_N = mkN "omukono" "emikono" MU_MI;
husband_N -- harbour_N
ice_N hate_V2 = mkV2 "kwag" "a" "ire";
important_A head_N = mkN "omutwe" MU_MI;
industry_N hear_V2 = mkV2 "hurir" "a" "e";
iron_N heart_N = mkN "omutima" "emitima" MU_MI;
king_N hill_N = mkN "orushozi" "enshozi" N_N;
knee_N hit_V2 = mkV2 "kangaa" "ta" "sire";
know_V2 hold_V2 = mkV2 "kwa" "ta" "sire";
lake_N horn_N = mkN "eihembe" "amahembe" I_MA;
lamp_N hunt_V2 = mkV2 "hiig" "a" "ire";
leaf_N husband_N = mkN "iba" "biba" ZERO_ZERO;
learn_V2 -- ice_N
leather_N important_A = mkAdjective "omugasho" Post False True False;
leave_V2 --industry_N =
left_Ord iron_N = mkN "ekyoma ebirikurunga omu butare" "ebyoma ebirikurunga omu butare" ZERO_ZERO;
leg_N king_N = mkN "omugabe" MU_BA;
lie_V knee_N = mkN "okuju" "amaju" KU_MA;
like_V2 know_V2 = mkV2 "many" "a" "ire";
listen_V2 lake_N = mkN "enyanja" "enyanja" N_N;
liver_N lamp_N = mkN "entara" "entara" N_N;
long_A leaf_N = mkN "ibabi" "amababi" I_MA;
lose_V2 learn_V2 = mkV2 "yeg" "a" "ire";
louse_N leather_N = mkN "oruhu" "empu" RU_N; --I think plural should be oruhu again
love_N leave_V2 = mkV2 "rug" "a" "ire";
married_A2 left_Ord = mkOrd "bumosho";
moon_N leg_N = mkN "okuguru" "amaguru" KU_MA;
mother_N2 lie_V = mkV "beih" "a" "ire";
mountain_N like_V2 = mkV2 "kun" "da" "zire";
mouth_N listen_V2 = mkV2 "huri" "iriza" "riize";
name_N liver_N = mkN "ekine" "ebine" KI_BI;
narrow_A long_A = mkAdjective "raingwa" Post False False False;
near_A --lose_V2 = mkV2 ""
neck_N louse_N = mkN "omura" "emira" MU_MI;
newspaper_N love_N = mkN "rukundo" "rukundo" ZERO_ZERO;
night_N -- married_A2
nose_N moon_N = mkN "okwezi" "emwezi" KU_MA;
number_N --mother_N2 = mkN2 (mkN "mama" ZERO_BAA) (lin Prep (mkPrep [] [] True)) ;
oil_N --mountain_N = mkN
open_V2 mouth_N = mkN "omunwa" "eminwa" MU_MI;
paint_V2A name_N = mkN "eiziina" "amaziina" I_MA;
paper_N narrow_A = mkAdjective "kye" Post False False False;
peace_N near_A = mkAdjective "hihi" Pre False True False; -- the preposition is "na"
pen_N neck_N = mkN "ebisya" "ebisya" ZERO_ZERO;
person_N -- paint_V2A
planet_N paper_N = mkN "orupapura" "empapura" RU_N;
plastic_N peace_N = mkN "obusingye" "obusingye" ZERO_BU;
play_V2 pen_N = mkN "akacumu" "obucumu" KA_BU;
policeman_N planet_N = mkN "ensi" "ensi" N_N;
priest_N plastic_N = mkN "pulasitika" "pulasitika" ZERO_ZERO;
probable_AS play_V2 = mkV2 "zaan" "a" "ire";
pull_V2 policeman_N = mkN "omupolisi" "abapolisi" MU_BA;
push_V2 priest_N = mkN "omuhongyerezi" "abahongyerezi" MU_BA;
put_V2 -- probable_AS
queen_N pull_V2 = mkV2 "kuru" "ra" "ire";
question_N push_V2 = mkV2 "sindik" "a" "ire";
radio_N put_V2 = mkV2 "t" "a" "ire";
rain_N queen_N = mkN "Kwini" "baakwini" ZERO_BAA;
rain_V0 question_N = mkN "ekibuzo" "ebibuzo" KI_BI;
religion_N radio_N = mkN "radiyo" "radiyo" ZERO_ZERO;
restaurant_N rain_N = mkN "enjura" "enjura" ZERO_N;
right_Ord -- rain_V0
road_N religion_N = mkN "endiini" "endiini" N_N;
rock_N restaurant_N = mkN "hooteeri" "hooteeri" ZERO_ZERO;
roof_N right_Ord = mkOrd "buryo";
root_N road_N = mkN "orugundo" "engundo" RU_N;
rope_N -- rock_N
rotten_A --roof_N = mkN ""
round_A root_N = mkN "omuzi" "emizi" MU_MI;
rub_V2 rope_N = mkN "omuguha" "emiguha" MU_MI;
rubber_N rotten_A = mkAdjective "njuzire" Post False False False;
salt_N -- round_A
sand_N rub_V2 = mkV2 "harabur" "a" "ire";
school_N -- rubber_N
science_N salt_N = mkN "omwonyo" "emyonyo" MU_MI;
scratch_V2 sand_N = mkN "omushenyi" MU_MI;
seed_N school_N = mkN "eishomero" I_MA;
seek_V2 science_N = mkN "sayansi" "sayansi" ZERO_ZERO;
sew_V scratch_V2 = mkV2 "ha" "ra" "ire";
sharp_A seed_N = mkN "ensingo" "ensigo" N_N;
shirt_N seek_V2 = mkV2 "kyenuuz" "a" "ire";
shoe_N sew_V = mkV "ruk" "a" "ire";
shop_N sharp_A = mkAdjective "shazire" Post False False False;
short_A shirt_N = mkN "esaati" "esaati" ZERO_ZERO; --TODO: confirm this entry
silver_N shoe_N = mkN "enkaito" "enkaito" N_N; --TODO : confirm the existence of this entry
sing_V shop_N = mkN "eduuka" "eduuka" ZERO_ZERO;
sister_N short_A = mkAdjective "gufu" Post False False False;
sit_V --silver_N
skin_N sing_V = mkV "yeshogor" "ora" "wire"; --TODO : confirm this word and the conjugation
sky_N sister_N = mkN "munyanyazi" "banyanyanzi" MU_BA;
smell_V sit_V = mkV "shutam" "a" "ire";
smoke_N --skin_N = mkN "omubiri" "emibiri" MU_MI; This is wrong
smooth_A sky_N = mkN "eiguru" "eiguru" ZERO_ZERO;
snake_N smell_V = mkV "kag" "a" "ire";
snow_N smoke_N = mkN "omwika" "emyiika" MU_MI;
sock_N --smooth_A
song_N snake_N = mkN "enjoka" "enjoka" N_N;
speak_V2 -- snow_N
spit_V sock_N = mkN "sitokisi" "sitokisi" ZERO_ZERO;
split_V2 song_N = mkN "ekyeshongoro" "ebyeshongoro" KI_BI;
squeeze_V2 speak_V2 = mkV2 "gamba";
stab_V2 spit_V = mkV "cwer" "a" "ire";
stand_V split_V2 = mkV2 "gangabura";
steel_N squeeze_V2 =mkV2 "imat" "a" "si";
stick_N stab_V2 = mkV2 "cumi" "ta" "sire"; --edit for Runyankore
stone_N stand_V = mkV "yemerera" "ra" "ire";
stop_V -- steel_N
stove_N stick_N = mkN "omunyafu" "eminyafu" MU_MI;
straight_A stone_N = mkN "eibare" "amabara" I_MA;
student_N stop_V = mkV "komya" "ya" "ize";
stupid_A stove_N = mkN "sitoovu" "sitoovu" ZERO_ZERO;
suck_V2 straight_A = mkAdjective "gorwire" Post False False False;
sun_N student_N = mkN "omwana w'eishomero" "abaana b'eishomero" MU_BA;
swell_V stupid_A = mkAdjective "himbagire" Post False False False;
switch8on_V2 suck_V2 = mkV2 "komaguza" "za" "ize";
table_N sun_N = mkN "omushana" "omushana" MU_ZERO;
tail_N swell_V = mkV "bimba";
teacher_N switch8on_V2 = mkV2 "ya" "sya" "kise";
thick_A table_N = mkN "emeeza" "emeeza" N_N;
think_V tail_N = mkN "omukira" "emikira" MU_MI;
throw_V2 teacher_N = mkN "omushomesa" "abashomesa" MU_BA;
tie_V2 -- thick_A
tongue_N --think_V = mkV
tooth_N throw_V2 = mkV2 "naga";
turn_V tie_V2 = mkV2 "siba";
ugly_A tongue_N = mkN "orurimi" RU_N;
uncertain_A tooth_N = mkN "erino" "amino" RI_MA;
university_N turn_V = mkV "hinduka";
village_N ugly_A = mkAdjective "bi" Post False False False; --I think I should add another boolean for copulative version
vomit_V uncertain_A = mkAdjective "manyirwe" Post False False True; -- we need to investigate the place of negative adjectives i.e those that come from positive words
war_N university_N = mkN "yunivasite" "yunivasite" ZERO_ZERO;
wash_V2 village_N = mkN "ekyalo" "ebyalo" KI_BI;
watch_V2 vomit_V = mkV "tanaka";
wet_A war_N = mkN "orutaro" "entaro" RU_N;
wide_A wash_V2 = mkV2 "yozya" "zya" "yogize";
wife_N watch_V2 = mkV2 "reeba";
win_V2 wet_A = mkAdjective "jubire" Post False False False;
wind_N wide_A = mkAdjective "hango" Post False False False;
window_N wife_N = mkN "omukyara" "abakyara" MU_BA;
wing_N win_V2 = mkV2 "singa";
wipe_V2 wind_N = mkN "omuyaga" "emiyaga" MU_MI;
wonder_VQ window_N = mkN "eidirisa" "eidirisa" N_N;
wood_N wing_N = mkN "eipapa" "amapapa" I_MA;
worm_N wipe_V2 = mkV2 "sim" "ura" "wire";
write_V2 --wonder_VQ = mkV2Q (mkV2 "tanga" "ara" "ire") noPrep;
wood_N = mkN "ekiti" "ebiti" KI_BI;
--worm_N
write_V2 = mkV2 "handika";
--}
year_N = mkN "omwaka" "emyaka" MU_MI;
-- 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

@@ -39,7 +39,7 @@ lin
}; };
True => { True => {
s = \\ num, ns => (cn.s ! num ! ns) ++ s = \\ num, ns => (cn.s ! num ! ns) ++
mkGenPrepNoIVClitic (AgP3 num cn.gender) ++ ap.s ! AgP3 Sg KI_BI; mkGenPrepNoIV (AgP3 num cn.gender) ++ ap.s ! AgP3 Sg KI_BI;
gender = cn.gender; nounCat = cn.nounCat gender = cn.gender; nounCat = cn.nounCat
} }
}; };
@@ -210,9 +210,9 @@ SentCN cn sc = {s = \\ n, ns => cn.s!n!ns ++ sc.s; gender = cn.gender; nounCat
-- (New 13/3/2013 AR; Structural.possess_Prep and part_Prep should be deprecated in favour of these.) -- (New 13/3/2013 AR; Structural.possess_Prep and part_Prep should be deprecated in favour of these.)
--PossNP : CN -> NP -> CN ; -- house of Paris, house of mine --PossNP : CN -> NP -> CN ; -- house of Paris, house of mine
PossNP cn np ={s =\\n,ns => cn.s! n ! ns ++ mkGenPrepNoIVClitic np.agr ++ np.s ! Nom; gender = cn.gender; nounCat = cn.nounCat}; PossNP cn np ={s =\\n,ns => cn.s! n ! ns ++ mkGenPrepNoIV np.agr ++ np.s ! Nom; gender = cn.gender; nounCat = cn.nounCat};
--PartNP : CN -> NP -> CN ; -- glass of wine --PartNP : CN -> NP -> CN ; -- glass of wine
PartNP cn np ={s =\\n,ns => cn.s! n ! ns ++ mkGenPrepNoIVClitic np.agr ++ np.s ! Nom; gender = cn.gender; nounCat = cn.nounCat}; PartNP cn np ={s =\\n,ns => cn.s! n ! ns ++ mkGenPrepNoIV np.agr ++ np.s ! Nom; gender = cn.gender; nounCat = cn.nounCat};
{- {-
--1 Noun: Nouns, noun phrases, and determiners --1 Noun: Nouns, noun phrases, and determiners

View File

@@ -125,7 +125,7 @@ lin pot3plus n m = let
n : Number n : Number
} ; } ;
mkOrdinal : Str -> Agreement => Str =\c -> \\agr => mkGenPrepWithIVClitic ! agr ++ c; mkOrdinal : Str -> Agreement => Str =\c -> \\agr => mkGenPrepWithIV ! agr ++ c;
{- {-
--1 Numerals --1 Numerals

View File

@@ -1,5 +1,21 @@
--# -path=.:../prelude:../abstract:../common --# -path=.:../prelude:../abstract:../common
--1 Rukiga Lexical Paradigms
--
-- David Bamutura 2017--2020
-- based on the English Paradigms file.
-- This is an API for the user of the resource grammar
-- for adding lexical items. It gives functions for forming
-- expressions of open categories: nouns, adjectives, verbs.
--
-- Closed categories (determiners, pronouns, conjunctions) are
-- accessed through the resource syntax API, $Structural.gf$.
--
-- The structure of functions for each word class $C$ is the following:
-- first we give a handful of patterns that aim to cover all
-- regular cases. Then we give a worst-case function $mkC$, which serves as an
-- escape to construct the most irregular words of type $C$.
resource ParadigmsCgg = resource ParadigmsCgg =
open (Predef=Predef), ResCgg, CatCgg, Prelude in { open (Predef=Predef), ResCgg, CatCgg, Prelude in {
@@ -27,12 +43,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 =[]};
@@ -43,37 +61,38 @@ 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) --%
-- } ;
mkN2 = overload {
mkN2 : N -> Prep -> N2 = prepN2 ;
--mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPrep s);
--mkN2 : Str -> Str -> N2 = \n,s -> prepN2 (regN n) (mkPrep s);
--mkN2 : N -> N2 = \n -> prepN2 n (mkPrep "of") ;
--mkN2 : Str -> N2 = \s -> prepN2 (regN s) (mkPrep "of")
} ; } ;
--3 Relational nouns -- mkN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
-- False => lin N2 (n ** {c2 =\\_=> p.s}) ;
mkN2 : overload { -- True => lin N2 (n ** {c2 = mkGenPrepWithIV }) --avoiding lock_C fields
mkN2 : Str -> N2; -- reg. noun, prep. "of" --% -- };
mkN2 : N -> N2 ; -- e.g. wife of (default prep. to) prepN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
mkN2 : N -> Str -> N2 ; -- access to --%
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{
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,206 +103,160 @@ 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 -> Prep;
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)
--V2V verbs mkV2Q v p = lin V2Q (prepV2 v p) ;
--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}) ;
} ; } ;
-- Verbs with a particle.
-- The particle, such as in "switch on", is given as a string.
mkV2V : overload { partV : V -> Str -> V ; -- with particle, e.g. switch + on
mkV2V : Str -> V2V ; partV v p = lin V {s = v.s ;
mkV2V : V -> V2V ; pres = v.pres;
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP) perf = v.perf;
} ; isPresBlank = v.isPresBlank;
isPerfBlank = v.isPerfBlank;
isRegular = v.isRegular;
p = p ;
isRefl = v.isRefl
} ;
partV2 : V2 -> Str -> V2 ; -- with particle, e.g. switch + on
partV2 v p = lin V2 {s = v.s ;
pres = v.pres;
perf = v.perf;
isPresBlank = v.isPresBlank;
isPerfBlank = v.isPerfBlank;
isRegular = v.isRegular;
p = p ;
isRefl = v.isRefl;
comp = []; isCompN2 = False} ;
-} -- mkVA : V -> VA ; -- e.g. become (AP)
--mkV = overload { -- mkV2A : overload {
--mkV : (cry : Str) -> V -- mkV2A : V -> V2A ; -- e.g. paint (NP) (AP)
--= \cry -> lin V (mkVerb cry) ; -- what does it mean to create a lin on the fly -- mkV2A : V -> Prep -> V2A ; -- backwards compatibility
--}; -- mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. strike (NP) as (AP)
-- } ;
-- mkVQ : V -> VQ ; -- e.g. wonder (QS)
-- mkV2Q : V -> Prep -> V2Q ; -- e.g. ask (NP) (QS)
-- mkAS : A -> AS ; --%
-- mkA2S : A -> Prep -> A2S ; --%
-- mkAV : A -> AV ; --%
-- mkA2V : A -> Prep -> A2V ; --%
{- Note: The following is copied from the file swahili/ParadigmsSwa.gf -- Notice: Categories $V0, AS, A2S, AV, A2V$ are just $A$.
-- $V0$ is just $V$; the second argument is treated as adverb.
--1 Swahili Lexical Paradigms V0 : Type ; --%
AS, A2S, AV, A2V : Type ; --%
--2 Parameters --2 Other categories
--
-- To abstract over gender names, we define the following identifiers.
oper mkSubj : Str -> Subj = \s -> lin Subj {s = s} ; --%
Animacy : Type ; mkInterj : Str -> Interj
= \s -> lin Interj (ss s) ;
animate : Animacy ;
inanimate : Animacy ;
-- To abstract over number names, we define the following.
Number : Type ;
singular : Number ;
plural : Number ;
-- To abstract over case names, we define the following.
Case : Type ;
nominative : Case ;
locative : Case ;
-- To abstract over nounclass names, we define the following.
Gender : Type ;
m_wa : Gender ;
m_mi : Gender ;
ji_ma : Gender ;
e_ma : Gender ;
ma_ma : Gender ;
ki_vi : Gender ;
e_e : Gender ;
u_u : Gender ;
u_ma : Gender ;
u_e : Gender ;
--2 Nouns
-- Worst case: give all four forms and the semantic gender.
mkN : (mtu,watu : Str) -> Gender -> Animacy -> N ;
-- The regular function captures the variants for nouns depending on Gender and Number
regN : Str -> Gender -> Animacy -> N ;
-- In practice the worst case is just: give singular and plural nominative.
mk2N : (mtu , watu : Str) -> Gender -> Animacy -> N ;
mk2N x y g anim = mkNounIrreg x y g anim ** {lock_N = <>};
mkN2 : N -> Prep -> N2 ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p.s ; lock_N2 = <>} ;
mkPrep : Str -> Prep ;
-- mkPrep p = {s = p ; c = CPrep PNul ; isDir = False ; lock_Prep = <>} ;
mkPrep p = {s = p ; lock_Prep = <>} ;
--3 Relational nouns
--
-- Relational nouns ("fille de x") need a case and a preposition.
-- All nouns created by the previous functions are marked as
-- $nonhuman$. If you want a $human$ noun, wrap it with the following
-- function:
-- genderN : Gender -> N -> N ;
-- For regular adjectives, the adverbial form is derived. This holds
-- even for cases with the variation "happy - happily".
regA : Str -> A ;
-- If comparison is formed by "kuliko", as usual in Swahili,
-- the following pattern is used:
compADeg : A -> A ;
--.
--2 Definitions of paradigms --2 Definitions of paradigms
-- --
-- The definitions should not bother the user of the API. So they are -- The definitions should not bother the user of the API. So they are
-- hidden from the document. -- hidden from the document.
--.
Animacy = ResSwa.Animacy ;
Number = ResSwa.Number ;
Case = ResSwa.Case ;
Gender = ResSwa.Gender ;
animate = AN ;
inanimate = IN ;
singular = Sg ;
plural = Pl ;
nominative = Nom ;
locative = Loc ;
m_wa = g1_2 ;
m_mi = g3_4 ;
ji_ma = g5_6 ;
e_ma = g5a_6 ;
ma_ma = g6 ;
ki_vi = g7_8 ;
e_e = g9_10 ;
u_u = g11 ;
u_ma = g11_6 ;
u_e = g11_10 ;
VForm = ResSwa.VForm ;
-- regN x g anim = mkNomReg x g anim ** {lock_N = <>} ; -- Rearrange this document in future so that a paradigms file is
-- as should be i.e with an abstract part and a a part with
-- definitions
mkOrd : Str -> Ord = \s -> lin Ord { s = \\_=>s; position = Post};
V0 : Type = V ;
AS, A2S, AV : Type = A ;
A2V : Type = A2 ;
mkV0 : V -> V;
mkV0 v = v ;
mkA2 : Str -> Position -> Bool -> Bool ->Bool-> A2V = \a2, pos, isProper, isPrep,isNeg ->
lin A2V ((mkAdjective a2 pos isProper isPrep isNeg) ** {c2 = ""; isPre = True});
--mkA2V : A -> A2V;
--mkA2V a = lin A2V (a * {c2 = ""; isPre = True});
mkA2V : Str -> Position -> Bool -> Bool ->Bool-> A2 =\a2, pos, isProper, isPrep,isNeg -> lin A2 ((mkAdjective a2 pos isProper isPrep isNeg) ** {c2 = ""; isPre = True});
regN = \x,g,anim ->
mkNomReg x g anim ** {lock_N = <>} ;
-- mkN x y g anim = mkNounIrreg x y g anim ** {lock_N = <>} ; -- Adverbs modifying numerals
mkN = \x,y,g,anim ->
mkNounIrreg x y g anim ** {lock_N = <>} ;
-- Adjectives mkAdN : Str -> AdN ; -- e.g. approximately
mkCAdv : Str -> CAdv ;
mkAdN x = lin AdN (ss x) ;
mkCAdv x = lin CAdv (ss x ** {p = []}) ;
regA a = compADeg { mkConj : overload {
s = \\_ => (mkAdjective a).s ; mkConj : Str -> Conj ; -- and (plural agreement) --%
lock_A = <>} ; mkConj : Str -> Number -> Conj ; -- or (agrement number given as argument) --%
mkConj : Str -> Str -> Conj ; -- both ... and (plural) --%
mkConj : Str -> Str -> Number -> Conj ; -- either ... or (agrement number given as argument) --%
} ;
compADeg a = mkConj = overload {
{ mkConj : Str -> Conj = \y -> mk2Conj [] y Pl ; -- when you have simply and
s = table { mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ;
Posit => a.s ! Posit ; mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y Pl ; -- when you have both ... and ...
_ => \\f => a.s ! Posit ! f ++ "kuliko" mkConj : Str -> Str -> Number -> Conj = mk2Conj ;
} ; } ;
lock_A = <>} ;
-- Verbs mk2Conj : Str -> Str -> Number -> Conj = \x,y,n ->
regV : Str -> V ; lin Conj {s = \\_=>x; s2 = y; n = n};
regV = \enda -> mkV enda ** {s1 = [] ; lock_V = <>} ;
{-- --2 Adverbs
mkV2 = overload {
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
mkV2 : V -> V2 = dirV2 ;
mkV2 : V -> Prep -> V2 = mmkV2
} ;
mmkV2 : V -> Prep -> V2 ; -- Adverbs are not inflected. Most lexical ones have position
mmkV2 v p = v ** {c2 = p ; lock_V2 = <>} ; -- after the verb. Some can be preverbal (e.g. "always").
dirV2 : V -> V2 = \v -> mmkV2 v "na" ;
--}
--2 Adverbs mkAdv : Str -> AgrExist -> Adv ; -- e.g. today
-- Adverbs are not inflected. Most lexical ones have position --mkAdV : Str -> AdV ; -- e.g. always
-- after the verb.
mkAdv : Str -> Adv ; -- Adverbs modifying adjectives and sentences can also be formed.
mkAdv x = ss x ** {lock_Adv = <>} ;
-} mkAdA : Str -> Position -> AdA ; -- e.g. quite
--mkCAdv : Str -> Str -> Str -> CAdv ; -- more than/no more than
mkAdv x agrEx = lin Adv {s = x ; agr = agrEx } ;
mkAdA x pos = lin AdA {s = x ; position = pos } ; -- e.g. quite
} }

View File

@@ -9,7 +9,9 @@ lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
NoPConj = {s = ""} ; NoPConj = {s = ""} ;
PConjConj conj = {s = conj.s ! AConj Other} ;
NoVoc = {s = ""} ; NoVoc = {s = ""} ;
VocNP np = {s=np.s !Nom} ;
-- Utterances are formed from sentences, questions, and imperatives. -- Utterances are formed from sentences, questions, and imperatives.
UttNP np = {s= np.s!Acc}; --: NP -> Utt ; UttNP np = {s= np.s!Acc}; --: NP -> Utt ;
@@ -31,8 +33,14 @@ lin
--UttAdv : Adv -> Utt ; -- here --UttAdv : Adv -> Utt ; -- here
UttAdv adv = {s= adv.s}; UttAdv adv = {s= adv.s};
--can be improved upon -- better but can be improved upon
UttVP vp = {s = vp.adv ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++vp.comp2 ++ vp.ap }; UttVP vp = case <vp.isCompApStem,vp.containsAdv, vp.containsAdV,vp.containsComp, vp.containsComp2> of {
<False,False,True,False,False> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.adV};
<False,True,False,False,False> =>{s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.adv};
<_, _,_,True,False> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.comp};
<_, _,_,True, True> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++ vp.comp2};
<_, _,_,_, _> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres}
};
UttAP ap = {s=ap.s!(AgP3 Sg KI_BI)}; UttAP ap = {s=ap.s!(AgP3 Sg KI_BI)};

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,7 +117,22 @@ 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 ->{
s = rad; s = 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
@@ -158,7 +177,7 @@ oper
< "e" + "ki" + stem, KI_BI > => mkNoun omuntu (combine_morphemes "ebi" stem) g ; < "e" + "ki" + stem, KI_BI > => mkNoun omuntu (combine_morphemes "ebi" stem) g ;
< "e" + "ki" + stem, KI_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural < "e" + "ki" + stem, KI_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural
< "e" + "i" + stem, I_MA > => mkNoun omuntu (combine_morphemes "ama" "") g ; < "e" + "i" + stem, I_MA > => mkNoun omuntu (combine_morphemes "ama" stem) g ;
< "e" + "i" + stem, I_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural < "e" + "i" + stem, I_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural
< "e" + "ri" + stem, RI_MA > => mkNoun omuntu (combine_morphemes "ama" stem) g ; < "e" + "ri" + stem, RI_MA > => mkNoun omuntu (combine_morphemes "ama" stem) g ;
< "e" + "ri" + stem, RI_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural < "e" + "ri" + stem, RI_ZERO > => mkNoun omuntu (combine_morphemes "" "") g ; -- does not exist as plural
@@ -169,7 +188,7 @@ oper
--< _ ,ZERO_MA > => mkNoun omuntu ("ama" + stem) g (Predef.drop 1 omuntu); --< _ ,ZERO_MA > => mkNoun omuntu ("ama" + stem) g (Predef.drop 1 omuntu);
--< _ ,> => mkNoun omuntu omuntu g (Predef.drop 1 omuntu); --< _ ,> => mkNoun omuntu omuntu g (Predef.drop 1 omuntu);
<_ , ZERO_BAA> => mkNoun omuntu ("baa" + omuntu) g ; <_ , ZERO_BAA> => mkNoun omuntu ("baa" + omuntu) g ;
< _ ,_ > => mkNoun omuntu omuntu g-- improve as we go on. < _ ,_ > => mkNoun omuntu omuntu g -- improve as we go on.
}; };
@@ -544,8 +563,8 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
_ => mkClitic "-" -- Hopefully exhausted all forms _ => mkClitic "-" -- Hopefully exhausted all forms
}; };
Adverb = {s :Str; agr : AgrExist} ; Adverb : Type = {s :Str; agr : AgrExist} ;
mkAdv: Str -> AgrExist -> Adverb =\str, agr ->{s=str; agr=agr};
--dealing with the adjective --dealing with the adjective
{- {-
The Adjective can be before the noun for TRUE or The Adjective can be before the noun for TRUE or
@@ -571,9 +590,14 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
--AdjectivalPhrase : Type {s : Str ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool} ; --AdjectivalPhrase : Type {s : Str ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool} ;
AdjectivalPhrase : Type = {s : Str ; position : Position; isProper : Bool; isPrep: Bool}; AdjectivalPhrase : Type = {s : Str ; position : Position; isProper : Bool; isPrep: Bool};
--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 ;
mkAdjective: Str -> Position -> Bool -> Bool -> Adjective = \ a , pos, isProper, isPrep -> position : Position;
{ s = a ; position = pos ; isPre = False; isProper = isProper; isPrep = isPrep}; isProper : Bool;
isPrep: Bool;
isNeg : Bool -- this is for specifying that uncertain is the negative of certain
};
mkAdjective: Str -> Position -> Bool -> Bool ->Bool-> Adjective = \ a , pos, isProper, isPrep,isNeg ->
{ s = a ; position = pos ; isPre = False; isProper = isProper; isPrep = isPrep; isNeg = isNeg};
{- {-
TO DO: TO DO:
@@ -679,35 +703,35 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
-- 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?
mkThis = table{ mkThis = table{
AgMUBAP1 Sg => mkClitic "ogu"; AgMUBAP1 Sg => "ogu";
AgMUBAP1 Pl => mkClitic "aba" ; AgMUBAP1 Pl => "aba" ;
AgMUBAP2 Sg => mkClitic "ogu"; --probably an error check your grammar book AgMUBAP2 Sg => "ogu"; --probably an error check your grammar book
AgMUBAP2 Pl => mkClitic "aba" ; AgMUBAP2 Pl => "aba" ;
AgP3 Sg MU_BA => mkClitic "ogu"; AgP3 Sg MU_BA => "ogu";
AgP3 Pl MU_BA => mkClitic "aba" ; AgP3 Pl MU_BA => "aba" ;
AgP3 Pl ZERO_BU => mkClitic "obu" ; AgP3 Pl ZERO_BU => "obu" ;
AgP3 Sg BU_MA => mkClitic "obu" ; AgP3 Sg BU_MA => "obu" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; AgP3 Pl (KA_BU | RU_BU) => "obu" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; AgP3 Pl (KI_BI | ZERO_BI) => "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) => "aga";
AgP3 Sg ZERO_MA => mkClitic "aga"; AgP3 Sg ZERO_MA => "aga";
AgP3 ( Pl) HA => mkClitic "aha" ; -- of place HA AgP3 ( Pl) HA => "aha" ; -- of place HA
AgP3 ( Pl) MU => mkClitic "omu" ; -- of place MU AgP3 ( Pl) MU => "omu" ; -- of place MU
AgP3 ( Pl) KU => mkClitic "oku" ; -- of place KU AgP3 ( Pl) KU => "oku" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "eri" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) => "eri" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aka" ; AgP3 Sg (KA_ZERO | KA_BU) => "aka" ;
AgP3 Sg KI_BI => mkClitic "eki" ; AgP3 Sg KI_BI => "eki" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "oku" ; AgP3 Sg (KU_ZERO | KU_MA) => "oku" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogu" ; AgP3 Sg (MU_MI | MU_ZERO) => "ogu" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "oru" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "oru" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otu" ; AgP3 Pl (ZERO_TU | KA_TU) => "otu" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "egi" ; AgP3 Sg (ZERO_ZERO | N_N) => "egi" ;
AgP3 Pl ZERO_MI =>mkClitic "egi" ; AgP3 Pl ZERO_MI => "egi" ;
AgP3 Pl MU_MI => mkClitic "egi"; AgP3 Pl MU_MI => "egi";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "ezi" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "ezi" ;
AgP3 Sg GU_GA => mkClitic "ogu" ; AgP3 Sg GU_GA => "ogu" ;
AgP3 Pl GU_GA => mkClitic "aga" ; AgP3 Pl GU_GA => "aga" ;
_ => mkClitic "XXXThisThese" -- error checking for any case not catered for _ => "XXXThisThese" -- error checking for any case not catered for
}; };
@@ -915,69 +939,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 _ => "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 _ => "Error in mkGenPrepWithIVClitic : no pattern matched" -- error checking for any case not catered for
}; };
@@ -1253,14 +1277,15 @@ 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 provide for two kinds: near and distal plus a status checker for
Preposition = {s,other : Str; isGenPrep : Bool}; -- genitive prepositions
mkPrep : Str -> Str ->Bool -> Preposition = \ first, other, isGenPrep -> {
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};
--NounPhrase : Type = {s : Number=> NounState => Str; agr : Agreement};
{- {-
Operation to create Noun Phrases from a Determiner and Nouns. Operation to create Noun Phrases from a Determiner and Nouns.
In Runyankore and Rukiga, depending on the particular Determiner, In Runyankore and Rukiga, depending on the particular Determiner,
@@ -1308,7 +1333,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 +1354,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?
@@ -1354,7 +1381,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
adv:Str; adv:Str;
containsAdv: Bool; containsAdv: Bool;
adV:Str; adV:Str;
containsAdV:Bool containsAdV:Bool;
containsComp : Bool;
containsComp2 : Bool
}; };
-- in VP formation, all verbs are lifted to GVerb, but morphology doesn't need to know this -- in VP formation, all verbs are lifted to GVerb, but morphology doesn't need to know this
verb2gverb : Verb ->Str -> GVerb = \v, ba -> { verb2gverb : Verb ->Str -> GVerb = \v, ba -> {
@@ -1385,7 +1414,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 +1425,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 +1571,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};
@@ -1558,7 +1591,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
adv:Str; adv:Str;
containsAdv:Bool; containsAdv:Bool;
adV:Str; adV:Str;
containsAdV:Bool containsAdV:Bool;
containsComp : Bool;
containsComp2 : Bool
}; --comp is empty }; --comp is empty
@@ -1589,10 +1624,11 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
param param
CompSource = NounP | ADverb | AdjP | CommonNoun; CompSource = NounP | ADverb | AdjP | CommonNoun;
oper oper
Comp : Type = {s:Str; source : CompSource }; Comp : Type = {s:Str; source : CompSource};
--Conjunctions --Conjunctions
-- arguments to conjunctions determine which version is used
Conjunction : Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ; Conjunction : Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ;
-- For $Numeral$. -- For $Numeral$.

View File

@@ -51,9 +51,9 @@ 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-}
<Past,Simul, Neg> => case cl.isPerfBlank of { <Past,Simul, Neg> => case cl.isPerfBlank of {
True => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ Predef.BIND ++ "ra" ++ True => {s = subj ++ "ta" ++ Predef.BIND ++ clitic ++ Predef.BIND ++ "ra" ++
Predef.BIND ++ root ++ Predef.BIND ++ "ire" ++ compl}; Predef.BIND ++ root ++ Predef.BIND ++ "ire" ++ compl};
False => {s = subj ++ "ti" ++ Predef.BIND ++ clitic ++ "ra" ++ Predef.BIND ++ False => {s = subj ++ "ta" ++ Predef.BIND ++ clitic ++ "ra" ++ Predef.BIND ++
root ++ Predef.BIND ++ pastRestOfVerb ++ compl} root ++ Predef.BIND ++ pastRestOfVerb ++ compl}
}; };
@@ -281,8 +281,8 @@ lin
PredVP np vp = case <vp.isCompApStem, vp.containsAdV> of { PredVP np vp = case <vp.isCompApStem,vp.containsAdv, vp.containsAdV,vp.containsComp, vp.containsComp2> of {
<False,True> => { <False,False,True,False,False> => {
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;
@@ -293,16 +293,15 @@ lin
isPerfBlank = vp.isPerfBlank; isPerfBlank = vp.isPerfBlank;
{- {-
inf = mkVerbInrf vp.root; inf = mkVerbInrf vp.root;
pres = mkVerbPres vp.root; pres = mkVerbPres vp.root;
past = mkVerbPast vp.root; past = mkVerbPast vp.root;
presPart = mkVerbPresPart vp.root; presPart = mkVerbPresPart vp.root;
pastPart = mkVerbPastPart vp.root; -- subject pastPart = mkVerbPastPart vp.root; -- subject
-} -}
--root = vp.root ; --root = vp.root ;
compl = vp.adV compl = vp.adV
}; };
<False,True,False,False,False> => {
<_, _> => {
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;
@@ -313,13 +312,71 @@ lin
isPerfBlank = vp.isPerfBlank; isPerfBlank = vp.isPerfBlank;
{- {-
inf = mkVerbInrf vp.root; inf = mkVerbInrf vp.root;
pres = mkVerbPres vp.root; pres = mkVerbPres vp.root;
past = mkVerbPast vp.root; past = mkVerbPast vp.root;
presPart = mkVerbPresPart vp.root; presPart = mkVerbPresPart vp.root;
pastPart = mkVerbPastPart vp.root; -- subject pastPart = mkVerbPastPart vp.root; -- subject
-}
--root = vp.root ;
compl = vp.adv
};
<_, _,_,True,False> => {
s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk
subjAgr = np.agr;
pres = vp.pres;
perf = vp.perf;
root = vp.s;
--morphs = vp.morphs;
isPresBlank = vp.isPresBlank;
isPerfBlank = vp.isPerfBlank;
{-
inf = mkVerbInrf vp.root;
pres = mkVerbPres vp.root;
past = mkVerbPast vp.root;
presPart = mkVerbPresPart vp.root;
pastPart = mkVerbPastPart vp.root; -- subject
-} -}
--root = vp.root ; --root = vp.root ;
compl = mkSubjClitic np.agr ++ vp.comp --mkSubjClitic np.agr ++ Predef.BIND ++ vp.comp compl = mkSubjClitic np.agr ++ vp.comp --mkSubjClitic np.agr ++ Predef.BIND ++ vp.comp
};
<_, _,_,True, True> => {
s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk
subjAgr = np.agr;
pres = vp.pres;
perf = vp.perf;
root = vp.s;
--morphs = vp.morphs;
isPresBlank = vp.isPresBlank;
isPerfBlank = vp.isPerfBlank;
{-
inf = mkVerbInrf vp.root;
pres = mkVerbPres vp.root;
past = mkVerbPast vp.root;
presPart = mkVerbPresPart vp.root;
pastPart = mkVerbPastPart vp.root; -- subject
-}
--root = vp.root ;
compl = mkSubjClitic np.agr ++ vp.comp ++ vp.comp2 --mkSubjClitic np.agr ++ Predef.BIND ++ vp.comp
};
<_, _,_,_, _> => {
s = np.s ! Nom; --: NP -> VP -> Cl ; -- John walks / John does not walk
subjAgr = np.agr;
pres = vp.pres;
perf = vp.perf;
root = vp.s;
--morphs = vp.morphs;
isPresBlank = vp.isPresBlank;
isPerfBlank = vp.isPerfBlank;
{-
inf = mkVerbInrf vp.root;
pres = mkVerbPres vp.root;
past = mkVerbPast vp.root;
presPart = mkVerbPresPart vp.root;
pastPart = mkVerbPastPart vp.root; -- subject
-}
--root = vp.root ;
compl = [] --mkSubjClitic np.agr ++ Predef.BIND ++ vp.comp
} }
};--: NP -> VP -> Cl ; -- John walks / John does not walk };--: NP -> VP -> Cl ; -- John walks / John does not walk

View File

@@ -6,7 +6,7 @@ concrete StructuralCgg of Structural = CatCgg **
{-variants {-variants
NOTE: Please add them to the abstract syntax, ask aarne NOTE: Please add them to the abstract syntax, ask aarne
or creat you own abstract Lexicon which inherits from the or creat your own abstract Lexicon which inherits from the
standard one. See how english does it. i.e. use DictCggAbs.gf for the funs. standard one. See how english does it. i.e. use DictCggAbs.gf for the funs.
and DictCgg.gf for the lins. and DictCgg.gf for the lins.
@@ -15,14 +15,15 @@ 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; numeralS=\\_=>[]; numeralExists = 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; numeralS=\\_=>[]; numeralExists = 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; numeralS=\\_=>[]; numeralExists = 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
-- 1 Determiners
every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=Pre; doesAgree = False; numeralS=\\_=>[]; numeralExists = 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} ; 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} ; many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=Post; doesAgree = False; numeralS=\\_=>[]; numeralExists = False} ;
-- 2 Pronouns
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);
@@ -35,7 +36,9 @@ lin
third = \\agr => table{Gen =>glueGen agr; _ => mkSStand agr}; third = \\agr => table{Gen =>glueGen agr; _ => mkSStand agr};
agr = AgrNo agr = AgrNo
}; --mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module }; --mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module
youPol_Pron = {s = table{Gen => glueGen (AgMUBAP2 Pl); _=>mkSStand (AgMUBAP2 Pl)}; third = \\_,_=>[]; agr =AgrYes (AgMUBAP2 Pl)};--mkPron "imwe" "imwe" (AgMUBAP2 Pl);
-- 3 Prepositions
above_Prep = mkPrep "ahinguru ya" [] False;
behind_Prep = mkPrep "enyuma ya" [] False; behind_Prep = mkPrep "enyuma ya" [] False;
between_Prep =mkPrep "hagati ya" [] False; between_Prep =mkPrep "hagati ya" [] False;
to_Prep = mkPrep "aha" [] False; to_Prep = mkPrep "aha" [] False;
@@ -45,16 +48,33 @@ lin
on_Prep = mkPrep "aha" "ahari" False; on_Prep = mkPrep "aha" "ahari" False;
in8front_Prep = mkPrep "enyuma ya" [] False; --: Prep ; -- in front of in8front_Prep = mkPrep "enyuma ya" [] False; --: Prep ; -- in front of
by8agent_Prep = mkPrep "by8agent_Prep" [] False ; -- when you meet by, use the passive of the verb
by8means_Prep = mkPrep "by8means_Prep" [] False;
during_Prep = mkPrep "omu" "omuri" False;
except_Prep = mkPrep "kwihaho" [] False;
for_Prep = mkPrep "for_Prep: would need paraphrasing" [] False;
--na --please this string varies with vowels use combine_morphemes or
--combine_words when using it. {-
the word before is realised as a phrase in RR.
We use the negative version of the verb
used in the main clause.
it is always paraphrased. Let us put a hint for post processing
-}
before_Prep = mkPrep "PostProcess_before_proximal" "PostProcess_before_distal" False;
--na --please this string varies with vowels use combine_morphemes or
--combine_words when using it.
with_Prep = mkPrep "na" [] False; with_Prep = mkPrep "na" [] False;
from_Prep =mkPrep "kurunga" "" False; from_Prep =mkPrep "kurunga" "" False;
under_Prep = mkPrep "hansi ya" "" False; under_Prep = mkPrep "hansi ya" "" False;
after_Prep = mkPrep "omu maisho" "" False; --: Prep ; after_Prep = mkPrep "omu maisho" "" False; --: Prep ;
part_Prep = mkPrep "part_Prep=of:Disambiguate" [] False; -- suspect "part of"
---Structural possess_Prep = mkPrep [] [] True; -- of is a huge table we should not be carrying arround
through_Prep = mkPrep "raba omu" [] False;
without_Prep = mkPrep "tiine" [] False;
-- 4 Conjunctions
{- {-
--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, )
@@ -97,9 +117,16 @@ lin
s2 =[]; s2 =[];
n = Sg n = Sg
}; };
if_then_Conj = mkConj "kuri" [] Sg;
-- Distributed Conjunction
both7and_DConj = mkConj "mbi" "na";
either7or_DConj = mkConj "mwe ahari" "nari" Sg;
have_V2 ={s= "in"; pres="e"; perf ="e"; isPresBlank = False; have_V2 ={s= "in"; pres="e"; perf ="e"; isPresBlank = False;
isPerfBlank = False; morphs = mkVerbMorphs; comp = []; isRegular=False}; --: V2 ; isPerfBlank = False;
p = []; isRefl = False;
morphs = mkVerbMorphs; comp = []; isCompN2 = False;
isRegular=False}; --: V2 ;
{- {-
All Predeterminers are given here. All Predeterminers are given here.
@@ -136,6 +163,12 @@ lin
always_AdV = {s = "obutóòsha"; agr = AgrNo}; always_AdV = {s = "obutóòsha"; agr = AgrNo};
everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place. everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place.
here_Adv = {s = "hanu"; agr = AgrNo}; here_Adv = {s = "hanu"; agr = AgrNo};
here7from_Adv = mkAdv "here7from_Adv:findout" AgrNo;
quite_Adv = mkAdA "quite_Adv:findout" Post;
there7from_Adv = mkAdv "there7from_Adv:findout" AgrNo;
there7to_Adv = mkAdv "there7to_Adv:findout" AgrNo;
here7to_Adv = mkAdv "here7to_Adv:findout" AgrNo;
there_Adv = mkAdv "hari" AgrNo;
{-End of Adverbs Adverbs-} {-End of Adverbs Adverbs-}
{-Begining of Quantifiers-} {-Begining of Quantifiers-}
@@ -168,8 +201,9 @@ lin
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="ni"; 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.
--interogative adverbs
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 ="kwigana"; requiresSubjPrefix = True; endOfSentence =True};--: IAdv ;
when_IAdv = {s ="ryari"; requiresSubjPrefix = False; endOfSentence =True}; --: IAdv ; when_IAdv = {s ="ryari"; requiresSubjPrefix = False; endOfSentence =True}; --: IAdv ;
where_IAdv = {s ="nkahe"; requiresSubjPrefix = False; endOfSentence =True}; --: IAdv ; where_IAdv = {s ="nkahe"; requiresSubjPrefix = False; endOfSentence =True}; --: IAdv ;
@@ -209,27 +243,50 @@ lin
numeralExists = False numeralExists = False
};--: Det ; };--: Det ;
want_VV = {s = "yend"; pres="da"; perf = "zire"; isPresBlank = False; much_Det =
isPerfBlank = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth}; {
can8know_VV = {s = "baas"; pres="a"; perf = "ize"; isPresBlank = False; s =[];
isPerfBlank = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (capacity) s2 =\\agr => "ingi";-- mkSubjCliticTablePl ! agr ++ "mwe";
can_VV = {s = "baas"; pres="a"; perf = "ize"; isPresBlank = False; ntype = Complete;
isPerfBlank = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (possibility) num = Pl;
pos = Post;
doesAgree = True;
numeralS=\\_=>[];
numeralExists = False
};--: Det ;
want_VV = {s = "yend"; pres="da"; perf = "zire"; isPresBlank = False;
isPerfBlank = False; isRegular = True; p = []; isRefl = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};
can8know_VV = {s = "baas"; pres="a"; perf = "ize"; isPresBlank = False;
isPerfBlank = False; isRegular = True; p = []; isRefl = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (capacity)
can_VV = {s = "baas"; pres="a"; perf = "ize"; isPresBlank = False;
isPerfBlank = False; isRegular = True; p = []; isRefl = False; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (possibility)
-- must_VV used especially in the perfective mood: see dictionary entry shemerera on Pg 501 of Mpairwe -- must_VV used especially in the perfective mood: see dictionary entry shemerera on Pg 501 of Mpairwe
-- must has no passive form -- must has no passive form
must_VV = {s = "shemere"; pres="ra"; perf = "ire"; isPresBlank = False; must_VV = {s = "shemere"; pres="ra"; perf = "ire"; isPresBlank = False;
isPerfBlank = False; morphs=mkVerbMorphs; isRegular=False; inf=[]; whenUsed = VVPerf}; --VV isPerfBlank = False; isRegular = False; p = []; isRefl = False; morphs=mkVerbMorphs; isRegular=False; inf=[]; whenUsed = VVPerf}; --VV
--somebody_NP = {}; --: NP ; everybody_NP = {s = \\_=>"buri muntu" ; agr=AgP3 Sg MU_BA};
--something_NP : NP ; everything_NP = {s = \\_=>"buri kintu" ; agr=AgP3 Sg KI_BI};
--somewhere_Adv : Adv ; somebody_NP = {s = \\_=>"somebody:omuntu omwe" ; agr=AgP3 Sg MU_BA}; --: NP ;
something_NP = {s = \\_=>"Something:ekintu kimwe" ; agr=AgP3 Sg KI_BI} ; -- NP ;
nobody_NP = {s = \\_=>"tihiine muntu" ; agr=AgP3 Sg MU_BA};
nothing_NP = {s = \\_=>"tihiine kintu" ; agr=AgP3 Sg KI_BI};
-- Subjunctives
that_Subj = ss "ngu" ; that_Subj = ss "ngu" ;
when_Subj = ss "obu"; when_Subj = ss "obu";
because_Subj = ss "ahabwokuba"; because_Subj = ss "ahabwokuba";
although_Subj = ss "nobu";
if_Subj = ss "kuri";
--Adjective modifying Adverbs --Adjective modifying Adverbs
almost_AdA = {s="haihi"; position=Pre}; --: AdA ; almost_AdA = {s="haihi"; position=Pre}; --: AdA ;
--quite_Adv ss "kimwe"; --: AdA ; used in the pr --quite_Adv ss "kimwe"; --: AdA ; used in the pr
somewhere_Adv = mkAdv "hamwe ahantu" (AgrYes (AgP3 Sg HA)); -- : Adv ;
so_AdA = {s="munônga"; position=Post};--: AdA ; so_AdA = {s="munônga"; position=Post};--: AdA ;
too_AdA = {s="munônga"; position=Post}; --: AdA ; too_AdA = {s="munônga"; position=Post}; --: AdA ;
very_AdA = {s="munônga"; position=Post}; --: AdA ; very_AdA = {s="munônga"; position=Post}; --: AdA ;
@@ -239,6 +296,23 @@ lin
but_PConj = ss "báìtu"; --: PConj ; -- variants béìtu but_PConj = ss "báìtu"; --: PConj ; -- variants béìtu
otherwise_PConj = ss "okûndi"; --: PConj ; otherwise_PConj = ss "okûndi"; --: PConj ;
therefore_PConj = ss "n'ahabwe'êkyo"; --: PConj ; therefore_PConj = ss "n'ahabwe'êkyo"; --: PConj ;
-- Comparative Adverb
as_CAdv = mkCAdv "nka" ;
less_CAdv = mkCAdv "kye ahari";
more_CAdv = mkCAdv "ingi ahari";
-- Adverbs modifying numerals
at_most_AdN = mkAdN "ekihango";
-- Utterances
no_Utt = ss "apaana";
yes_Utt = ss "yego";
lin language_title_Utt = ss "Rukiga" ;
{- {-
and_Conj : Conj ; and_Conj : Conj ;
both7and_DConj : Conj ; -- both...and both7and_DConj : Conj ; -- both...and

View File

@@ -20,7 +20,9 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = False;
containsComp2 = False
}; --: V -> VP; -- sleep --ignoring object agreement }; --: V -> VP; -- sleep --ignoring object agreement
-- UseComp : Comp -> VP ; -- be warm means complement of a copula especially adjectival Phrase -- UseComp : Comp -> VP ; -- be warm means complement of a copula especially adjectival Phrase
@@ -30,7 +32,7 @@ lin
--in --in
case comp.source of{ case comp.source of{
AdjP => { AdjP => {
s = mkBecome.s ++ BIND ++ mkBecome.pres; --Assuming there is no AP which is prepositional s = mkBecome.s ; --Assuming there is no AP which is prepositional
pres =[]; pres =[];
perf = []; perf = [];
isPresBlank = True; isPresBlank = True;
@@ -45,10 +47,12 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = False
}; };
_ => { ADverb => {
s = mkBecome.s ++ BIND ++mkBecome.pres++ comp.s; --Assuming there is no AP which is prepositional s = mkBecome.s ; --Assuming there is no AP which is prepositional
pres =[]; pres =[];
perf = []; perf = [];
--morphs=\\form,morphs=>[]; --morphs=\\form,morphs=>[];
@@ -60,10 +64,52 @@ lin
isCompApStem = False; isCompApStem = False;
agr = AgrNo; agr = AgrNo;
isRegular = False; isRegular = False;
adv = comp.s;
containsAdv =True;
adV =[];
containsAdV = False;
containsComp = False;
containsComp2 = False
};
NounP => {
s = mkBecome.s ; --Assuming there is no AP which is prepositional
pres =[];
perf = [];
--morphs=\\form,morphs=>[];
isPresBlank = True;
isPerfBlank = True;
comp = comp.s;
comp2 = [];
ap = [];
isCompApStem = False;
agr = AgrNo;
isRegular = False;
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = False
};
_ => {
s = mkBecome.s ; --Assuming there is no AP which is prepositional
pres =[];
perf = [];
--morphs=\\form,morphs=>[];
isPresBlank = True;
isPerfBlank = True;
comp = comp.s;
comp2 = [];
ap = [];
isCompApStem = False;
agr = AgrNo;
isRegular = False;
adv = [];
containsAdv =False;
adV =[];
containsAdV = False;
containsComp = True;
containsComp2 = False
} }
}; --its not generating any sentence }; --its not generating any sentence
@@ -97,7 +143,9 @@ lin
adv=[]; adv=[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = False;
containsComp2 =False
}; };
--Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her) --Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v3 np ={ Slash2V3 v3 np ={
@@ -114,7 +162,9 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 =False
}; };
--Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her --Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her
@@ -132,7 +182,9 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = True
}; };
--SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy --SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy
SlashVV vv vpslash ={ SlashVV vv vpslash ={
@@ -152,7 +204,9 @@ lin
adv = []; adv = [];
containsAdv = False; containsAdv = False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = False;
containsComp2 = False
}; };
--SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go --SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go
@@ -176,7 +230,9 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = vpslash.containsComp2
}; };
-- AdvVP : VP -> Adv -> VP ; -- sleep here -- AdvVP : VP -> Adv -> VP ; -- sleep here
-- VerbPhrase: Type = {s:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist}; -- VerbPhrase: Type = {s:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist};
@@ -189,7 +245,7 @@ lin
isPresBlank = vp.isPresBlank; isPresBlank = vp.isPresBlank;
isPerfBlank = vp.isPerfBlank; isPerfBlank = vp.isPerfBlank;
comp = adv.s; comp = adv.s;
comp2 = []; comp2 = vp.comp2;
ap =[]; ap =[];
isCompApStem = False; isCompApStem = False;
agr = AgrNo; agr = AgrNo;
@@ -197,7 +253,9 @@ lin
adv = adv.s; adv = adv.s;
containsAdv =True; containsAdv =True;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = vp.containsComp2
}; };
-- AdVVP : AdV -> VP -> VP ; -- always sleep -- AdVVP : AdV -> VP -> VP ; -- always sleep
@@ -217,7 +275,9 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =adV.s; adV =adV.s;
containsAdV = True containsAdV = True;
containsComp = vp.containsComp;
containsComp2 = vp.containsComp2
}; };
--AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here --AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here
@@ -240,7 +300,9 @@ lin
adv = adv.s; adv = adv.s;
containsAdv =True; containsAdv =True;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = vpslash.containsComp;
containsComp2 = vpslash.containsComp2
}; };
-- Adverb directly attached to verb -- Adverb directly attached to verb
--AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it) --AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it)
@@ -262,7 +324,9 @@ lin
adv = []; adv = [];
containsAdv =False; containsAdv =False;
adV =adV.s; adV =adV.s;
containsAdV = True containsAdV = True;
containsComp = vpslash.containsComp;
containsComp2 = vpslash.containsComp2
}; };
-- Verb phrases are constructed from verbs by providing their -- Verb phrases are constructed from verbs by providing their
-- complements. There is one rule for each verb category. -- complements. There is one rule for each verb category.
@@ -272,9 +336,14 @@ lin
--This function requires the remodelling of VP to accomodate two Verbs. --This function requires the remodelling of VP to accomodate two Verbs.
-- --
-} -}
ComplVV vv vp = let vpPres = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres; ComplVV vv vp = let
in case vv.whenUsed of { -- restofVerbPres = case vp.isPresBlank of {
VVPerf => { -- True => "a";
-- False => vp.pres;
-- };
vpPres = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres;
in case <vv.whenUsed, vp.containsComp,vp.containsComp2> of {
<VVPerf,True,True> => {
s= vv.s ++ BIND ++ vv.perf ++ vpPres; s= vv.s ++ BIND ++ vv.perf ++ vpPres;
pres = [];--vv.pres; pres = [];--vv.pres;
perf= []; -- vv.perf; perf= []; -- vv.perf;
@@ -289,9 +358,11 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = True
}; };
_ => { <_,True,True> => {
s= vv.s ++ BIND ++ vv.pres ++ vpPres; s= vv.s ++ BIND ++ vv.pres ++ vpPres;
pres = [];--vv.pres; pres = [];--vv.pres;
perf= [];--vv.perf; perf= [];--vv.perf;
@@ -307,7 +378,49 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = True
};
<_,True,_> => {
s= vv.s ++ BIND ++ vv.pres ++ vpPres;
pres = [];--vv.pres;
perf= [];--vv.perf;
--morphs = vv.morphs;
isPresBlank = True;
isPerfBlank = True;
comp=vp.comp ;
comp2 = [];
ap = [];
isCompApStem = False;
agr = AgrNo;
isRegular = vv.isRegular;
adv =[];
containsAdv =False;
adV =[];
containsAdV = False;
containsComp = True;
containsComp2 = False
};
<_,_,_> => {
s= vv.s ++ BIND ++ vv.pres ++ vpPres;
pres = [];--vv.pres;
perf= [];--vv.perf;
--morphs = vv.morphs;
isPresBlank = True;
isPerfBlank = True;
comp=[] ;
comp2 = [];
ap = [];
isCompApStem = False;
agr = AgrNo;
isRegular = vv.isRegular;
adv =[];
containsAdv =False;
adV =[];
containsAdV = False;
containsComp = False;
containsComp2 = False
} }
}; };
@@ -328,7 +441,9 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = False
}; };
{- {-
@@ -351,7 +466,9 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = True;
containsComp2 = False
}; };
{- {-
@@ -379,7 +496,9 @@ lin
adv =[]; adv =[];
containsAdv =False; containsAdv =False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = False;
containsComp2 = False
}; };
-- Copula alone -- Copula alone
@@ -393,7 +512,9 @@ lin
adv = []; adv = [];
containsAdv = False; containsAdv = False;
adV =[]; adV =[];
containsAdV = False containsAdV = False;
containsComp = False;
containsComp2 = False
}; };
{- {-
--1 The construction of verb phrases --1 The construction of verb phrases