diff --git a/src/rukiga/CatCgg.gf b/src/rukiga/CatCgg.gf index f2f1b6a6..934702fc 100755 --- a/src/rukiga/CatCgg.gf +++ b/src/rukiga/CatCgg.gf @@ -43,6 +43,7 @@ lincat Predet = {s : Str ; s2 : Str; isMWE : Bool; isInflected : Bool}; -- predeterminer (prefixed Quant) e.g. "all" RP = {s : Res.RCase => Res.Agreement => Str ; rObjVariant2: Res.Agreement => Str} ; + --VV = {- --1 Cat: the Category System diff --git a/src/rukiga/NumeralCgg.gf b/src/rukiga/NumeralCgg.gf index b07a9e2b..8c692345 100755 --- a/src/rukiga/NumeralCgg.gf +++ b/src/rukiga/NumeralCgg.gf @@ -3,6 +3,125 @@ concrete NumeralCgg of Numeral = CatCgg [Numeral,Digits] ** open ResCgg in { +lincat + Digit = { s : Str; unit : { s:Str ; g : Gender; stem : Str}; ten : { s:Str ; g : Gender} }; + Sub10 = { s : Str; unit : { s:Str ; g : Gender; stem : Str}; ten : { s:Str ; g : Gender}; n:Number}; + Sub100 = {s : Str ; g:Gender; n : Number} ; + Sub1000 = {s : Str ; g:Gender; n : Number} ; + Sub1000000 = {s : Str ; g:Gender; n : Number} ; + +lin num x = x ; +lin n2 = mkNum "biri" "ibiri" ZERO_ZERO "abiri" I_MA; + +lin n3 = mkNum "shatu" "ishatu" I_ZERO "ashatu" I_MA; +lin n4 = mkNum "na" "ina" I_ZERO "ana" I_MA ; +lin n5 = mkNum "taano" "itaano" I_ZERO "ataano" I_MA ; +lin n6 = mkNum "kaaga" "mukaaga" MU_MI "nkaaga" N_ZERO; +lin n7 = mkNum "shanju" "mushanju" MU_MI "nshanju" N_ZERO; +lin n8 = mkNum "naana" "munaana" MU_MI "kinaana" KI_ZERO ; +lin n9 = mkNum "enda" "mwenda" MU_MI "kyenda" KI_ZERO ; + + +lin pot01 = mkNum "mwe" "emwe" ZERO_ZERO "ikumi" I_MA ** {n = Sg} ; -- 1 +lin pot0 d = d ** {n = Pl} ; -- Sub10 d * 1 +lin pot110 = {s = "ikumi" ; g= I_MA; n = Pl}; --10 -Sub100 +lin pot111 = {s = "ikumi na emwe" ; g = ZERO_ZERO; n = Pl}; --11 +lin pot1to19 d = {s = "ikumi ne" ++ d.unit.s; g=d.unit.g } ** {n = Pl} ; --12-19 +lin pot0as1 n = {s = n.unit.s; g=n.unit.g} ** {n = n.n} ; --Sub100 -- coercion of 1..9 +lin pot1 d = {s = d.ten.s; g = d.ten.g} ** {n = Pl} ; + +lin pot1plus d e = {s = d.ten.s ++ "na" ++ e.unit.s; g = ZERO_ZERO; n=Pl }; --Sub100 ; -- d * 10 + n + +lin pot1as2 n = {s = n.s; g = ZERO_ZERO; n=n.n} ; + +lin pot2 d = let + numStr = case d.unit.g of{ + MU_MI => d.unit.s; + _ => d.ten.s + }; + in {s = "magana" ++ numStr; g = ZERO_ZERO} ** {n = Pl} ; +{- +lin pot2plus d e = let + unitFigure = case of{ + Sg => "igana"; + _ => "magana" + }; + + numStr = case of{ + MU_MI => d.unit.s; + _ => d.ten.s + }; + in {s = unitFigure ++ numStr ++ "na" ++ e.unit.s; g = ZERO_ZERO} ** {n = Pl} ; -- Sub10 -> Sub100 -> Sub1000 ; * 100 + n +-} + +lin pot2as3 n = n ; +lin pot3 n = let + unitFigure = case of{ + => "rukumi"; + _ => "enkumi" ++ n.s + }; + in {s = unitFigure; g = ZERO_ZERO; n=n.n}; -- Sub1000 -> Sub1000000 ; -- m * 1000 + +lin pot3plus n m = let + thousand = case of{ + => "akairira"; + _ => "obusirira" ++ n.s + }; + in { s = thousand ++ m.s; g = ZERO_ZERO; n = n.n} ; + +-- numerals as sequences of digits +{- + lincat + Dig = TDigit ; + + lin + IDig d = d ** {tail = T1} ; + + IIDig d i = { + s = \\o,c => d.s ! NCard ! Nom ++ commaIf i.tail ++ i.s ! o ! c ; + n = Pl ; + tail = inc i.tail + } ; + + D_0 = mkDig "0" ; + D_1 = mk3Dig "1" "1st" Sg ; + D_2 = mk2Dig "2" "2nd" ; + D_3 = mk2Dig "3" "3rd" ; + D_4 = mkDig "4" ; + D_5 = mkDig "5" ; + D_6 = mkDig "6" ; + D_7 = mkDig "7" ; + D_8 = mkDig "8" ; + D_9 = mkDig "9" ; + + oper + commaIf : DTail -> Str = \t -> case t of { + T3 => BIND ++ "," ++ BIND ; + _ => BIND + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; + + mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; + mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ; + + mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + s = table {NCard => regGenitiveS c ; NOrd => regGenitiveS o} ; + n = n + } ; + + TDigit = { + n : Number ; + s : CardOrd => Case => Str + } ; + +-} + + {- --1 Numerals diff --git a/src/rukiga/RelativeCgg.gf b/src/rukiga/RelativeCgg.gf index 6c30f746..78c55e49 100755 --- a/src/rukiga/RelativeCgg.gf +++ b/src/rukiga/RelativeCgg.gf @@ -2,6 +2,7 @@ concrete RelativeCgg of Relative = CatCgg ** open ResCgg in { +lin {- --IdRP : RP ; -- which @@ -18,7 +19,7 @@ concrete RelativeCgg of Relative = CatCgg ** open ResCgg in { -} -IdRP = {s = mkmkRPs; rObjVariant2 = mkRObjV2}; --: RP ; -- which + IdRP = {s = mkRPs; rObjVariant2 = mkRObjV2}; --: RP ; -- which diff --git a/src/rukiga/ResCgg.gf b/src/rukiga/ResCgg.gf index df608b78..c1461b87 100755 --- a/src/rukiga/ResCgg.gf +++ b/src/rukiga/ResCgg.gf @@ -24,7 +24,7 @@ param MU | KU | ZERO_BU | ZERO_BI | ZERO_MA | ZERO_MI | ZERO_TU | ZERO_N | I_ZERO | RI_ZERO | KU_ZERO | MU_ZERO | RU_ZERO | - KA_ZERO |ZERO_BAA | N_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 RCase = RSuj | RObj |RGen; PersonalPronounType = SubjM | Obj | RelSubj | RelObj | @@ -64,6 +64,9 @@ param -} NounState = Complete | Incomplete ; + + + oper -- the is for Common Nouns only Noun : Type = {s : NounState => Number => Str ; gender : Gender} ; @@ -1026,4 +1029,29 @@ oper --Conjunctions Conjunction : Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ; + + -- For $Numeral$. +param + --2 For $Numeral$ + + CardOrd = NCard; + --DForm = Unit Gender| Ten Gender | N20_50 Gender| N60_n70 Gender; -- | hundred | thousand | tenThousand | hundredThousand | million ; +oper + mkNum : Str ->Str -> Gender ->Str-> Gender -> --Str-> Gender->Str-> Gender-> Str -> Gender + { + s : Str; + unit : { s:Str ; g : Gender; stem : Str}; + ten : { s:Str ; g : Gender} + --twenty_fifty : { s:str ; g : gender; stem : Str}; + --sixty_seventy : { s:str ; g : gender; stem : Str}; + --eighty_ninety : { s:str ; g : gender; stem : Str}; + } = + \biri,ibiri, g1, abiri,g2 -> + { + s = []; + unit = {s = "ibiri"; g = g1; stem ="biri"}; + ten = {s = "abiri" ; g = g2}; + }; + + } \ No newline at end of file diff --git a/src/rukiga/StructuralCgg.gf b/src/rukiga/StructuralCgg.gf index 2ca1d9f9..65f7c262 100755 --- a/src/rukiga/StructuralCgg.gf +++ b/src/rukiga/StructuralCgg.gf @@ -140,6 +140,17 @@ those_Quant = {s =[]; s2 = mkThose; doesAgree = True}; no_Quant = {s ="tihariho"; s2 =\\_=> []; doesAgree = 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 -} + + + diff --git a/src/rukiga/VerbCgg.gf b/src/rukiga/VerbCgg.gf index 1ea24af7..82350e7b 100755 --- a/src/rukiga/VerbCgg.gf +++ b/src/rukiga/VerbCgg.gf @@ -43,6 +43,10 @@ lin -- AdvVP : VP -> Adv -> VP ; -- sleep here -- VerbPhrase: Type = {s:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist}; AdvVP vp adv ={s=vp.s; morphs = vp.morphs; comp = adv.s; isCompApStem = False; agr = AgrNo}; + + + + {- --1 The construction of verb phrases @@ -55,9 +59,6 @@ abstract Verb = Cat ** { -- Verb phrases are constructed from verbs by providing their -- complements. There is one rule for each verb category. - data - UseV : V -> VP ; -- sleep - ComplVV : VV -> VP -> VP ; -- want to run ComplVS : VS -> S -> VP ; -- say that she runs ComplVQ : VQ -> QS -> VP ; -- wonder who runs