From 21e84c764c7a3d73404315eeae7fbc1682df5057 Mon Sep 17 00:00:00 2001 From: Laurette Marais Date: Fri, 16 Dec 2022 23:16:25 +0200 Subject: [PATCH] (zul) mostly changes to VP --- src/zulu/BackwardZul.gf | 26 ++- src/zulu/CatExtZul.gf | 3 +- src/zulu/CatZul.gf | 3 +- src/zulu/ExtraExtZul.gf | 35 +++- src/zulu/NounExtZul.gf | 70 ++++--- src/zulu/PChunkZul.gf | 6 +- src/zulu/ParadigmsZul.gf | 2 +- src/zulu/RelativeExtZul.gf | 129 ++++++++++++ src/zulu/RelativeZul.gf | 20 +- src/zulu/ResZul.gf | 277 +++++++++++++++++++------- src/zulu/SentenceZul.gf | 62 +++--- src/zulu/VerbExtZul.gf | 221 +++++++++++++++++--- src/zulu/VerbZul.gf | 52 ++++- src/zulu/abstract_ext/ExtraExt.gf | 8 +- src/zulu/abstract_ext/PChunk.gf | 3 + src/zulu/abstract_ext/RelativeExt.gf | 9 + src/zulu/abstract_ext/VerbExt.gf | 5 +- src/zulu/grammar_ext/NguniChunk.gf | 1 + src/zulu/grammar_ext/NguniChunkZul.gf | 1 + src/zulu/grammar_ext/NguniLang.gf | 1 + src/zulu/grammar_ext/NguniLangZul.gf | 1 + 21 files changed, 731 insertions(+), 204 deletions(-) create mode 100644 src/zulu/RelativeExtZul.gf create mode 100644 src/zulu/abstract_ext/RelativeExt.gf diff --git a/src/zulu/BackwardZul.gf b/src/zulu/BackwardZul.gf index 7602a6c6e..084fa0899 100755 --- a/src/zulu/BackwardZul.gf +++ b/src/zulu/BackwardZul.gf @@ -20,6 +20,8 @@ concrete BackwardZul of Backward = CatZul ** open ResZul,Prelude,ParamX in { s = table { MainCl => \\a,p,t,l => let vform = (VFIndic MainCl p t) ; + vpref_no_oc = verb_prefix_no_oc vform l v2.r a ; + vpref_with_oc = verb_prefix_with_oc vform l a ; tp = tensePref vform v2.r v2.syl ; -- [] / zo- / zuku- -- oc = objConc np.agr v2.r v2.syl ; -- [] / m - -- longform = case np.heavy of { @@ -29,8 +31,8 @@ concrete BackwardZul of Backward = CatZul ** open ResZul,Prelude,ParamX in { r = v2.s!(rform (VFIndic MainCl p t) longform) ; -- bona / boni -- obj = np.s!NFull -- [] / inkomo in case np.proDrop of { - True => tp ++ oc ++ r ++ obj ; - False => tp ++ r ++ obj + True => vpref_with_oc ++ tp ++ oc ++ r ++ obj ; + False => vpref_no_oc ++ tp ++ r ++ obj } ; RelCl => \\a,p,t,l => let vform = (VFIndic RelCl p t) ; @@ -70,6 +72,26 @@ concrete BackwardZul of Backward = CatZul ** open ResZul,Prelude,ParamX in { } } } ; + inf_s = let + inf_oc = case np.proDrop of { + True => oc ; + False => [] + } + in + table { + NFull => table { + Pos => "uku" ++BIND++ inf_oc ++ v2.s!R_a ++ obj ; + Neg => "uku" ++BIND++ "nga" ++BIND++ inf_oc ++ v2.s!R_i ++ obj + } ; + NReduced | NPoss => table { + Pos => "ku" ++BIND++ inf_oc ++ v2.s!R_a ++ obj ; + Neg => "ku" ++BIND++ "nga" ++BIND++ inf_oc ++ v2.s!R_i ++ obj + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++inf_oc ++ v2.s!R_a ++ obj ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++"nga"++BIND++inf_oc ++ v2.s!R_a ++ obj + } + } ; iadv, advs, comp = [] ; ap_comp = \\_ => [] ; hasComp = np.heavy ; diff --git a/src/zulu/CatExtZul.gf b/src/zulu/CatExtZul.gf index 24fb1797e..ad4bce26f 100755 --- a/src/zulu/CatExtZul.gf +++ b/src/zulu/CatExtZul.gf @@ -3,7 +3,8 @@ concrete CatExtZul of CatExt = open ResZul,Prelude,ParamX in { lincat Loc = { s : CType => Agr => Polarity => BasicTense => Str ; - imp_s : Number => Polarity => Str + imp_s : Number => Polarity => Str ; + inf_s : NForm => Polarity => Str } ; LocN = { s : Str } ; LocAdv = { s : Str ; reqLocS : Bool } ; diff --git a/src/zulu/CatZul.gf b/src/zulu/CatZul.gf index 1feb79e90..82cfd8bf0 100755 --- a/src/zulu/CatZul.gf +++ b/src/zulu/CatZul.gf @@ -48,11 +48,12 @@ concrete CatZul of Cat = CommonX - [Temp,Tense,Adv,IAdv] ** VP = { s : CType => Agr => Polarity => BasicTense => Bool => Str ; -- TODO: mood imp_s : Number => Polarity => Str ; + inf_s : NForm => Polarity => Str ; -- oc : Str ; comp : Str ; iadv : Str ; advs : Str ; - hasComp : Bool ; + hasComp : Bool ; -- indicates whether to use long form r : RInit ; syl : Syl ; -- asp : Aspect ; diff --git a/src/zulu/ExtraExtZul.gf b/src/zulu/ExtraExtZul.gf index 0a5816c66..bdfe859e8 100755 --- a/src/zulu/ExtraExtZul.gf +++ b/src/zulu/ExtraExtZul.gf @@ -272,7 +272,10 @@ concrete ExtraExtZul of ExtraExt = } ; NPAdv np = { - s = np.s!NFull ; + s = case np.proDrop of { + False => np.s!NFull ; + True => "*" ++ np.s!NFull + } ; reqLocS = False } ; @@ -577,9 +580,11 @@ concrete ExtraExtZul of ExtraExt = phakade_LocN = { s = "phakade" ; empty = [] } ; phezulu_LocN = { s = "phezulu" ; empty = [] } ; + ngemuva_LocAdv = { s = "ngemuva" ; reqLocS = False } ; emuva_LocAdv = { s = "emuva" ; reqLocS = False } ; ecaleni_LocAdv = { s = "ecaleni" ; reqLocS = False } ; + ngaphezu_LocAdv = { s = "ngaphezu" ; reqLocS = False } ; lapha_Loc = { s = table { @@ -612,6 +617,20 @@ concrete ExtraExtZul of ExtraExt = Pos => "yibani" ++ "lapha" ; Neg => "ningabi" ++ "lapha" } + } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ "lapha" ; + Neg => "ukungabi" ++ "lapha" + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ "lapha" ; + Neg => "kungabi" ++ "lapha" + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ "lapha" ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ "lapha" + } } } ; @@ -626,6 +645,20 @@ concrete ExtraExtZul of ExtraExt = Pos => "yibani" ++ "khona" ; Neg => "ningabi" ++ "khona" } + } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ "khona" ; + Neg => "ukungabi" ++ "khona" + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ "khona" ; + Neg => "kungabi" ++ "khona" + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ "khona" ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ "khona" + } } } ; diff --git a/src/zulu/NounExtZul.gf b/src/zulu/NounExtZul.gf index 4cd0de43b..20edf6f15 100644 --- a/src/zulu/NounExtZul.gf +++ b/src/zulu/NounExtZul.gf @@ -170,34 +170,34 @@ concrete NounExtZul of NounExt = CatZul,CatExtZul ** open ResZul, Prelude, Param -- not built to work for copulative VPs for now (specifically for agreement) Deverb15 pol vp = let - agr = Third C15 Sg ; - v = vp.s!MainCl!(Third C15 Sg)!pol.p!PresTense!False + agr = Third C15 Sg in { - s = table { - NFull => case of { - => "uku"++BIND++"nga"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,RC> => "uku"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,(RA|RE)> => "ukw"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,_> => "uk"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s - } ; - NReduced => case of { - => "ku"++BIND++"nga"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,RC> => "ku"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,(RA|RE)> => "kw"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,_> => "k"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s - } ; - NPoss => case of { - => "ku"++BIND++"nga"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,RC> => "ku"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,(RA|RE)> => "kw"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,_> => "k"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s - } ; - NLoc => case of { - => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++"nga"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s ; - <_,_> => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++v ++ vp.comp ++ vp.advs ++ vp.iadv ++ pol.s - } - } ; + s = \\nform => vp.inf_s!nform!pol.p ++ pol.s ; + -- s = table { + -- NFull => case of { + -- => "uku"++BIND++"nga"++BIND++v.s!R_i ; + -- <_,RC> => "uku"++BIND++v.s!R_a ; + -- <_,(RA|RE)> => "ukw"++BIND++v.s!R_a ; + -- <_,_> => "uk"++BIND++v.s!R_a + -- } ; + -- NReduced => case of { + -- => "ku"++BIND++"nga"++BIND++v.s!R_i ; + -- <_,RC> => "ku"++BIND++v.s!R_a ; + -- <_,(RA|RE)> => "kw"++BIND++v.s!R_a ; + -- <_,_> => "k"++BIND++v.s!R_a + -- } ; + -- NPoss => case of { + -- => "ku"++BIND++"nga"++BIND++v.s!R_i ; + -- <_,RC> => "ku"++BIND++v.s!R_a ; + -- <_,(RA|RE)> => "kw"++BIND++v.s!R_a ; + -- <_,_> => "k"++BIND++v.s!R_a + -- } ; + -- NLoc => case of { + -- => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++"nga"++BIND++v.s!R_i ; + -- <_,_> => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++v.s!R_a + -- } + -- } ; agr = agr ; i = RU ; proDrop = False ; @@ -297,6 +297,24 @@ concrete NounExtZul of NounExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Pos => "yibani" ++ "s"++BIND++ locadv.s ; Neg => "ningabi" ++ "s"++BIND++ locadv.s } + } ; + -- inf_s = table { + -- Pos => "ukuba" ++ "s"++BIND++ locadv.s ; + -- Neg => "ukungabi" ++ "s"++BIND++ locadv.s + -- } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ "s"++BIND++ locadv.s ; + Neg => "ukungabi" ++ "s"++BIND++ locadv.s + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ "s"++BIND++ locadv.s ; + Neg => "kungabi" ++ "s"++BIND++ locadv.s + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ "s"++BIND++ locadv.s ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ "s"++BIND++ locadv.s + } } } ; diff --git a/src/zulu/PChunkZul.gf b/src/zulu/PChunkZul.gf index 578f844fe..b0fe3b1d7 100644 --- a/src/zulu/PChunkZul.gf +++ b/src/zulu/PChunkZul.gf @@ -6,7 +6,7 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** lincat Chunks = {s : Str} ; Chunk = {s : Str}; - Chunk_Phr, Chunk_AP, Chunk_Adv, Chunk_Imp, Chunk_S, Chunk_RS, Chunk_QS, Chunk_VP, Chunk_CN, Chunk_NP, Chunk_N, Chunk_Symb = {s: Str} ; + Chunk_Phr, Chunk_AP, Chunk_Adv, Chunk_Imp, Chunk_S, Chunk_RS, Chunk_QS, Chunk_VP, Chunk_V, Chunk_CN, Chunk_NP, Chunk_N, Chunk_Symb = {s: Str} ; VC = V ; @@ -22,6 +22,7 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** RS_Chunker c = c ; QS_Chunker c = c ; VP_Chunker c = c ; + V_Chunker c = c ; CN_Chunker c = c ; NP_Chunker c = c ; N_Chunker c = c ; @@ -42,6 +43,9 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** VP_Rel_Chunk temp pol pron vp = { s = temp.s ++ pol.s ++ pron.s!NFull ++ vp.s!RelCl!pron.agr!pol.p!temp.t!False } ; + V_Chunk v = { + s = variants { v.s!R_a ; v.s!R_ile ; v.s!R_e ; v.s!R_i ; v.s!R_anga } + } ; CN_Sg_Chunk cn = { s = cn.s!Sg!NFull } ; diff --git a/src/zulu/ParadigmsZul.gf b/src/zulu/ParadigmsZul.gf index 2ea7b1af6..9dec01fd4 100755 --- a/src/zulu/ParadigmsZul.gf +++ b/src/zulu/ParadigmsZul.gf @@ -108,7 +108,7 @@ oper mkV : (hamb : Str) -> V = \hamb -> lin V (regVerb hamb) ; mkV : (th,thi : Str) -> V = \th,thi -> lin V (th_Verb th thi) ; mkV : (guqubal,guqubala,guqubele : Str) -> V = \guqubal,guqubala,guqubele -> lin V (three_Verb guqubal guqubala guqubele) ; - mkV : (guqubal,guqubala,guqubele,guqubele_2 : Str) -> V = \guqubal,guqubala,guqubele,guqubele_2 -> lin V (four_Verb guqubal guqubala guqubele guqubele_2) ; + mkV : (dlal,dlala,dlalile,dlale : Str) -> V = \dlal,dlala,dlalile,dlale -> lin V (four_Verb dlal dlala dlalile dlale) ; } ; passV = overload { diff --git a/src/zulu/RelativeExtZul.gf b/src/zulu/RelativeExtZul.gf new file mode 100644 index 000000000..562d6889b --- /dev/null +++ b/src/zulu/RelativeExtZul.gf @@ -0,0 +1,129 @@ +concrete RelativeExtZul of RelativeExt = CatZul ** open ResZul,Prelude,ParamX in { + + flags optimize=all_subs ; + + lin + + RelVPShort rp vp = case vp.vptype of { + CopIdent => rcl_with_id_cop_predicate_short rp vp ; + CopAssoc => rcl_with_ass_cop_predicate_short rp vp ; + CopEq => rcl_with_eq_cop_predicate_short rp vp ; + CopDescr => rcl_with_descr_predicate_short rp vp ; + _ => rcl_with_verb_predicate_short rp vp + } ; + + oper + + rcl_with_verb_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform = VFIndic RelCl p t ; + vow = case of { + => False ; + <_,Pos,PresTense> => True ; + => False ; + <_,_,PastTense> => True ; + <_,_,_> => False + } ; + rcform = RelC ; + in + -- naively only took out the subject + rp.s + ++ vp.s!RelCl!a!p!t!False + ++ vp.iadv + ++ vp.comp + ++ vp.advs + } ; + + rcl_with_ass_cop_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform_main = VFIndic RelCl p t ; + pcp = relConcLookup!a!vp.r ++BIND; + -- cp = (assoc_cop_pref vp.comp_agr) ; + -- cb = (withPref ! vp.r) ++ BIND ++ vp.comp ; + -- asp = case vp.asp of { + -- Prog => progPref vform_main ; + -- _ => [] + -- } ; + in + -- naively removed subject + "*" ++ + rp.s ++ + -- pcp ++ + vp.s!RelCl!a!p!t!False ++ + vp.iadv ++ + vp.advs + } ; + + rcl_with_id_cop_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform_main = VFIndic RelCl p t ; + pcp = relConcLookup!a!vp.r ++BIND ; + -- cp = id_cop_pref vp.comp_agr ; + cb = vp.comp ; + in + -- naively removed subject + "*" ++ + rp.s ++ + -- pcp ++ + vp.s!RelCl!a!p!t!False ++ + vp.iadv ++ + vp.advs + } ; + + rcl_with_ass_cop_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform_main = VFIndic RelCl p t ; + pcp = relConcLookup!a!vp.r ++BIND; + -- cp = (assoc_cop_pref vp.comp_agr) ; + -- cb = (withPref ! vp.r) ++ BIND ++ vp.comp ; + -- asp = case vp.asp of { + -- Prog => progPref vform_main ; + -- _ => [] + -- } ; + in + -- naively removed subject + "*" ++ + rp.s ++ + -- pcp ++ + vp.s!RelCl!a!p!t!False ++ + vp.iadv ++ + vp.advs + } ; + + rcl_with_eq_cop_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform_main = VFIndic RelCl p t ; + pcp = relConcLookup!a!vp.r ++BIND; + -- cb = (eqPref ! vp.r) ++ BIND ++ vp.comp ; + in + -- naively removed subject + "*" ++ + rp.s ++ + pcp ++ + vp.s!RelCl!a!p!t!False ++ + vp.iadv ++ + vp.advs + } ; + + rcl_with_descr_predicate_short : RP -> VP -> { s : Agr => Polarity => BasicTense => Str } = \rp,vp -> { + s = \\a,p,t => + let + vform_main = VFIndic RelCl p t ; + pcp = pre_cop_pref vform_main a ; + -- adjf = aformN a ; + -- adjpref = relAdjAgrLookup!p!a ++BIND ; + -- comp = vp.ap_comp!adjf ++ vp.comp + in + "*" ++ + rp.s ++ + -- adjpref ++ + vp.s!RelCl!a!p!t!False + ++ vp.iadv ++ vp.advs + } ; + +} diff --git a/src/zulu/RelativeZul.gf b/src/zulu/RelativeZul.gf index 8d39669b5..31174a2e6 100755 --- a/src/zulu/RelativeZul.gf +++ b/src/zulu/RelativeZul.gf @@ -50,29 +50,11 @@ concrete RelativeZul of Relative = CatZul ** open ResZul,Prelude,ParamX in { True => False ; False => True } ; - relsuf = case vp.hasComp of { - True => [] ; - False => relSuf vform - } ; - rcform = RelC ; -- case vform_main of { - -- VFIndic Part Pos PastTense _ => RelCA ; - -- VFIndic _ _ _ _ => RelC ; - -- VFPot _ _ _ => RelC ; - -- VFSubj _ => RelC - -- } ; + rcform = RelC ; in -- naively only took out the subject rp.s - -- ++ (negPref vform_main) - -- -- ++ (exclSePref vform_main) - -- ++ relConc!a!rcform ++BIND - -- -- ++ (negPref2 vform_main) - -- -- ++ (exclKaPref vform) - -- ++ (tensePref vform) - -- ++ vp.oc - -- ++ vp.s!(rform vform_main reqLF) ++ vp.s!RelCl!a!p!t!reqLF - -- ++ relsuf ++ vp.iadv ++ vp.comp ++ vp.advs diff --git a/src/zulu/ResZul.gf b/src/zulu/ResZul.gf index 85c0529b0..e0e7caa82 100755 --- a/src/zulu/ResZul.gf +++ b/src/zulu/ResZul.gf @@ -267,14 +267,23 @@ resource ResZul = open Prelude,Predef,ParamX in { _+"el" => root ++BIND++ "e" ; _+"al" => (tk 2 root) + "el" ++BIND++ "e" ; _+"an" => (tk 2 root) + "en" ++BIND++ "e" ; + _+"w" => root ++BIND ++ "e" ; _ => root ++BIND++ "ile" } ; R_e => case root of { _+"an" => (tk 2 root) + "en" ++BIND++ "e" ; + _+"al" => (tk 2 root) + "el" ++BIND++ "e" ; _ => root ++BIND++ "e" } ; - R_i => root ++BIND++ "i" ; - R_anga => root ++BIND++ "anga" + R_i => case root of { + _+"w" => root ++BIND++ "a" ; + _ => root ++BIND++ "i" + } ; + R_anga => case root of { + _+"al" => (tk 2 root) + "el" ++BIND++ "anga" ; + _+"an" => (tk 2 root) + "en" ++BIND++ "anga" ; + _ => root ++BIND++ "anga" + } } ; r = case root of { "a"+_ => RA ; @@ -435,6 +444,116 @@ resource ResZul = open Prelude,Predef,ParamX in { } } ; + longform_ya : VForm -> Bool -> RInit -> Str = \vform,longform,rinit -> case of { + => "ya"++BIND ; + => "y"++BIND ; + => [] + } ; + + verb_prefix_stative : VForm -> Agr -> RInit -> Syl -> Str = \vform,agr,rinit,syl -> case vform of { + VFIndic MainCl Pos PresTense => subjConcLookup!agr!SC ++BIND ; + VFIndic MainCl Pos PastTense => subjConcLookup!agr!SCBe ++BIND ; + VFIndic MainCl Pos RemPastTense => subjConcLookup!agr!SCRP ++BIND ; + VFIndic MainCl Pos FutTense => subjConcLookup!agr!SC ++BIND++ "zo" ++BIND ; + VFIndic MainCl Pos RemFutTense => subjConcLookup!agr!SC ++BIND++ "yo" ++BIND ; + + VFIndic MainCl Neg PresTense => "a" ++BIND++ subjConcLookup!agr!SCVowP ++BIND ; + VFIndic MainCl Neg PastTense => subjConcLookup!agr!SCBe ++BIND++ "nga" ++BIND ; + VFIndic MainCl Neg RemPastTense => subjConcLookup!agr!SCRP ++BIND++ "nga" ++BIND ; + VFIndic MainCl Neg FutTense => "a" ++BIND++ subjConcLookup!agr!SCVowP ++BIND++ (tensePref vform rinit syl) ; + VFIndic MainCl Neg RemFutTense => "a" ++BIND++ subjConcLookup!agr!SCVowP ++BIND++ (tensePref vform rinit syl) ; + + VFIndic RelCl Pos PresTense => relConcLookup!agr!rinit ; + VFIndic RelCl Pos PastTense => relCopConcBeLookup!agr ; + VFIndic RelCl Pos RemPastTense => relCopConcRemPastLookup!agr ; + VFIndic RelCl Pos FutTense => relConcLookup!agr!rinit ++ (tensePref vform rinit syl) ; + VFIndic RelCl Pos RemFutTense => relConcLookup!agr!rinit ++ (tensePref vform rinit syl) ; + + VFIndic RelCl Neg PresTense => relConcLookup!agr!RC ++ "nga" ++BIND ; + VFIndic RelCl Neg PastTense => relCopConcBeLookup!agr ++ "nga" ++BIND ; + VFIndic RelCl Neg RemPastTense => relCopConcRemPastLookup!agr ++ "nga" ++BIND ; + VFIndic RelCl Neg FutTense => relConcLookup!agr!RC ++ "nga" ++BIND++ (tensePref vform rinit syl) ; + VFIndic RelCl Neg RemFutTense => relConcLookup!agr!RC ++ "nga" ++BIND++ (tensePref vform rinit syl) + } ; + + rform_stative : VForm -> RForm = \vform -> case vform of { + VFIndic _ _ PresTense => R_ile ; + VFIndic _ _ PastTense => R_ile ; + VFIndic _ _ RemPastTense => R_ile ; + VFIndic _ _ FutTense => R_a ; + VFIndic _ _ RemFutTense => R_a + } ; + + verb_prefix_no_oc : VForm -> Bool -> RInit -> Agr -> Str = \vform,longform,rinit,agr -> let + sc = case of { + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SCVow ; + => subjConcLookup!agr!SCNeg ++BIND ; + => subjConcLookup!agr!SCNegVow ++BIND ; + + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SCVow ; + + => subjConcLookup!agr!SCNeg ++BIND ; + => subjConcLookup!agr!SCNegVow ++BIND ; + + => subjConcLookup!agr!SCVow ; + => subjConcLookup!agr!SCVow ; + + => subjConcLookup!agr!SCNeg ++BIND ; + => subjConcLookup!agr!SCNegVow ++BIND ; + + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SCNeg ++BIND + } ; + ya = longform_ya vform longform rinit ; + in + (negPref vform) ++ + sc ++ + ya ; + + verb_prefix_with_oc : VForm -> Bool -> Agr -> Str = \vform,longform,agr -> let + sc = case of { + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SCVow ; + => subjConcLookup!agr!SC ++BIND ; + => subjConcLookup!agr!SCNeg ++BIND + } ; + ya = longform_ya vform longform RC ; + in + (negPref vform) ++ + sc ++ + ya ; + + -- rform : VForm -> Bool -> RInit -> RForm = \vform,longform,rinit -> case longform of { + -- True => case vform of { + -- VFIndic _ Pos PresTense => case rinit of { + -- RC => "ya" ++BIND++ R_a ; + -- _ => "y" ++BIND++ R_a + -- } ; + -- VFIndic MainCl Neg PresTense => R_i ; + -- VFIndic RelCl Neg PresTense => R_i ; + -- VFIndic _ _ FutTense => R_a ; + -- VFIndic _ _ RemFutTense => R_a ; + -- VFIndic _ Pos PastTense => R_ile ; + -- VFIndic _ Neg PastTense => R_anga ; + -- VFIndic _ Pos RemPastTense => R_a ; + -- VFIndic _ Neg RemPastTense => R_anga + -- } ; + -- False => case vform of { + -- VFIndic _ Pos PresTense => R_a ; + -- VFIndic MainCl Neg PresTense => R_i ; + -- VFIndic RelCl Neg PresTense => R_i ; + -- VFIndic _ _ FutTense => R_a ; + -- VFIndic _ _ RemFutTense => R_a ; + -- VFIndic _ Pos PastTense => R_e ; + -- VFIndic _ Neg PastTense => R_anga ; + -- VFIndic _ Pos RemPastTense => R_a ; + -- VFIndic _ Neg RemPastTense => R_anga + -- } + -- } ; + -- VERB MORPHEMES -- -- tense prefix @@ -560,46 +679,6 @@ resource ResZul = open Prelude,Predef,ParamX in { -- VFSubj _ => [] -- } ; - -- VForm = VFIndic DMood Polarity BasicTense Aspect | VFPot DMood Polarity Aspect | VFSubj Polarity ; - -- aux_be : VForm -> Agr -> Str = \vform,agr -> - -- let - -- sc = subjConc vform agr False ; - -- scvow = subjConc vform agr True ; - -- short_be = case agr of { - -- -- Second Pl => sc ++ "bu" ; - -- -- Third C3_4 Sg => sc ++ "bu" ; - -- -- Third C3_4 Pl => sc ++ "bi" ; - -- -- Third C9_6 Sg | Third C9_10 Sg => sc ++ "bi" ; - -- First _ | Second _ | Third _ _ => subjConcLookup!agr!SCBe - -- } - -- in - -- case vform of { - -- VFIndic Princ Pos PresTense _ => [] ; - -- VFIndic Princ Pos PerfTense _ => short_be ++BIND ; -- 2021-01-26, chose to only implement short form - -- VFIndic Princ Pos FutTense _ => sc ++ "zobe" ; - -- VFIndic Princ Pos PastTense _ => scvow ++ "abe" ; - -- - -- VFIndic Princ Neg PresTense _ => [] ; - -- VFIndic Princ Neg PerfTense _ => short_be ++BIND ; - -- VFIndic Princ Neg FutTense _ => sc ++ "zobe" ; - -- VFIndic Princ Neg PastTense _ => scvow ++ "abe" ; - -- - -- VFIndic Part Pos PresTense _ => [] ; - -- VFIndic Part Pos PerfTense _ => short_be ++BIND ; - -- VFIndic Part Pos FutTense _ => sc ++ "zobe" ; - -- VFIndic Part Pos PastTense _ => scvow ++ "abe" ; - -- - -- VFIndic Part Neg PresTense _ => [] ; - -- VFIndic Part Neg PerfTense _ => short_be ++BIND ; - -- VFIndic Part Neg FutTense _ => sc ++ "zobe" ; - -- VFIndic Part Neg PastTense _ => scvow ++ "abe" ; - -- - -- VFPot _ Pos _ => sc ++ "ngaba" ; - -- VFPot _ Neg _ => sc ++ "ngebe" ; - -- VFSubj Pos => sc ++ "be" ++BIND ; - -- VFSubj Neg => sc ++ "ngabi" - -- } ; - ------------- -- ADVERBS -- ------------- @@ -686,8 +765,8 @@ resource ResZul = open Prelude,Predef,ParamX in { rel_yo_2 : Str = BIND++"yo" ; relSuf : VForm -> Str = \vform -> case vform of { - VFIndic _ Pos PresTense => rel_yo_2 ; - VFIndic _ Pos PastTense => rel_yo_2 ; + VFIndic RelCl Pos PresTense => rel_yo_2 ; + VFIndic RelCl Pos PastTense => rel_yo_2 ; VFIndic _ _ _ => [] } ; @@ -885,6 +964,7 @@ resource ResZul = open Prelude,Predef,ParamX in { (First _ | Second _ ) => RC } ; + locinit : Agr => RInit = table { Third C1_2 Sg => RC ; @@ -1231,9 +1311,9 @@ resource ResZul = open Prelude,Predef,ParamX in { First Pl => table {SC => "si" ; SCVow => "s"++BIND ; SCNeg => "si" ; SCNegVow => "s" ; SCPart => "si" ; SCPS => "si" ; SCVowP => "si" ; SCBe => "besi" ; SCRP => "sasi" } ; Second Pl => table {SC => "ni" ; SCVow => "n"++BIND ; SCNeg => "ni" ; SCNegVow => "n" ; SCPart => "ni" ; SCPS => "ni" ; SCVowP => "ni" ; SCBe => "beni" ; SCRP => "nani" } ; Third C1_2 Sg => table {SC => "u" ; SCVow => "w"++BIND ; SCNeg => "ka" ; SCNegVow => "k" ; SCPart => "e" ; SCPS => "a" ; SCVowP => "wu" ; SCBe => "ube" ; SCRP => "waye" } ; - Third C1_2 Pl => table {SC => "ba" ; SCVow => "b"++BIND ; SCNeg => "ba" ; SCNegVow => "b" ; SCPart => "be" ; SCPS => "ba" ; SCVowP => "ba" ; SCBe => "babe" ; SCRP => "babe" } ; + Third C1_2 Pl => table {SC => "ba" ; SCVow => "b"++BIND ; SCNeg => "ba" ; SCNegVow => "b" ; SCPart => "be" ; SCPS => "ba" ; SCVowP => "ba" ; SCBe => "bebe" ; SCRP => "babe" } ; Third C1a_2a Sg => table {SC => "u" ; SCVow => "w"++BIND ; SCNeg => "ka" ; SCNegVow => "k" ; SCPart => "e" ; SCPS => "a" ; SCVowP => "wu" ; SCBe => "ube" ; SCRP => "waye" } ; - Third C1a_2a Pl => table {SC => "ba" ; SCVow => "b"++BIND ; SCNeg => "ba" ; SCNegVow => "b" ; SCPart => "be" ; SCPS => "ba" ; SCVowP => "ba" ; SCBe => "babe" ; SCRP => "babe" } ; + Third C1a_2a Pl => table {SC => "ba" ; SCVow => "b"++BIND ; SCNeg => "ba" ; SCNegVow => "b" ; SCPart => "be" ; SCPS => "ba" ; SCVowP => "ba" ; SCBe => "bebe" ; SCRP => "babe" } ; Third C3_4 Sg => table {SC => "u" ; SCVow => "w"++BIND ; SCNeg => "wu" ; SCNegVow => "w" ; SCPart => "u" ; SCPS => "u" ; SCVowP => "wu" ; SCBe => "ubu" ; SCRP => "wawu" } ; Third C3_4 Pl => table {SC => "i" ; SCVow => "y"++BIND ; SCNeg => "yi" ; SCNegVow => "y" ; SCPart => "i" ; SCPS => "i" ; SCVowP => "yi" ; SCBe => "ibi" ; SCRP => "yayi" } ; Third C5_6 Sg => table {SC => "li" ; SCVow => "l"++BIND ; SCNeg => "li" ; SCNegVow => "l" ; SCPart => "li" ; SCPS => "li" ; SCVowP => "li" ; SCBe => "beli" ; SCRP => "lali" } ; @@ -1247,18 +1327,13 @@ resource ResZul = open Prelude,Predef,ParamX in { Third C11_10 Pl => table {SC => "zi" ; SCVow => "z"++BIND ; SCNeg => "zi" ; SCNegVow => "z" ; SCPart => "zi" ; SCPS => "zi" ; SCVowP => "zi" ; SCBe => "bezi" ; SCRP => "zazi" } ; Third C9_6 Sg => table {SC => "i" ; SCVow => "y"++BIND ; SCNeg => "yi" ; SCNegVow => "y" ; SCPart => "yi" ; SCPS => "i" ; SCVowP => "yi" ; SCBe => "ibi" ; SCRP => "yayi" } ; Third C9_6 Pl => table {SC => "a" ; SCVow => [] ; SCNeg => "wa" ; SCNegVow => "w" ; SCPart => "e" ; SCPS => "a" ; SCVowP => "wa" ; SCBe => "abe" ; SCRP => "aye" } ; - Third C14 _ => table {SC => "bu" ; SCVow => "b"++BIND ; SCNeg => "bu" ; SCNegVow => "b" ; SCPart => "bu" ; SCPS => "bu" ; SCVowP => "bu" ; SCBe => "bebu" ; SCRP => "kwaku" } ; + Third C14 _ => table {SC => "bu" ; SCVow => "b"++BIND ; SCNeg => "bu" ; SCNegVow => "b" ; SCPart => "bu" ; SCPS => "bu" ; SCVowP => "bu" ; SCBe => "bebu" ; SCRP => "babu" } ; Third C15 _ => table {SC => "ku" ; SCVow => "kw"++BIND ; SCNeg => "ku" ; SCNegVow => "k" ; SCPart => "ku" ; SCPS => "ku" ; SCVowP => "ku" ; SCBe => "beku" ; SCRP => "kwaku" } ; Third C17 _ => table {SC => "ku" ; SCVow => "kw"++BIND ; SCNeg => "ku" ; SCNegVow => "k" ; SCPart => "ku" ; SCPS => "ku" ; SCVowP => "ku" ; SCBe => "beku" ; SCRP => "kwaku" } } ; - -- scvow_bind : Agr -> Str = \agr -> case agr of { - -- (Third C5_6 Pl|Third C9_6 Pl) => [] ; - -- _ => subjConcLookup ! agr ! SCVow ++BIND - -- } ; - - subjConc : VForm -> Agr -> Bool -> Str = \vform,agr,prevow -> - case of { + subjConc : VForm -> Agr -> Bool -> Str = \vform,agr,vow -> + case of { => subjConcLookup ! agr ! SCNeg ++BIND ; => subjConcLookup ! agr ! SCNegVow ++BIND ; => subjConcLookup ! agr ! SCVow ; @@ -1266,19 +1341,6 @@ resource ResZul = open Prelude,Predef,ParamX in { <_,VFIndic _ _ _> => subjConcLookup ! agr ! SC ++BIND } ; - -- -be aux: reference time in relation to coding time - -- relSubjConc : BasicTense -> Agr -> Str = \tense,agr -> - -- relSubjConc : BasicTense -> Agr -> Str = \tense,agr -> - -- case tense of { - -- PastTense => (subjConcLookup ! agr ! SCVow) ++ "a" ++BIND++ case agr of { - -- Second Sg | Third C3_4 Sg => "w" ++BIND ; - -- Third C1_2 Sg | Third C1a_2a Sg | Third C3_4 Pl | Third C5_6 Pl | Third C9_10 Sg => "y" ++BIND ; - -- First _ | Second _ | Third _ _ => [] - -- } ; - -- PerfTense | PresTense => subjConcLookup ! agr ! SC ++BIND++ "be" ; -- NOTE: present tense doesn't make much sense here, so default to perf - -- FutTense => subjConcLookup ! agr ! SC ++BIND++ "zobe" - -- } ; - impPref : Polarity -> Str = \pol -> case pol of { Pos => [] ; Neg => "u" ++BIND++ "nga" ++BIND @@ -1291,7 +1353,7 @@ resource ResZul = open Prelude,Predef,ParamX in { in case vform of { VFIndic _ Pos PresTense => subjConcLookup ! agr ! SC ++BIND ; - VFIndic _ Pos PastTense => [] ; -- "be"++BIND++ subjConcLookup ! agr ! SCBe ++BIND ; + VFIndic _ Pos PastTense => [] ; VFIndic _ Pos RemPastTense => subjConcLookup ! agr ! SC ++BIND++ "be" ++ subjConcLookup ! agr ! SCBe ++BIND ; VFIndic _ Pos FutTense => subjConcLookup ! agr ! SC ++BIND ++ "zobe" ++ subjConcLookup ! agr ! SC ++BIND ; VFIndic _ Pos RemFutTense => subjConcLookup ! agr ! SC ++BIND ++ "yobe" ++ subjConcLookup ! agr ! SC ++BIND ; @@ -1402,7 +1464,18 @@ resource ResZul = open Prelude,Predef,ParamX in { VFIndic _ _ PastTense => relCopConcBeLookup!a ; VFIndic _ _ RemPastTense => case a of { Third C5_6 Pl => [] ; -- relConcLookup!a!RA ; -- a + aye = aye - (First _ | Second _ | Third _ _ ) => shortRelConc!a --++ subjConcLookup!a!SCRP + (First _ | Second _ | Third _ _ ) => shortRelConc!a + } + } ; + + quantConcCop : VForm -> Agr -> Str = \vform,a -> case vform of { + VFIndic _ _ PresTense => relConcLookup!a!(quantinit!a) ; + VFIndic _ _ FutTense => relConcLookup!a!(quantinit!a) ; + VFIndic _ _ RemFutTense => relConcLookup!a!(quantinit!a) ; + VFIndic _ _ PastTense => relCopConcBeLookup!a ; + VFIndic _ _ RemPastTense => case a of { + Third C5_6 Pl => [] ; -- relConcLookup!a!RA ; -- a + aye = aye + (First _ | Second _ | Third _ _ ) => shortRelConc!a } } ; @@ -1414,7 +1487,7 @@ resource ResZul = open Prelude,Predef,ParamX in { VFIndic _ _ PastTense => relCopConcBeLookup!a ; VFIndic _ _ RemPastTense => case a of { Third C5_6 Pl => [] ; -- relConcLookup!a!RA ; -- a + aye = aye - (First _ | Second _ | Third _ _ ) => shortRelConc!a --++ subjConcLookup!a!SCRP + (First _ | Second _ | Third _ _ ) => shortRelConc!a } } ; @@ -1499,6 +1572,60 @@ resource ResZul = open Prelude,Predef,ParamX in { Second Pl => "ebeni"++BIND } ; + -- relCopConcBeLookup : Agr => RInit => Str = + -- table { + -- Third C1_2 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obe"++BIND } ; + -- Third C1_2 Pl => table { (RA|RE|RI|RO|RU) => "abab"++BIND ; _ => "ababe"++BIND } ; + -- Third C1a_2a Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obe"++BIND } ; + -- Third C1a_2a Pl => table { (RA|RE|RI|RO|RU) => "abab"++BIND ; _ => "ababe"++BIND } ; + -- Third C3_4 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obu"++BIND } ; + -- Third C3_4 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebi"++BIND } ; + -- Third C5_6 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebeli"++BIND } ; + -- Third C5_6 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "abe"++BIND } ; + -- Third C7_8 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebesi"++BIND } ; + -- Third C7_8 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebezi"++BIND } ; + -- Third C9_10 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebi"++BIND } ; + -- Third C9_10 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebezi"++BIND } ; + -- Third C11_10 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obelu"++BIND } ; + -- Third C11_10 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebezi"++BIND } ; + -- Third C9_6 Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebi"++BIND } ; + -- Third C9_6 Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "abe"++BIND } ; + -- Third C14 _ => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obebu"++BIND } ; + -- Third C15 _ => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obeku"++BIND } ; + -- Third C17 _ => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obeku"++BIND } ; + -- First Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebengi"++BIND } ; + -- First Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebesi"++BIND } ; + -- Second Sg => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "obu"++BIND } ; + -- Second Pl => table { (RA|RE|RI|RO|RU) => "ob"++BIND ; _ => "ebeni"++BIND } + -- } ; + + relCopConcRemPastLookup : Agr => Str = + table { + Third C1_2 Sg => "owaye"++BIND ; + Third C1_2 Pl => "ababe"++BIND ; + Third C1a_2a Sg => "owaye"++BIND ; + Third C1a_2a Pl => "ababe"++BIND ; + Third C3_4 Sg => "owawu"++BIND ; + Third C3_4 Pl => "eyayi"++BIND ; + Third C5_6 Sg => "elali"++BIND ; + Third C5_6 Pl => "aye"++BIND ; + Third C7_8 Sg => "esasi"++BIND ; + Third C7_8 Pl => "ezazi"++BIND ; + Third C9_10 Sg => "eyayi"++BIND ; + Third C9_10 Pl => "ezazi"++BIND ; + Third C11_10 Sg => "olwalu"++BIND ; + Third C11_10 Pl => "ezazi"++BIND ; + Third C9_6 Sg => "eyayi"++BIND ; + Third C9_6 Pl => "aye"++BIND ; + Third C14 _ => "obabu"++BIND ; + Third C15 _ => "okwaku"++BIND ; + Third C17 _ => "okwaku"++BIND ; + First Sg => "engangi"++BIND ; + First Pl => "esasi"++BIND ; + Second Sg => "owawu"++BIND ; + Second Pl => "enani"++BIND + } ; + -- relCopConcBeLookup : Agr => RInit => Str = -- table { -- Third C1_2 Sg => table { _ => "obe"++BIND } ; @@ -1706,6 +1833,14 @@ resource ResZul = open Prelude,Predef,ParamX in { -- QUANTITATIVE AGREEMENT MORPHEME -- -- (demonstatives) + quantinit : Agr => RInit = + table { + Third C5_6 Pl => RO ; + Third C9_6 Pl => RO ; + Third _ _ => RC ; + (First _ | Second _ ) => RC + } ; + exclQuantConc : Agr => Str = table { Third C1_2 Sg => "ye" ; Third C1_2 Pl => "bo" ; @@ -1918,7 +2053,7 @@ resource ResZul = open Prelude,Predef,ParamX in { kho_cop : VForm -> Agr -> Str = \vform,agr -> case vform of { VFIndic MainCl Neg PresTense => neg_kho_cop_pref agr ++ "kho"; - VFIndic RelCl Neg PresTense => (relConcCop vform agr RC) ++ (ap_cop_pref (VFIndic RelCl Neg PresTense) agr RelType) ++BIND++ "kho" ; + VFIndic RelCl Neg PresTense => (relConcCop vform agr RC) ++ (ap_cop_pref (VFIndic RelCl Neg PresTense) agr RelType) ++ "kho" ; VFIndic RelCl p t => (relConcCop vform agr RC) ++ (ap_cop_pref (VFIndic RelCl p t) agr RelType) ++ "khona" ; VFIndic MainCl p t => (ap_cop_pref (VFIndic MainCl p t) agr RelType) ++ "khona" } ; diff --git a/src/zulu/SentenceZul.gf b/src/zulu/SentenceZul.gf index 69fd4b4ed..d71585a83 100755 --- a/src/zulu/SentenceZul.gf +++ b/src/zulu/SentenceZul.gf @@ -19,7 +19,7 @@ concrete SentenceZul of Sentence = CatZul ** open Prelude,ResZul,ParamX in { False => True } in { - s = \\p,t => np.s!NFull ++ (verb_prefix vp p t np.agr) ++ vp.s!MainCl!np.agr!p!t!longform_suffix ++ vp.comp ++ vp.iadv ++ vp.advs ; + s = \\p,t => np.s!NFull ++ vp.s!MainCl!np.agr!p!t!longform_suffix ++ vp.comp ++ vp.iadv ++ vp.advs ; } ; _ => cl_with_verb_predicate np vp } ; @@ -183,42 +183,42 @@ concrete SentenceZul of Sentence = CatZul ** open Prelude,ResZul,ParamX in { } in subj - ++ (verb_prefix vp p t np.agr) + -- ++ (verb_prefix vp p t np.agr) ++ vp.s!MainCl!np.agr!p!t!longform_suffix ++ vp.iadv ++ vp.comp ++ vp.advs } ; - verb_prefix : VP -> Polarity -> BasicTense -> Agr -> Str = \vp,p,t,agr -> - let - lfya = case of { - => "ya" ++BIND ; - => "y" ++BIND ; - <_,_,_> => [] - } ; - -- vow = case of { - vow = case of { - => False ; -- force the compiler to understand the table - => False ; -- long form ya - - <_,_,PresTense,RC> => False ; - <_,_,PresTense,_> => True ; - <_,_,PastTense,RC> => False ; - <_,_,PastTense,_> => True ; - <_,_,RemPastTense,RC> => False ; - <_,_,RemPastTense,_> => True ; - <_,_,_,_> => False - } ; - vform = VFIndic MainCl p t - in - (negPref vform) - -- ++ (exclSePref vform_main) - ++ (subjConc vform agr vow) - -- ++ (negPref2 vform_main) - ++ lfya - -- ++ (tensePref vform) - ; + -- verb_prefix : VP -> Polarity -> BasicTense -> Agr -> Str = \vp,p,t,agr -> + -- let + -- lfya = case of { + -- => "ya" ++BIND ; + -- => "y" ++BIND ; + -- <_,_,_> => [] + -- } ; + -- -- vow = case of { + -- vow = case of { + -- => False ; -- force the compiler to understand the table + -- => False ; -- long form ya + -- + -- <_,_,PresTense,RC> => False ; + -- <_,_,PresTense,_> => True ; + -- <_,_,PastTense,RC> => False ; + -- <_,_,PastTense,_> => True ; + -- <_,_,RemPastTense,RC> => False ; + -- <_,_,RemPastTense,_> => True ; + -- <_,_,_,_> => False + -- } ; + -- vform = VFIndic MainCl p t + -- in + -- (negPref vform) + -- -- ++ (exclSePref vform_main) + -- ++ (subjConc vform agr vow) + -- -- ++ (negPref2 vform_main) + -- ++ lfya + -- -- ++ (tensePref vform) + -- ; -- TODO: aspect cl_with_eq_cop_predicate : NP -> VP -> { s : Polarity => BasicTense => Str } = \np,vp -> { diff --git a/src/zulu/VerbExtZul.gf b/src/zulu/VerbExtZul.gf index 322f4efb4..326557aec 100644 --- a/src/zulu/VerbExtZul.gf +++ b/src/zulu/VerbExtZul.gf @@ -37,9 +37,7 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param rcp ++ pcp ++ cop_base } } ; - imp_s = let - imp_vform = VFIndic MainCl Pos PresTense - in table { + imp_s = table { Sg => let agr = (Second Sg) in table { @@ -53,6 +51,20 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Neg => "ningabi" ++ ap.s!AF1 } } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ ap.s!AF1 ; + Neg => "ukungabi" ++ ap.s!AF1 + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ ap.s!AF1 ; + Neg => "kungabi" ++ ap.s!AF1 + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ ap.s!AF1 ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ ap.s!AF1 + } + } ; comp, iadv, advs = [] ; hasComp = True ; r = RC ; -- should not be used @@ -88,6 +100,20 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Neg => "ningabi" ++ (id_cop_pref np.agr) ++ np.s!NFull } } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ np.s!NFull ; + Neg => "ukungabi" ++ np.s!NFull + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ np.s!NFull ; + Neg => "kungabi" ++ np.s!NFull + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ np.s!NFull ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ np.s!NFull + } + } ; comp, iadv, advs = [] ; hasComp = np.heavy ; r = RC ; -- should not be used @@ -125,6 +151,20 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Neg => "ningabi" ++ cop } } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced ; + Neg => "ukungabi" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced ; + Neg => "kungabi" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ (assoc_cop_pref Pos np.agr) ++ np.s!NReduced + } + } ; comp, iadv, advs = [] ; hasComp = np.heavy ; r = RC ; -- should not be used @@ -132,6 +172,54 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param vptype = CopAssoc } ; + UseVStative v = { + s = \\c,a,p,t,l => let + vform = VFIndic c p t ; + vpref = verb_prefix_stative vform a v.r v.syl ; + r = v.s!(rform_stative vform) ; + yo = case l of { + True => relSuf vform ; + False => [] + } + in vpref ++ r ++ yo ; + imp_s = table { + Sg => table { + Pos => case v.syl of { + SylMono => "*" ++ "yi"++BIND++v.s!R_a ; + SylMult => "*" ++ v.s!R_a + } ; + Neg => "*" ++ "unga" ++BIND++ v.s!R_i + } ; + Pl => table { + Pos => case v.syl of { + SylMono => "*" ++ "yi"++BIND++v.s!R_a ++BIND++"ni" ; + SylMult => "*" ++ v.s!R_a ++BIND++"ni" + } ; + Neg => "*" ++ "ninga" ++BIND++ v.s!R_i + } + } ; + inf_s = table { + NFull => table { + Pos => "uku" ++BIND++ v.s!R_ile ; + Neg => "uku" ++BIND++ "nga" ++BIND++ v.s!R_i + } ; + NReduced | NPoss => table { + Pos => "ku" ++BIND++ v.s!R_ile ; + Neg => "ku" ++BIND++ "nga" ++BIND++ v.s!R_i + } ; + NLoc => table { + Pos => "e" ++BIND++ "ku"++BIND++v.s!R_e ++BIND++ "ni" ; + Neg => "e" ++BIND++ "ku"++BIND++"nga"++BIND++v.s!R_e ++BIND++ "ni" + } + } ; + iadv, advs, comp = [] ; + -- ap_comp = \\_ => [] ; + hasComp = False ; + r = v.r ; + syl = v.syl ; + vptype = NoComp + } ; + ComplV2Nonspec v2 np = let oc = objConc np.agr v2.r v2.syl ; longform = case np.heavy of { @@ -142,6 +230,8 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param s = table { MainCl => \\a,p,t,l => let vform = VFIndic MainCl p t ; + vpref_no_oc = verb_prefix_no_oc vform l v2.r a ; + vpref_with_oc = verb_prefix_with_oc vform l a ; tp = tensePref vform v2.r v2.syl ; -- oc = objConc np.agr v2.r v2.syl ; -- longform = case np.heavy of { @@ -154,8 +244,8 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Neg => np.s!NReduced } ; in case np.proDrop of { - True => tp ++ oc ++ r ++ obj ; - False => tp ++ r ++ obj + True => vpref_with_oc ++ tp ++ oc ++ r ++ obj ; + False => vpref_no_oc ++ tp ++ r ++ obj } ; RelCl => \\a,p,t,l => let vform = (VFIndic RelCl p t) ; @@ -201,6 +291,28 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param } } } ; + inf_s = let + inf_oc = case np.proDrop of { + True => oc ; + False => [] + } ; + obj_full = np.s!NFull ; + obj_red = np.s!NReduced + in + table { + NFull => table { + Pos => "uku" ++BIND++ inf_oc ++ v2.s!R_a ++ obj_full ; + Neg => "uku" ++BIND++ "nga" ++BIND++ inf_oc ++ v2.s!R_i ++ obj_red + } ; + NReduced | NPoss => table { + Pos => "ku" ++BIND++ inf_oc ++ v2.s!R_a ++ obj_full ; + Neg => "ku" ++BIND++ "nga" ++BIND++ inf_oc ++ v2.s!R_i ++ obj_red + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++inf_oc ++ v2.s!R_a ++ obj_full ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++"nga"++BIND++inf_oc ++ v2.s!R_a ++ obj_red + } + } ; iadv, advs, comp = [] ; ap_comp = \\_ => [] ; hasComp = np.heavy ; @@ -209,9 +321,10 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param vptype = VNPCompl } ; - CopLoc loc = { + CopLocative loc = { s = \\c,a,p,t,l => loc.s!c!a!p!t ; imp_s = loc.imp_s ; + inf_s = loc.inf_s ; comp,advs,iadv = [] ; hasComp = True ; r = RC ; @@ -219,30 +332,58 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param vptype = CopLoc } ; - -- CopPoss np = { - -- s = table { - -- MainCl => \\a,p,t,l => let - -- vform = VFIndic MainCl p t ; - -- pcp = (id_pre_cop_pref vform a) ; -- u- / uzoba / akazukuba - -- cp = (id_cop_pref np.agr) ; -- ng- - -- cop_base = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss -- utshani - -- in - -- pcp ++ cp ++ cop_base ; - -- RelCl => \\a,p,t,l => let - -- vform = VFIndic RelCl p t ; - -- rcp = (relConcCop vform a RC) ; -- o- - -- pcp = (id_pre_cop_pref vform a) ; -- [] / zoba / zukuba - -- cp = (id_cop_pref np.agr) ; -- ng- - -- cop_base = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss -- utshani - -- in - -- rcp ++ pcp ++ cp ++ cop_base - -- } ; - -- comp, iadv, advs = [] ; - -- hasComp = np.heavy ; - -- r = RC ; -- should not be used - -- syl = SylMult ; - -- vptype = CopIdent - -- } ; + CopPoss np = { + s = table { + MainCl => \\a,p,t,l => let + vform = VFIndic MainCl p t ; + pcp = (id_pre_cop_pref vform a) ; -- u- / uzoba / akazukuba + -- cp = (id_cop_pref np.agr) ; -- ng- + cop_base = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss -- utshani + in + pcp ++ cop_base ; + RelCl => \\a,p,t,l => let + vform = VFIndic RelCl p t ; + rcp = (relConcCop vform a RC) ; -- o- + pcp = (id_pre_cop_pref vform a) ; -- [] / zoba / zukuba + -- cp = (id_cop_pref np.agr) ; -- ng- + cop_base = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss -- utshani + in + rcp ++ pcp ++ cop_base + } ; + imp_s = let + cop = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss + in table { + Sg => table { + Pos => "yiba" ++ cop ; + Neg => "ungabi" ++ cop + } ; + Pl => table { + Pos => "yibani" ++ cop ; + Neg => "ningabi" ++ cop + } + } ; + inf_s = let + cop = poss_concord_agr!(Third C17 Sg)!(nominit!np.agr) ++BIND++ np.s!NPoss + in table { + NFull => table { + Pos => "ukuba" ++ cop ; + Neg => "ukungabi" ++ cop + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ cop ; + Neg => "kungabi" ++ cop + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ cop ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ cop + } + } ; + comp, iadv, advs = [] ; + hasComp = np.heavy ; + r = RC ; -- should not be used + syl = SylMult ; + vptype = CopIdent + } ; CopQuant qs = { s = table { @@ -254,7 +395,7 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param pcp ++ cop_base ; RelCl => \\a,p,t,l => let vform = VFIndic RelCl p t ; - rcp = (relConcCop vform a RC) ; -- o- + rcp = (quantConcCop vform a) ; -- o- pcp = ap_cop_pref vform a RelType ; -- [] / -nge- / zoba / -benge- cop_base = qs.s!a -- qotho in @@ -276,6 +417,24 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param Neg => "ningabi" ++ qs.s!agr } } ; + -- inf_s = table { + -- Pos => "ukuba" ++ qs.s!(Third C15 Sg) ; -- this agr doesn't really make sense + -- Neg => "ukungabi" ++ qs.s!(Third C15 Sg) + -- } ; + inf_s = table { + NFull => table { + Pos => "ukuba" ++ qs.s!(Third C15 Sg) ; + Neg => "ukungabi" ++ qs.s!(Third C15 Sg) + } ; + NReduced | NPoss => table { + Pos => "kuba" ++ qs.s!(Third C15 Sg) ; + Neg => "kungabi" ++ qs.s!(Third C15 Sg) + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukuba" ++ qs.s!(Third C15 Sg) ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++"ukungabi" ++ qs.s!(Third C15 Sg) + } + } ; comp, iadv, advs = [] ; hasComp = True ; r = RC ; -- should not be used diff --git a/src/zulu/VerbZul.gf b/src/zulu/VerbZul.gf index 284723eee..c195e93ff 100755 --- a/src/zulu/VerbZul.gf +++ b/src/zulu/VerbZul.gf @@ -7,10 +7,11 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { s = table { MainCl => \\a,p,t,l => let vform = VFIndic MainCl p t ; + vpref = verb_prefix_no_oc vform l v.r a ; tp = tensePref vform v.r v.syl ; -- [] / zo- / zuku- - r = v.s!(rform (VFIndic MainCl p t) l) -- hamba + r = v.s!(rform vform l) -- hamba -- rest of verb prefix built later (eg no "ya" with certain question words) - in tp ++ r ; + in vpref ++ tp ++ r ; RelCl => \\a,p,t,l => let vform = VFIndic RelCl p t ; rc = relConc vform a v.r ; -- o- @@ -35,7 +36,21 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { SylMono => "yi"++BIND++v.s!R_a ++BIND++"ni" ; SylMult => v.s!R_a ++BIND++"ni" } ; - Neg => "ninga" ++BIND++ v.s!R_i + Neg => "ninga" ++BIND++ v.s!R_i + } + } ; + inf_s = table { + NFull => table { + Pos => "uku" ++BIND++ v.s!R_a ; + Neg => "uku" ++BIND++ "nga" ++BIND++ v.s!R_i + } ; + NReduced | NPoss => table { + Pos => "ku" ++BIND++ v.s!R_a ; + Neg => "ku" ++BIND++ "nga" ++BIND++ v.s!R_i + } ; + NLoc => table { + Pos => "e" ++BIND++ "ku"++BIND++v.s!R_e ++BIND++ "ni" ; + Neg => "e" ++BIND++ "ku"++BIND++"nga"++BIND++v.s!R_e ++BIND++ "ni" } } ; iadv, advs, comp = [] ; @@ -63,22 +78,36 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { True => relSuf vform ; False => [] } ; - in rc ++ tp ++ r ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + in rc ++ tp ++ r ++ vp.inf_s!NFull!Pos } ; imp_s = table { Sg => table { Pos => case v.syl of { - SylMono => "yi"++BIND++v.s!R_a ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False ; + SylMono => "yi"++BIND++v.s!R_a ++ vp.inf_s!NFull!Pos ; SylMult => v.s!R_a } ; - Neg => "unga" ++BIND++ v.s!R_i ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + Neg => "unga" ++BIND++ v.s!R_i ++ vp.inf_s!NFull!Pos } ; Pl => table { Pos => case v.syl of { - SylMono => "yi"++BIND++v.s!R_a ++BIND++"ni" ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False ; - SylMult => v.s!R_a ++BIND++"ni" ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + SylMono => "yi"++BIND++v.s!R_a ++BIND++"ni" ++ vp.inf_s!NFull!Pos ; + SylMult => v.s!R_a ++BIND++"ni" ++ vp.inf_s!NFull!Pos } ; - Neg => "ninga" ++BIND++ v.s!R_i ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + Neg => "ninga" ++BIND++ v.s!R_i ++ vp.inf_s!NFull!Pos + } + } ; + inf_s = table { + NFull => table { + Pos => "uku" ++BIND++ v.s!R_a ++ vp.inf_s!NFull!Pos ; + Neg => "uku" ++BIND++ "nga" ++BIND++ v.s!R_i ++ vp.inf_s!NFull!Pos + } ; + NReduced | NPoss => table { + Pos => "ku" ++BIND++ v.s!R_a ++ vp.inf_s!NFull!Pos ; + Neg => "ku" ++BIND++ "nga" ++BIND++ v.s!R_i ++ vp.inf_s!NFull!Pos + } ; + NLoc => table { + Pos => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++v.s!R_a ++ vp.inf_s!NFull!Pos ; + Neg => "ku"++BIND++poss_pron_stem!(Third C15 Sg) ++ "uku"++BIND++"nga"++BIND++v.s!R_i ++ vp.inf_s!NFull!Pos } } ; iadv, advs, comp = [] ; @@ -252,7 +281,10 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { -- } -- } ; - AdvVP vp adv = vp ** { advs = vp.advs ++ adv.s ; hasComp = True } ; + AdvVP vp adv = vp ** { + advs = vp.advs ++ adv.s ; + hasComp = True + } ; -- { -- s = vp.s ; -- oc = vp.oc ; diff --git a/src/zulu/abstract_ext/ExtraExt.gf b/src/zulu/abstract_ext/ExtraExt.gf index 43e406a5d..e0f8329ed 100755 --- a/src/zulu/abstract_ext/ExtraExt.gf +++ b/src/zulu/abstract_ext/ExtraExt.gf @@ -74,13 +74,6 @@ abstract ExtraExt = -- painful_RelStem : RelStem ; -- sharp_RelStem : RelStem ; - -- TPerfPast : Temp ; - -- TPastPast : Temp ; - -- TPresPres : Temp ; - -- TPastPres : Temp ; - -- TPastPerf : Temp ; - -- TPerfPerf : Temp ; - -- PredNP : NP -> Cl ; -- IAdvQS : NP -> INAdv -> QS ; -- where is the wine? iwayini liphi? -- IAdvQCl : NP -> INAdv -> QCl ; -- where is the wine? iwayini liphi? @@ -138,6 +131,7 @@ abstract ExtraExt = ngemuva_LocAdv : LocAdv ; emuva_LocAdv : LocAdv ; ecaleni_LocAdv : LocAdv ; + ngaphezu_LocAdv : LocAdv ; lapha_Loc : Loc ; khona_Loc : Loc ; diff --git a/src/zulu/abstract_ext/PChunk.gf b/src/zulu/abstract_ext/PChunk.gf index 877b0cae4..cebc31767 100644 --- a/src/zulu/abstract_ext/PChunk.gf +++ b/src/zulu/abstract_ext/PChunk.gf @@ -11,6 +11,7 @@ cat Chunk_RS ; Chunk_QS ; Chunk_VP ; + Chunk_V ; Chunk_CN ; Chunk_NP ; Chunk_N ; @@ -32,6 +33,7 @@ fun RS_Chunker : Chunk_RS -> Chunk ; QS_Chunker : Chunk_QS -> Chunk ; VP_Chunker : Chunk_VP -> Chunk ; + V_Chunker : Chunk_V -> Chunk ; -- wordnet CN_Chunker : Chunk_CN -> Chunk ; NP_Chunker : Chunk_NP -> Chunk ; N_Chunker : Chunk_N -> Chunk ; @@ -48,6 +50,7 @@ fun QS_Chunk : QS -> Chunk_QS ; VP_RelYo_Chunk : Temp -> Pol -> Pron -> VP -> Chunk_VP ; VP_Rel_Chunk : Temp -> Pol -> Pron -> VP -> Chunk_VP ; + V_Chunk : V -> Chunk_V ; CN_Pl_Chunk : CN -> Chunk_CN ; CN_Sg_Chunk : CN -> Chunk_CN ; NP_Nom_Chunk : NP -> Chunk_NP ; diff --git a/src/zulu/abstract_ext/RelativeExt.gf b/src/zulu/abstract_ext/RelativeExt.gf new file mode 100644 index 000000000..16fe43e4b --- /dev/null +++ b/src/zulu/abstract_ext/RelativeExt.gf @@ -0,0 +1,9 @@ +--1 Relative clauses and pronouns + +abstract RelativeExt = Cat ** { + + fun + + RelVPShort : RP -> VP -> RCl ; -- who loves John + +} diff --git a/src/zulu/abstract_ext/VerbExt.gf b/src/zulu/abstract_ext/VerbExt.gf index b20eed658..213e49b30 100644 --- a/src/zulu/abstract_ext/VerbExt.gf +++ b/src/zulu/abstract_ext/VerbExt.gf @@ -5,9 +5,9 @@ abstract VerbExt = Cat,CatExt ** { CopAP : AP -> VP ; CopNP : NP -> VP ; CopNPAssoc : NP -> VP ; - CopLoc : Loc -> VP ; + CopLocative : Loc -> VP ; - -- CopPoss : NP -> VP ; + CopPoss : NP -> VP ; CopQuant : QuantStem -> VP ; -- BecomeAP : AP -> VP ; @@ -15,6 +15,7 @@ abstract VerbExt = Cat,CatExt ** { -- BecomeNPAssoc : NP -> VP ; -- BecomeLoc : Loc -> VP ; + UseVStative : V -> VP ; ComplV2Nonspec : V2 -> NP -> VP ; } diff --git a/src/zulu/grammar_ext/NguniChunk.gf b/src/zulu/grammar_ext/NguniChunk.gf index a3ffef7a2..56b4a5060 100755 --- a/src/zulu/grammar_ext/NguniChunk.gf +++ b/src/zulu/grammar_ext/NguniChunk.gf @@ -5,6 +5,7 @@ abstract NguniChunk = Backward[ComplV2,ComplV3], ExtraExt, NounExt, + RelativeExt, VerbExt, PhraseExt, -- MonoLexAbs, diff --git a/src/zulu/grammar_ext/NguniChunkZul.gf b/src/zulu/grammar_ext/NguniChunkZul.gf index f92e537d0..76a210d4f 100755 --- a/src/zulu/grammar_ext/NguniChunkZul.gf +++ b/src/zulu/grammar_ext/NguniChunkZul.gf @@ -5,6 +5,7 @@ concrete NguniChunkZul of NguniChunk = BackwardZul[ComplV2,ComplV3], ExtraExtZul, NounExtZul, + RelativeExtZul, VerbExtZul, PhraseExtZul, -- MonoLexZul, diff --git a/src/zulu/grammar_ext/NguniLang.gf b/src/zulu/grammar_ext/NguniLang.gf index 284e15a69..09010472e 100755 --- a/src/zulu/grammar_ext/NguniLang.gf +++ b/src/zulu/grammar_ext/NguniLang.gf @@ -5,6 +5,7 @@ abstract NguniLang = Backward[ComplV2,ComplV3], ExtraExt, NounExt, + RelativeExt, VerbExt, PhraseExt -- MonoLexAbs, diff --git a/src/zulu/grammar_ext/NguniLangZul.gf b/src/zulu/grammar_ext/NguniLangZul.gf index 64f0b254a..86beee3ca 100755 --- a/src/zulu/grammar_ext/NguniLangZul.gf +++ b/src/zulu/grammar_ext/NguniLangZul.gf @@ -5,6 +5,7 @@ concrete NguniLangZul of NguniLang = BackwardZul[ComplV2,ComplV3], ExtraExtZul, NounExtZul, + RelativeExtZul, VerbExtZul, PhraseExtZul -- MonoLexZul,