diff --git a/src/rukiga/CatCgg.gf b/src/rukiga/CatCgg.gf index 134b9d29..bc61bcd9 100755 --- a/src/rukiga/CatCgg.gf +++ b/src/rukiga/CatCgg.gf @@ -31,13 +31,13 @@ lincat NP = Res.NounPhrase; -- noun phrase (subject or object) e.g. "the red house" Pron = Res.Pronoun ; -- personal pronoun e.g. "she" Det = Res.Determiner ; -- determiner phrase e.g. "those seven" - Quant = {s : Str ; s2 :Res.Agreement => Str; doesAgree : Bool} ; -- quantifier ('nucleus' of Det) e.g. "this/these" + Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ; -- quantifier ('nucleus' of Det) e.g. "this/these" Num = Res.Numer ; -- number determining element e.g. "seven" AP = {s : Str ; position1 : Res.Position1; isProper : Bool; isPrep: Bool};--Res.AdjectivalPhrase; A = Res.Adjective; Comp = Res.Comp; -- complement of copula, such as AP e.g. "very warm" - Adv = Res.Adverb; + Adv = Res.Adverb; --Verb Phrase modifying adverb VPSlash = Res.VPSlash; PN = Res.ProperNoun; -- ProperNoun : Type = {s: Str ; a:Agreement ; isPlace : Bool}; Conj = Res.Conjunction; -- Conjunction: Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ; -- conjunction e.g. "and" diff --git a/src/rukiga/NounCgg.gf b/src/rukiga/NounCgg.gf index daf922e1..9b901686 100755 --- a/src/rukiga/NounCgg.gf +++ b/src/rukiga/NounCgg.gf @@ -8,7 +8,12 @@ lin --UsePN : PN -> NP ; -- John UsePN pn = {s = \\ _ => pn.s; agr = pn.a}; -- John - UsePron pron = { s = pron.s; agr = pron.agr}; --: Pron -> NP ; -- he + UsePron pron = + let default3PAgr = (AgP3 Sg KI_BI) + in case of { + <(AgrYes a)> => {s = pron.s; agr = a}; --: Pron -> NP ; -- he + <_> => {s = pron.third !default3PAgr; agr = default3PAgr} + }; --UsePron pron = pron; -- the result of use pron is a NounPhrase --MassNP : CN -> NP ; -- (beer) MassNP cn = {s = \\_ =>cn.s ! Complete ! Pl; agr = AgP3 Pl cn.gender}; --: CN -> NP ; -- milk @@ -80,37 +85,44 @@ lin {-What the hell does this mean?-} ExtAdvNP np adv = {s= \\c => np.s ! c ++ embedInCommas adv.s; agr = np.agr}; -- how do I do the adverbial clause? --- Determiner: Type = {s:Str; ntype:NounType; num:Number; pos:Position}; -- type for Determier necessary for catCgg.gf - - -- The determiner has a fine-grained structure, in which a 'nucleus' --- quantifier and an optional numeral can be discerned. - --DetQuant : Quant -> Num -> Det ; -- these five - DetQuant quant num = {s=[]; s2 = quant.s2; ntype = Incomplete; num = num.n; pos=PreDeterminer; doesAgree = quant.doesAgree}; -- - - --DetQuantOrd : Quant -> Num -> Ord -> Det ; -- these five best - --DetQuantOrd quant num ord = {}; + -- Determiner: Type = {s:Str; ntype:NounType; num:Number; pos:Position}; -- type for Determier necessary for catCgg.gf + + -- The determiner has a fine-grained structure, in which a 'nucleus' + -- quantifier and an optional numeral can be discerned. + --DetQuant : Quant -> Num -> Det ; -- these five + DetQuant quant num = {s=[]; s2 = quant.s2; ntype = Incomplete; num = num.n; pos=PreDeterminer; doesAgree = quant.doesAgree}; -- + + --DetQuantOrd : Quant -> Num -> Ord -> Det ; -- these five best + --DetQuantOrd quant num ord = {}; - NumSg = {s=[]; n=Sg}; - NumPl = {s=[]; n=Pl}; - -- NumCard card = {...}; - --Quant = {s : Str ; s2 :Res.Agreement => Str; doesAgree : Bool} ; - IndefArt = {s=[]; s2 = \\_=>[]; doesAgree = False}; - DefArt = {s=[]; s2 = \\_=>[]; doesAgree = False}; -- noun with initial vowel + NumSg = {s=[]; n=Sg}; + NumPl = {s=[]; n=Pl}; + -- NumCard card = {...}; + --Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ; + IndefArt = {s={s=\\_=>[]; third = \\_,_=>[];agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron=False}; + DefArt = {s={s =\\_=>[]; third = \\_,_=>[]; agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron = False}; -- noun with initial vowel - --NumDigits : Digits -> Card ; -- 51 - NumDigits dig = {s = dig.s!NCard ; n=dig.n}; - --NumNumeral : Numeral -> Card ; -- fifty-one - NumNumeral numeral = {s=numeral.s!NCard; n=numeral.n}; - --OrdDigits : Digits -> Ord ; -- 51st - OrdDigits dig ={s=dig.s!NOrd ; position1 = Post}; + --NumDigits : Digits -> Card ; -- 51 + NumDigits dig = {s = dig.s!NCard ; n=dig.n}; + --NumNumeral : Numeral -> Card ; -- fifty-one + NumNumeral numeral = {s=numeral.s!NCard; n=numeral.n}; + --OrdDigits : Digits -> Ord ; -- 51st + OrdDigits dig ={s=dig.s!NOrd ; position1 = Post}; + + --OrdNumeral : Numeral -> Ord ; -- fifty-first + OrdNumeral numeral ={s=numeral.s!NOrd; position1 = Post}; + --OrdSuperl : A -> Ord ; -- warmest + --Adjective : Type = {s : Str ; position1 : Position1; isProper : Bool; isPrep: Bool}; + OrdSuperl a = {s= \\c => a.s ++ "kukira" ++ (mkAdjPronIVClitic c) ++ BIND ++ "ona"; position1 = a.position1}; + -- AdvCN : CN -> Adv -> CN ; -- house on the hill + AdvCN cn adv ={s=\\ntype,num =>cn.s!ntype!num ++ adv.s; gender=cn.gender}; + -- Pronouns have possessive forms. Genitives of other kinds + -- of noun phrases are not given here, since they are not possible + -- in e.g. Romance languages. They can be found in $Extra$ modules. + + --PossPron : Pron -> Quant ; -- my (house) + PossPron pron = {s =pron; s2 =\\_=> []; doesAgree = True; isPron = True}; - --OrdNumeral : Numeral -> Ord ; -- fifty-first - OrdNumeral numeral ={s=numeral.s!NOrd; position1 = Post}; - --OrdSuperl : A -> Ord ; -- warmest - --Adjective : Type = {s : Str ; position1 : Position1; isProper : Bool; isPrep: Bool}; - OrdSuperl a = {s= \\c => a.s ++ "kukira" ++ (mkAdjPronIVClitic c) ++ BIND ++ "ona"; position1 = a.position1}; --- AdvCN : CN -> Adv -> CN ; -- house on the hill - --AdvCN cn adv ={s=\\ntype,num =>cn.s!ntype!num ++ adv.s!(AgP3 num cn.nc); nc=cn.nc}; {- --1 Noun: Nouns, noun phrases, and determiners diff --git a/src/rukiga/QuestionCgg.gf b/src/rukiga/QuestionCgg.gf index 8fe1e4c7..131d0b5f 100755 --- a/src/rukiga/QuestionCgg.gf +++ b/src/rukiga/QuestionCgg.gf @@ -1,6 +1,7 @@ --# -path=.:../prelude:../abstract:../common concrete QuestionCgg of Question = CatCgg ** open ResCgg, Prelude in { +--1 Question: Questions and Interrogative Pronouns {- --1 Question: Questions and Interrogative Pronouns diff --git a/src/rukiga/ResCgg.gf b/src/rukiga/ResCgg.gf index faa19aca..0cff7e14 100755 --- a/src/rukiga/ResCgg.gf +++ b/src/rukiga/ResCgg.gf @@ -25,7 +25,7 @@ param ZERO_MI | ZERO_TU | ZERO_N | I_ZERO | RI_ZERO | KU_ZERO | MU_ZERO | RU_ZERO | KA_ZERO |ZERO_BAA | N_ZERO | KI_ZERO; - Case = Acc | Nom ; -- we need to include Gen because we shall need it with Gen Pronouns + Case = Acc | Nom |Gen; -- we need to include Gen because we shall need it with Gen Pronouns RCase = RSuj | RObj; PersonalPronounType = SubjM | Obj | RelSubj | RelObj | AdjPron2 | -- aAdjectival Prefixes with initial vowel with the semantics of "the" e.g. -- omuntu o-mu-rungi @@ -43,7 +43,7 @@ param -} ConjArg = Nn_Nn | Nps_Nps | Pns_Pns | RelSubjCls | Other; AgrConj = AConj ConjArg; - Agreement = AgP3 Number Gender | AgMUBAP1 Number |AgMUBAP2 Number ; + Agreement = AgP3 Number Gender | AgMUBAP1 Number |AgMUBAP2 Number; --Default is AgP3 Sg KI_BI AgrExist = AgrNo | AgrYes Agreement; Position = PostDeterminer | PreDeterminer ; Position1 = Post | Pre; @@ -430,7 +430,7 @@ oper -- This involved only change of the personal pronouns as for selfstanding pronouns. -- How can it be done without code repeation? mkPredetPref :Agreement -> Str = \a -> case a of { - AgMUBAP1 n => mkClitics "ny" "twe" n; + AgMUBAP1 n => mkClitics "ny" "itwe" n; --AgMUBAP1 Pl => "aba" ; AgMUBAP2 n => mkClitics "we" "mwe" n; --probably an error check your grammar book --AgMUBAP2 Pl => "aba" ; @@ -693,9 +693,43 @@ oper _ => mkClitic "Error mkGenPrepWithIVClitic" -- error checking for any case not catered for }; + + -- Genetive Adjectival suffix: Possessive my book= ekitabo kyagye + mkGenAdjSuffix : Agreement -> Str =\a -> case a of { + AgMUBAP1 n => mkClitics "ngye" "itu" n; + --AgMUBAP1 Pl => "aba" ; + AgMUBAP2 n => mkClitics "we" "nyu" n; --probably an error check your grammar book + --AgMUBAP2 Pl => "aba" ; + AgP3 n MU_BA => mkClitics "e" "bo" n; + --AgP3 Pl MU_BA => "aba" ; + AgP3 Pl ZERO_BU => mkClitic "bwo" ; + AgP3 Sg BU_MA => mkClitic "bwo" ; + AgP3 Pl (KA_BU | RU_BU) => mkClitic "bwo" ; + AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "byo" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "go"; + AgP3 (Sg | Pl) HA => mkClitic "ho" ; -- of place HA + AgP3 (Sg | Pl) MU => mkClitic "mwo" ; -- of place MU + AgP3 (Sg | Pl) KU => mkClitic "yo" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "ryo" ; + AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "ko" ; + AgP3 Sg KI_BI => mkClitic "kyo" ; + AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "kwo" ; + AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "gwo" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "rwo" ; + AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "two" ; + AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "yo" ; + AgP3 Pl ZERO_MI =>mkClitic "yo" ; + AgP3 Pl MU_MI => mkClitic "yo"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "zo" ; + AgP3 Sg GU_GA => mkClitic "gwo" ; + AgP3 Pl GU_GA => mkClitic "go" ; + _ => mkClitic "Error mkGenAdjSuffix" -- error checking for any case not catered for + + }; + mkRPs : RCase => Agreement =>Str = table{ - RSubj => table { + RSubj => table { AgMUBAP1 Sg => mkClitic "o"; AgMUBAP1 Pl => mkClitic "aba" ; AgMUBAP2 Sg => mkClitic "o"; @@ -726,38 +760,38 @@ oper _ => mkClitic "XXXThat" -- error checking for any case not catered for }; - RObj => table { - AgMUBAP1 Sg => mkClitic "ou"; - AgMUBAP1 Pl => mkClitic "abu" ; --note: abu or abi is used. GF does not allow free variation. However, abu is more natural - AgMUBAP2 Sg => mkClitic "ou"; --probably an error check your grammar book - AgMUBAP2 Pl => mkClitic "abu" ; - AgP3 Sg MU_BA => mkClitic "o"; - AgP3 Pl MU_BA => mkClitic "abu" ; - AgP3 Pl ZERO_BU => mkClitic "obu" ; - AgP3 Sg BU_MA => mkClitic "obu" ; - AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; - AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; - AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "agu"; - AgP3 (Sg ) HA => mkClitic "ahu" ; -- of place HA - AgP3 (Sg ) MU => mkClitic "ahu" ; -- of place MU - AgP3 (Sg ) KU => mkClitic "ei" ; -- of place KU - AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "eri" ; - AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aku" ; - AgP3 Sg KI_BI => mkClitic "eki" ; - AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "oku" ; - AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogu" ; - AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "oru" ; - AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otu" ; - AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ei" ; - AgP3 Pl ZERO_MI =>mkClitic "ei" ; - AgP3 Pl MU_MI => mkClitic "ei"; - AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "ezi" ; - AgP3 Sg GU_GA => mkClitic "ogu" ; - AgP3 Pl GU_GA => mkClitic "agu" ; - _ => mkClitic "XXXThat" -- error checking for any case not catered for - - } - }; + _ => table { + AgMUBAP1 Sg => mkClitic "ou"; + AgMUBAP1 Pl => mkClitic "abu" ; --note: abu or abi is used. GF does not allow free variation. However, abu is more natural + AgMUBAP2 Sg => mkClitic "ou"; --probably an error check your grammar book + AgMUBAP2 Pl => mkClitic "abu" ; + AgP3 Sg MU_BA => mkClitic "o"; + AgP3 Pl MU_BA => mkClitic "abu" ; + AgP3 Pl ZERO_BU => mkClitic "obu" ; + AgP3 Sg BU_MA => mkClitic "obu" ; + AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; + AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; + AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "agu"; + AgP3 (Sg ) HA => mkClitic "ahu" ; -- of place HA + AgP3 (Sg ) MU => mkClitic "ahu" ; -- of place MU + AgP3 (Sg ) KU => mkClitic "ei" ; -- of place KU + AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "eri" ; + AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aku" ; + AgP3 Sg KI_BI => mkClitic "eki" ; + AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "oku" ; + AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogu" ; + AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "oru" ; + AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otu" ; + AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ei" ; + AgP3 Pl ZERO_MI =>mkClitic "ei" ; + AgP3 Pl MU_MI => mkClitic "ei"; + AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "ezi" ; + AgP3 Sg GU_GA => mkClitic "ogu" ; + AgP3 Pl GU_GA => mkClitic "agu" ; + _ => mkClitic "XXXThat" -- error checking for any case not catered for + + } + }; mkRObjV2 : Agreement=> Str =table { AgMUBAP1 Sg => mkClitic "ou"; @@ -809,17 +843,16 @@ oper -- all noun classes have pronouns in the third person --This is a big problem, probably we create our own abstract syntax {- - TO-DO: DONE but not tested yet. Here I will simply use one - class KI_BI + TO-DO: DONE but not tested yet. I have attempted to account for all other classes by using a test. -} - Pronoun : Type ={s : Case => Str ; agr : Agreement} ; - mkPron : Str -> Str -> Agreement->Pronoun =\nom,acc, a -> - { - s = table {Nom => nom; Acc => acc}; - agr = a; - }; - - + Pronoun : Type ={s : Case => Str; third:Agreement => Case=>Str; agr:AgrExist} ; + {- + mkPron : Str -> Str ->Pronoun =\nom,acc, -> + { + s = table {Nom => nom; Acc => acc}; + agr = a; + }; + -} PolTemp = {s : Agreement => Str * Str ; end : Str} ; -- a tupple of two strings @@ -1050,7 +1083,9 @@ oper --Concatenates two strings at runtime without spaces glue: Str -> Str ->Str =\ x, y -> x ++ BIND ++ y; - + --Concatenates two strings for the genetive case + glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a; + --Number determining element Numer : Type = { s: Str ; n : Number}; diff --git a/src/rukiga/StructuralCgg.gf b/src/rukiga/StructuralCgg.gf index 1d99e6a7..c365b2fa 100755 --- a/src/rukiga/StructuralCgg.gf +++ b/src/rukiga/StructuralCgg.gf @@ -22,14 +22,18 @@ lin every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=PreDeterminer; doesAgree = False} ; few_Det = {s="kye"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; - - i_Pron = mkPron "nyowe" "nyowe" (AgMUBAP1 Sg); - youSg_Pron = mkPron "iwe" "we" (AgMUBAP2 Sg); - he_Pron, she_Pron = mkPron "uwe" "uwe" (AgP3 Sg MU_BA); - we_Pron = mkPron "itwe" "itwe" (AgMUBAP1 Pl); - youPl_Pron = mkPron "imwe" "imwe" (AgMUBAP2 Pl); - they_Pron = mkPron "bo" "bo" (AgP3 Pl MU_BA); - it_Pron = mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module + + i_Pron = {s = table{Gen => glueGen (AgMUBAP1 Sg); _=> mkSStand (AgMUBAP1 Sg)}; third = \\_,_=>[]; agr = AgrYes (AgMUBAP1 Sg)};--mkPron "nyowe" "nyowe" (AgMUBAP1 Sg); + youSg_Pron = {s = table{Gen => glueGen (AgMUBAP2 Sg); _=>mkSStand (AgMUBAP2 Sg)}; third = \\_,_=>[]; agr = AgrYes(AgMUBAP2 Sg)};--mkPron "iwe" "we" (AgMUBAP2 Sg); + he_Pron, she_Pron = {s = table{Gen => glueGen (AgP3 Sg MU_BA); _=>mkSStand (AgP3 Sg MU_BA)}; third = \\_,_=>[]; agr = AgrYes(AgP3 Sg MU_BA)};--mkPron "uwe" "uwe" (AgP3 Sg MU_BA); + we_Pron = {s = table{Gen => glueGen (AgMUBAP1 Pl); _=>mkSStand (AgMUBAP1 Pl)}; third = \\_,_=>[]; agr = AgrYes (AgMUBAP1 Pl)}; --mkPron "itwe" "itwe" (AgMUBAP1 Pl); + youPl_Pron = {s = table{Gen => glueGen (AgMUBAP2 Pl); _=>mkSStand (AgMUBAP2 Pl)}; third = \\_,_=>[]; agr =AgrYes (AgMUBAP2 Pl)};--mkPron "imwe" "imwe" (AgMUBAP2 Pl); they_Pron = {s = table{Gen => glueGen AgP3 Pl MU_BA; _=>mkSStand (AgP3 Pl MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "bo" "bo" (AgP3 Pl MU_BA); + -- default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and + it_Pron = { + s = \\_=>[]; + third = \\agr => table{Gen =>glueGen agr; _ => mkSStand agr}; + agr = AgrNo + }; --mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module behind_Prep ={s="enyuma ya"}; between_Prep = {s="hagati ya"}; @@ -41,7 +45,7 @@ lin --na --please this string varies with vowels use combine_morphemes or --combine_words when using it. -with_Prep = mkPrep "na" []; + with_Prep = mkPrep "na" []; from_Prep ={s="kuruga"}; under_Prep = {s="hansi ya"}; @@ -91,63 +95,66 @@ with_Prep = mkPrep "na" []; }; have_V2 ={s= "ine"; pres=[]; perf =[]; morphs = mkVerbMorphs; comp = []; isRegular=False}; --: V2 ; -{- - All Predeterminers are given here. - Initial analysis shows that - a) They appear after the noun phrase but some may be multi-word expressions for a single word in eblish. - b) They appear to agree with the noun class particle. But nothing in the literature states about - their morphological structure. The stems can be guessed by removing the two letter - suffix at the begining of the word. However, there are exceptions such as "not" which is not - inflected according to noun class - c) A table of concords must be built to accomodate every instance and this can only be done - using an analysis of some of the words in the dictionary(Mapirwe and Kahagi). - I am incluned to say use of the table of self-standing pronouns is sufficient. - d) An investigation of the tone systems would also be worthwhile. - - Example sentences: - 1. All these chickens - 2. once a day - 3. only the man --} -all_Predet = {s = "òna"; s2 = []; isMWE = False; isInflected =True}; -only_Predet = {s = "nka"; s2 = []; isMWE = False; isInflected =True}; -{- --- how do we deal with superlatives. There seems to be no distinction between countable --- and uncountable when it comes to superlatioves --} -most_Predet = {s = "rikukíra"; s2 = "îngi"; isMWE = True; isInflected =True}; -not_Predet = {s = "ti"; s2 = []; isMWE = False; isInflected =False}; - - - - -{-Section for Adverbs-} -always_AdV = {s = "obutóòsha"; agr = AgrNo}; -everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place. -here_Adv = {s = "hanu"; agr = AgrNo}; -{-End of Adverbs Adverbs-} - -{-Begining of Quantifiers-} {- - For DetQuant function to work, we need sample quatitifiers in Runynakore. Proximal, Medial, Distant - We need a table to provide all of these. + All Predeterminers are given here. + Initial analysis shows that + a) They appear after the noun phrase but some may be multi-word expressions for a single word in eblish. + b) They appear to agree with the noun class particle. But nothing in the literature states about + their morphological structure. The stems can be guessed by removing the two letter + suffix at the begining of the word. However, there are exceptions such as "not" which is not + inflected according to noun class + c) A table of concords must be built to accomodate every instance and this can only be done + using an analysis of some of the words in the dictionary(Mapirwe and Kahagi). + I am incluned to say use of the table of self-standing pronouns is sufficient. + d) An investigation of the tone systems would also be worthwhile. + + + Example sentences: + 1. All these chickens + 2. once a day + 3. only the man -} -that_Quant = {s=[]; s2 = mkThat; doesAgree = True}; --: Quant ; -this_Quant = {s=[]; s2 = mkThis; doesAgree = True}; --: Quant ; ---these_Quant = {s =[]; s2 = mkThese; doesAgree = True}; ---those_Quant = {s =[]; s2 = mkThose; doesAgree = True}; -no_Quant = {s ="tihariho"; s2 =\\_=> []; doesAgree = False};--: Quant ; -{-End of Quantifiers-} + all_Predet = {s = "òna"; s2 = []; isMWE = False; isInflected =True}; + only_Predet = {s = "nka"; s2 = []; isMWE = False; isInflected =True}; + {- + -- how do we deal with superlatives. There seems to be no distinction between countable + -- and uncountable when it comes to superlatioves + -} + most_Predet = {s = "rikukíra"; s2 = "îngi"; isMWE = True; isInflected =True}; + not_Predet = {s = "ti"; s2 = []; isMWE = False; isInflected =False}; -{-Begining of verb-phrase-complement verb VV-} -- A verb whose complement is a verb phrase - --can8know_VV : VV ; -- can (capacity) + + + + {-Section for Adverbs-} + always_AdV = {s = "obutóòsha"; agr = AgrNo}; + everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place. + here_Adv = {s = "hanu"; agr = AgrNo}; + {-End of Adverbs Adverbs-} + + {-Begining of Quantifiers-} + + --For DetQuant function to work, we need sample quatitifiers in Runynakore. Proximal, Medial, Distant + --We need a table to provide all of these. + + that_Quant = {s={s = \\_=>[]; third =\\_,_=>[]; agr = AgrNo}; s2 = mkThat; doesAgree = True; isPron = False}; --: Quant ; + this_Quant = {s={s = \\_=>[]; third =\\_,_=>[]; agr = AgrNo}; s2 = mkThis; doesAgree = True; isPron = False}; --: Quant ; + + no_Quant = {s ={s=\\_=>"tihariho";third =\\_,_=>[]; agr=AgrNo}; s2 =\\_=> []; doesAgree = False; isPron = False};--: Quant ; + {-End of Quantifiers-} + + + + + {-Begining of verb-phrase-complement verb VV-} -- A verb whose complement is a verb phrase + --can8know_VV : VV ; -- can (capacity) -{-End of verb-phrase-complement verb -} + {-End of verb-phrase-complement verb -} diff --git a/src/rukiga/StructuralCggClean.gf b/src/rukiga/StructuralCggClean.gf new file mode 100644 index 00000000..1e6865a7 --- /dev/null +++ b/src/rukiga/StructuralCggClean.gf @@ -0,0 +1,130 @@ +--# -path=.:../prelude:../abstract:../common + +concrete StructuralCgg of Structural = CatCgg ** + open ResCgg, ParadigmsCgg, (C = ConstructX), Prelude in { + + + lin + --Determiner : Type = {s : Str ; s2: Agreement=>Str; ntype : NounState ; num : Number ; pos : Position; doesAgree: Bool }; + a_Det = {s =[] ; s2 = \\_ => []; ntype = Complete; num = Sg; pos = PreDeterminer; doesAgree = False}; --: Det ; indefinite singular ---s + aPl_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Pl; pos = PreDeterminer; doesAgree = False}; -- : Det ;indefinite plural ---s + the_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Sg; pos = PreDeterminer; doesAgree = False}; --: Det ; -- definite singular ---s thePl_Det = {s =[]; ntype = Complete; num = Pl; pos = PreDeterminer}; --: Det ;definite plural ---s + + every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=PreDeterminer; doesAgree = False} ; + few_Det = {s="kye"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; + many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; + + behind_Prep ={s="enyuma ya"}; + between_Prep = {s="hagati ya"}; + to_Prep ={s="aha"}; + -- several words depending on use omuri?? + in_Prep = mkPrep "omu" "omuri"; + --aha-ri Kamukuzi??? works for places + on_Prep = mkPrep "aha" "ahari"; + + with_Prep = mkPrep "na" []; + + from_Prep ={s="kuruga"}; + under_Prep = {s="hansi ya"}; + + {- + --there are several and i.e. + -- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, ) + --kandi (clauses having a commonality of subjects, object or tense) + --the best structure is a table + --mkConjunction "na" "kandi" and_Conj ; + -} + and_Conj = { + s = table { AConj Other => "kandi"; _ => "na"}; + s2 =[]; + n = Pl + }; + + + + + {- + + --TODO: Look at the grammar books by Mpairwe & Kahangi Pg 155 + --and investigate or to find out its arguments but for now + --I will assume nari works on all types of + --ConjArg (Conjunction Arguments) + + --nari is the general or + + --These are candidates for Extra module if they are not specific + --to the type of argument. + --nînga for Runynakore and + + --nainga for rukiga + -} + + + or_Conj = { + s = \\ _ => "nari"; + s2 =[]; + n = Sg + }; + + have_V2 ={s= "ine"; pres=[]; perf =[]; morphs = mkVerbMorphs; comp = []; isRegular=False}; --: V2 ; + + i_Pron = {s = table{Gen => glueGen (AgMUBAP1 Sg); _=> mkSStand (AgMUBAP1 Sg)}; third = \\_,_=>[]; itP3Required=False};--mkPron "nyowe" "nyowe" (AgMUBAP1 Sg); + youSg_Pron = {s = table{Gen => glueGen (AgMUBAP2 Sg); _=>mkSStand (AgMUBAP2 Sg)}; third = \\_,_=>[]; itP3Required=False};--mkPron "iwe" "we" (AgMUBAP2 Sg); + he_Pron, she_Pron = {s = table{Gen => glueGen (AgP3 Sg MU_BA); _=>mkSStand (AgP3 Sg MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "uwe" "uwe" (AgP3 Sg MU_BA); + we_Pron = {s = table{Gen => glueGen (AgMUBAP1 Pl); _=>mkSStand (AgMUBAP1 Pl)}; third = \\_,_=>[]; itP3Required=False}; --mkPron "itwe" "itwe" (AgMUBAP1 Pl); + youPl_Pron = {s = table{Gen => glueGen (AgMUBAP2 Pl); _=>mkSStand (AgMUBAP2 Pl)}; third = \\_,_=>[]; itP3Required=False};--mkPron "imwe" "imwe" (AgMUBAP2 Pl); they_Pron = {s = table{Gen => glueGen AgP3 Pl MU_BA; _=>mkSStand (AgP3 Pl MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "bo" "bo" (AgP3 Pl MU_BA); + -- default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and + it_Pron = {s = \\_=>[]; third = table{Gen => \\agr => glueGen agr; _=> \\agr => mkSStand agr}; itP3Required=True}; --mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module + + + {- + All Predeterminers are given here. + Initial analysis shows that + a) They appear after the noun phrase but some may be multi-word expressions for a single word in eblish. + b) They appear to agree with the noun class particle. But nothing in the literature states about + their morphological structure. The stems can be guessed by removing the two letter + suffix at the begining of the word. However, there are exceptions such as "not" which is not + inflected according to noun class + c) A table of concords must be built to accomodate every instance and this can only be done + using an analysis of some of the words in the dictionary(Mapirwe and Kahagi). + I am incluned to say use of the table of self-standing pronouns is sufficient. + d) An investigation of the tone systems would also be worthwhile. + + + Example sentences: + 1. All these chickens + 2. once a day + 3. only the man + -} + all_Predet = {s = "òna"; s2 = []; isMWE = False; isInflected =True}; + only_Predet = {s = "nka"; s2 = []; isMWE = False; isInflected =True}; + {- + -- how do we deal with superlatives. There seems to be no distinction between countable + -- and uncountable when it comes to superlatioves + -} + most_Predet = {s = "rikukíra"; s2 = "îngi"; isMWE = True; isInflected =True}; + not_Predet = {s = "ti"; s2 = []; isMWE = False; isInflected =False}; + + + + + -- Adverbs + always_AdV = {s = "obutóòsha"; agr = AgrNo}; + everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place. + here_Adv = {s = "hanu"; agr = AgrNo}; + + + --Quantifiers + + that_Quant = {s={s=\\_ =>[]; agr=AgrNo}; s2 = mkThat; doesAgree = True; isPron = False}; --: Quant ; + this_Quant = {s={s=\\_ =>[]; agr=AgrNo}; s2 = mkThis; doesAgree = True; isPron = False}; --: Quant ; + + no_Quant = {s ={s=\\_=>"tihariho";agr=AgrNo}; s2 =\\_=> []; doesAgree = False; isPron = False};--: Quant ; + + + + + + + +} \ No newline at end of file diff --git a/src/rukiga/StructuralCggOld.gf b/src/rukiga/StructuralCggOld.gf new file mode 100644 index 00000000..6d796fc9 --- /dev/null +++ b/src/rukiga/StructuralCggOld.gf @@ -0,0 +1,298 @@ +--# -path=.:../prelude:../abstract:../common + +concrete StructuralCggOld of Structural = CatCgg ** + open ResCgg, ParadigmsCgg, (C = ConstructX), Prelude in { + + +{-variants + NOTE: Please add them to the abstract syntax, ask aarne + or creat you own abstract Lexicon which inherits from the + standard one. See how english does it. i.e. use DictCggAbs.gf for the funs. + and DictCgg.gf for the lins. + + Actually use and extend module for Structural +-} + +lin + --Determiner : Type = {s : Str ; s2: Agreement=>Str; ntype : NounState ; num : Number ; pos : Position; doesAgree: Bool }; + a_Det = {s =[] ; s2 = \\_ => []; ntype = Complete; num = Sg; pos = PreDeterminer; doesAgree = False}; --: Det ; indefinite singular ---s + aPl_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Pl; pos = PreDeterminer; doesAgree = False}; -- : Det ;indefinite plural ---s + the_Det = {s =[]; s2= \\_ => []; ntype = Complete; num = Sg; pos = PreDeterminer; doesAgree = False}; --: Det ; -- definite singular ---s thePl_Det = {s =[]; ntype = Complete; num = Pl; pos = PreDeterminer}; --: Det ;definite plural ---s + + every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=PreDeterminer; doesAgree = False} ; + few_Det = {s="kye"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; + many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ; + + i_Pron = {s = table{Gen => glueGen (AgMUBAP1 Sg); _=> mkSStand (AgMUBAP1 Sg)}; third = \\_,_=>[]; itP3Required=False};--mkPron "nyowe" "nyowe" (AgMUBAP1 Sg); + youSg_Pron = {s = table{Gen => glueGen (AgMUBAP2 Sg); _=>mkSStand (AgMUBAP2 Sg)}; third = \\_,_=>[]; itP3Required=False};--mkPron "iwe" "we" (AgMUBAP2 Sg); + --he_Pron, she_Pron = {s = table{Gen => glueGen (AgP3 Sg MU_BA); _=>mkSStand (AgP3 Sg MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "uwe" "uwe" (AgP3 Sg MU_BA); + --we_Pron = {s = table{Gen => glueGen AgMUBAP1 Pl); _=>mkSStand (AgMUBAP1 Pl)}; third = \\_,_=>[]; itP3Required=False}; --mkPron "itwe" "itwe" (AgMUBAP1 Pl); + --youPl_Pron = {s = table{Gen => glueGen (AgMUBAP2 Pl); _=>mkSStand (AgMUBAP2 Pl)}; third = \\_,_=>[]; itP3Required=False};--mkPron "imwe" "imwe" (AgMUBAP2 Pl); + --they_Pron = {s = table{Gen => glueGen (AgP3 Pl MU_BA); _=>mkSStand (AgP3 Pl MU_BA)}; third = \\_,_=>[]; itP3Required=False};--mkPron "bo" "bo" (AgP3 Pl MU_BA); + + --default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and + --it_Pron = {s = \\_=>[]; third = table{Gen => \\agr => glueGen agr; _=>\\agr => mkSStand agr}; itP3Required=True}; --mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module + + behind_Prep ={s="enyuma ya"}; + between_Prep = {s="hagati ya"}; + to_Prep ={s="aha"}; + -- several words depending on use omuri?? + in_Prep = mkPrep "omu" "omuri"; + --aha-ri Kamukuzi??? works for places + on_Prep = mkPrep "aha" "ahari"; + +--na --please this string varies with vowels use combine_morphemes or +--combine_words when using it. + with_Prep = mkPrep "na" []; + + from_Prep ={s="kuruga"}; + under_Prep = {s="hansi ya"}; + + ---Structural + {- + --there are several and i.e. + -- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, ) + --kandi (clauses having a commonality of subjects, object or tense) + --the best structure is a table + --mkConjunction "na" "kandi" and_Conj ; + -} + and_Conj = { + s = table { + AConj Other => "kandi"; + _ => "na" + }; + + s2 =[]; + n = Pl + }; + + + + + {- + + TODO: Look at the grammar books by Mpairwe & Kahangi Pg 155 + and investigate or to find out its arguments but for now + I will assume nari works on all types of + ConjArg (Conjunction Arguments) + + nari is the general or + + These are candidates for Extra module if they are not specific + to the type of argument. + nînga for Runynakore and + + nainga for rukiga + -} + + + or_Conj = { + s = \\ _ => "nari"; + s2 =[]; + n = Sg + }; + + have_V2 ={s= "ine"; pres=[]; perf =[]; morphs = mkVerbMorphs; comp = []; isRegular=False}; --: V2 ; + + {- + All Predeterminers are given here. + Initial analysis shows that + a) They appear after the noun phrase but some may be multi-word expressions for a single word in eblish. + b) They appear to agree with the noun class particle. But nothing in the literature states about + their morphological structure. The stems can be guessed by removing the two letter + suffix at the begining of the word. However, there are exceptions such as "not" which is not + inflected according to noun class + c) A table of concords must be built to accomodate every instance and this can only be done + using an analysis of some of the words in the dictionary(Mapirwe and Kahagi). + I am incluned to say use of the table of self-standing pronouns is sufficient. + d) An investigation of the tone systems would also be worthwhile. + + + Example sentences: + 1. All these chickens + 2. once a day + 3. only the man + -} + all_Predet = {s = "òna"; s2 = []; isMWE = False; isInflected =True}; + only_Predet = {s = "nka"; s2 = []; isMWE = False; isInflected =True}; + {- + -- how do we deal with superlatives. There seems to be no distinction between countable + -- and uncountable when it comes to superlatioves + -} + most_Predet = {s = "rikukíra"; s2 = "îngi"; isMWE = True; isInflected =True}; + not_Predet = {s = "ti"; s2 = []; isMWE = False; isInflected =False}; + + + + + {-Section for Adverbs-} + always_AdV = {s = "obutóòsha"; agr = AgrNo}; + everywhere_Adv = {s = "hóòna"; agr = AgrNo}; -- adverb of place. + here_Adv = {s = "hanu"; agr = AgrNo}; + {-End of Adverbs Adverbs-} + + {-Begining of Quantifiers-} + + --For DetQuant function to work, we need sample quatitifiers in Runynakore. Proximal, Medial, Distant + --We need a table to provide all of these. + + that_Quant = {s={s=\\_ =>[]; agr=AgrNo}; s2 = mkThat; doesAgree = True; isPron = False}; --: Quant ; + this_Quant = {s={s=\\_ =>[]; agr=AgrNo}; s2 = mkThis; doesAgree = True; isPron = False}; --: Quant ; + --these_Quant = {s =[]; s2 = mkThese; doesAgree = True}; + --those_Quant = {s =[]; s2 = mkThose; doesAgree = True}; + no_Quant = {s ={s=\\_=>"tihariho";agr=AgrNo}; s2 =\\_=> []; doesAgree = False; isPron = False};--: Quant ; + {-End of Quantifiers-} + + + + + {-Begining of verb-phrase-complement verb VV-} -- A verb whose complement is a verb phrase + --can8know_VV : VV ; -- can (capacity) + + + + + + {-End of verb-phrase-complement verb -} + + + + + + +{- +--1 Structural: Structural Words +-- +-- Here we have some words belonging to closed classes and appearing +-- in all languages we have considered. +-- Sometimes more distinctions are needed, e.g. $we_Pron$ in Spanish +-- should be replaced by masculine and feminine variants, found in +-- [``ExtendSpa`` ../spanish/ExtendSpa.gf]. + +abstract Structural = Cat ** { + + fun + +-- This is an alphabetical list of structural words + + above_Prep : Prep ; + after_Prep : Prep ; + all_Predet : Predet ; + almost_AdA : AdA ; + almost_AdN : AdN ; + although_Subj : Subj ; + always_AdV : AdV ; + and_Conj : Conj ; + because_Subj : Subj ; + before_Prep : Prep ; + behind_Prep : Prep ; + between_Prep : Prep ; + both7and_DConj : Conj ; -- both...and +---b both7and_DConj : DConj ; + but_PConj : PConj ; + by8agent_Prep : Prep ; -- by (agent) + by8means_Prep : Prep ; -- by (means of) + can8know_VV : VV ; -- can (capacity) + can_VV : VV ; -- can (possibility) + during_Prep : Prep ; + either7or_DConj : Conj ; -- either...or +---b either7or_DConj : DConj ; + every_Det : Det ; + everybody_NP : NP ; -- everybody + everything_NP : NP ; + everywhere_Adv : Adv ; --ha-ona =hoona +--- first_Ord : Ord ; DEPRECATED + few_Det : Det ; + for_Prep : Prep ; + from_Prep : Prep ; + he_Pron : Pron ; + here_Adv : Adv ; --hanu + + + here7to_Adv : Adv ; -- to here + here7from_Adv : Adv ; -- from here + how_IAdv : IAdv ; + how8many_IDet : IDet ; + how8much_IAdv : IAdv ; + i_Pron : Pron ; + if_Subj : Subj ; + in8front_Prep : Prep ; -- in front of + in_Prep : Prep ; + it_Pron : Pron ; + less_CAdv : CAdv ; + many_Det : Det ; + more_CAdv : CAdv ; + most_Predet : Predet ; + much_Det : Det ; + must_VV : VV ; +---b no_Phr : Phr ; + no_Utt : Utt ; + on_Prep : Prep ; +--- one_Quant : QuantSg ; DEPRECATED + only_Predet : Predet ; + or_Conj : Conj ; + otherwise_PConj : PConj ; + part_Prep : Prep ; + please_Voc : Voc ; + possess_Prep : Prep ; -- of (possessive) + quite_Adv : AdA ; + she_Pron : Pron ; + so_AdA : AdA ; + someSg_Det : Det ; + somePl_Det : Det ; + somebody_NP : NP ; + something_NP : NP ; + somewhere_Adv : Adv ; + that_Quant : Quant ; + that_Subj : Subj ; + there_Adv : Adv ; --hari + + + there7to_Adv : Adv ; -- to there + there7from_Adv : Adv ; -- from there + therefore_PConj : PConj ; + they_Pron : Pron ; + this_Quant : Quant ; + through_Prep : Prep ; + to_Prep : Prep ; + too_AdA : AdA ; + under_Prep : Prep ; + very_AdA : AdA ; + want_VV : VV ; + we_Pron : Pron ; + whatPl_IP : IP ; -- what (plural) + whatSg_IP : IP ; -- what (singular) + when_IAdv : IAdv ; + when_Subj : Subj ; + where_IAdv : IAdv ; + which_IQuant : IQuant ; + whoPl_IP : IP ; -- who (plural) + whoSg_IP : IP ; -- who (singular) + why_IAdv : IAdv ; + with_Prep : Prep ; + without_Prep : Prep ; +---b yes_Phr : Phr ; + yes_Utt : Utt ; + youSg_Pron : Pron ; -- you (singular) + youPl_Pron : Pron ; -- you (plural) + youPol_Pron : Pron ; -- you (polite) + + no_Quant : Quant ; + not_Predet : Predet ; + if_then_Conj : Conj ; + at_least_AdN : AdN ; + at_most_AdN : AdN ; + nobody_NP : NP ; + nothing_NP : NP ; + except_Prep : Prep ; + + as_CAdv : CAdv ; + + have_V2 : V2 ; + + fun language_title_Utt : Utt ; + +-} + +} +