concrete VerbZul of Verb = CatZul ** open ResZul, Prelude, ParamX in { flags optimize=all_subs ; lin UseV v = { 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 vform l) -- hamba -- rest of verb prefix built later (eg no "ya" with certain question words) in vpref ++ tp ++ r ; 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 ++ 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 } } ; 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 = [] ; -- ap_comp = \\_ => [] ; hasComp = False ; r = v.r ; syl = v.syl ; vptype = NoComp } ; 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 ++ vp.inf_s!NFull!Pos } ; imp_s = table { Sg => table { Pos => case v.syl of { SylMono => "yi"++BIND++v.s!R_a ++ vp.inf_s!NFull!Pos ; SylMult => v.s!R_a } ; 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" ++ vp.inf_s!NFull!Pos ; SylMult => v.s!R_a ++BIND++"ni" ++ vp.inf_s!NFull!Pos } ; 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 = [] ; -- ap_comp = \\_ => [] ; hasComp = True ; r = v.r ; syl = v.syl ; vptype = VNPCompl } ; -- ComplVS vs s = vs ** { -- -- s = vs.s ; -- oc = [] ; -- comp = s.subjs ; -- iadv = [] ; -- advs = [] ; -- hasComp = True ; -- -- r = vs.r ; -- -- syl = vs.syl ; -- asp = Null ; -- asp_pref = \\_ => [] ; -- vptype = VSCompl ; -- comp_agr = First Sg ; -- this could be anything... -- ap_comp = \\_ => [] ; -- aux_root = [] ; -- hasAux = False -- } ; -- --- ComplVS v s = insertObj (variants {\\_ => conjThat ++ s.s; \\_ => s.s}) (predV v) ; -- ComplVQ v q = insertExtra (q.s ! QIndir) (predV v) ; -- ComplVA va ap = va ** { -- -- s = va.s ; -- oc = [] ; -- comp = \\_ => [] ; -- iadv = [] ; -- advs = [] ; -- hasComp = True ; -- -- r = va.r ; -- -- syl = va.syl ; -- asp = Null ; -- asp_pref = \\_ => [] ; -- vptype = VACompl ; -- comp_agr = First Sg ; -- this could be anything... -- ap_comp = ap.s ; -- ap_bool = ap.b ; -- aux_root = [] ; -- hasAux = False -- } ; -- SlashV2a v = v ** { -- oc = [] ; -- comp = [] ; -- -- iadv = [] ; -- -- advs = [] ; -- hasComp = False ; -- asp = Null ; -- asp_pref = \\_ => [] ; -- vptype = VNPCompl ; -- comp_agr = First Sg ; -- this could be anything... -- ap_comp = \\_ => [] ; -- aux_root = [] ; -- hasAux = False -- ; -- -- missing_np1 = True -- } ; -- Slash2V3 v np = -- insertObjc (\\_ => v.c2 ++ np.s ! NPAcc) (predVc v ** {c2 = v.c3 ; gapInMiddle = False}) ; -- Slash3V3 v np = -- insertObjc (\\_ => v.c3 ++ np.s ! NPAcc) (predVc v) ; ---- -- SlashV2V v vp = insertObjc (\\a => v.c3 ++ infVP v.typ vp False Simul CPos a) (predVc v) ; -- SlashV2S v s = insertExtrac (conjThat ++ s.s) (predVc v) ; ---- insertExtra? -- --- SlashV2S v s = insertObjc (variants {\\_ => conjThat ++ s.s; \\_ => s.s}) (predVc v) ; -- SlashV2Q v q = insertExtrac (q.s ! QIndir) (predVc v) ; -- SlashV2A v ap = insertObjc (\\a => v.c3 ++ ap.s ! a) (predVc v) ; ---- -- TODO: this simply adds the new np to the end of vp.comp; to be expanded beyond V2 using missing_np1 -- ComplSlash vp np = { -- oc = case np.proDrop of { -- True => objConc np.agr vp.r vp.syl ; -- False => np.empty -- } ; -- comp = np.s!Full ; -- iadv = [] ; -- advs = [] ; -- hasComp = case np.proDrop of { -- True => False ; -- False => True -- } ; -- s = vp.s ; -- r = vp.r ; -- syl = vp.syl ; -- asp = vp.asp ; -- asp_pref = vp.asp_pref ; -- vptype = VNPCompl ; -- comp_agr = np.agr ; -- ap_comp = vp.ap_comp ; -- aux_root = vp.aux_root ; -- hasAux = vp.hasAux -- } ; -- UseComp comp = case comp.comptype of { -- CopDescr => { -- s = \\_ => [] ; -- oc = [] ; -- comp = [] ; -- doesn't matter -- iadv = [] ; -- advs = [] ; -- hasComp = True ; -- r = comp.r ; -- adjectives don't typically start on vowels -- syl = SylMult ; -- asp = comp.asp ; -- asp_pref = comp.asp_pref ; -- vptype = comp.comptype ; -- comp_agr = comp.agr ; -- this could be anything... -- ap_comp = comp.s ; -- aux_root = [] ; -- hasAux = False -- } ; -- CopIdent => { -- s = \\_ => [] ; -- oc = [] ; -- comp = comp.s!AF1 ; -- doesn't matter -- iadv = [] ; -- advs = [] ; -- hasComp = True ; -- r = comp.r ; -- syl = SylMult ; -- asp = comp.asp ; -- asp_pref = comp.asp_pref ; -- vptype = comp.comptype ; -- comp_agr = comp.agr ; -- ap_comp = \\_ => [] ; -- aux_root = [] ; -- hasAux = False -- } ; -- AdvComp => { -- s = \\_ => [] ; -- oc = [] ; -- comp = [] ; -- iadv = [] ; -- advs = comp.s!AF1 ; -- hasComp = True ; -- r = comp.r ; -- probably works... -- syl = SylMult ; -- asp = comp.asp ; -- asp_pref = comp.asp_pref ; -- vptype = comp.comptype ; -- comp_agr = comp.agr ; -- ap_comp = \\_ => [] ; -- aux_root = [] ; -- hasAux = False -- } ; -- -- the default tries to treat the comp as a NP type -- _ => { -- s = \\_ => [] ; -- oc = [] ; -- comp = comp.s!AF1 ; -- doesn't matter -- iadv = [] ; -- advs = [] ; -- hasComp = True ; -- r = comp.r ; -- syl = SylMult ; -- asp = comp.asp ; -- asp_pref = comp.asp_pref ; -- vptype = comp.comptype ; -- comp_agr = comp.agr ; -- ap_comp = \\_ => [] ; -- aux_root = [] ; -- hasAux = False -- } -- } ; AdvVP vp adv = vp ** { advs = vp.advs ++ adv.s ; hasComp = True } ; -- { -- s = vp.s ; -- oc = vp.oc ; -- comp = vp.comp ; -- iadv = vp.iadv ; -- advs = vp.advs ++ adv.s ; -- hasComp = vp.hasComp ; -- r = vp.r ; -- syl = vp.syl ; -- asp = vp.asp ; -- asp_pref = vp.asp_pref ; -- vptype = vp.vptype ; -- comp_agr = vp.comp_agr ; -- ap_comp = vp.ap_comp ; -- aux_root = vp.aux_root ; -- hasAux = vp.hasAux -- } ; -- ExtAdvVP vp adv = insertObj (\\_ => frontComma ++ adv.s ++ finalComma) vp ; -- AdVVP adv vp = insertAdV adv.s vp ; -- -- AdvVPSlash vp adv = vp ** insertObj (\\_ => adv.s) vp ; -- AdVVPSlash adv vp = vp ** insertAdV adv.s vp ; -- -- ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ; -- -- PassV2 v = insertObj (\\_ => v.s ! VPPart ++ v.p) (predAux auxBe) ; -- -- ---b UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to" -- CompAP ap = { -- s = ap.s ; -- r = RC ; -- agr = First Sg ; -- this could be anything... -- asp = Null ; -- asp_pref = \\_ => [] ; -- comptype = CopDescr -- } ; -- -- CompNP np = { -- s = \\nform => np.s!nform ; -- TODO: refactor -- r = initNP np.isPron np.agr ; -- agr = np.agr ; -- asp = Null ; -- asp_pref = \\_ => [] ; -- comptype = CopIdent -- } ; -- -- CompAdv adv = { -- s = \\_ => case adv.reqLocS of { -- True => "s" ++BIND ; -- False => [] -- } ++ adv.s ; -- r = RC ; -- probably works... -- agr = First Sg ; -- this could be anything... -- asp = Null ; -- asp_pref = \\_ => [] ; -- TODO: check -- comptype = AdvComp -- } ; -- CompCN cn = {s = \\a => case (fromAgr a).n of { -- Sg => artIndef ++ cn.s ! Sg ! Nom ; -- Pl => cn.s ! Pl ! Nom -- } -- } ; -- UseCopula = predAux auxBe ; -- -- VPSlashPrep vp p = vp ** {c2 = p.s ; gapInMiddle = False; missingAdv = True } ; -- oper -- insert_np : VPSlash -> NP -> VP = \vp,np -> { -- s = vp.s ; -- perfSuff = vp.perfSuff ; -- oc = case np.proDrop of { -- True => objConc np.agr v2.r v2.syl ; -- False => np.empty -- } ; -- comp = case np.proDrop of { -- True => vp.comp ; -- False => vp.comp ++ np.s ! Full ++ np.desc -- } ; -- hasComp = True ; -- r = vp.r ; -- syl = vp.syl ; -- asp = vp.asp ; -- asp_pref = vp.asp_pref ; -- vptype = VNPCompl ; -- comp_agr = np.agr ; -- this could be anything... -- ap_comp = vp.ap_comp ; -- ap_bool = vp.ap_bool ; -- aux_root = vp.aux_root ; -- hasAux = vp.hasAux -- } ; oper v_prefix : RInit -> Bool -> Agr -> Polarity -> BasicTense -> Str = \r,c,a,p,t -> let vow = case of { => False ; <_,Pos,PresTense> => True ; <_,_,_> => False } ; lfya = case of { => "ya" ++BIND ; <_,_,_> => [] } ; vform_main = VFIndic MainCl p t in (negPref vform_main) -- ++ (exclSePref vform_main) ++ (subjConc vform_main a vow) -- ++ (negPref2 vform_main) ++ lfya -- ++ (tensePref vform_main) ; }