1
0
forked from GitHub/gf-rgl
Files
gf-rgl/src/zulu/VerbZul.gf
2022-12-16 23:16:25 +02:00

405 lines
12 KiB
Plaintext
Executable File

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 <r,p,t> of {
<RC,Pos,PresTense> => False ;
<_,Pos,PresTense> => True ;
<_,_,_> => False
} ;
lfya = case <c,p,t> of {
<False,Pos,PresTense> => "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)
;
}