--1 Bantu auxiliary operations. interface ResBantu = DiffBantu ** open CommonBantu in { flags optimize=all ; coding=utf8 ; --2 Constants uniformly defined in terms of language-dependent constants oper npNom : NPCase = NCase Nom ; npLoc : NPCase = NCase Loc ; NPAcc : NPCase = NCase Nom ; -- Added this so that swahili compiles. /IL2020 npcase2case : NPCase -> Case = \nc -> case nc of {NCase c => c ; _ => Nom} ; mkNP : (i,my : Str) -> Gender -> Number -> Person -> {s : NPCase => Str ; a : Agr} = \i,my,g,n,p -> { s = table { NCase Nom => i ; NCase Loc | NPoss => my -- works for normal genitives, "whose", etc. } ; a = Ag g n p ; }; regNP : Str ->Gender -> Number -> {s : NPCase => Str ; a : Agr} = \that,g, n -> mkNP that that g n P3 ; mkPron: (i, mine : Str) -> Gender -> Number -> Person -> {s: PronForm => Str ; a : Agr} = \i,mine, g,n,p -> { s = table { Pers => i; Poss n g => case of { => ProunSgprefix g + mine ; => ProunPlprefix g + mine} } ; a = Ag g n p } ; Verb : Type = {s : Bool => VForm => Str} ; VerbForms : Type = Tense => Anteriority => Bool => Agre => Str; VP : Type = {s:VerbForms ; obj : Agr => Str}; SlashVP = VP ** {c2 : Str} ; predV : Verb -> VP = \verb -> { s = \\t,ant,b,agre => let inf = verb.s !b! VInf ; pres = verb.s !True! VPres agre.g agre.n agre.p ; presn = verb.s !False! VPres agre.g agre.n agre.p ; past = verb.s !True! VPast agre.g agre.n agre.p ; pastn = verb.s !False! VPast agre.g agre.n agre.p ; fut = verb.s !True! VFut agre.g agre.n agre.p ; futn = verb.s !False! VFut agre.g agre.n agre.p ; in case of { => pres ; => fut ; --# notpresent => past ; --# notpresent => presn ; => futn ; --# notpresent => pastn -- ; <_, _, _> => inf --# notpresent -- never reached } ; obj = \\_ => [] }; Clause : Type = { s : Tense => Anteriority => Bool => Str } ; mkClause : Str -> Agre -> VP -> Clause = \subj,agr,vp -> { s = \\t,a,b => let verb = vp.s ! t ! a ! b ! agr in subj ++ verb } ; finalComma : Str = pre {"," | "." => []; "" => SOFT_BIND ++ ","; _ => []} ; frontComma : Str = SOFT_BIND ++ "," ; }