diff options
| author | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2009-06-22 15:39:08 +0000 |
| commit | e89fdae2fa1626348d8025824a7469252fa85e42 (patch) | |
| tree | c7d46bbd0494043b4bd6f917a25a7687517d0547 /next-lib/src/latin/ResLat.gf | |
| parent | 3049b59b35b25381a7c6787444165c200d66e08b (diff) | |
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'next-lib/src/latin/ResLat.gf')
| -rw-r--r-- | next-lib/src/latin/ResLat.gf | 570 |
1 files changed, 0 insertions, 570 deletions
diff --git a/next-lib/src/latin/ResLat.gf b/next-lib/src/latin/ResLat.gf deleted file mode 100644 index 29bf9db3d..000000000 --- a/next-lib/src/latin/ResLat.gf +++ /dev/null @@ -1,570 +0,0 @@ ---# -path=.:../abstract:../common:../../prelude - ---1 Latlish auxiliary operations. - -resource ResLat = ParamX ** open Prelude in { - -param - Gender = Masc | Fem | Neutr ; - Case = Nom | Acc | Gen | Dat | Abl | Voc ; --- Degree = DPos | DComp | DSup ; - -oper - Noun : Type = {s : Number => Case => Str ; g : Gender} ; - Adjective : Type = {s : Gender => Number => Case => Str} ; - - -- worst case - - mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun = - \sn,sa,sg,sd,sab,sv,pn,pa,pg,pd, g -> { - s = table { - Sg => table { - Nom => sn ; - Acc => sa ; - Gen => sg ; - Dat => sd ; - Abl => sab ; - Voc => sv - } ; - Pl => table { - Nom | Voc => pn ; - Acc => pa ; - Gen => pg ; - Dat | Abl => pd - } - } ; - g = g - } ; - - -- declensions - - noun1 : Str -> Noun = \mensa -> - let - mensae = mensa + "e" ; - mensis = init mensa + "is" ; - in - mkNoun - mensa (mensa +"m") mensae mensae mensa mensa - mensae (mensa + "s") (mensa + "rum") mensis - Fem ; - - noun2us : Str -> Noun = \servus -> - let - serv = Predef.tk 2 servus ; - servum = serv + "um" ; - servi = serv + "i" ; - servo = serv + "o" ; - in - mkNoun - servus servum servi servo servo (serv + "e") - servi (serv + "os") (serv + "orum") (serv + "is") - Masc ; - - noun2er : Str -> Noun = \puer -> - let - puerum = puer + "um" ; - pueri = puer + "i" ; - puero = puer + "o" ; - in - mkNoun - puer puerum pueri puero puero (puer + "e") - pueri (puer + "os") (puer + "orum") (puer + "is") - Masc ; - - noun2um : Str -> Noun = \bellum -> - let - bell = Predef.tk 2 bellum ; - belli = bell + "i" ; - bello = bell + "o" ; - bella = bell + "a" ; - in - mkNoun - bellum bellum belli bello bello (bell + "e") - bella bella (bell + "orum") (bell + "is") - Neutr ; - --- smart paradigm for declensions 1&2 - - noun12 : Str -> Noun = \verbum -> - case verbum of { - _ + "a" => noun1 verbum ; - _ + "us" => noun2us verbum ; - _ + "um" => noun2um verbum ; - _ + "er" => noun2er verbum ; - _ => Predef.error ("noun12 does not apply to" ++ verbum) - } ; - - noun3c : Str -> Str -> Gender -> Noun = \rex,regis,g -> - let - reg = Predef.tk 2 regis ; - rege : Str = case rex of { - _ + "e" => reg + "i" ; - _ + ("al" | "ar") => rex + "i" ; - _ => reg + "e" - } ; - regemes : Str * Str = case g of { - Neutr => <rex,reg + "a"> ; - _ => <reg + "em", reg + "es"> - } ; - in - mkNoun - rex regemes.p1 (reg + "is") (reg + "i") rege rex - regemes.p2 regemes.p2 (reg + "um") (reg + "ibus") - g ; - - - noun3 : Str -> Noun = \labor -> - case labor of { - _ + "r" => noun3c labor (labor + "is") Masc ; - fl + "os" => noun3c labor (fl + "oris") Masc ; - lim + "es" => noun3c labor (lim + "itis") Masc ; - cod + "ex" => noun3c labor (cod + "icis") Masc ; - poem + "a" => noun3c labor (poem + "atis") Neutr ; - calc + "ar" => noun3c labor (calc + "aris") Neutr ; - mar + "e" => noun3c labor (mar + "is") Neutr ; - car + "men" => noun3c labor (car + "minis") Neutr ; - rob + "ur" => noun3c labor (rob + "oris") Neutr ; - temp + "us" => noun3c labor (temp + "oris") Neutr ; - vers + "io" => noun3c labor (vers + "ionis") Fem ; - imag + "o" => noun3c labor (imag + "inis") Fem ; - ae + "tas" => noun3c labor (ae + "tatis") Fem ; - vo + "x" => noun3c labor (vo + "cis") Fem ; - pa + "rs" => noun3c labor (pa + "rtis") Fem ; - cut + "is" => noun3c labor (cut + "is") Fem ; - urb + "s" => noun3c labor (urb + "is") Fem ; - _ => Predef.error ("noun3 does not apply to" ++ labor) - } ; - - noun4us : Str -> Noun = \fructus -> - let - fructu = init fructus ; - fruct = init fructu - in - mkNoun - fructus (fructu + "m") fructus (fructu + "i") fructu fructus - fructus fructus (fructu + "um") (fruct + "ibus") - Masc ; - - noun4u : Str -> Noun = \cornu -> - let - corn = init cornu ; - cornua = cornu + "a" - in - mkNoun - cornu cornu (cornu + "s") (cornu + "i") cornu cornu - cornua cornua (cornu + "um") (corn + "ibus") - Neutr ; - - noun5 : Str -> Noun = \res -> - let - re = init res ; - rei = re + "i" - in - mkNoun - res (re+ "m") rei rei re res - res res (re + "rum") (re + "bus") - Fem ; - --- to change the default gender - - nounWithGen : Gender -> Noun -> Noun = \g,n -> - {s = n.s ; g = g} ; - --- smart paradigms - - noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g -> - let s : Noun = case <verbum,verbi> of { - <_ + "a", _ + "ae"> => noun1 verbum ; - <_ + "us", _ + "i"> => noun2us verbum ; - <_ + "um", _ + "i"> => noun2um verbum ; - <_ + "er", _ + "i"> => noun2er verbum ; - <_ + "us", _ + "us"> => noun4us verbum ; - <_ + "u", _ + "us"> => noun4u verbum ; - <_ + "es", _ + "ei"> => noun5 verbum ; - _ => noun3c verbum verbi g - } - in - nounWithGen g s ; - - noun : Str -> Noun = \verbum -> - case verbum of { - _ + "a" => noun1 verbum ; - _ + "us" => noun2us verbum ; - _ + "um" => noun2um verbum ; - _ + "er" => noun2er verbum ; - _ + "u" => noun4u verbum ; - _ + "es" => noun5 verbum ; - _ => noun3 verbum - } ; - - - --- adjectives - - mkAdjective : (_,_,_ : Noun) -> Adjective = \bonus,bona,bonum -> { - s = table { - Masc => bonus.s ; - Fem => bona.s ; - Neutr => bonum.s - } - } ; - - adj12 : Str -> Adjective = \bonus -> - let - bon : Str = case bonus of { - pulch + "er" => pulch + "r" ; - bon + "us" => bon ; - _ => Predef.error ("adj12 does not apply to" ++ bonus) - } - in - mkAdjective (noun12 bonus) (noun1 (bon + "a")) (noun2um (bon + "um")) ; - - adj3x : (_,_ : Str) -> Adjective = \acer,acris -> - let - ac = Predef.tk 2 acer ; - acrise : Str * Str = case acer of { - _ + "er" => <ac + "ris", ac + "re"> ; - _ + "is" => <acer , ac + "e"> ; - _ => <acer , acer> - } - in - mkAdjective - (noun3adj acer acris Masc) - (noun3adj acrise.p1 acris Fem) - (noun3adj acrise.p2 acris Neutr) ; - - noun3adj : Str -> Str -> Gender -> Noun = \audax,audacis,g -> - let - audac = Predef.tk 2 audacis ; - audacem = case g of {Neutr => audax ; _ => audac + "em"} ; - audaces = case g of {Neutr => audac +"ia" ; _ => audac + "es"} ; - audaci = audac + "i" ; - in - mkNoun - audax audacem (audac + "is") audaci audaci audax - audaces audaces (audac + "ium") (audac + "ibus") - g ; - - --- smart paradigm - - adj123 : Str -> Str -> Adjective = \bonus,boni -> - case <bonus,boni> of { - <_ + ("us" | "er"), _ + "i"> => adj12 bonus ; - <_ + ("us" | "er"), _ + "is"> => adj3x bonus boni ; - <_ , _ + "is"> => adj3x bonus boni ; - _ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni) - } ; - - adj : Str -> Adjective = \bonus -> - case bonus of { - _ + ("us" | "er") => adj12 bonus ; - facil + "is" => adj3x bonus bonus ; - feli + "x" => adj3x bonus (feli + "cis") ; - _ => adj3x bonus (bonus + "is") ---- any example? - } ; - - --- verbs - - param - VActForm = VAct VAnter VTense Number Person ; - VPassForm = VPass VTense Number Person ; - VInfForm = VInfActPres | VInfActPerf ; - VImpForm = VImpPres Number | VImpFut2 Number | VImpFut3 Number ; - VGerund = VGenAcc | VGenGen |VGenDat | VGenAbl ; - VSupine = VSupAcc | VSupAbl ; - - VAnter = VSim | VAnt ; - VTense = VPres VMood | VImpf VMood | VFut ; - VMood = VInd | VConj ; - - oper - Verb : Type = { - act : VActForm => Str ; --- pass : VPassForm => Str ; - inf : VAnter => Str ; --- imp : VImpForm => Str ; --- ger : VGerund => Str ; --- sup : VSupine => Str ; --- partActPres : Adjective ; --- partActFut : Adjective ; --- partPassPerf : Adjective ; --- partPassFut : Adjective ; - } ; - - mkVerb : - (cela,cele,celab,celo,celant,celare,celavi,celatus,celabo,celabunt,celabi : Str) - -> Verb = - \cela,cele,celab,celo,celant,celare,celavi,celatus,celabo,celabunt,celabi -> - let - celav = init celavi - in { - act = table { - VAct VSim (VPres VInd) Sg P1 => celo ; - VAct VSim (VPres VInd) Pl P3 => celant ; - VAct VSim (VPres VInd) n p => cela + actPresEnding n p ; - VAct VSim (VPres VConj) n p => cele + actPresEnding n p ; - VAct VSim (VImpf VInd) n p => celab + "ba" + actPresEnding n p ; - VAct VSim (VImpf VConj) n p => celare + actPresEnding n p ; - VAct VSim VFut Sg P1 => celabo ; - VAct VSim VFut Pl P3 => celabunt ; - VAct VSim VFut n p => celabi + actPresEnding n p ; - VAct VAnt (VPres VInd) Pl P3 => celav + "erunt" ; - VAct VAnt (VPres VInd) n p => celavi + actPerfEnding n p ; - VAct VAnt (VPres VConj) n p => celav + "eri" + actPresEnding n p ; - VAct VAnt (VImpf VInd) n p => celav + "era" + actPresEnding n p ; - VAct VAnt (VImpf VConj) n p => celav + "isse" + actPresEnding n p ; - VAct VAnt VFut Sg P1 => celav + "ero" ; - VAct VAnt VFut n p => celav + "eri" + actPresEnding n p - } ; - inf = table { - VSim => celare ; - VAnt => celav + "isse" - } - } ; - - actPresEnding : Number -> Person -> Str = - useEndingTable <"m", "s", "t", "mus", "tis", "nt"> ; - - actPerfEnding : Number -> Person -> Str = - useEndingTable <"", "sti", "t", "mus", "stis", "erunt"> ; - - useEndingTable : (Str*Str*Str*Str*Str*Str) -> Number -> Person -> Str = - \es,n,p -> case n of { - Sg => case p of { - P1 => es.p1 ; - P2 => es.p2 ; - P3 => es.p3 - } ; - Pl => case p of { - P1 => es.p4 ; - P2 => es.p5 ; - P3 => es.p6 - } - } ; - - esse_V : Verb = - let - esse = mkVerb "es" "si" "era" "sum" "sunt" "esse" "fui" "*futus" - "ero" "erunt" "eri" ; - in { - act = table { - VAct VSim (VPres VInd) Sg P2 => "es" ; - VAct VSim (VPres VInd) Pl P1 => "sumus" ; - v => esse.act ! v - } ; - inf = esse.inf - } ; - - verb1 : Str -> Verb = \celare -> - let - cela = Predef.tk 2 celare ; - cel = init cela ; - celo = cel + "o" ; - cele = cel + "e" ; - celavi = cela + "vi" ; - celatus = cela + "tus" ; - in mkVerb cela cele cela celo (cela + "nt") celare celavi celatus - (cela + "bo") (cela + "bunt") (cela + "bi") ; - - verb2 : Str -> Verb = \habere -> - let - habe = Predef.tk 2 habere ; - hab = init habe ; - habeo = habe + "o" ; - habea = habe + "a" ; - habui = hab + "ui" ; - habitus = hab + "itus" ; - in mkVerb habe habea habe habeo (habe + "nt") habere habui habitus - (habe + "bo") (habe + "bunt") (habe + "bi") ; - - verb3 : (_,_,_ : Str) -> Verb = \gerere,gessi,gestus -> - let - gere = Predef.tk 2 gerere ; - ger = init gere ; - gero = ger + "o" ; - geri = ger + "i" ; - gera = ger + "a" ; - in mkVerb geri gera gere gero (ger + "unt") gerere gessi gestus - (ger + "am") (ger + "ent") gere ; - - verb3i : (_,_,_ : Str) -> Verb = \iacere,ieci,iactus -> - let - iac = Predef.tk 3 iacere ; - iaco = iac + "io" ; - iaci = iac + "i" ; - iacie = iac + "ie" ; - iacia = iac + "ia" ; - in mkVerb iaci iacia iacie iaco (iaci + "unt") iacere ieci iactus - (iac + "iam") (iac + "ient") iacie ; - - verb4 : (_,_,_ : Str) -> Verb = \sentire,sensi,sensus -> - let - senti = Predef.tk 2 sentire ; - sentio = senti + "o" ; - sentia = senti + "a" ; - sentie = senti + "e" ; - in mkVerb senti sentia sentie sentio (senti + "unt") sentire sensi sensus - (senti + "am") (senti + "ent") sentie ; - - --- smart paradigms - - verb_pppi : (iacio,ieci,iactus,iacere : Str) -> Verb = - \iacio,ieci,iactus,iacere -> - case iacere of { - _ + "are" => verb1 iacere ; - _ + "ire" => verb4 iacere ieci iactus ; - _ + "ere" => case iacio of { - _ + "eo" => verb2 iacere ; - _ + "io" => verb3i iacere ieci iactus ; - _ => verb3 iacere ieci iactus - } ; - _ => Predef.error ("verb_pppi: illegal infinitive form" ++ iacere) - } ; - - verb : (iacere : Str) -> Verb = - \iacere -> - case iacere of { - _ + "are" => verb1 iacere ; - _ + "ire" => let iaci = Predef.tk 2 iacere - in verb4 iacere (iaci + "vi") (iaci + "tus") ; - _ + "ere" => verb2 iacere ; - _ => Predef.error ("verb: illegal infinitive form" ++ iacere) - } ; - --- pronouns - - Pronoun : Type = { - s : Case => Str ; - g : Gender ; - n : Number ; - p : Person ; - } ; - - mkPronoun : (_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pronoun = - \ego,me,mei,mihi,mee,g,n,p -> { - s = pronForms ego me mei mihi mee ; - g = g ; - n = n ; - p = p - } ; - - pronForms : (_,_,_,_,_ : Str) -> Case => Str = - \ego,me,mei,mihi,mee -> table Case [ego ; me ; mei ; mihi ; mee ; ego] ; - - personalPronoun : Gender -> Number -> Person -> Pronoun = \g,n,p -> { - s = case <g,n,p> of { - <_,Sg,P1> => pronForms "ego" "me" "mei" "mihi" "me" ; - <_,Sg,P2> => pronForms "tu" "te" "tui" "tibi" "te" ; - <_,Pl,P1> => pronForms "nos" "nos" "nostri" "nobis" "nobis" ; --- nostrum - <_,Pl,P2> => pronForms "vos" "vos" "vestri" "vobis" "vobis" ; --- vestrum - <Masc, Sg,P3> => pronForms "is" "eum" "eius" "ei" "eo" ; - <Fem, Sg,P3> => pronForms "ea" "eam" "eius" "ei" "ea" ; - <Neutr,Sg,P3> => pronForms "id" "id" "eius" "ei" "eo" ; - <Masc, Pl,P3> => pronForms "ii" "eos" "eorum" "iis" "iis" ; - <Fem, Pl,P3> => pronForms "ii" "eas" "earum" "iis" "iis" ; - <Neutr,Pl,P3> => pronForms "ea" "ea" "eorum" "iis" "iis" - } ; - g = g ; - n = n ; - p = p - } ; - - Preposition : Type = {s : Str ; c : Case} ; - - VP : Type = { - fin : VActForm => Str ; - inf : VAnter => Str ; - obj : Str ; - adj : Gender => Number => Str - } ; - - VPSlash = VP ** {c2 : Preposition} ; - - predV : Verb -> VP = \v -> { - fin = v.act ; - inf = v.inf ; - obj = [] ; - adj = \\_,_ => [] - } ; - - predV2 : (Verb ** {c : Preposition}) -> VPSlash = \v -> predV v ** {c2 = v.c} ; - - appPrep : Preposition -> (Case => Str) -> Str = \c,s -> c.s ++ s ! c.c ; - - insertObj : Str -> VP -> VP = \obj,vp -> { - fin = vp.fin ; - inf = vp.inf ; - obj = obj ++ vp.obj ; - adj = vp.adj - } ; - - insertAdj : (Gender => Number => Case => Str) -> VP -> VP = \adj,vp -> { - fin = vp.fin ; - inf = vp.inf ; - obj = vp.obj ; - adj = \\g,n => adj ! g ! n ! Nom ++ vp.adj ! g ! n - } ; - - Clause = {s : VAnter => VTense => Polarity => Str} ; - - mkClause : Pronoun -> VP -> Clause = \np,vp -> { - s = \\a,t,p => np.s ! Nom ++ vp.obj ++ vp.adj ! np.g ! np.n ++ negation p ++ - vp.fin ! VAct a t np.n np.p - } ; - - negation : Polarity -> Str = \p -> case p of { - Pos => [] ; - Neg => "non" - } ; - --- determiners - - Determiner : Type = { - s,sp : Gender => Case => Str ; - n : Number - } ; - - Quantifier : Type = { - s,sp : Number => Gender => Case => Str ; - } ; - - mkQuantifG : (_,_,_,_,_ : Str) -> (_,_,_,_ : Str) -> (_,_,_ : Str) -> - Gender => Case => Str = - \mn,ma,mg,md,mab, fno,fa,fg,fab, nn,ng,nab -> table { - Masc => pronForms mn ma mg md mab ; - Fem => pronForms fno fa fg md fab ; - Neutr => pronForms nn nn ng md nab - } ; - - mkQuantifier : (sg,pl : Gender => Case => Str) -> Quantifier = \sg,pl -> - let ssp = table {Sg => sg ; Pl => pl} - in { - s = ssp ; - sp = ssp - } ; - - hic_Quantifier = mkQuantifier - (mkQuantifG - "hic" "hunc" "huius" "huic" "hoc" "haec" "hanc" "huius" "hac" "hoc" "huius" "hoc") - (mkQuantifG - "hi" "hos" "horum" "his" "his" "hae" "has" "harum" "his" "haec" "horum" "his") - ; - - ille_Quantifier = mkQuantifier - (mkQuantifG - "ille" "illum" "illius" "illi" "illo" - "illa" "illam" "illius" "illa" - "illud" "illius" "illo") - (mkQuantifG - "illi" "illos" "illorum" "illis" "illis" - "illae" "illas" "illarum" "illis" - "illa" "illorum" "illis") - ; - - mkPrep : Str -> Case -> {s : Str ; c : Case} = \s,c -> {s = s ; c = c} ; - -} - |
