modified Noun to accommodate for IDetCN in Question

This commit is contained in:
David Bamutura
2019-05-14 03:53:11 +02:00
parent 1dbd1b535f
commit 38b29c7071
5 changed files with 83 additions and 25 deletions

View File

@@ -67,7 +67,9 @@ lincat
Ord = {s :Res.Agreement=>Str; position1:Res.Position1} ; Ord = {s :Res.Agreement=>Str; position1:Res.Position1} ;
Card = {s :Res.Agreement=>Str; n : Res.Number} ; Card = {s :Res.Agreement=>Str; n : Res.Number} ;
IP = {s :Str ; n : Res.Number; isVerbSuffix: Bool; requiresIPPrefix: Bool; aux:Str}; IP = {s :Str ; n : Res.Number; isVerbSuffix: Bool; requiresIPPrefix: Bool; aux:Str};
IAdv = {s :Str ; requiresSubjPrefix: Bool}; IAdv = {s : Str ; requiresSubjPrefix: Bool};
IDet = {s : Str ; requiresSubjPrefix: Bool};
IQuant = {s : Res.Number =>Str ; requiresSubjPrefix: Bool};
--VV = --VV =
linref linref

View File

@@ -16,7 +16,7 @@ lin
}; };
--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 ! Pl ! Complete; agr = AgP3 Pl cn.gender}; --: CN -> NP ; -- milk
--DetCN det cn = mkDeterminer det cn; --Should be nemed mkDetCN --DetCN det cn = mkDeterminer det cn; --Should be nemed mkDetCN
DetCN det cn = mkDetCN det cn; -- the man DetCN det cn = mkDetCN det cn; -- the man
{- {-
@@ -32,28 +32,28 @@ lin
AdjCN ap cn = AdjCN ap cn =
case <ap.position1, ap.isProper, > of { case <ap.position1, ap.isProper, > of {
<Pre, True> => { <Pre, True> => {
s = \\ ns, num =>ap.s ++ cn.s ! ns ! num ; s = \\ num, ns =>ap.s ++ cn.s ! num ! ns ;
gender = cn.gender gender = cn.gender
}; };
<Post, False> => case ap.isPrep of { <Post, False> => case ap.isPrep of {
False => { False => {
s = \\ ns, num => cn.s ! ns ! num ++ mkAdjPronIVClitic (AgP3 num cn.gender) s = \\ num, ns => cn.s ! num ! ns ++ mkAdjPronIVClitic (AgP3 num cn.gender)
++ ap.s; ++ ap.s;
gender = cn.gender gender = cn.gender
}; };
True => { True => {
s = \\ ns, num => (cn.s ! ns ! num) ++ s = \\ num, ns => (cn.s ! num ! ns) ++
mkGenPrepNoIVClitic (AgP3 num cn.gender) ++ ap.s ; mkGenPrepNoIVClitic (AgP3 num cn.gender) ++ ap.s ;
gender = cn.gender gender = cn.gender
} }
}; };
<Pre, False> => { <Pre, False> => {
s = \\ ns, num => mkAdjPronIVClitic (AgP3 num cn.gender) s = \\ num, ns => mkAdjPronIVClitic (AgP3 num cn.gender)
++ ap.s ++ (cn.s ! ns ! num) ; ++ ap.s ++ (cn.s ! num ! ns) ;
gender = cn.gender gender = cn.gender
}; };
<Post, True> => { <Post, True> => {
s = \\ ns, num => (cn.s ! ns ! num) ++ ap.s ; s = \\ num, ns => (cn.s ! num ! ns) ++ ap.s ;
gender = cn.gender gender = cn.gender
} }

View File

@@ -12,6 +12,13 @@ concrete QuestionCgg of Question = CatCgg ** open ResCgg, Prelude in {
--QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love --QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love
--QuestIAdv : IAdv -> Cl -> QCl ; -- why does John walk --QuestIAdv : IAdv -> Cl -> QCl ; -- why does John walk
--QuestIComp : IComp -> NP -> QCl ; -- where is John --QuestIComp : IComp -> NP -> QCl ; -- where is John
--IdetCN : IDet -> CN -> IP ; -- which five songs
IdentCN idet cn = case idet.requiresSubjPrefix of {
True => {s = \\n => cn!n!Complete ++ mkSubjPrefix mkAgreement(cn.gender P3 n) ++ idet.s};
False => { s = \\n => cn!n!Complete ++ idet.s}
};
--IdetIP : IDet -> IP ; -- which five
{- {-
--1 Question: Questions and Interrogative Pronouns --1 Question: Questions and Interrogative Pronouns

View File

@@ -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; --Default is AgP3 Sg KI_BI Agreement = AgP3 Number Gender | AgMUBAP1 Number |AgMUBAP2 Number | NONE; --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;
@@ -70,27 +70,25 @@ NounState = Complete | Incomplete ;
oper oper
-- the is for Common Nouns only -- the is for Common Nouns only
Noun : Type = {s : NounState => Number => Str ; gender : Gender} ; Noun : Type = {s : Number=> NounState=> Str ; gender : Gender} ;
ivs : pattern Str = #("a" | "e" | "o"); --pattern for initial vowels ivs : pattern Str = #("a" | "e" | "o"); --pattern for initial vowels
human_relations: pattern Str = --expand this list human_relations: pattern Str = --expand this list
#("Taata" | "Maama" | "Shwento" | "Shwenkuru" | "Nyinento" | "Nyinenkuru"); #("Taata" | "Maama" | "Shwento" | "Shwenkuru" | "Nyinento" | "Nyinenkuru");
mkNoun : Str -> Str ->Gender ->Noun = \sg,pl, g -> { mkNoun : Str -> Str ->Gender ->Noun = \sg,pl, g -> {
s = table { s = table {
Complete => table { Sg => sg ; Pl => pl}; Sg => table {Complete => sg; Incomplete => Predef.drop 1 sg};
Incomplete => table { Pl => table {Complete => pl; Incomplete => Predef.drop 1 pl}
Sg => case sg of { };
(#ivs + _) => Predef.drop 1 sg; gender = g
_ => sg };
Pl => case pl of { };
(#ivs + _) => Predef.drop 1 pl;
_ => pl }
}
};
gender = g
} ;
mkVerb : Str ->Str ->Str ->Verb = \rad, end1,end2 ->{ mkVerb : Str ->Str ->Str ->Verb = \rad, end1,end2 ->{
s = rad; s = rad;
@@ -231,6 +229,49 @@ oper
Pl => mkClitic pl Pl => mkClitic pl
} ; } ;
mkAgreement: Gender -> Person -> Number ->Agreement =\g,p,n ->
case <g,p,n> of{
<MU_BA, P1, n> => AgMUBAP1 n;
<MU_BA, P2, n> => AgMUBAP2 n;
<g,P3,n> => AgP3 n g;
<_,_,_,> => NONE
};
mkSubjPrefix : Agreement -> Str =\a ->case a of {
AgMUBAP1 n => mkClitics "n" "tu" n;
--AgMUBAP1 Pl => "tu" ;
AgMUBAP2 n => mkClitics "o" "mu" n;
--AgMUBAP2 Pl => "mu" ;
AgP3 n MU_BA => mkClitics "a" "ba" n;
--AgP3 Pl MU_BA => "ba" ;
AgP3 Sg KI_BI => mkClitic "ki" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "bi" ;
AgP3 Sg (RU_N | RU_MA | RU_ZERO | RU_BU) => mkClitic "ru" ;
AgP3 Pl RU_N => mkClitic "zi"; --| "i";
AgP3 Sg N_N => mkClitic "e";
AgP3 Pl N_N => mkClitic "zi"; --| "i";
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "gu" ;
AgP3 Pl MU_MI => "e" ;
AgP3 Sg (RI_MA | RI_ZERO | I_ZERO) =>mkClitic "ri";
AgP3 Pl (RI_MA | BU_MA | KU_MA | ZERO_MA | I_MA |RU_MA) => mkClitic "ga" ;
AgP3 Sg (KA_BU | KA_ZERO | KA_TU) => mkClitic "ka" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "bu" ;
AgP3 Sg ZERO_BU => mkClitic "bu" ;
AgP3 Pl ZERO_BU => mkClitic "bu" ;
AgP3 Sg ZERO_BI => mkClitic "bi" ;
AgP3 Sg ZERO_MA => mkClitic "ga" ;
AgP3 Pl RI_ZERO => mkClitic "ga" ;
AgP3 Sg KU_ZERO => mkClitic "ku" ;
AgP3 Pl KU_ZERO => mkClitic "ku" ;
AgP3 Pl MU_ZERO => mkClitic "gu" ;
AgP3 Pl RU_ZERO => mkClitic "ru" ;
AgP3 Sg ZERO_TU => mkClitic "tu" ;
AgP3 Pl ZERO_TU => mkClitic "tu" ;
AgP3 Sg (ZERO_MI | ZERO_ZERO) => mkClitic "" ;
AgP3 Pl ZERO_MI => mkClitic "e" ;
AgP3 Pl KA_ZERO => mkClitic "" ;
_ => mkClitic "SubjNotKnown" --for checking if there is some class unaccounted for
};
mkSubjClitic : Agreement -> Str = \a -> mkSubjClitic : Agreement -> Str = \a ->
case a of { case a of {
AgMUBAP1 n => mkClitics "n" "tu" n; AgMUBAP1 n => mkClitics "n" "tu" n;
@@ -920,8 +961,8 @@ oper
<PostDeterminer> => {s = \\_=> <PostDeterminer> => {s = \\_=>
let let
subjClitic = mkSubjClitic (AgP3 det.num cn.gender) subjClitic = mkSubjClitic (AgP3 det.num cn.gender)
in cn.s!det.ntype!det.num ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender}; in cn.s!det.num! det.ntype ++ subjClitic ++ det.s; agr = AgP3 det.num cn.gender};
<PreDeterminer> => { s =\\_ => det.s ++ cn.s ! det.ntype ! det.num; agr = AgP3 det.num cn.gender} --; <PreDeterminer> => { s =\\_ => det.s ++ cn.s !det.num ! det.ntype; agr = AgP3 det.num cn.gender} --;
--<PostDeterminer, PFalse> => {s = \\_=> cn.s!det.ntype!det.num; agr = AgP3 det.num cn.gender } --<PostDeterminer, PFalse> => {s = \\_=> cn.s!det.ntype!det.num; agr = AgP3 det.num cn.gender }
}; };

View File

@@ -165,6 +165,14 @@ lin
--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.
how_IAdv = {s ="ta"; requiresSubjPrefix = True}; --: IAdv ; how_IAdv = {s ="ta"; requiresSubjPrefix = True}; --: IAdv ;
--how8much_IAdv = {s ="kwiga"; s2requireSubjPrefix = True};--: IAdv ; --how8much_IAdv = {s ="kwiga"; s2requireSubjPrefix = True};--: IAdv ;
when_IAdv = {s ="ryari"; requiresSubjPrefix = False}; --: IAdv ;
where_IAdv = {s ="nkahe"; requiresSubjPrefix = False}; --: IAdv ;
why_IAdv = {s ="ahabweki"; requiresSubjPrefix = False};--: IAdv ;
how8many_IDet ={s ="ngahe"; requiresSubjPrefix = False};--: IDet ;
which_IQuant ={s =\\_ =>"ha"; requiresSubjPrefix = False};--: IQuant ;
{- {-
--1 Structural: Structural Words --1 Structural: Structural Words
-- --