concrete ExtraDut of ExtraDutAbs = CatDut ** open ResDut, MorphoDut, Coordination, Prelude, IrregDut, (P = ParadigmsDut) in { flags coding=utf8 ; lincat VPI = {s : Bool => Str} ; [VPI] = {s1,s2 : Bool => Str} ; lin BaseVPI = twoTable Bool ; ConsVPI = consrTable Bool comma ; MkVPI vp = {s = \\b => useInfVP b vp} ; ConjVPI = conjunctDistrTable Bool ; ComplVPIVV v vpi = insertInf (vpi.s ! v.isAux) ( predVGen v.isAux BeforeObjs v) ; ---- --{- -- insertExtrapos vpi.p3 ( -- insertInf vpi.p2 ( -- insertObj vpi.p1 ( -- predVGen v.isAux vpi.negPos v))) ; ---} -- -- PPzuAdv cn = {s = case cn.g of { -- Masc | Neutr => "zum" ; -- Fem => "zur" -- } ++ cn.s ! adjfCase Weak Dat ! Sg ! Dat -- } ; -- -- TImpfSubj = {s = [] ; t = Past ; m = MConjunct} ; --# notpresent -- -- moegen_VV = auxVV mögen_V ; -- --} lin ICompAP ap = {s = \\_ => "hoe" ++ ap.s ! APred} ; IAdvAdv adv = {s = "hoe" ++ adv.s} ; lincat VPS = {s : Order => Agr => Str} ; [VPS] = {s1,s2 : Order => Agr => Str} ; lin BaseVPS = twoTable2 Order Agr ; ConsVPS = consrTable2 Order Agr comma ; PredVPS np vpi = let subj = np.s ! NPNom ; agr = np.a ; in { s = \\o => let verb = vpi.s ! o ! agr in case o of { Main => subj ++ verb ; Inv => verb ++ subj ; ---- älskar henne och sover jag Sub => subj ++ verb } } ; MkVPS tm p vp = { s = \\o,agr => let ord = case o of { Sub => True ; -- glue prefix to verb _ => False } ; subj = [] ; t = tm.t ; a = tm.a ; b = p.p ; vform = vForm t agr.g agr.n agr.p o ; auxv = (auxVerb vp.s.aux).s ; vperf = vp.s.s ! VPerf ; verb : Str * Str = case of { => ; --# notpresent => ; --# notpresent <_, Anter> => ; --# notpresent <_, Simul> => } ; fin = verb.p1 ; neg = vp.a1 ! b ; obj0 = vp.n0 ! agr ; obj = vp.n2 ! agr ; compl = obj0 ++ neg ++ obj ++ vp.a2 ++ vp.s.prefix ; inf = case of { --# notpresent => vp.s.s ! VInf ++ vp.inf.p1 ; --# notpresent _ => --# notpresent vp.inf.p1 ++ verb.p2 } --# notpresent ; extra = vp.ext ; inffin = case of { --# notpresent => fin ++ inf ; -- double inf --# notpresent _ => --# notpresent inf ++ fin --- or just auxiliary vp } --# notpresent in tm.s ++ p.s ++ case o of { Main => subj ++ fin ++ compl ++ inf ++ extra ; Inv => fin ++ subj ++ compl ++ inf ++ extra ; Sub => subj ++ compl ++ inffin ++ extra } } ; ConjVPS = conjunctDistrTable2 Order Agr ; PassVPSlash vps = insertInf (vps.s.s ! VPerf) (predV ResDut.worden_V) ; PassAgentVPSlash vps np = insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV ResDut.worden_V)) ; lin NominalizeVPSlashNP vpslash np = --False for negation place; doesn't matter because vp.a1 ! Pos is chosen let vp : ResDut.VP = insertObjNP np.isPron AfterObjs (\\_ => appPrep vpslash.c2.p1 np.s) vpslash ; agrDef : Agr = agrP3 Sg ; compl : Str = vp.n0 ! agrDef ++ vp.a1 ! Pos ++ vp.n2 ! agrDef ++ vp.s.prefix ; inf : Str = vp.inf.p1 ; extra : Str = vp.ext in lin NP (MorphoDut.mkNP (vp.s.s ! VInf ++ "van" ++ compl ++ inf ++ extra ) Utr Sg) ; lin zullen_VV = lin VV (zullen_V ** {isAux = True}) ; StressedPron pron = { s = table {NPNom => pron.stressed.nom ; NPAcc => pron.stressed.acc} ; a = pron.a ; isPron = True } ; }