--# -path=.:../abstract:../common:../../prelude --1 Teldi auxiliary operations. -- This module contains operations that are needed to make the -- resource syntax work. -- resource ResTel = ParamX ** open Prelude in { flags optimize=all ; param Case = Dir | Obl ; Gender = Masc | Fem | Neutr ; oper Noun = {s : Number => Case => Str ; g : Gender} ; mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun = \sd,so,pd,po,g -> { s = table Number [table Case [sd;so] ; table Case [pd;po]] ; g = g } ; wallNoun : Str -> Noun = \goda -> mkNoun goda goda (goda + "lu") (goda + "la") Neutr ; -- reggNoun : Str -> Gender -> Noun = \s,g -> case of { -- <-(_ + ("A" | "I")), Fem> => -- mkNoun s s s (s + "eM") (s + "oM") (s + "o") Fem ; -- _ => regNoun s ** {g = g} -- } ; -- -- regNoun : Str -> Noun = \s -> case s of { -- x + "iyA" => -- mkNoun s s s (x + "iyAM") (x + "iyoN") (x + "iyo") Fem ; -- x + "A" => -- mkNoun s (x + "e") (x + "e") (x + "e") (x + "oN") (x + "o") Masc ; -- x + "I" => -- mkNoun s s s (x + "iyAM") (x + "iyoN") (x + "iyo") Fem ; -- _ => -- mkNoun s s s s (s + "oN") (s + "o") Masc -- } ; -- -- -- Adjective = {s : Gender => Number => Case => Str} ; -- -- mkAdjective : (x1,x2,x3 : Str) -> Adjective = \smd,sm,f -> { -- s = \\g,n,c => case of { -- => smd ; -- => sm ; -- _ => f -- } -- } ; -- -- regAdjective : Str -> Adjective = \s -> case s of { -- acch + "A" => mkAdjective s (acch + "e") (acch + "I") ; -- _ => mkAdjective s s s -- } ; -- -- param -- VForm = -- VInf -- | VStem -- | VImpf Gender Number -- | VPerf Gender Number -- | VSubj Number Person -- | VFut Number Person Gender -- | VAbs -- | VReq -- | VImp -- | VReqFut -- ; -- -- oper -- Verb = {s : VForm => Str} ; -- -- mkVerb : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb = -- \inf,stem,ims,imp,ifs,ifp,pms,pmp,pfs,pfp,ss1,ss2,sp2,sp3,r -> { -- s = -- let ga : Number -> Gender -> Str = \n,g -> -- (regAdjective "gA").s ! g ! n ! Dir -- in table { -- VInf => inf ; -- VStem => stem ; -- VImpf Masc Sg => ims ; -- VImpf Masc Pl => imp ; -- VImpf Fem Sg => ifs ; -- VImpf Fem Pl => ifp ; -- VPerf Masc Sg => pms ; -- VPerf Masc Pl => pmp ; -- VPerf Fem Sg => pfs ; -- VPerf Fem Pl => pfp ; -- VSubj Sg P1 => ss1 ; -- VSubj Sg _ => ss2 ; -- VSubj Pl P2 => sp2 ; -- VSubj Pl _ => sp3 ; -- VFut Sg P1 g => ss1 + ga Sg g ; -- VFut Sg _ g => ss2 + ga Sg g ; -- VFut Pl P2 g => sp2 + ga Pl g ; -- VFut Pl _ g => sp3 + ga Pl g ; -- VAbs => stem + "kar" ; --- ke -- VReq => r ; -- VImp => sp2 ; -- VReqFut => stem + "ie-gA" -- } -- } ; -- -- regVerb : Str -> Verb = \cal -> -- let caly : Str = case cal of { -- _ + ("A" | "e") => cal + "y" ; -- c + "U" => c + "uy" ; -- c + "I" => c + "iy" ; -- _ => cal -- } -- in -- mkVerb -- (cal + "nA") cal -- (cal + "tA") (cal + "te") (cal + "tI") (cal + "tI") -- (caly + "A") (caly + "e") (caly + "I") (caly + "IN") -- (caly + "UM") (caly + "e") (caly + "o") (caly + "eN") -- (caly + "ie-") ; -- -- param -- CTense = CPresent | CPast | CFuture ; -- oper -- copula : CTense -> Number -> Person -> Gender -> Str = \t,n,p,g -> -- case of { -- => "hUM" ; -- => "hE" ; -- => "hE" ; -- => "hEN" ; -- => "ho" ; -- => "hEN" ; -- => "TA" ; -- => "TI" ; -- => "Te" ; -- => "TIN" ; -- => "hUNgA" ; -- => "hUNgI" ; -- => "hogA" ; -- => "hogI" ; -- => "hoge" ; -- => "hoNge" ; -- => "hogi:" ; -- => "hoNgi:" -- } ; -- -- param -- PronCase = PC Case | PObj | PPoss ; -- oper -- personalPronoun : Person -> Number -> {s : PronCase => Str} = \p,n -> -- case of { -- => {s = table PronCase ["mEN" ; "muJ" ; "muJ" ; "muJe" ; "merA"]} ; -- => {s = table PronCase ["ham" ; "ham" ; "ham" ; "hameN" ; "hamArA"]} ; -- => {s = table PronCase ["tU" ; "tuJ" ; "tuJ" ; "tuJe" ; "terA"]} ; -- => {s = table PronCase ["tum" ; "tum" ; "tum" ; "tum" ; "tumhArA"]} ; -- => {s = table PronCase ["vah" ; "u-s" ; "u-s" ; "u-se" ; "u-skA"]} ; -- => {s = table PronCase ["ve" ; "u-n" ; "u-n" ; "u-nheN" ; "u-nkA"]} -- } ; -- ---- the third is the vocative - is it really this way? -- -- -- the Teldi verb phrase -- ----- CTense = CPresent | CPast | CFuture ; -- -- -- -- param -- VPHTense = -- VPGenPres -- impf hum nahim "I go" -- | VPImpPast -- impf Ta nahim "I went" -- | VPContPres -- stem raha hum nahim "I am going" -- | VPContPast -- stem raha Ta nahim "I was going" -- | VPPerf -- perf na/nahim "I went" -- | VPPerfPres -- perf hum na/nahim "I have gone" -- | VPPerfPast -- perf Ta na/nahim "I had gone" -- | VPSubj -- subj na "I may go" -- | VPFut -- fut na/nahim "I shall go" -- ; -- -- VPHForm = -- VPTense VPHTense Agr -- 9 * 12 -- | VPReq -- | VPImp -- | VPReqFut -- | VPInf -- | VPStem -- ; -- -- VType = VIntrans | VTrans | VTransPost ; -- -- oper -- objVType : VType -> NPCase = \vt -> case vt of { -- VTrans => NPObj ; -- _ => NPC Obl -- } ; -- -- VPH : Type = { -- s : Bool => VPHForm => {fin, inf, neg : Str} ; -- obj : {s : Str ; a : Agr} ; -- subj : VType ; -- comp : Agr => Str -- } ; -- -- predV : Verb -> VPH = \verb -> { -- s = \\b,vh => -- let -- na = if_then_Str b [] "na" ; -- nahim = if_then_Str b [] "nahIN" ; -- in -- case vh of { -- VPTense VPGenPres (Ag g n p) => -- {fin = copula CPresent n p g ; inf = verb.s ! VImpf g n ; neg = nahim} ; -- VPTense VPImpPast (Ag g n p) => -- {fin = copula CPast n p g ; inf = verb.s ! VImpf g n ; neg = nahim} ; -- VPTense VPContPres (Ag g n p) => -- {fin = copula CPresent n p g ; -- inf = verb.s ! VStem ++ raha g n ; neg = nahim} ; -- VPTense VPContPast (Ag g n p) => -- {fin = copula CPast n p g ; -- inf = verb.s ! VStem ++ raha g n ; neg = nahim} ; -- VPTense VPPerf (Ag g n _) => -- {fin = verb.s ! VPerf g n ; inf = [] ; neg = nahim} ; -- VPTense VPPerfPres (Ag g n p) => -- {fin = copula CPresent n p g ; inf = verb.s ! VPerf g n ; neg = nahim} ; -- VPTense VPPerfPast (Ag g n p) => -- {fin = copula CPast n p g ; inf = verb.s ! VPerf g n ; neg = nahim} ; -- VPTense VPSubj (Ag _ n p) => {fin = verb.s ! VSubj n p ; inf = [] ; neg = na} ; -- VPTense VPFut (Ag g n p) => {fin = verb.s ! VFut n p g ; inf = [] ; neg = na} ; -- VPInf => {fin = verb.s ! VStem ; inf = [] ; neg = na} ; -- _ => {fin = verb.s ! VStem ; inf = [] ; neg = na} ---- -- } ; -- obj = {s = [] ; a = defaultAgr} ; -- subj = VIntrans ; -- comp = \\_ => [] -- } ; -- -- raha : Gender -> Number -> Str = \g,n -> -- (regAdjective "rahA").s ! g ! n ! Dir ; -- -- VPHSlash = VPH ** {c2 : Compl} ; -- -- Clause : Type = {s : VPHTense => Bool => Str} ; -- -- Compl : Type = {s : Str ; c : VType} ; -- -- insertObject : NP -> VPHSlash -> VPH = \np,vps -> { -- s = vps.s ; -- obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ; -- subj = vps.c2.c ; -- comp = vps.comp -- } ; -- -- param -- Agr = Ag Gender Number Person ; -- NPCase = NPC Case | NPObj | NPErg ; -- -- oper -- agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n P3 ; -- -- defaultAgr : Agr = agrP3 Masc Sg ; -- -- npcase2case : NPCase -> Case = \npc -> case npc of { -- NPC c => c ; -- NPObj => Obl ; -- NPErg => Obl -- } ; -- -- np2pronCase : NPCase -> PronCase = \np -> case np of { -- NPC c => PC c ; -- NPObj => PObj ; -- NPErg => PC Obl -- } ; -- -- toNP : (Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { -- NPC c => pn ! c ; -- NPObj => pn ! Obl ; -- NPErg => pn ! Obl ++ "ne" -- } ; -- -- NP : Type = {s : NPCase => Str ; a : Agr} ; -- -- mkClause : NP -> VPH -> Clause = \np,vp -> { -- s = \\vt,b => -- let -- subjagr : NPCase * Agr = case vt of { -- VPPerf => case vp.subj of { -- VTrans => ; -- VTransPost => ; -- _ => -- } ; -- _ => -- } ; -- subj = subjagr.p1 ; -- agr = subjagr.p2 ; -- vps = vp.s ! b ! VPTense vt agr ; -- in -- np.s ! subj ++ vp.obj.s ++ vp.comp ! np.a ++ vps.neg ++ vps.inf ++ vps.fin -- } ; -- -- }