diff --git a/src/zulu/BackwardZul.gf b/src/zulu/BackwardZul.gf index 02b46eb68..7602a6c6e 100755 --- a/src/zulu/BackwardZul.gf +++ b/src/zulu/BackwardZul.gf @@ -9,18 +9,25 @@ concrete BackwardZul of Backward = CatZul ** open ResZul,Prelude,ParamX in { -- from Verb 19/4/2008 - ComplV2 v2 np = { + ComplV2 v2 np = let + oc = objConc np.agr v2.r v2.syl ; + longform = case np.heavy of { + True => False ; + False => True + } ; + obj = np.s!NFull + in { s = table { MainCl => \\a,p,t,l => let vform = (VFIndic MainCl p t) ; tp = tensePref vform v2.r v2.syl ; -- [] / zo- / zuku- - oc = objConc np.agr v2.r v2.syl ; -- [] / m - - longform = case np.heavy of { - True => False ; - False => True - } ; + -- oc = objConc np.agr v2.r v2.syl ; -- [] / m - + -- longform = case np.heavy of { + -- True => False ; + -- False => True + -- } ; r = v2.s!(rform (VFIndic MainCl p t) longform) ; -- bona / boni - obj = np.s!NFull -- [] / inkomo + -- obj = np.s!NFull -- [] / inkomo in case np.proDrop of { True => tp ++ oc ++ r ++ obj ; False => tp ++ r ++ obj @@ -29,18 +36,40 @@ concrete BackwardZul of Backward = CatZul ** open ResZul,Prelude,ParamX in { vform = (VFIndic RelCl p t) ; rc = relConc vform a v2.r ; -- o- / onga- tp = tensePref vform v2.r v2.syl ; -- [] / zo- / zuku- - oc = objConc np.agr v2.r v2.syl ; -- [] / m - - longform = case np.heavy of { - True => False ; - False => True - } ; + -- oc = objConc np.agr v2.r v2.syl ; -- [] / m - + -- longform = case np.heavy of { + -- True => False ; + -- False => True + -- } ; r = v2.s!(rform vform longform) ; -- bona / boni - obj = np.s!NFull -- [] / inkomo + -- obj = np.s!NFull -- [] / inkomo in case np.proDrop of { True => rc ++ tp ++ oc ++ r ++ obj ; False => rc ++ tp ++ r ++ obj } } ; + imp_s = table { + Sg => table { + Pos => case np.proDrop of { + True => oc ++ v2.s!R_e ++ obj ; + False => v2.s!R_a ++ obj + } ; + Neg => case np.proDrop of { + True => "unga" ++BIND++ oc ++ v2.s!R_i ++ obj ; + False => "unga" ++BIND++ v2.s!R_i ++ obj + } + } ; + Pl => table { + Pos => case np.proDrop of { + True => oc ++ v2.s!R_e ++BIND++"ni" ++ obj ; + False => v2.s!R_a ++BIND++"ni" ++ obj + } ; + Neg => case np.proDrop of { + True => "ninga" ++BIND++ oc ++ v2.s!R_i ++ obj ; + False => "ninga" ++BIND++ v2.s!R_i ++ obj + } + } + } ; iadv, advs, comp = [] ; ap_comp = \\_ => [] ; hasComp = np.heavy ; diff --git a/src/zulu/CatExtZul.gf b/src/zulu/CatExtZul.gf index be268c330..24fb1797e 100755 --- a/src/zulu/CatExtZul.gf +++ b/src/zulu/CatExtZul.gf @@ -1,8 +1,12 @@ concrete CatExtZul of CatExt = open ResZul,Prelude,ParamX in { lincat - Loc = { s : CType => Agr => Polarity => BasicTense => Str } ; + Loc = { + s : CType => Agr => Polarity => BasicTense => Str ; + imp_s : Number => Polarity => Str + } ; LocN = { s : Str } ; + LocAdv = { s : Str ; reqLocS : Bool } ; QuantStem = { s : Agr => Str } ; RelStem = { s : Str } ; VAux = { s : Str ; at : AuxType } ; diff --git a/src/zulu/CatZul.gf b/src/zulu/CatZul.gf index bcc8d0c2c..1feb79e90 100755 --- a/src/zulu/CatZul.gf +++ b/src/zulu/CatZul.gf @@ -23,7 +23,7 @@ concrete CatZul of Cat = CommonX - [Temp,Tense,Adv,IAdv] ** -- s : ResZul.Tense => Anteriority => CPolarity => Order => Str ; -- c2 : Str -- } ; - Imp = { s : Polarity => Str } ; + Imp = { s : Number => Polarity => Str } ; -- Question @@ -47,6 +47,7 @@ concrete CatZul of Cat = CommonX - [Temp,Tense,Adv,IAdv] ** VP = { s : CType => Agr => Polarity => BasicTense => Bool => Str ; -- TODO: mood + imp_s : Number => Polarity => Str ; -- oc : Str ; comp : Str ; iadv : Str ; @@ -137,7 +138,7 @@ concrete CatZul of Cat = CommonX - [Temp,Tense,Adv,IAdv] ** -- CAdv = {s : Polarity => Str; p : Str} ; -- Open lexical classes, e.g. Lexicon - V,V2,VA,VS,V3 = { + V,V2,VA,VS,V3,VV = { s : RForm => Str ; r : RInit ; syl : Syl ; diff --git a/src/zulu/ExtraExtZul.gf b/src/zulu/ExtraExtZul.gf index 26ea4cb48..0a5816c66 100755 --- a/src/zulu/ExtraExtZul.gf +++ b/src/zulu/ExtraExtZul.gf @@ -1,5 +1,5 @@ concrete ExtraExtZul of ExtraExt = - CatZul [NP,VP,CN,V,Temp,S,Cl,Adv,Pron,QCl,QS,A,RS,IAdv,IComp,Pol,Det,Quant,N,PN,Conj], + CatZul [NP,VP,CN,V,Temp,S,Cl,Adv,Pron,QCl,QS,A,RS,IAdv,IComp,Pol,Det,Quant,N,PN,Conj,VV], CatExtZul ** open ResZul,Prelude,ParamX in { @@ -204,14 +204,14 @@ concrete ExtraExtZul of ExtraExt = reqLocS = False } ; - LocNPAdv np = { - s = np.s!NLoc ; - -- asp = Null ; - reqLocS = case np.isPron of { - False => True ; - True => False -- ki- - } ; - } ; + -- LocNPAdv np = { + -- s = np.s!NLoc ; + -- -- asp = Null ; + -- reqLocS = case np.isPron of { + -- False => True ; + -- True => False -- ki- + -- } ; + -- } ; LocAdvNPAdv adv np = { s = adv.s ++ (np.s!NLoc) ; @@ -227,23 +227,11 @@ concrete ExtraExtZul of ExtraExt = reqLocS = False } ; - -- -- NOTE: this seems to be a specific construction. Not yet found in Poulos+Msimang - -- KwaAdvNPAdv adv np = - -- let - -- c = case np.agr of { - -- (First _ | Second _) => C1_2 ; -- people class as default - -- Third c _ => c - -- } ; - -- n = case np.agr of { - -- (First Sg | Second Sg | Third _ Sg) => Sg ; - -- (First Pl | Second Pl | Third _ Pl) => Pl - -- } - -- in - -- { - -- s = adv.s ++ poss_concord!C15!Sg!(initNP np.isPron np.agr) ++BIND++ np.s!Reduced ++ np.mod ++ np.predet_pre ++ np.predet_post ; - -- -- asp = adv.asp ; - -- reqLocS = False - -- } ; + -- NOTE: this seems to be a specific construction. Not yet found in Poulos+Msimang + KwaAdvNPAdv adv np = { + s = adv.s ++ (poss_concord_agr!(Third C17 Sg)!np.i) ++BIND++ (np.s!NReduced) ; + reqLocS = False + } ; -- locative ku KuNPAdv np = { @@ -283,6 +271,34 @@ concrete ExtraExtZul of ExtraExt = reqLocS = False } ; + NPAdv np = { + s = np.s!NFull ; + reqLocS = False + } ; + + LocAdvAdv l = l ** { reqLocS = False } ; + + LocAdvNP adv np = { + s = adv.s ++ (poss_concord_agr!(Third C17 Sg)!np.i) ++BIND++ (np.s!NReduced) ; + reqLocS = False + } ; -- ngaphezu kwamahora amabili adlule + + LocNAdv locn = locn ** { reqLocS = False } ; + + LocNNgaAdv locn = { + s = "nga" ++BIND++ locn.s ; + reqLocS = False + } ; + + LocNPAdv np = { + s = np.s!NLoc ; + -- asp = Null ; + reqLocS = case np.isPron of { + False => True ; + True => False -- ki- + } ; + } ; + RelAdv adv = { s = \\a => relConcLookup!a!RC ++BIND++ adv.s } ; @@ -561,6 +577,10 @@ 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 } ; + lapha_Loc = { s = table { MainCl => \\a,p,t => let @@ -582,11 +602,31 @@ concrete ExtraExtZul of ExtraExt = VFIndic _ Neg PresTense => (kho_cop vform a) ++ cop_base; VFIndic _ _ _ => rcp ++ pcp ++ cop_base } + } ; + imp_s = table { + Sg => table { + Pos => "yiba" ++ "lapha" ; + Neg => "ungabi" ++ "lapha" + } ; + Pl => table { + Pos => "yibani" ++ "lapha" ; + Neg => "ningabi" ++ "lapha" + } } } ; khona_Loc = { s = \\c,a,p,t => kho_cop (VFIndic c p t) a ; + imp_s = table { + Sg => table { + Pos => "yiba" ++ "khona" ; + Neg => "ungabi" ++ "khona" -- this is a guess + } ; + Pl => table { + Pos => "yibani" ++ "khona" ; + Neg => "ningabi" ++ "khona" + } + } } ; kakhulu_Adv = { s = "kakhulu" ; reqLocS = False } ; @@ -608,6 +648,9 @@ concrete ExtraExtZul of ExtraExt = fix = True } ; + want_VV = regVerb "fun" ; + prepare_to_VV = regVerb "lungiselel" ; + -- Deverb15 v = -- let -- agr = Third C15 Sg ; diff --git a/src/zulu/NounExtZul.gf b/src/zulu/NounExtZul.gf index d66cb9f8c..4cd0de43b 100644 --- a/src/zulu/NounExtZul.gf +++ b/src/zulu/NounExtZul.gf @@ -136,35 +136,74 @@ concrete NounExtZul of NounExt = CatZul,CatExtZul ** open ResZul, Prelude, Param heavy = True } ; - Deverb15 v = - let - agr = Third C15 Sg ; - in - { - s = \\_ => table { - NFull => case v.r of { - RC => "uku"++BIND++(v.s!R_a) ; - (RA|RE) => "ukw"++BIND++(v.s!R_a) ; - _ => "uk"++BIND++(v.s!R_a) + -- Deverb15 v = + -- let + -- agr = Third C15 Sg ; + -- in + -- { + -- s = \\_ => table { + -- NFull => case v.r of { + -- RC => "uku"++BIND++(v.s!R_a) ; + -- (RA|RE) => "ukw"++BIND++(v.s!R_a) ; + -- _ => "uk"++BIND++(v.s!R_a) + -- } ; + -- NReduced => case v.r of { + -- RC => "ku"++BIND++(v.s!R_a) ; + -- (RA|RE) => "kw"++BIND++(v.s!R_a) ; + -- _ => "k"++BIND++(v.s!R_a) + -- } ; + -- NPoss => case v.r of { + -- RC => "ku"++BIND++(v.s!R_a) ; + -- (RA|RE) => "kw"++BIND++(v.s!R_a) ; + -- _ => "k"++BIND++(v.s!R_a) + -- } ; + -- NLoc => case v.r of { + -- RC => "eku"++BIND++(v.s!R_e)++BIND++"ni" ; + -- (RA|RE) => "ekw"++BIND++(v.s!R_e)++BIND++"ni" ; + -- _ => "ek"++BIND++(v.s!R_e)++BIND++"ni" + -- } + -- } ; + -- c = C15 ; + -- empty = [] + -- } ; + + -- 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 + 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 + } } ; - NReduced => case v.r of { - RC => "ku"++BIND++(v.s!R_a) ; - (RA|RE) => "kw"++BIND++(v.s!R_a) ; - _ => "k"++BIND++(v.s!R_a) - } ; - NPoss => case v.r of { - RC => "ku"++BIND++(v.s!R_a) ; - (RA|RE) => "kw"++BIND++(v.s!R_a) ; - _ => "k"++BIND++(v.s!R_a) - } ; - NLoc => case v.r of { - RC => "eku"++BIND++(v.s!R_e)++BIND++"ni" ; - (RA|RE) => "ekw"++BIND++(v.s!R_e)++BIND++"ni" ; - _ => "ek"++BIND++(v.s!R_e)++BIND++"ni" - } - } ; - c = C15 ; - empty = [] + agr = agr ; + i = RU ; + proDrop = False ; + isPron = False ; + heavy = True ; + empty = [] } ; LocNP np = { @@ -191,28 +230,76 @@ concrete NounExtZul of NounExt = CatZul,CatExtZul ** open ResZul, Prelude, Param } ; } ; - LocNLoc locn = { + -- LocNLoc locn = { + -- s = table { + -- MainCl => \\a,p,t => let + -- vform = VFIndic MainCl p t ; + -- pcp = ap_cop_pref vform a RelType ; -- u- / uzoba / akazukuba + -- cop_base = locn.s + -- in + -- case vform of { + -- VFIndic _ Neg PresTense => (kho_cop vform a) ++ cop_base; + -- VFIndic _ _ _ => pcp ++ cop_base + -- } ; + -- RelCl => \\a,p,t => let + -- vform = VFIndic RelCl p t ; + -- rcp = (relConcCop vform a RC) ; -- o- / onge- + -- pcp = ap_cop_pref vform a RelType ; -- u- / uzoba / akazukuba + -- cop_base = locn.s + -- in + -- case vform of { + -- VFIndic _ Neg PresTense => (kho_cop vform a) ++ cop_base; + -- VFIndic _ _ _ => rcp ++ pcp ++ cop_base + -- } + -- } ; + -- } ; + + -- LocNPossNP locn np = { + -- s = locn.s ++ poss_concord_agr!(Third C17 Sg)!(np.i) ++BIND++ np.s!NPoss; + -- } ; + + LocAdvLoc locadv = { s = table { MainCl => \\a,p,t => let vform = VFIndic MainCl p t ; pcp = ap_cop_pref vform a RelType ; -- u- / uzoba / akazukuba - cop_base = locn.s + s = case locadv.reqLocS of { + True => "s"++BIND ; + False => [] + } ; + cop_base = locadv.s in case vform of { VFIndic _ Neg PresTense => (kho_cop vform a) ++ cop_base; - VFIndic _ _ _ => pcp ++ cop_base + VFIndic _ _ _ => pcp ++ s ++ cop_base } ; RelCl => \\a,p,t => let vform = VFIndic RelCl p t ; rcp = (relConcCop vform a RC) ; -- o- / onge- pcp = ap_cop_pref vform a RelType ; -- u- / uzoba / akazukuba - cop_base = locn.s + s = case locadv.reqLocS of { + True => "s"++BIND ; + False => [] + } ; + cop_base = locadv.s in case vform of { VFIndic _ Neg PresTense => (kho_cop vform a) ++ cop_base; - VFIndic _ _ _ => rcp ++ pcp ++ cop_base + VFIndic _ _ _ => rcp ++ pcp ++ s ++ cop_base } } ; + imp_s = table { + Sg => table { + Pos => "yiba" ++ "s"++BIND++ locadv.s ; + Neg => "ungabi" ++ "s"++BIND++ locadv.s + } ; + Pl => table { + Pos => "yibani" ++ "s"++BIND++ locadv.s ; + Neg => "ningabi" ++ "s"++BIND++ locadv.s + } + } } ; + + } diff --git a/src/zulu/NounZul.gf b/src/zulu/NounZul.gf index 3ca43d9ea..29a679d19 100755 --- a/src/zulu/NounZul.gf +++ b/src/zulu/NounZul.gf @@ -101,7 +101,10 @@ concrete NounZul of Noun = CatZul ** open ResZul, Prelude, ParamX in { -- TODO: check refactor (no change?) PossNP cn np = { empty = cn.empty ; - s = \\num,nform => cn.s!num!nform ++ poss_concord!cn.c!num!np.i ++BIND++ np.s!NPoss; + s = \\num,nform => case np.agr of { + Third C1a_2a Sg => cn.s!num!nform ++ poss_concord_c1a!cn.c!num ++BIND++ np.s!NPoss ; + (First _ | Second _ | Third _ _) => cn.s!num!nform ++ poss_concord!cn.c!num!np.i ++BIND++ np.s!NPoss + } ; -- mod = \\num => cn.mod!num ++ poss_concord!cn.c!num!np.i ++BIND++ (poss_NP np) ; c = cn.c ; emph = cn.emph diff --git a/src/zulu/PChunkZul.gf b/src/zulu/PChunkZul.gf index 70df69550..578f844fe 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_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_CN, Chunk_NP, Chunk_N, Chunk_Symb = {s: Str} ; VC = V ; @@ -21,6 +21,7 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** S_Chunker c = c ; RS_Chunker c = c ; QS_Chunker c = c ; + VP_Chunker c = c ; CN_Chunker c = c ; NP_Chunker c = c ; N_Chunker c = c ; @@ -30,10 +31,17 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** Phr_Chunk p = {s = p.s } ; Adv_Chunk a = { s = a.s } ; - Imp_Chunk i = { s = variants { i.s!Pos ; i.s!Neg} } ; + Imp_Sg_Chunk i = { s = variants { i.s!Sg!Pos ; i.s!Sg!Neg} } ; + Imp_Pl_Chunk i = { s = variants { i.s!Pl!Pos ; i.s!Pl!Neg} } ; S_Chunk s = { s = s.s } ; - RS_Chunk rs = { s = rs.s!agr_vars } ; + RS_Chunk pron rs = { s = pron.s!NFull ++ rs.s!pron.agr } ; QS_Chunk s = { s = s.qword_pre ++ s.s ++ s.qword_post } ; + VP_RelYo_Chunk temp pol pron vp = { + s = temp.s ++ pol.s ++ pron.s!NFull ++ vp.s!RelCl!pron.agr!pol.p!temp.t!True + } ; + 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 + } ; CN_Sg_Chunk cn = { s = cn.s!Sg!NFull } ; @@ -43,18 +51,23 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** NP_Nom_Chunk np = { s = variants { np.s!NFull ; - np.s!NReduced ; - np.s!NLoc + np.s!NReduced } } ; - NP_Gen_Chunk np = { - s = poss_concord_agr!agr_vars!np.i ++BIND++ np.s!NPoss + NP_Loc_Chunk np = { + s = np.s!NLoc } ; - Predet_Chunk predet = { - s = predet.s!agr_vars + NP_Gen_Chunk pron np = { + s = pron.s!NFull ++ poss_concord_agr!pron.agr!np.i ++BIND++ np.s!NPoss } ; - Postdet_Chunk postdet = { - s = postdet.s!agr_vars + -- NP_Gen_Chunk np = { + -- s = poss_concord_agr!agr_vars!np.i ++BIND++ np.s!NPoss + -- } ; + Predet_Chunk pron predet = { + s = pron.s!NFull ++ predet.s!pron.agr + } ; + Postdet_Chunk pron postdet = { + s = pron.s!NFull ++ postdet.s!pron.agr } ; -- for unknown words that are not names @@ -101,4 +114,6 @@ concrete PChunkZul of PChunk = CatZul, CatExtZul, SymbolZul [Symb] ** Second Pl } ; + bool_vars : Bool = variants { True | False } ; + } diff --git a/src/zulu/PhraseExtZul.gf b/src/zulu/PhraseExtZul.gf index 9f7998dc1..ed35b7a58 100644 --- a/src/zulu/PhraseExtZul.gf +++ b/src/zulu/PhraseExtZul.gf @@ -12,6 +12,28 @@ concrete PhraseExtZul of PhraseExt = CatZul,CatExtZul ** open ResZul, Prelude, P phr.s ++ "ku" ++ BIND ++ vform ++ np.s!NFull ++ t.s } ; + DirectSpeechNP np1 t v np2 = { + s = let + vform = case t.t of { + PastTense => v.s!R_e ; + PresTense => v.s!R_a ; + _ => v.s!R_a ++ "*" + } ; + in + np1.s!NFull ++ "ku" ++ BIND ++ vform ++ np2.s!NFull ++ t.s + } ; + + DirectSpeechAdv adv t v np = { + s = let + vform = case t.t of { + PastTense => v.s!R_e ; + PresTense => v.s!R_a ; + _ => v.s!R_a ++ "*" + } ; + in + adv.s ++ "ku" ++ BIND ++ vform ++ np.s!NFull ++ t.s + } ; + ExtPhrConj p1 p2 = { s = p1.s ++ p2.s } ; diff --git a/src/zulu/PhraseZul.gf b/src/zulu/PhraseZul.gf index 51f2d96f0..8896daa5f 100755 --- a/src/zulu/PhraseZul.gf +++ b/src/zulu/PhraseZul.gf @@ -1,12 +1,12 @@ -concrete PhraseZul of Phrase = CatZul ** open Prelude, ResZul in { +concrete PhraseZul of Phrase = CatZul ** open Prelude, ParamX, ResZul in { lin PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; -- UttS sent = { s = sent.s } ; UttQS sent = { s = sent.qword_pre ++ sent.s ++ sent.qword_post } ; - UttImpSg pol imp = { s = pol.s ++ imp.s!pol.p } ; - -- UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ; + UttImpSg pol imp = { s = pol.s ++ imp.s!Sg!pol.p } ; + UttImpPl pol imp = {s = pol.s ++ imp.s!Pl!pol.p } ; -- UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ; -- UttIP ip = {s = ip.s ! npNom} ; --- Acc also diff --git a/src/zulu/ResZul.gf b/src/zulu/ResZul.gf index e2ab9e443..85c0529b0 100755 --- a/src/zulu/ResZul.gf +++ b/src/zulu/ResZul.gf @@ -27,6 +27,7 @@ resource ResZul = open Prelude,Predef,ParamX in { VPType = CopIdent | CopAssoc | CopDescr | CopEq | VNPCompl | NoComp | VSCompl | AdvComp | CopLoc ; -- VACompl | AuxType = PartAux ; -- TODO: add SubjAux, InfAux, ConsecAux etc (p327) AType = AdjType | RelType ; + LocAdvType = KwaAdv | NaAdv ; AForm = AF1 | AF2 | AF3 ; -- two forms for implementing sound changes Poulos+Msimang p143, one for monosyllabic SCForm = SC | SCVow | SCNeg | SCNegVow | SCPS | SCPart | SCVowP | SCBe | SCRP ; @@ -265,10 +266,11 @@ resource ResZul = open Prelude,Predef,ParamX in { R_ile => case root of { _+"el" => root ++BIND++ "e" ; _+"al" => (tk 2 root) + "el" ++BIND++ "e" ; + _+"an" => (tk 2 root) + "en" ++BIND++ "e" ; _ => root ++BIND++ "ile" } ; R_e => case root of { - _+"al" => (tk 2 root) + "el" ++BIND++ "e" ; + _+"an" => (tk 2 root) + "en" ++BIND++ "e" ; _ => root ++BIND++ "e" } ; R_i => root ++BIND++ "i" ; @@ -1656,48 +1658,48 @@ resource ResZul = open Prelude,Predef,ParamX in { } } ; - poss_concord_c1a : ClassGender => Number => RInit => Str = + poss_concord_c1a : ClassGender => Number => Str = table { C1_2 => table { - Sg => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } ; - Pl => table {(RA|RC) => "baka" ; (RE|RI) => "bake" ; (RO|RU) => "bako" } + Sg => "ka" ; + Pl => "baka" } ; C1a_2a => table { - Sg => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } ; - Pl => table {(RA|RC) => "baka" ; (RE|RI) => "bake" ; (RO|RU) => "bako" } + Sg => "ka" ; + Pl => "baka" } ; C3_4 => table { - Sg => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } ; - Pl => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } + Sg => "ka" ; + Pl => "ka" } ; C5_6 => table { - Sg => table {(RA|RC) => "lika" ; (RE|RI) => "like" ; (RO|RU) => "liko" } ; - Pl => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } + Sg => "lika" ; + Pl => "ka" } ; C7_8 => table { - Sg => table {(RA|RC) => "sika" ; (RE|RI) => "sike" ; (RO|RU) => "siko" } ; - Pl => table {(RA|RC) => "zika" ; (RE|RI) => "zike" ; (RO|RU) => "ziko" } + Sg => "sika" ; + Pl => "zika" } ; C9_10 => table { - Sg => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } ; - Pl => table {(RA|RC) => "zika" ; (RE|RI) => "zike" ; (RO|RU) => "ziko" } + Sg => "ka" ; + Pl => "zika" } ; C11_10 => table { - Sg => table {(RA|RC) => "luka" ; (RE|RI) => "luke" ; (RO|RU) => "luko" } ; - Pl => table {(RA|RC) => "zika" ; (RE|RI) => "zike" ; (RO|RU) => "ziko" } + Sg => "luka" ; + Pl => "zika" } ; C9_6 => table { - Sg => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } ; - Pl => table {(RA|RC) => "ka" ; (RE|RI) => "ke" ; (RO|RU) => "ko" } + Sg => "ka" ; + Pl => "ka" } ; C14 => table { - _ => table {(RA|RC) => "buka" ; (RE|RI) => "buke" ; (RO|RU) => "buko" } + _ => "buka" } ; C15 => table { - _ => table {(RA|RC) => "kuka" ; (RE|RI) => "kuke" ; (RO|RU) => "kuko" } + _ => "kuka" } ; C17 => table { - _ => table {(RA|RC) => "kuka" ; (RE|RI) => "kuke" ; (RO|RU) => "kuko" } + _ => "kuka" } } ; diff --git a/src/zulu/SentenceZul.gf b/src/zulu/SentenceZul.gf index 385b4ebf7..69fd4b4ed 100755 --- a/src/zulu/SentenceZul.gf +++ b/src/zulu/SentenceZul.gf @@ -26,37 +26,52 @@ concrete SentenceZul of Sentence = CatZul ** open Prelude,ResZul,ParamX in { -- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ; - ImpVP vp = let - np = { - empty = [] ; - s = table {NFull|NReduced|NPoss|NLoc => []} ; - -- loc = [] ; - -- desc = [] ; - -- det = [] ; - agr = Second Sg ; - i = nominit!(Second Sg) ; - proDrop = True ; - isPron = True ; - heavy = False - -- reqLocS = True ; - -- qdef = Article Spec - } ; - impTense = PresTense - in case vp.vptype of { - VNPCompl => { - s = table { - Pos => vp.s!MainCl!np.agr!Pos!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs ; - Neg => "unga" ++ vp.s!MainCl!np.agr!Neg!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs - } - } ; + -- ImpVP vp = let + -- np = { + -- empty = [] ; + -- s = table {NFull|NReduced|NPoss|NLoc => []} ; + -- -- loc = [] ; + -- -- desc = [] ; + -- -- det = [] ; + -- agr = Second Sg ; + -- i = nominit!(Second Sg) ; + -- proDrop = True ; + -- isPron = True ; + -- heavy = False + -- -- reqLocS = True ; + -- -- qdef = Article Spec + -- } ; + -- impTense = PresTense + -- in case vp.vptype of { + -- NoComp => let + -- yi = case vp.syl of { + -- SylMono => "yi"++BIND ; + -- _ => [] + -- } + -- in { + -- s = table { + -- Pos => yi ++ vp.s!MainCl!np.agr!Pos!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs ; + -- Neg => "unga" ++ vp.s!MainCl!np.agr!Neg!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs + -- } + -- } ; + -- VNPCompl => { + -- s = table { + -- Pos => vp.s!MainCl!np.agr!Pos!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs ; + -- Neg => "unga" ++ vp.s!MainCl!np.agr!Neg!impTense!False ++ vp.comp ++ vp.iadv ++ vp.advs + -- } + -- } ; + -- + -- CopIdent => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; + -- CopAssoc => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; + -- CopDescr => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; + -- CopEq => {s = \\pol => (cl_with_eq_cop_predicate np vp).s!pol!impTense } ; + -- -- VACompl => {s = \\pol => (cl_with_ap_comp_predicate np vp).s!pol!impTense!Princ } ; + -- AdvComp => {s = \\pol => (cl_with_adv_comp_predicate np vp).s!pol!impTense } ; + -- _ => {s = \\pol => (imp_verb_predicate np vp).s!pol!impTense } + -- } ; - CopIdent => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; - CopAssoc => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; - CopDescr => {s = \\pol => (comp_pred np vp).s!pol!impTense } ; - CopEq => {s = \\pol => (cl_with_eq_cop_predicate np vp).s!pol!impTense } ; - -- VACompl => {s = \\pol => (cl_with_ap_comp_predicate np vp).s!pol!impTense!Princ } ; - AdvComp => {s = \\pol => (cl_with_adv_comp_predicate np vp).s!pol!impTense } ; - _ => {s = \\pol => (imp_verb_predicate np vp).s!pol!impTense } + ImpVP vp = { + s = \\n,p => vp.imp_s!n!p ++ vp.comp ++ vp.iadv ++ vp.advs } ; -- SlashVP np vp = @@ -189,8 +204,6 @@ concrete SentenceZul of Sentence = CatZul ** open Prelude,ResZul,ParamX in { <_,_,PresTense,RC> => False ; <_,_,PresTense,_> => True ; - -- <_,Pos,PerfTense,RC> => False ; - -- <_,Pos,PerfTense,_> => True ; <_,_,PastTense,RC> => False ; <_,_,PastTense,_> => True ; <_,_,RemPastTense,RC> => False ; diff --git a/src/zulu/StructuralZul.gf b/src/zulu/StructuralZul.gf index 9d7674197..456767037 100755 --- a/src/zulu/StructuralZul.gf +++ b/src/zulu/StructuralZul.gf @@ -163,7 +163,7 @@ concrete StructuralZul of Structural = CatZul ** -- VV -- can8know_VV - -- can_VV + can_VV = lin VV (mkV "yakwaz" "yakwazi") ; -- must_VV } diff --git a/src/zulu/VerbExtZul.gf b/src/zulu/VerbExtZul.gf index 884a3e8f9..322f4efb4 100644 --- a/src/zulu/VerbExtZul.gf +++ b/src/zulu/VerbExtZul.gf @@ -37,6 +37,22 @@ 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 { + Sg => let + agr = (Second Sg) + in table { + Pos => "yiba" ++ ap.s!AF1 ; + Neg => "ungabi" ++ ap.s!AF1 + } ; + Pl => let + agr = (Second Pl) + in table { + Pos => "yibani" ++ ap.s!AF1 ; + Neg => "ningabi" ++ ap.s!AF1 + } + } ; comp, iadv, advs = [] ; hasComp = True ; r = RC ; -- should not be used @@ -62,6 +78,16 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param in rcp ++ pcp ++ cp ++ cop_base } ; + imp_s = table { + Sg => table { + Pos => "yiba" ++ (id_cop_pref np.agr) ++ np.s!NFull ; + Neg => "ungabi" ++ (id_cop_pref np.agr) ++ np.s!NFull + } ; + Pl => table { + Pos => "yibani" ++ (id_cop_pref np.agr) ++ np.s!NFull ; + Neg => "ningabi" ++ (id_cop_pref np.agr) ++ np.s!NFull + } + } ; comp, iadv, advs = [] ; hasComp = np.heavy ; r = RC ; -- should not be used @@ -87,6 +113,18 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param in rcp ++ pcp ++ cp ++ cop_base } ; + imp_s = let + cop = (assoc_cop_pref Pos np.agr) ++ np.s!NReduced + in table { + Sg => table { + Pos => "yiba" ++ cop ; + Neg => "ungabi" ++ cop + } ; + Pl => table { + Pos => "yibani" ++ cop ; + Neg => "ningabi" ++ cop + } + } ; comp, iadv, advs = [] ; hasComp = np.heavy ; r = RC ; -- should not be used @@ -94,16 +132,22 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param vptype = CopAssoc } ; - ComplV2Nonspec v2 np = { + ComplV2Nonspec v2 np = let + oc = objConc np.agr v2.r v2.syl ; + longform = case np.heavy of { + True => False ; + False => True + } + in { s = table { MainCl => \\a,p,t,l => let vform = VFIndic MainCl p t ; tp = tensePref vform v2.r v2.syl ; - oc = objConc np.agr v2.r v2.syl ; - longform = case np.heavy of { - True => False ; - False => True - } ; + -- oc = objConc np.agr v2.r v2.syl ; + -- longform = case np.heavy of { + -- True => False ; + -- False => True + -- } ; r = v2.s!(rform (VFIndic MainCl p t) longform) ; obj = case p of { Pos => np.s!NFull ; @@ -117,11 +161,11 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param vform = (VFIndic RelCl p t) ; rc = relConc vform a v2.r ; tp = tensePref vform v2.r v2.syl ; - oc = objConc np.agr v2.r v2.syl ; - longform = case np.heavy of { - True => False ; - False => True - } ; + -- oc = objConc np.agr v2.r v2.syl ; + -- longform = case np.heavy of { + -- True => False ; + -- False => True + -- } ; r = v2.s!(rform vform longform) ; obj = case p of { Pos => np.s!NFull ; @@ -132,6 +176,31 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param False => rc ++ tp ++ r ++ obj } } ; + imp_s = let + obj_full = np.s!NFull ; + obj_red = np.s!NReduced + in table { + Sg => table { + Pos => case np.proDrop of { + True => oc ++ v2.s!R_e ++ obj_full ; + False => v2.s!R_a ++ obj_full + } ; + Neg => case np.proDrop of { + True => "unga" ++BIND++ oc ++ v2.s!R_i ++ obj_red ; + False => "unga" ++BIND++ v2.s!R_i ++ obj_red + } + } ; + Pl => table { + Pos => case np.proDrop of { + True => oc ++ v2.s!R_e ++BIND++"ni" ++ obj_full ; + False => v2.s!R_a ++BIND++"ni" ++ obj_full + } ; + Neg => case np.proDrop of { + True => "ninga" ++BIND++ oc ++ v2.s!R_i ++ obj_red ; + False => "ninga" ++BIND++ v2.s!R_i ++ obj_red + } + } + } ; iadv, advs, comp = [] ; ap_comp = \\_ => [] ; hasComp = np.heavy ; @@ -142,6 +211,7 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param CopLoc loc = { s = \\c,a,p,t,l => loc.s!c!a!p!t ; + imp_s = loc.imp_s ; comp,advs,iadv = [] ; hasComp = True ; r = RC ; @@ -190,6 +260,22 @@ concrete VerbExtZul of VerbExt = CatZul,CatExtZul ** open ResZul, Prelude, Param in rcp ++ pcp ++ cop_base } ; + imp_s = let + imp_vform = VFIndic MainCl Pos PresTense + in table { + Sg => let + agr = (Second Sg) + in table { + Pos => "yiba" ++ qs.s!agr ; + Neg => "ungabi" ++ qs.s!agr + } ; + Pl => let + agr = (Second Pl) + in table { + Pos => "yibani" ++ qs.s!agr ; + Neg => "ningabi" ++ qs.s!agr + } + } ; comp, iadv, advs = [] ; hasComp = True ; r = RC ; -- should not be used diff --git a/src/zulu/VerbZul.gf b/src/zulu/VerbZul.gf index baaf28dc2..284723eee 100755 --- a/src/zulu/VerbZul.gf +++ b/src/zulu/VerbZul.gf @@ -22,6 +22,22 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { } ; in rc ++ tp ++ r ++ suf } ; + 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 + } + } ; iadv, advs, comp = [] ; -- ap_comp = \\_ => [] ; hasComp = False ; @@ -30,7 +46,48 @@ concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { vptype = NoComp } ; --- ComplVV v vp = insertObj (\\a => infVP v.typ vp False Simul CPos a) (predVV v) ; ---- insertExtra? + ComplVV v vp = { + s = table { + MainCl => \\a,p,t,l => let + vform = VFIndic MainCl p t ; + tp = tensePref vform v.r v.syl ; -- [] / zo- / zuku- + r = v.s!(rform (VFIndic MainCl p t) l) -- hamba + -- rest of verb prefix built later (eg no "ya" with certain question words) + in tp ++ r ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False ; + RelCl => \\a,p,t,l => let + vform = VFIndic RelCl p t ; + rc = relConc vform a v.r ; -- o- + tp = tensePref vform v.r v.syl ; -- [] / zo- / zuku- + r = v.s!(rform vform l) ; -- hamba + suf = case l of { + True => relSuf vform ; + False => [] + } ; + in rc ++ tp ++ r ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + } ; + 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 ; + SylMult => v.s!R_a + } ; + Neg => "unga" ++BIND++ v.s!R_i ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + } ; + 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 + } ; + Neg => "ninga" ++BIND++ v.s!R_i ++ "uku" ++ BIND ++ vp.s!MainCl!(First Sg)!Pos!PresTense!False + } + } ; + iadv, advs, comp = [] ; + -- ap_comp = \\_ => [] ; + hasComp = True ; + r = v.r ; + syl = v.syl ; + vptype = VNPCompl + } ; -- ComplVS vs s = vs ** { -- -- s = vs.s ; diff --git a/src/zulu/abstract_ext/CatExt.gf b/src/zulu/abstract_ext/CatExt.gf index fa73b8a2c..2600462cd 100755 --- a/src/zulu/abstract_ext/CatExt.gf +++ b/src/zulu/abstract_ext/CatExt.gf @@ -3,6 +3,7 @@ abstract CatExt = { cat Loc ; LocN ; + LocAdv ; QuantStem ; RelStem ; VAux ; diff --git a/src/zulu/abstract_ext/ExtraExt.gf b/src/zulu/abstract_ext/ExtraExt.gf index 4da82a196..43e406a5d 100755 --- a/src/zulu/abstract_ext/ExtraExt.gf +++ b/src/zulu/abstract_ext/ExtraExt.gf @@ -30,19 +30,29 @@ abstract ExtraExt = -- PossPronZul : CN -> Pron -> CN ; -- of you (yours) -- RelV : CN -> V -> Temp -> Pol -> CN ; -- lights that flash - PossLocNP : LocN -> NP -> CN ; + -- PossLocNP : LocN -> NP -> CN ; PossNPLoc : CN -> NP -> CN ; -- zasepulazini InstrNPAdv : NP -> Adv ; -- ngokuhlinzwa InstrAdvNPAdv : Adv -> NP -> Adv ; -- cishe ngehora - LocNPAdv : NP -> Adv ; -- emahoreni - LocAdvNPAdv : Adv -> NP -> Adv ; -- cishe emahoreni + + LocAdvNPAdv : Adv -> NP -> Adv ; -- cishe emahoreni amabili KwaNPAdv : NP -> Adv ; -- kwa-Laurette - -- KwaAdvNPAdv : Adv -> NP -> Adv ; -- ngaphezu kwamahora amabili adlule + -- KwaAdvNPAdv : LocAdv -> NP -> Adv ; -- ngaphezu kwamahora amabili adlule KuNPAdv : NP -> Adv ; -- kwixesha [elingangeyure enye egqithileyo] KuAdvNPAdv : Adv -> NP -> Adv ; -- ngaphezu kwamahora amabili adlule NaNPAdv : NP -> Adv ; + -- LocNAdv : LocN -> Adv ; -- phansi kwetafula + + LocAdvAdv : LocAdv -> Adv ; + LocAdvNP : LocAdv -> NP -> LocAdv ; -- ngaphezu kwamahora amabili adlule + LocNAdv : LocN -> LocAdv ; + LocNNgaAdv : LocN -> LocAdv ; + LocNPAdv : NP -> LocAdv ; -- emahoreni + + NPAdv : NP -> Adv ; -- sonke lesi sikhathi + -- InstrAdvNP : NP -> NP -> NP ; -- questions about your pregnancy -- RelAdv : Adv -> RS ; @@ -125,6 +135,10 @@ abstract ExtraExt = phakade_LocN : LocN ; phezulu_LocN : LocN ; + ngemuva_LocAdv : LocAdv ; + emuva_LocAdv : LocAdv ; + ecaleni_LocAdv : LocAdv ; + lapha_Loc : Loc ; khona_Loc : Loc ; @@ -134,6 +148,9 @@ abstract ExtraExt = with_Conj : Conj ; + want_VV : VV ; + prepare_to_VV : VV ; + -- Deverb15 : V -> N ; -- AdvQS : IAdv -> S -> QS ; -- maybe it is a pain that burns 2020-01-15: consider that this should rather be dealt with using QuestIAdv) diff --git a/src/zulu/abstract_ext/NounExt.gf b/src/zulu/abstract_ext/NounExt.gf index becb7c8a9..2ec8e7cad 100644 --- a/src/zulu/abstract_ext/NounExt.gf +++ b/src/zulu/abstract_ext/NounExt.gf @@ -38,10 +38,15 @@ abstract NounExt = Cat,CatExt ** { UsePNPl : PN -> NP ; - Deverb15 : V -> N ; + Deverb15 : Pol -> VP -> NP ; + -- DeverbV215 : Pol -> V2 -> NP -> NP ; - LocNP : NP -> Loc ; + -- LocNP : NP -> Loc ; - LocNLoc : LocN -> Loc ; + -- LocNLoc : LocN -> Loc ; + + -- LocNPossNP : LocN -> NP -> LocN ; + + LocAdvLoc : LocAdv -> Loc ; } diff --git a/src/zulu/abstract_ext/PChunk.gf b/src/zulu/abstract_ext/PChunk.gf index 0322e99df..877b0cae4 100644 --- a/src/zulu/abstract_ext/PChunk.gf +++ b/src/zulu/abstract_ext/PChunk.gf @@ -10,6 +10,7 @@ cat Chunk_S ; Chunk_RS ; Chunk_QS ; + Chunk_VP ; Chunk_CN ; Chunk_NP ; Chunk_N ; @@ -30,6 +31,7 @@ fun S_Chunker : Chunk_S -> Chunk ; RS_Chunker : Chunk_RS -> Chunk ; QS_Chunker : Chunk_QS -> Chunk ; + VP_Chunker : Chunk_VP -> Chunk ; CN_Chunker : Chunk_CN -> Chunk ; NP_Chunker : Chunk_NP -> Chunk ; N_Chunker : Chunk_N -> Chunk ; @@ -38,18 +40,22 @@ fun Symb_Chunker : Chunk_Symb -> Chunk ; Phr_Chunk : Phr -> Chunk_Phr ; - -- AP_Chunk : AP -> Chunk_AP ; + AP_Chunk : AP -> Chunk_AP ; Adv_Chunk : Adv -> Chunk_Adv ; Imp_Chunk : Imp -> Chunk_Imp ; S_Chunk : S -> Chunk_S ; - RS_Chunk : RS -> Chunk_RS ; + RS_Chunk : Pron -> RS -> Chunk_RS ; QS_Chunk : QS -> Chunk_QS ; + VP_RelYo_Chunk : Temp -> Pol -> Pron -> VP -> Chunk_VP ; + VP_Rel_Chunk : Temp -> Pol -> Pron -> VP -> Chunk_VP ; CN_Pl_Chunk : CN -> Chunk_CN ; CN_Sg_Chunk : CN -> Chunk_CN ; NP_Nom_Chunk : NP -> Chunk_NP ; - NP_Gen_Chunk : NP -> Chunk_NP ; - Predet_Chunk : Predet -> Chunk_Predet ; - Postdet_Chunk : Postdet -> Chunk_Postdet ; + NP_Loc_Chunk : NP -> Chunk_NP ; + NP_Gen_Chunk : Pron -> NP -> Chunk_NP ; + -- NP_Gen_Chunk : NP -> Chunk_NP ; + Predet_Chunk : Pron -> Predet -> Chunk_Predet ; + Postdet_Chunk : Pron -> Postdet -> Chunk_Postdet ; -- N_Sg_Chunk : N -> Chunk_N ; -- N_Pl_Chunk : N -> Chunk_N ; diff --git a/src/zulu/abstract_ext/PhraseExt.gf b/src/zulu/abstract_ext/PhraseExt.gf index d662cb967..e759a32d2 100644 --- a/src/zulu/abstract_ext/PhraseExt.gf +++ b/src/zulu/abstract_ext/PhraseExt.gf @@ -4,5 +4,7 @@ abstract PhraseExt = Cat,CatExt ** { -- direct speech DirectSpeech: Phr -> Temp -> V -> NP -> Phr ; + DirectSpeechNP : NP -> Temp -> V -> NP -> Phr ; + DirectSpeechAdv : Adv -> Temp -> V -> NP -> Phr ; ExtPhrConj : Phr -> Phr -> Phr ; } diff --git a/src/zulu/grammar_ext/NguniGrammar.gf b/src/zulu/grammar_ext/NguniGrammar.gf index 82dc00792..ac40380cb 100755 --- a/src/zulu/grammar_ext/NguniGrammar.gf +++ b/src/zulu/grammar_ext/NguniGrammar.gf @@ -2,7 +2,7 @@ abstract NguniGrammar = Noun [DetCN, UsePron, DetQuant, NumSg, NumPl, UseN, AdjCN, RelCN, PossNP,UsePN, RelNP, PredetNP,AdvNP], -- MassNP,AdvCN, AdvNP, - Verb [UseV, ComplVS, ComplVA, SlashV2a, UseComp, AdvVP, CompAP, CompNP, CompAdv, ComplSlash], + Verb [UseV, ComplVS, ComplVA, SlashV2a, UseComp, AdvVP, CompAP, CompNP, CompAdv, ComplSlash, ComplVV], Adjective [PositA, AdAP], Adverb [PositAdvAdj, SubjS], -- Numeral, diff --git a/src/zulu/grammar_ext/NguniGrammarZul.gf b/src/zulu/grammar_ext/NguniGrammarZul.gf index 6ce18bac1..e06fd6044 100755 --- a/src/zulu/grammar_ext/NguniGrammarZul.gf +++ b/src/zulu/grammar_ext/NguniGrammarZul.gf @@ -2,7 +2,7 @@ concrete NguniGrammarZul of NguniGrammar = NounZul [DetCN, UsePron, DetQuant, NumSg, NumPl, UseN, AdjCN, RelCN, PossNP,UsePN, RelNP, PredetNP,AdvNP], -- MassNP, AdvCN,AdvNP, - VerbZul [UseV, ComplVS, ComplVA, SlashV2a, UseComp, AdvVP, CompAP, CompNP, CompAdv, ComplSlash], + VerbZul [UseV, ComplVS, ComplVA, SlashV2a, UseComp, AdvVP, CompAP, CompNP, CompAdv, ComplSlash, ComplVV], AdjectiveZul [PositA, AdAP], AdverbZul [PositAdvAdj, SubjS], -- Numeral,