Restuructured Pron, which affected Quant and all the functions that use it.

This commit is contained in:
David Bamutura
2019-05-10 23:03:09 +02:00
parent 681e459d0b
commit 64f7bdb967
7 changed files with 618 additions and 135 deletions

View File

@@ -31,13 +31,13 @@ lincat
NP = Res.NounPhrase; -- noun phrase (subject or object) e.g. "the red house" NP = Res.NounPhrase; -- noun phrase (subject or object) e.g. "the red house"
Pron = Res.Pronoun ; -- personal pronoun e.g. "she" Pron = Res.Pronoun ; -- personal pronoun e.g. "she"
Det = Res.Determiner ; -- determiner phrase e.g. "those seven" 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" Num = Res.Numer ; -- number determining element e.g. "seven"
AP = {s : Str ; position1 : Res.Position1; isProper : Bool; isPrep: Bool};--Res.AdjectivalPhrase; AP = {s : Str ; position1 : Res.Position1; isProper : Bool; isPrep: Bool};--Res.AdjectivalPhrase;
A = Res.Adjective; A = Res.Adjective;
Comp = Res.Comp; -- complement of copula, such as AP e.g. "very warm" 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; VPSlash = Res.VPSlash;
PN = Res.ProperNoun; -- ProperNoun : Type = {s: Str ; a:Agreement ; isPlace : Bool}; 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" Conj = Res.Conjunction; -- Conjunction: Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ; -- conjunction e.g. "and"

View File

@@ -8,7 +8,12 @@ lin
--UsePN : PN -> NP ; -- John --UsePN : PN -> NP ; -- John
UsePN pn = {s = \\ _ => pn.s; agr = pn.a}; -- 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 <pron.agr> 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 --UsePron pron = pron; -- the result of use pron is a NounPhrase
--MassNP : CN -> NP ; -- (beer) --MassNP : CN -> NP ; -- (beer)
MassNP cn = {s = \\_ =>cn.s ! Complete ! Pl; agr = AgP3 Pl cn.gender}; --: CN -> NP ; -- milk 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?-} {-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? 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 -- 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' -- The determiner has a fine-grained structure, in which a 'nucleus'
-- quantifier and an optional numeral can be discerned. -- quantifier and an optional numeral can be discerned.
--DetQuant : Quant -> Num -> Det ; -- these five --DetQuant : Quant -> Num -> Det ; -- these five
DetQuant quant num = {s=[]; s2 = quant.s2; ntype = Incomplete; num = num.n; pos=PreDeterminer; doesAgree = quant.doesAgree}; -- 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 -> Det ; -- these five best
--DetQuantOrd quant num ord = {}; --DetQuantOrd quant num ord = {};
NumSg = {s=[]; n=Sg}; NumSg = {s=[]; n=Sg};
NumPl = {s=[]; n=Pl}; NumPl = {s=[]; n=Pl};
-- NumCard card = {...}; -- NumCard card = {...};
--Quant = {s : Str ; s2 :Res.Agreement => Str; doesAgree : Bool} ; --Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ;
IndefArt = {s=[]; s2 = \\_=>[]; doesAgree = False}; IndefArt = {s={s=\\_=>[]; third = \\_,_=>[];agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron=False};
DefArt = {s=[]; s2 = \\_=>[]; doesAgree = False}; -- noun with initial vowel DefArt = {s={s =\\_=>[]; third = \\_,_=>[]; agr = AgrNo }; s2 = \\_=>[]; doesAgree = False; isPron = False}; -- noun with initial vowel
--NumDigits : Digits -> Card ; -- 51 --NumDigits : Digits -> Card ; -- 51
NumDigits dig = {s = dig.s!NCard ; n=dig.n}; NumDigits dig = {s = dig.s!NCard ; n=dig.n};
--NumNumeral : Numeral -> Card ; -- fifty-one --NumNumeral : Numeral -> Card ; -- fifty-one
NumNumeral numeral = {s=numeral.s!NCard; n=numeral.n}; NumNumeral numeral = {s=numeral.s!NCard; n=numeral.n};
--OrdDigits : Digits -> Ord ; -- 51st --OrdDigits : Digits -> Ord ; -- 51st
OrdDigits dig ={s=dig.s!NOrd ; position1 = Post}; 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 --1 Noun: Nouns, noun phrases, and determiners

View File

@@ -1,6 +1,7 @@
--# -path=.:../prelude:../abstract:../common --# -path=.:../prelude:../abstract:../common
concrete QuestionCgg of Question = CatCgg ** open ResCgg, Prelude in { concrete QuestionCgg of Question = CatCgg ** open ResCgg, Prelude in {
--1 Question: Questions and Interrogative Pronouns
{- {-
--1 Question: Questions and Interrogative Pronouns --1 Question: Questions and Interrogative Pronouns

View File

@@ -25,7 +25,7 @@ param
ZERO_MI | ZERO_TU | ZERO_N | I_ZERO | ZERO_MI | ZERO_TU | ZERO_N | I_ZERO |
RI_ZERO | KU_ZERO | MU_ZERO | RU_ZERO | RI_ZERO | KU_ZERO | MU_ZERO | RU_ZERO |
KA_ZERO |ZERO_BAA | N_ZERO | KI_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; RCase = RSuj | RObj;
PersonalPronounType = SubjM | Obj | RelSubj | RelObj | PersonalPronounType = SubjM | Obj | RelSubj | RelObj |
AdjPron2 | -- aAdjectival Prefixes with initial vowel with the semantics of "the" e.g. -- omuntu o-mu-rungi 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; ConjArg = Nn_Nn | Nps_Nps | Pns_Pns | RelSubjCls | Other;
AgrConj = AConj ConjArg; 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; AgrExist = AgrNo | AgrYes Agreement;
Position = PostDeterminer | PreDeterminer ; Position = PostDeterminer | PreDeterminer ;
Position1 = Post | Pre; Position1 = Post | Pre;
@@ -430,7 +430,7 @@ oper
-- This involved only change of the personal pronouns as for selfstanding pronouns. -- This involved only change of the personal pronouns as for selfstanding pronouns.
-- How can it be done without code repeation? -- How can it be done without code repeation?
mkPredetPref :Agreement -> Str = \a -> case a of { mkPredetPref :Agreement -> Str = \a -> case a of {
AgMUBAP1 n => mkClitics "ny" "twe" n; AgMUBAP1 n => mkClitics "ny" "itwe" n;
--AgMUBAP1 Pl => "aba" ; --AgMUBAP1 Pl => "aba" ;
AgMUBAP2 n => mkClitics "we" "mwe" n; --probably an error check your grammar book AgMUBAP2 n => mkClitics "we" "mwe" n; --probably an error check your grammar book
--AgMUBAP2 Pl => "aba" ; --AgMUBAP2 Pl => "aba" ;
@@ -693,9 +693,43 @@ oper
_ => mkClitic "Error mkGenPrepWithIVClitic" -- error checking for any case not catered for _ => 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{ mkRPs : RCase => Agreement =>Str = table{
RSubj => table { RSubj => table {
AgMUBAP1 Sg => mkClitic "o"; AgMUBAP1 Sg => mkClitic "o";
AgMUBAP1 Pl => mkClitic "aba" ; AgMUBAP1 Pl => mkClitic "aba" ;
AgMUBAP2 Sg => mkClitic "o"; AgMUBAP2 Sg => mkClitic "o";
@@ -726,38 +760,38 @@ oper
_ => mkClitic "XXXThat" -- error checking for any case not catered for _ => mkClitic "XXXThat" -- error checking for any case not catered for
}; };
RObj => table { _ => table {
AgMUBAP1 Sg => mkClitic "ou"; 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 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 Sg => mkClitic "ou"; --probably an error check your grammar book
AgMUBAP2 Pl => mkClitic "abu" ; AgMUBAP2 Pl => mkClitic "abu" ;
AgP3 Sg MU_BA => mkClitic "o"; AgP3 Sg MU_BA => mkClitic "o";
AgP3 Pl MU_BA => mkClitic "abu" ; AgP3 Pl MU_BA => mkClitic "abu" ;
AgP3 Pl ZERO_BU => mkClitic "obu" ; AgP3 Pl ZERO_BU => mkClitic "obu" ;
AgP3 Sg BU_MA => mkClitic "obu" ; AgP3 Sg BU_MA => mkClitic "obu" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ; AgP3 Pl (KA_BU | RU_BU) => mkClitic "obu" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ; AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebi" ;
AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "agu"; AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "agu";
AgP3 (Sg ) HA => mkClitic "ahu" ; -- of place HA AgP3 (Sg ) HA => mkClitic "ahu" ; -- of place HA
AgP3 (Sg ) MU => mkClitic "ahu" ; -- of place MU AgP3 (Sg ) MU => mkClitic "ahu" ; -- of place MU
AgP3 (Sg ) KU => mkClitic "ei" ; -- of place KU AgP3 (Sg ) KU => mkClitic "ei" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "eri" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "eri" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aku" ; AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aku" ;
AgP3 Sg KI_BI => mkClitic "eki" ; AgP3 Sg KI_BI => mkClitic "eki" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "oku" ; AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "oku" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogu" ; AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogu" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "oru" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "oru" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otu" ; AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otu" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ei" ; AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ei" ;
AgP3 Pl ZERO_MI =>mkClitic "ei" ; AgP3 Pl ZERO_MI =>mkClitic "ei" ;
AgP3 Pl MU_MI => mkClitic "ei"; AgP3 Pl MU_MI => mkClitic "ei";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "ezi" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "ezi" ;
AgP3 Sg GU_GA => mkClitic "ogu" ; AgP3 Sg GU_GA => mkClitic "ogu" ;
AgP3 Pl GU_GA => mkClitic "agu" ; AgP3 Pl GU_GA => mkClitic "agu" ;
_ => mkClitic "XXXThat" -- error checking for any case not catered for _ => mkClitic "XXXThat" -- error checking for any case not catered for
} }
}; };
mkRObjV2 : Agreement=> Str =table { mkRObjV2 : Agreement=> Str =table {
AgMUBAP1 Sg => mkClitic "ou"; AgMUBAP1 Sg => mkClitic "ou";
@@ -809,17 +843,16 @@ oper
-- all noun classes have pronouns in the third person -- all noun classes have pronouns in the third person
--This is a big problem, probably we create our own abstract syntax --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 TO-DO: DONE but not tested yet. I have attempted to account for all other classes by using a test.
class KI_BI
-} -}
Pronoun : Type ={s : Case => Str ; agr : Agreement} ; Pronoun : Type ={s : Case => Str; third:Agreement => Case=>Str; agr:AgrExist} ;
mkPron : Str -> Str -> Agreement->Pronoun =\nom,acc, a -> {-
{ mkPron : Str -> Str ->Pronoun =\nom,acc, ->
s = table {Nom => nom; Acc => acc}; {
agr = a; s = table {Nom => nom; Acc => acc};
}; agr = a;
};
-}
PolTemp = {s : Agreement => Str * Str ; end : Str} ; -- a tupple of two strings PolTemp = {s : Agreement => Str * Str ; end : Str} ; -- a tupple of two strings
@@ -1050,7 +1083,9 @@ oper
--Concatenates two strings at runtime without spaces --Concatenates two strings at runtime without spaces
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
glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a;
--Number determining element --Number determining element
Numer : Type = { s: Str ; n : Number}; Numer : Type = { s: Str ; n : Number};

View File

@@ -22,14 +22,18 @@ lin
every_Det = {s ="buri"; s2 = \\_ => []; ntype=Incomplete; num=Sg; pos=PreDeterminer; doesAgree = False} ; 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} ; 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} ; many_Det ={s="ingi"; s2 = \\_ => []; ntype =Complete; num=Pl; pos=PostDeterminer; doesAgree = False} ;
i_Pron = 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 = 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 = mkPron "uwe" "uwe" (AgP3 Sg MU_BA); he_Pron, she_Pron = {s = table{Gen => glueGen (AgP3 Sg MU_BA); _=>mkSStand (AgP3 Sg MU_BA)}; third = \\_,_=>[]; agr = AgrYes(AgP3 Sg MU_BA)};--mkPron "uwe" "uwe" (AgP3 Sg MU_BA);
we_Pron = mkPron "itwe" "itwe" (AgMUBAP1 Pl); we_Pron = {s = table{Gen => glueGen (AgMUBAP1 Pl); _=>mkSStand (AgMUBAP1 Pl)}; third = \\_,_=>[]; agr = AgrYes (AgMUBAP1 Pl)}; --mkPron "itwe" "itwe" (AgMUBAP1 Pl);
youPl_Pron = mkPron "imwe" "imwe" (AgMUBAP2 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);
they_Pron = mkPron "bo" "bo" (AgP3 Pl MU_BA); -- default implementation Using KI_BI. Use mkmkGenPrepNoIVClitic and
it_Pron = mkPron "kyo" "kyo" (AgP3 Sg KI_BI); -- should form an it_Pron_NClass in extra module 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"}; behind_Prep ={s="enyuma ya"};
between_Prep = {s="hagati ya"}; between_Prep = {s="hagati ya"};
@@ -41,7 +45,7 @@ lin
--na --please this string varies with vowels use combine_morphemes or --na --please this string varies with vowels use combine_morphemes or
--combine_words when using it. --combine_words when using it.
with_Prep = mkPrep "na" []; with_Prep = mkPrep "na" [];
from_Prep ={s="kuruga"}; from_Prep ={s="kuruga"};
under_Prep = {s="hansi ya"}; 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 ; 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 All Predeterminers are given here.
We need a table to provide all of these. 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 ; all_Predet = {s = "òna"; s2 = []; isMWE = False; isInflected =True};
this_Quant = {s=[]; s2 = mkThis; doesAgree = True}; --: Quant ; only_Predet = {s = "nka"; s2 = []; isMWE = False; isInflected =True};
--these_Quant = {s =[]; s2 = mkThese; doesAgree = True}; {-
--those_Quant = {s =[]; s2 = mkThose; doesAgree = True}; -- how do we deal with superlatives. There seems to be no distinction between countable
no_Quant = {s ="tihariho"; s2 =\\_=> []; doesAgree = False};--: Quant ; -- and uncountable when it comes to superlatioves
{-End of Quantifiers-} -}
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 -}

View File

@@ -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 ;
}

View File

@@ -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 ;
-}
}