diff options
Diffstat (limited to 'next-lib/src/interlingua/ResIna.gf')
| -rw-r--r-- | next-lib/src/interlingua/ResIna.gf | 355 |
1 files changed, 0 insertions, 355 deletions
diff --git a/next-lib/src/interlingua/ResIna.gf b/next-lib/src/interlingua/ResIna.gf deleted file mode 100644 index e464db6b4..000000000 --- a/next-lib/src/interlingua/ResIna.gf +++ /dev/null @@ -1,355 +0,0 @@ ---# -path=.:../abstract:../common:../prelude - ---1 Interlingua auxiliary operations. - --- This module contains operations that are needed to make the --- resource syntax work. To define everything that is needed to --- implement $Test$, it moreover contains regular lexical --- patterns needed for $Lex$. - -resource ResIna = ParamX ** open Prelude in { - - flags optimize=all ; - - - -- Some parameters, such as $Number$, are inherited from $ParamX$. - - --2 For $Noun$ - - -- This is the worst-case $Case$ needed for pronouns. - - param - Case = Nom | Acc | Gen | Dat | Abl ; - -- Why do we need so many cases? - -- Interlingua has (optional) contractions: - -- "a le" -> "al" - -- "de le" -> "del" - -- so, we can't get away with mere prepositions "a" and "de" - -- but use Dative and Ablative to represent those. - -- Pronouns have different forms in Nominative and Accusative. - -- Genitive is used for possesives (which can also be pronominalized) - - oper - casePrep : Str -> Case -> Str = \prep,cas -> case cas of { - Dat => "a"; - Gen | Abl => "de"; - _ => prep - }; - - - --2 For $Verb$ - - -- These 7 forms are more than we need. (esser is irregular - -- only in pres, past, fut, cond so we could do with 5, but it makes - -- easy to reason about what happens.) - - param - VForm - = VInf - | VPres - | VPPart - | VPresPart - | VPast --# notpresent - | VFut --# notpresent - | VCond --# notpresent - ; - - param - VVariant - = VMono -- "creava" - | VSplit -- "ha create" -- !!! This is not implemented. One reason is that the split forms overlap with aux verb + participle as ajective. (Anterior form) - ; - - -- The order of sentence is needed already in $VP$. - Order = ODir | OQuest ; - - --2 For $Adjective$ - - AForm = AAdj Degree | AAdv ; - - --2 For $Relative$ - - -- RAgr = RNoAg | RAg {n : Number ; p : Person} ; - -- RCase = RPrep | RC Case ; - - --2 For $Numeral$ - - CardOrd = NCard | NOrd ; - DForm = unit | ten ; - - --2 Transformations between parameter types - - oper - Agr = {n : Number ; p : Person} ; - -- This is the agreement record for verb phrases, which is needed only for reflexive verbs. - - agrP3 : Number -> Agr = \n -> - {n = n ; p = P3} ; - - conjAgr : Agr -> Agr -> Agr = \a,b -> { - n = conjNumber a.n b.n ; - p = conjPerson a.p b.p - } ; - - - -- For each lexical category, here are the worst-case constructors. - mkAdjective : (_,_,_ : Str) -> {s : AForm => Str} = - \bon,melior,optime -> - let mente = case last bon of - {"c" => "amente"; - _ => "mente" - } - in { - s = table { - AAdj Posit => bon ; - AAdj Compar => melior ; - AAdj Superl => optime ; - AAdv => bon + mente - } - } ; - - - mkVerb : Str -> Verb = \crear-> - let crea = init crear - in {isRefl = False; - s = table { - VInf => crear; - VPres => crea; - VPast => crea + "va"; --# notpresent - VFut => crear + "a"; --# notpresent - VCond => crear + "ea"; --# notpresent - VPPart => case crear of { - rid + "er" => rid + "ite"; - _ => crea + "te" - }; - VPresPart => case crear of { - aud + "ir" => aud + "iente"; - _ => crea + "nte" - }}}; - - -- + The 3 (optionally) irregular verbs. (we only need haberV in this module) - esserV : Bool => Verb = \\use_irreg => - let reg = mkVerb "esser" - in {isRefl = False; - s = case use_irreg of { - True => table { - VPres => "es"; - VFut => "sera"; --# notpresent - VCond => "serea"; --# notpresent - VPast => "era"; --# notpresent - form => reg.s!form - }; - False => reg.s - } - }; - - haberV : Bool => Verb = \\use_irreg => - let reg = mkVerb "haber" - in {isRefl = False; - s = case use_irreg of { - True => table { - VPres => "ha"; - form => reg.s!form - }; - False => reg.s - } - }; - - vaderV : Bool => Verb = \\use_irreg => - let reg = mkVerb "vader" - in {isRefl = False; - s = case use_irreg of { - True => table { - VPres => "va"; - form => reg.s!form - }; - - False => reg.s - } - }; - - - mkIP : Str -> Number -> {s : Case => Str ; n : Number} = \qui,n -> {s = \\c=>casePrep [] c ++ qui; n = n}; - - mkPron : (io,me,mi : Str) -> Agr -> NP ** {possForm : Str} = - \io,me,mi,a -> - let mie = case last mi of { - "e" => mi; - _ => mi + "e" - } in - { - a = a; - s = table { - Nom => io ; - Gen => mie ; - _ => me - } ; - possForm = mi; - isPronoun = True - } ; - - - Sp1 : Agr = {n = Sg ; p = P1}; - Sp2 : Agr = {n = Sg ; p = P2}; - Sp3 : Agr = {n = Sg ; p = P3}; - Pp1 : Agr = {n = Pl ; p = P1}; - Pp2 : Agr = {n = Pl ; p = P2}; - Pp3 : Agr = {n = Pl ; p = P3}; - - -- make an invariant NP (not inflected) - mkInvarNP : Str -> NP = \str -> {a = Sp3; isPronoun = False; s = \\_=> str}; - - regNP : Str -> NP = mkInvarNP; - - artIndef = "un"; - artDef = "le" ; - - -- For $Verb$. - Verb : Type = { - s : VForm => Str ; - isRefl : Bool - } ; - - -- Dependency on Agr is there only because of reflexive pronouns! - VP : Type = { - s : Anteriority => Tense => Bool => {fin, inf : Str} ; - rest : Agr => Str; -- comes after the infinite part - clitics : Agr => Str; -- can be placed just before the finite or right after the infinite - prp : Str ; -- present participle (unused at the moment ???) - inf : Str ; -- the infinitive form ; VerbForms would be the logical place - } ; - NP : Type = { - isPronoun : Bool; - s : Case => Str; - a : Agr; - }; - -- Noun phrase that can be declined in person and number. (for reflexive pronouns) - NP' : Type = { - isPronoun : Bool; - s : Agr => Case => Str; - }; - - predV_ : (Bool => Verb) -> VP = \verb -> { - clitics = \\_ => []; - rest = \\_ => []; - s = table - {Simul => \\t,use_irreg => {fin = (verb!use_irreg).s ! (tenseToVFrom!t); inf = []} - ; --# notpresent - Anter => \\t,use_irreg => {fin = (haberV!use_irreg).s ! (tenseToVFrom!t); inf = (verb!use_irreg).s!VPPart} --# notpresent - }; - prp = (verb!False).s ! VPresPart; - inf = (verb!False).s ! VInf; - }; - - predV : Verb -> VP = \verb -> predV_ (\\_ => verb) ; - - tenseToVFrom = table { - Pres => VPres - ;Past => VPast; --# notpresent - Fut => VFut; --# notpresent - Cond => VCond --# notpresent - }; - - insertInvarObj : Str -> VP -> VP = \obj -> insertObj "" Acc (mkInvarNP obj); - - insertObj : Str -> Case -> NP -> VP -> VP - = \prep,c,obj,vp -> insertReflObj prep c {isPronoun = obj.isPronoun; s = \\agr => obj.s} vp; - - insertReflObj : Str -> Case -> NP' -> VP -> VP = \prep,c,obj,vp -> case obj.isPronoun of - { - -- !!! if the preposition is not empty, or - -- if the case is not [Dat, Acc] - -- then the pronoun cannot be inserted as a clitic. - True => { - inf = vp.inf; - prp = vp.prp; - s = vp.s; - clitics = \\agr => obj.s!agr!c ++ vp.clitics!agr; -- clitics are inserted in reverse order. - rest = vp.rest}; - False => { - inf = vp.inf; - prp = vp.prp; - s = vp.s; - clitics = vp.clitics; - rest = \\agr => vp.rest!agr ++ prep ++ obj.s!agr!c; - } }; - - infVP : VP -> Str = \vp -> variants { - vp.clitics ! Sp3 ++ vp.inf ++ vp.rest ! Sp3 ; - vp.inf ++ vp.clitics ! Sp3 ++ vp.rest ! Sp3 ; - }; - - posneg : Polarity -> Str = \b -> case b of { - Pos => [] ; - Neg => "non" - } ; - - - reflPron : Agr => Str = table { - {n = Sg ; p = P1} => "me" ; - {n = Sg ; p = P2} => "te" ; - {n = Sg ; p = P3} => "se" ; - {n = Pl ; p = P1} => "nos" ; - {n = Pl ; p = P2} => "vos" ; - {n = Pl ; p = P3} => "se" - } ; - - ---- For $Sentence$. - -- - Clause = {s : Bool => Tense => Anteriority => Polarity => Order => Str} ; - - mkClause : Str -> Agr -> VP -> Clause = - \subj,agr,vp -> - { - s = \\use_irreg,t,anter,b => - let v = vp.s!anter!t!use_irreg - in case use_irreg of { - True => table { - ODir => subj ++ posneg b ++ v.fin ++ v.inf ++ vp.clitics!agr ++ vp.rest!agr; - OQuest => posneg b ++ v.fin ++ subj ++ v.inf ++ vp.clitics!agr ++ vp.rest!agr - } ; - False => table { - ODir => subj ++ posneg b ++ vp.clitics!agr ++ v.fin ++ v.inf ++ vp.rest!agr; - OQuest => posneg b ++ vp.clitics!agr ++ v.fin ++ subj ++ v.inf ++ vp.rest!agr - } - } - }; - - - mkQuestion : - {s : Str} -> Clause -> Clause = \qu,cl -> - {s=\\use_irreg,t,a,p,o => qu.s ++ cl.s ! use_irreg ! t ! a ! p ! o}; - - - - -- For $Numeral$. - - oper mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = - \duo,vinti,secunde,vintesime-> - {s = table { unit => table { - NCard => duo ; - NOrd => secunde}; - ten => table { - NCard => vinti; - NOrd => vintesime}}} ; - - oper regNum : Str -> Str -> {s : DForm => CardOrd => Str} = - \cinque,quinte -> - let cinqu : Str = case cinque of { - nov + "em"=> nov; - cinq_ + "e" => cinq_; - cinq_ + "o" => cinq_; - sex => sex} - in mkNum cinque quinte (cinqu + "anta") (cinqu + "esime"); - - regOrd : Str -> Str = \cent -> case cent of { - mill + "e" => mill + "esime"; - _ => cent + "esime"}; - - regCardOrd : Str -> {s : CardOrd => Str} = \ten -> - {s = table {NCard => ten ; NOrd => regOrd ten}} ; - - mkCard : CardOrd -> Str -> Str = \c,ten -> - (regCardOrd ten).s ! c ; - -} |
