--# -path=.:../abstract:../common:../../prelude resource ResGre = ParamX ** open Prelude in { flags coding= utf8 ; param Case = Nom | Gen | Acc | Vocative | CPrep Prepos; Gender = Masc | Fem | Neut | Change; Agr = Ag Gender Number Person ; Mood = Ind | Con | Hortative; TTense = TPres | TPast | TFut | TCond | TImperf ; CardOrd = NCard Gender Case| NCardX | NOrd Gender Number Case ; DForm = unit | teen | ten | hundr isVowel ; isVowel = Is | isNot ; Aspect = Perf | Imperf ; Order = Main | Inv ; Form = Weak |Emphatic ; VForm = VPres Mood Number Person Voice Aspect| VPast Mood Number Person Voice Aspect| VNonFinite Voice| VImperative Aspect Number Voice| Gerund | Participle Degree Gender Number Case; Voice = Active | Passive; Prepos = P_se | PNul | P_Dat; oper AAgr : Type = {g : Gender ; n : Number} ; VP = { v : Verb ; clit,clit2 : Str ; comp : Agr => Str ; isNeg : Bool ; voice : Voice ; aspect :Aspect} ; NounPhrase = { s : Case => {c1,c2,comp : Str ; isClit : Bool } ; a : Agr ;isNeg:Bool} ; Noun : Type = {s : Number => Case => Str ; g : Gender} ; Adj : Type = {s : Degree => Gender => Number => Case => Str ; adv : Degree => Str } ; Adv : Type = {s : Str } ; Verb : Type = {s : VForm => Str } ; Det : Type = {s : Gender => Case => Str ; n : Number}; PName : Type = {s : Number => Case => Str ; g : Gender} ; Pronoun : Type = { s : Case => {c1,c2,comp : Str ; isClit : Bool } ; a : Agr; poss : Str } ; Preposition = {s : Str ; c : Case} ; Quantifier = {s : Bool => Gender => Number => Case => Str ; sp : Gender => Number => Case => Str ; isNeg:Bool } ; Compl : Type = {s : Str ; c : Case ; isDir : Bool} ; prepCase : Case -> Str ; prepositionse : Case = CPrep P_se ; dative : Case = CPrep P_Dat; possCase : Gender -> Number -> Case -> Str ; possCase = artDef ; prepCase : Case -> Str = \c -> case c of { Nom =>[]; Acc =>[]; Gen =>[]; Vocative => [] ; CPrep P_se => elisSe ; CPrep PNul => [] ; CPrep P_Dat => [] } ; npPol : Bool -> Det -> NounPhrase = \isNeg, n -> heavyNPpol isNeg { s = \\c => prepCase c ++ n.s ! Masc ! c; a = agrP3 Masc n.n } ; nppolPos : Det -> NounPhrase = npPol False ; nppolNeg : Det -> NounPhrase = npPol True ; mkPron: (aftos, tou,ton ,afton,aftou : Str) -> Gender -> Number -> Person -> Pronoun = \aftos, tou,ton,afton,aftou, g,n,p -> let seafton : Case -> Str = \x -> prepCase x ++ afton ; in { s = table { Nom => {c1 = [] ; c2 = []; comp = aftos; isClit = False} ; Gen => {c1 = tou ; c2 = [] ;comp = []; isClit = True} ; Acc => {c1 = [] ; c2 = ton; comp = [] ; isClit = True} ; CPrep P_Dat => {c1 = [] ;c2 = []; comp = aftou ; isClit = False} ; CPrep P_se => {c1 = [] ;c2 = []; comp = seafton (CPrep P_se) ; isClit = False} ; CPrep PNul => {c1 = [] ;c2 = []; comp = afton ; isClit = False} ; Vocative => {c1 = [] ; c2 = []; comp = [] ; isClit = False} } ; poss = tou ; g = g; a = Ag g n p } ; ---to use the emphatic forms of the pronouns in conjunctions----- conjunctCase : Case -> Case ; conjunctCase : Case -> Case = \c -> case c of { Acc => CPrep PNul ; _ => c } ; heavyNP : {s : Case => Str ; a : Agr} -> NounPhrase = heavyNPpol False ; heavyNPpol : Bool -> {s : Case => Str ; a : Agr} -> NounPhrase = \isNeg,np -> { s = \\c => {comp = np.s ! c ; c1 = []; c2 = []; isClit = False ;} ; a = np.a ; isNeg = isNeg } ; complAcc : Compl = {s = [] ; c = Acc ; isDir = True} ; complGen : Compl = {s = [] ; c = Gen ; isDir = False} ; complDat : Compl = {s = [] ; c = dative ; isDir = False} ; complPrepSe : Compl = {s = [] ; c = prepositionse ; isDir = False} ; mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ; appCompl : Compl -> NounPhrase -> Str = \comp,np -> comp.s ++ (np.s ! comp.c).comp ; predVP : Str -> Agr -> VP -> {s : Order => TTense => Anteriority => Polarity => Mood => Str} = predVPPol False ; predVPPol : Bool -> Str -> Agr -> VP -> {s : Order => TTense => Anteriority => Polarity => Mood => Str} = \subjpol, subj,agr,vp -> let comp = vp.comp ! agr ; clit = vp.clit ; clit2=vp.clit2; verb : Mood -> Voice -> Aspect-> TTense => Str = \m, vo ,as-> table { TCond => agrV auxVerb m vo as TPres agr ++ vp.v.s ! VNonFinite vo; TImperf => agrV auxVerb m vo as TPast agr ++ vp.v.s ! VNonFinite vo; t => agrV vp.v m vo as t agr } ; in { s = \\o,t,ant, p, m => let negpm = case orB subjpol vp.isNeg of { True => neg Neg m ; _ => neg p m } ; vo = vp.voice ; as = vp.aspect ; in case of { => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as ! t ++ comp; => negpm ++ clit ++ clit2 ++ verb m vo as ! t ++ subj ++ comp ; => subj ++ negpm ++ clit ++ clit2++ verb m vo as! TCond ++ comp ; => negpm ++ clit ++ clit2 ++ verb m vo as ! TCond ++ subj ++ comp ; => subj ++ negpm ++ "θα" ++ clit ++ clit2 ++verb m vo as! t ++ comp ; => negpm ++ "θα"++ clit ++ clit2++ verb m vo as! t ++ subj ++ comp ; => subj ++ negpm ++ "θα" ++ clit ++ clit2 ++ verb m vo as! TCond ++ comp ; => negpm ++"θα" ++ clit ++ clit2 ++ verb m vo as! TCond ++ subj ++ comp ; => subj ++ negpm ++ "θα" ++ clit ++ verb m vo Imperf! TPast ++ comp ; => negpm ++ "θα" ++ clit ++ clit2 ++ verb m vo Imperf ! TPast ++ subj ++ comp ; => subj ++ negpm ++ "θα"++ clit ++ clit2 ++ verb m vo as! TImperf ++ comp ; => negpm ++ "θα" ++clit ++ clit2 ++ verb m vo as! TImperf ++ subj ++comp ; => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as! TPast ++ comp ; => negpm ++ clit ++ clit2 ++ verb m vo as! TPast ++ subj ++ comp ; => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as!TImperf ++ comp; => negpm ++ clit ++ clit2 ++ verb m vo as!TImperf ++ subj ++comp ; <_, TImperf,Simul,Ind> => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as! t ++ comp ; <_, TImperf,Anterior,Ind> => negpm ++ clit ++ clit2 ++ verb m vo as! TImperf ++ subj ++ comp ; <_, _,_,Con> => subj ++ "να" ++ negpm ++ clit ++ clit2 ++ verb m vo as! t ++ comp ; => subj ++ "ας" ++ negpm ++ clit ++ clit2 ++ verb m vo as! t ++ comp ; => "ας" ++ negpm ++ clit ++ clit2 ++ verb m vo as! t ++ subj ++ comp } } ; neg : Polarity -> Mood -> Str = \p,m -> case p of { Pos => [] ; Neg => case m of { Ind => "δεν" ; Con |Hortative => "μήν" } } ; agrV : Verb -> Mood -> Voice -> Aspect -> TTense -> Agr -> Str = \v,m,vo,as, t,a -> case a of { Ag _ n p => case of { => v.s ! VPast Ind n p Active Perf ; => v.s ! VPast Ind n p Passive Perf ; => v.s ! VPast m n p Active Imperf; => v.s ! VPast m n p Passive Imperf; => v.s ! VPres Ind n p Active Imperf; => v.s ! VPres Ind n p Passive Imperf; => v.s ! VPres Con n p Active Perf; => v.s ! VPres Con n p Passive Perf; => v.s ! VPast m n p Active Imperf; => v.s ! VPast m n p Passive Imperf; => v.s ! VPres m n p Active Perf; => v.s ! VPres m n p Passive Perf; _ => v.s ! VPres m n p vo Perf } } ; predV : Verb -> VP = \v -> { v = v ; clit = [] ; clit2 = [] ; comp = \\a => [] ; isNeg = False; voice = Active ; aspect = Perf ; } ; ------------Agreements ------------- agrFeatures : Agr -> {g : Gender ; n : Number ; p : Person} = \a -> case a of {Ag g n p => {g = g ; n = n ; p = p }} ; complAgr : Agr -> {g : Gender ; n : Number} = \a -> case a of { Ag g n _ => {g = g ; n = n} } ; verbAgr : Agr -> {g : Gender ; n : Number ; p : Person} = \a -> case a of { Ag g n p => {g = g ; n = n ; p = p} } ; clitAgr : Agr -> { n : Number ; p : Person} = \a -> case a of { Ag _ n p => { n = n; p = p} } ; agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n P3 ; aagr : Gender -> Number -> AAgr = \g,n -> {g = g ; n = n} ; ---- Conjunction Agreements---- conjAgr : Number -> Agr -> Agr -> Agr = \n,xa,ya -> let x = agrFeatures xa ; y = agrFeatures ya in Ag (conjGender x.g y.g) (conjNumber (conjNumber x.n y.n) n) (conjPPerson x.p y.p) ; conjGender : Gender -> Gender -> Gender = \m,n -> case m of { Fem => n ; _ => Masc } ; conjPPerson : Person -> Person -> Person = \p,q -> case of { <_,P1> | <_,P2> => P1 ; => P1 ; => P2 ; => P3 }; insertObject : Compl -> NounPhrase -> VP -> VP = \c,np,vp -> let obj = np.s ! c.c ; in { v = vp.v ; clit = vp.clit ++ obj.c1 ; clit2 = vp.clit2 ++ obj.c2; comp = \\a => c.s ++ obj.comp ++ vp.comp ! a ; isNeg = orB vp.isNeg np.isNeg ; voice = vp.voice ; aspect = vp.aspect ; } ; insertComplement : (Agr => Str) -> VP -> VP = \co,vp -> { v = vp.v ; clit = vp.clit ; clit2 = vp.clit2 ; isNeg = vp.isNeg ; comp = \\a => vp.comp ! a ++ co ! a ; voice = vp.voice ; aspect = vp.aspect ; } ; insertAdv : Str -> VP -> VP = \co,vp -> { v = vp.v ; clit = vp.clit ; clit2 = vp.clit2 ; comp = \\a => vp.comp ! a ++ co ; isNeg = vp.isNeg ; voice = vp.voice ; aspect = vp.aspect ; } ; insertAdV : Str -> VP -> VP = \co,vp -> { v = vp.v ; clit = vp.clit ; clit2 = vp.clit2 ; comp =\\a => co ++ vp.comp ! a ; isNeg = vp.isNeg ; voice = vp.voice ; aspect = vp.aspect ; } ; ----------Formation of Proper Names ---------- mkName :(s1,_,_,_,_,_ : Str) -> Gender -> PName = \nm,gm,am,vm,pn,pg, g -> { s = table { Sg => table { Nom => nm ; Gen |CPrep P_Dat => gm ; Acc |CPrep P_se |CPrep PNul => am ; Vocative => vm } ; Pl => table { Nom | Vocative |Acc |CPrep P_se |CPrep PNul => pn ; Gen |CPrep P_Dat => pg } } ; g = g } ; ----------Regular Proper Names---------- regName: Str -> PName = \Giannis-> case Giannis of { Giann + "ης" => mkName Giannis (Giann + "η") (Giann + "η") (Giann + "η") (Giann + "ηδες") (Giann + "ηδων") Masc ; Kost + "ής" => mkName Giannis (Kost + "ή") (Kost + "ή") (Kost + "ή")(Kost + "ήδες") (Kost + "ήδων") Masc ; Giorg + "ος" => mkName Giannis (Giorg + "ου") ( Giorg + "ο") (Giorg + "ο") (Giorg + "ηδες") ( Giorg + "ηδων") Masc ; Kost + "ας" => mkName Giannis (Kost + "α") (Kost + "α") (Kost + "α")(Kost + "ηδες") (Kost + "ηδων") Masc ; Mari + "α" => mkName Giannis (Mari + "ας") (Mari + "α") (Mari + "α")(Mari + "ες") (Mari + "ων") Fem ; Elen + "η" => mkName Giannis (Elen + "ης") (Elen + "η") (Elen + "η")(Elen + "ες") (Elen + "ων") Fem ; Fros + "ω" => mkName Giannis (Fros + "ως") (Fros + "ω") (Fros + "ω") ("") ("")Fem ; Mirt + "ώ" => mkName Giannis (Mirt + "ώς") (Mirt + "ώ") (Mirt + "ώ") ("")("")Fem ; Londin + "ο" => mkName Giannis (Londin + "ου") (Londin + "ο") (Londin + "ο") (Londin + "α") (Londin + "ων") Neut ; Paris + "ι" => mkName Giannis (mkStemNouns Paris + "ιού") (Paris + "ι") (Paris + "ι")(Paris + "ια") (mkStemNouns Paris + "ιών") Neut }; ----------Regular Proper Names that change their Vocative ending-------------- regName2: Str -> PName = \s-> case s of { Alexandr + "ος" => mkName s (Alexandr + "ου") (Alexandr + "ο") (Alexandr + "ε")(Alexandr + "οι") (Alexandr + "ων") Masc ; Isimerin + "ός" => mkName s (Isimerin + "ού") ( Isimerin + "ό") (Isimerin + "έ") (Isimerin + "οί") ( Isimerin + "ών") Masc }; ---------------NOUNS ------------------------------------ --------------------------------------------------------- mkNoun : (s1,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = \sn,sg,sa,sv,pn,pg,pa,pv, g -> { s = table { Sg => table { Nom => sn ; Gen |CPrep P_Dat=> sg ; Acc |CPrep P_se |CPrep PNul => sa ; Vocative => sv } ; Pl => table { Nom => pn ; Gen |CPrep P_Dat=> pg ; Acc |CPrep P_se |CPrep PNul => pa; Vocative => pv } } ; g = g } ; ------Masculine nouns in -ης, irregular -------------------- mkNoun_prytanis : (s1,_ : Str) -> Gender -> Noun = \prytanis, prytaneon, g -> let prytani = init prytanis; prytAn = Predef.tk 3 prytaneon ; in { s = table { Sg => table { Nom => prytanis ; Gen |CPrep P_Dat=> prytani ; Acc | Vocative|CPrep P_se |CPrep PNul => prytani } ; Pl => table { Nom => prytAn + "εις" ; Gen |CPrep P_Dat=> prytaneon ; Acc | Vocative |CPrep P_se |CPrep PNul => prytAn + "εις" } } ; g = g } ; ------Masculine nouns in -ς, irregular -------------------- mkNoun_mys : (s1,_ : Str) -> Gender -> Noun = \mys, myon, g -> let my = init mys; in { s = table { Sg => table { Nom => mys ; Gen |CPrep P_Dat=> my ; Acc |CPrep P_se |CPrep PNul => mys; Vocative => [] } ; Pl => table { Nom => my + "ες" ; Gen |CPrep P_Dat=> myon ; Acc |CPrep P_se |CPrep PNul => my + "ες" ; Vocative => [] } } ; g = g } ; ------Masculine nouns -ος parisyllabic, stressing in the penultimate syllable in genSg and acc/genPl-------------------- mkNoun_anthropos : (s1,_ : Str) -> Gender -> Noun = \anthropos, anthropon, g -> let anthrop = Predef.tk 2 anthropos ; anthrOp = Predef.tk 2 anthropon ; in { s = table { Sg => table { Nom => anthropos ; Gen |CPrep P_Dat=> anthrOp + "ου" ; Acc |CPrep P_se |CPrep PNul => anthrop + "ο"; Vocative => anthrop + "ε" } ; Pl => table { Nom | Vocative=> anthrop + "οι" ; Gen |CPrep P_Dat=> anthropon ; Acc |CPrep P_se |CPrep PNul => anthrOp + "ους" } } ; g = g } ; ------Masculine nouns in -as(-ias, -istas), parisyllabic, with genPL with the stress on the penultimate syllable. ----------- mkNoun_filakas : (s1,_ : Str) -> Gender -> Noun = \filakas, filakon, g -> let filak = Predef.tk 2 filakas ; in { s = table { Sg => table { Nom => filakas ; Gen |CPrep P_Dat| Acc | Vocative |CPrep P_se |CPrep PNul => mkGenSg filakas } ; Pl => table { Nom |Acc | Vocative|CPrep P_se |CPrep PNul => mkNomPl filakas ; Gen|CPrep P_Dat => filakon } } ; g = g } ; ------Masculine nouns in -as,, parisyllabic, with genPL with the stress on the penultimate or the final syllable. ----------- mkNoun_touristas : (s1: Str) -> Gender -> Noun = \touristas, g -> let tourist = Predef.tk 2 touristas ; in { s = table { Sg => table { Nom => touristas ; Gen |CPrep P_Dat=> mkGenSg touristas; Acc | Vocative|CPrep P_se |CPrep PNul => mkAccSg touristas } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => mkNomPl touristas; Gen|CPrep P_Dat => mkGen touristas } } ; g = g } ; ----------------Masculine nouns in -ης , imparisyllabic , augmenting syllables.-------------- mkNoun_fournaris : (s1,_ : Str) -> Gender -> Noun = \fournaris, fournarides, g -> let fournar = Predef.tk 2 fournaris ; fournAr = Predef.tk 4 fournarides ; in { s = table { Sg => table { Nom => fournaris ; Gen |CPrep P_Dat| Acc | Vocative|CPrep P_se |CPrep PNul => mkGenSg fournaris } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> fournarides ; Gen|CPrep P_Dat => fournAr + "ηδων" } } ; g = g } ; ----------------Feminine nouns in -α ,parisyllabic.-------------- mkNoun_thalassa : (s: Str) -> Gender -> Noun = \thalassa, g -> let thalass = init thalassa ; in { s = table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => thalassa ; Gen|CPrep P_Dat => mkGenSg thalassa } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => thalass + "ες" ; Gen|CPrep P_Dat => mkGen thalassa } } ; g = g } ; ----------------Feminine nouns in -η with plural in -εις with stress movement-------------- mkNoun_kivernisi : (s1,_ : Str) -> Gender -> Noun = \kivernisi, kiverniseis, g -> let kivernis = init kivernisi ; kivernIs = Predef.tk 3 kiverniseis ; in { s = table { Sg => table { Nom |Acc | Vocative|CPrep P_se |CPrep PNul => kivernisi ; Gen |CPrep P_Dat=> kivernis + "ης" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => kiverniseis; Gen |CPrep P_Dat=> kivernIs + "εων" } } ; g = g } ; ----------------Neuter nouns in -ι , with stress movement-------------- mkNoun_agori : (s: Str) -> Gender -> Noun = \agOri, g -> let agori = mkStemNouns agOri; in { s = table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => agOri ; Gen |CPrep P_Dat=> mkGenSg agori } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => mkNomPl agOri; Gen |CPrep P_Dat=> mkGen agOri } } ; g = g } ; ----------------Neuter nouns in -oς , with stress movement in genSg and gen/accPl-------------- mkNoun_megethos: (s1,_ : Str) -> Gender -> Noun = \mEgethos, megEthi, g -> let megEth = init megEthi ; megethos = mkStemNouns mEgethos ; in { s = table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => mEgethos ; Gen |CPrep P_Dat=> megEth + "ους" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => megEthi; Gen|CPrep P_Dat => mkGen megethos } } ; g = g } ; ----------------Neuter nouns in -μα, -ιμο ,with stress movement in genSg and gen/accPl, and syllable augmentation. -------------- mkNoun_provlima: (s1,_ : Str) -> Gender -> Noun = \prOvlima, provlimata, g -> let provlImat = init provlimata ; provlima = mkStemNouns prOvlima ; in { s = table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => prOvlima ; Gen |CPrep P_Dat=> provlImat + "ος" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> provlimata; Gen|CPrep P_Dat => mkGen provlima } } ; g = g } ; ---------------Neuter nouns in -o , with stress movement-------------- mkNoun_prosopo : (s1,_ : Str) -> Gender -> Noun = \prOsopo, prosOpon, g -> let prosOpo = init prosOpon ; prosOp = init prosOpo ; in { s = table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => prOsopo ; Gen |CPrep P_Dat=> prosOp + "ου" } ; Pl => table { Nom |Acc | Vocative |CPrep P_se |CPrep PNul=> mkNomPl prOsopo ; Gen |CPrep P_Dat=> prosOpon } } ; g = g } ; mkNoun_anthropos : (s1,_ : Str) -> Gender -> Noun = \anthropos, anthropon, g -> let anthrop = Predef.tk 2 anthropos ; anthrOp = Predef.tk 2 anthropon ; in { s = table { Sg => table { Nom => anthropos ; Gen|CPrep P_Dat => anthrOp + "ου" ; Acc |CPrep P_se |CPrep PNul => anthrop + "ο"; Vocative => anthrop + "ε" } ; Pl => table { Nom | Vocative=> anthrop + "οι" ; Gen |CPrep P_Dat=> anthropon ; Acc |CPrep P_se |CPrep PNul => anthrOp + "ους" } } ; g = g } ; ----------------Neuter nouns in -ς , with stress movement,syllabic augmentation, irregular (φως, γεγονός, ημίφως) -------------- mkNoun_fws: (s1,_ : Str) -> Gender -> Noun = \fws, fwtos, g -> let fW = init fws ; in { s = table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul=> fws ; Gen |CPrep P_Dat=>fwtos } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => fW + "τα"; Gen |CPrep P_Dat=> fW + "των" } } ; g = g } ; ----------------Neuter nouns in -ν , with stress movement -------------- mkNoun_endiaferon: (s1: Str) -> Gender -> Noun = \endiaferon, g -> { s = table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> endiaferon ; Gen |CPrep P_Dat=> mkGenSg endiaferon } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => mkNomPl endiaferon; Gen |CPrep P_Dat=> mkGen endiaferon } } ; g = g } ; --------Indeclinable Nouns------------ mkNounAklito: Str -> Gender -> Noun = \s1, g -> { s = table { Sg | Pl => table { Nom | Acc | Vocative |Gen |CPrep P_Dat| CPrep P_se |CPrep PNul => s1 } } ; g = g } ; mkGen : Str -> Str = \s -> case s of { c + "άι" => c + "αγιών" ; c + "όι" => c + "ογιών" ; c + v@(#stressedVowel) + x@(_ + _) + "α" =>c + unstress v + x + "ών" ; c + v@(#stressedVowel) + x@(_ + _) + "ος" =>c + unstress v + x + "ών" ; c + "έας" => c + "έων" ; c + "ής" => c + "ών" ; --c + "ης" => c + "ών" ; c + "ος" => c + "ών" ; c + "άν" => c + "άντων" ; c + "όν" => c + "όντων" ; c + ("α" | "ο" ) => c + "άτων" ; c + v@(#stressedVowel) + x@(_ + _) + "ας" =>c + unstress v + x + "ών" ; c + v@(#stressedVowel) + x@(_ + _) + "η" =>c + unstress v + x + "ών" ; c + v@(#stressedVowel) + x@(_ + _) + "ης" =>c + unstress v + x + "ών" ; c + v@(#stressedVowel) + x@(_ + _) + ("ι" | "υ") =>c + unstress v + x + "ιών" ; c + v@(#stressedVowel) + x@(_ + _) + "εν" =>c + unstress v + x + "έντων" ; c + v@(#stressedVowel) + x@(_ + _) + "ον" =>c + unstress v + x + "όντων" } ; mkGenSg : Str -> Str = \s -> case s of {x + "η" => x + "ης"; x + "ος" => x + "ους"; x + "αι" => x + "αγιού"; x + "οι" => x + "ογιού"; x + "ης" => x + "η"; x + "α" => x + "ας"; x + "έας" => x + "έα"; x + "ο" => x + "ου"; x + "ής" => x + "ή"; x + "ον" => x + "οντος"; x + "όν" => x + "όντος"; x + "εν" => x + "εντος"; x + "άν" => x + "άντος"; x + ("ι" | "υ") => x + "ιού"; x + "ας" => x + "α" }; mkNomPl : Str -> Str = \s -> case s of { x + "έας" => x + "είς" ; x + "ής" => x + "είς" ; x + "ης" => x + "ες" ; x + "ος" => x + "η" ; x + "άι" => x + "άγια"; x + "όι" => x + "όγια"; x + "ον" => x + "οντα"; x + "όν" => x + "όντα"; x + "άν" => x + "άντα"; x + "εν" => x + "εντα"; x + ("ι" | "υ") => x + "ια" ; x + "ας" => x + "ες" ; x + "ο" => x + "α" }; mkAccSg : Str -> Str = \s -> case s of {x + "ής" => x + "ή" ; x + "ης" => x + "η" ; x + "έας" => x + "έα"; x + "ος" => x + "ος"; x + "ας" => x + "α" }; mkStemNouns : Str -> Str = \s -> case s of { c + v@(#stressedVowel) + x@(_ + _) =>c + unstress v + x } ; --Nouns with no stress movement. regN: Str -> Noun = \s-> case s of { kaloger + "ος" => mkNoun s (kaloger + "ου") (kaloger + "ο") (kaloger + "ε") (kaloger + "οι") (kaloger + "ων") (kaloger + "ους")(kaloger + "οι") Masc ; ouran + "ός" => mkNoun s (ouran + "ού") (ouran + "ό") (ouran + "έ") (ouran + "οί") (ouran + "ών") (ouran + "ούς") (ouran + "οί") Masc ; ypologist + "ής" => mkNoun s (ypologist + "ή") (ypologist + "ή") (ypologist + "ή") (ypologist + "ές") (ypologist + "ών") (ypologist + "ές") (ypologist + "ές") Masc ; pater + "ας" => mkNoun s (pater + "α") (pater + "α") (pater + "α") (pater + "ες") (pater + "ων") (pater + "ες")(pater + "ες") Masc ; tom + "έας" => mkNoun s (tom + "έα") (tom + "έα") (tom + "έα")(tom + "είς") (tom + "έων") (tom + "είς") (tom + "είς")Masc ; agelad + "α" => mkNoun s (agelad + "ας") (agelad + "α") (agelad + "α")(agelad + "ες") (agelad + "ων") (agelad + "ες") (agelad + "ες")Fem ; koili + "ά" => mkNoun s (koili + "άς") (koili + "ά") (koili + "ά")(koili + "ές") (koili + "ών") (koili + "ές") (koili + "ές")Fem ; allag + "ή" => mkNoun s (allag + "ής") (allag + "ή") (allag + "ή")(allag + "ές") (allag + "ών") (allag + "ές") (allag + "ές")Fem ; pswm + "ί" => mkNoun s (pswm + "ιού") (pswm + "ί") (pswm + "ί") (pswm + "ιά") (pswm + "ιών") (pswm + "ιά") (pswm + "ιά") Neut ; mwr + "ό" => mkNoun s (mwr + "ού") (mwr + "ό") (mwr + "ό") (mwr + "ά") (mwr+ "ών") (mwr + "ά") (mwr + "ά") Neut ; vivli + "ο" => mkNoun s (vivli + "ου") (vivli + "ο")(vivli + "ο") (vivli + "α") (vivli+ "ων") (vivli + "α") (vivli + "α") Neut }; --Nouns with no stress movement, that augment the number of syllables when declined. regNaniso: Str -> Noun = \s-> case s of { manav + "ης" => mkNoun s (manav + "η") (manav + "η") (manav + "η")(manav + "ηδες") (manav + "ηδων") (manav + "ηδες") (manav + "ηδες")Masc ; aer + "ας" => mkNoun s (aer + "α") (aer + "α") (aer + "α")(aer + "ηδες") (aer + "ηδων") (aer + "ηδες") (aer + "ηδες")Masc ; mpogiatz + "ής" => mkNoun s (mpogiatz + "ή") (mpogiatz + "ή")(mpogiatz + "ή") (mpogiatz + "ήδες") (mpogiatz + "ήδων") (mpogiatz + "ήδες") (mpogiatz + "ήδες") Masc ; kanap + "ές" => mkNoun s (kanap + "έ") (kanap + "έ")(kanap + "έ") (kanap + "έδες") (kanap + "έδων") (kanap + "έδες") (kanap + "έδες") Masc ; papp + "ούς" => mkNoun s (papp + "ού") (papp + "ού") (papp + "ού")(papp + "ούδες") (papp + "ούδων") (papp + "ούδες") (papp + "ούδες")Masc ; pap + "άς" => mkNoun s (pap + "ά") (pap + "ά") (pap + "ά") (pap + "άδες") (pap + "άδων") (pap + "άδες") (pap + "άδες") Masc ; giagi + "ά" => mkNoun s (giagi + "άς") (giagi + "ά") (giagi + "ά") (giagi + "άδες") (giagi + "άδων") (giagi + "άδες") (giagi + "άδες")Fem ; alep + "ού" => mkNoun s (alep + "ούς") (alep + "ού") (alep + "ού") (alep + "ούδες") (alep + "ούδων") (alep + "ούδες") (alep + "ούδες") Fem ; ix + "ώ" => mkNoun s (ix + "ούς") (ix + "ώ") (ix + "ώ") ("") ("") ("") ("") Fem ; -----this is an exeption noun ox + "ύ" => mkNoun s (ox + "έος") (ox + "ύ") (ox + "ύ")(ox + "έα") (ox + "έων") (ox + "έα") (ox + "έα") Neut ; ---this is an exeption noun plout + "ος" => mkNoun s (plout + "ου") (plout + "ο") (plout + "ε")(plout + "η") (plout + "ων") (plout + "η") (plout + "η") Change; san + "ός" => mkNoun s (san + "ού") (san + "ό") (san + "έ")(san + "ά") (san + "ών") (san + "ά") (san + "ά") Change }; regIrreg: Str -> Noun = \s-> case s of { kre + "ας" => mkNoun s (mkStemNouns kre + "ατος") (kre + "ας") (kre + "ας")(kre + "ατα") (mkStemNouns kre + "άτων") (kre + "ατα") (kre + "ατα") Neut; xron + "ος" => mkNoun s (xron + "ου") (xron + "ο") (xron + "ε")(xron + "ια") (xron + "ων") (xron + "ια") (xron + "ια") Change; gal + "α" => mkNoun s ( gal + "ατος") (gal + "α") (gal + "α")(gal + "ατα") (mkStemNouns gal + "άτων") (gal + "ατα") (gal + "ατα") Neut ; mel + "ι" => mkNoun s ( mel + "ιτος") (mel + "ι") (mel + "ι")(mel + "ια") (mkStemNouns mel + "ιών") (mel + "ια") (mel + "ια") Neut ; p + "ύρ" => mkNoun s ( p + "υρός") (p + "ύρ") (p + "ύρ")(p + "υρά") ( p + "υρών") (p + "υρά") (p + "υρά") Neut ; ---exeptions from ancient greek ip + "αρ" => mkNoun s ( ip + "ατος") (ip + "αρ") (ip + "αρ")(ip + "ατα") ( mkStemNouns ip + "άτων") (ip + "ατα") (ip + "ατα") Neut ---exeptions from ancient greek }; --------------------------ADJECTIVES/ADVERBS ------------------------- ---------------------------------------------------------------------- -------suffixed comparative form of an adjective------------------- mkComparative : Str -> Str = \s -> case s of { x + "κακός" => x + "χειρότερος" ; x + "καλός" => x + "καλύτερος" ; x + "μεγάλος" => x + "μεγαλύτερος" ; x + "ύς" => x + "ύτερος" ; x + "ής" => x + "έστερος" ; x + "ός" => x + "ότερος" ; c + v@(#stressedVowel) + x@(_ + _) + "ος" =>c + unstress v + x + "ότερος" ; c + v@(#stressedVowel) + x@(_ + _) + ("ής" | "ης") =>c + unstress v + x + "έστερος" }; -----Creates the adverb, by using Neutral, Sg, Nom ------ mkAdverb : Str -> Str = \s -> case s of { x + "ο" => x + "α" ; x + "ό" => x + "ά" ; x + "γον" => x + "γόντως" ; x + "λον" =>x + "λοντικά" ; x + "ής" => x + "ώς" ; x + "ης" => x + "ως" ; x + "ές" => x + "ώς" ; x + "ύ" => x + "ιά" ; x + "ικο" => x + "ικα" }; mkAdverb2 : Str -> Str = \s -> case s of { x + "ύ" => x + "έως" }; -----comparative form of the adverb ------ mkAdverbCompar : Str -> Str = \s -> case s of {x + "κακό" => x + "χειρότερα" ; x + "καλό" => x + "καλύτερα" ; x + "ο" => x + "ότερα" ; x + "ό" => x + "ότερα" ; x + "ύ" => x + "ύτερα" ; x + "έως" => x + "ύτερα" ; x + "ές" => x + "έστερα" }; -----superlative form of the adverb ------ mkAdverbSuper : Str -> Str = \s -> case s of {x + "κακό" => x + "κάκιστα" ; x + "καλό" => x + "κάλιστα" ; x + ("ο" | "ό" ) => x + "ότατα" ; x + "ύ" => x + "ύτατα" ; x + "έως" => x + "ύτατα" ; x + "ές" => x + "έστατα" }; ----Adjectives that form the comparative with a suffix---------- mkAdjective2 : (s1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_: Str) -> Adj = \sn,sg,sa,sv,pn,pg,pa,snf,sgf,pnf,pgf,snn,sgn,pnn,pgn, comp -> let adverb = mkAdverb snn; comp1 = mkComparative sn; comp =Predef.tk 2 comp1 ; in { s = table { Posit => table { Masc => table { Sg => table { Nom => sn ; Gen |CPrep P_Dat=> sg ; Acc |CPrep P_se |CPrep PNul => sa ; Vocative => sv } ; Pl => table { Nom | Vocative => pn ; Gen |CPrep P_Dat=> pg ; Acc |CPrep P_se |CPrep PNul => pa }} ; Change=> table { Sg => table { Nom => sn ; Gen|CPrep P_Dat => sg ; Acc |CPrep P_se |CPrep PNul => sa ; Vocative => sv } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => pnn ; Gen |CPrep P_Dat=> pgn }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => snf ; Gen|CPrep P_Dat => sgf } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => pnf ; Gen |CPrep P_Dat=> pgf }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => snn ; Gen|CPrep P_Dat => sgn } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> pnn ; Gen|CPrep P_Dat => pgn }} } ; Compar | Superl => table { Masc => table { Sg => table { Nom => comp1 ; Gen|CPrep P_Dat => comp + "ου"; Acc |CPrep P_se |CPrep PNul=> comp + "ο"; Vocative => comp + "ος" } ; Pl => table { Nom | Vocative => comp + "οι"; Gen|CPrep P_Dat => comp+ "ων"; Acc |CPrep P_se |CPrep PNul => comp + "ους" }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => comp + "η" ; Gen|CPrep P_Dat => comp + "ης" } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => comp + "ες"; Gen |CPrep P_Dat=> comp + "ων" }} ; Neut | Change=> table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => comp + "ο" ; Gen |CPrep P_Dat=> comp + "ου" } ; Pl => table { Nom | Acc |Vocative|CPrep P_se |CPrep PNul => comp + "α"; Gen|CPrep P_Dat => comp + "ων" }} } } ; adv = table { Posit => adverb ; Compar => mkAdverbCompar snn ; Superl => mkAdverbSuper snn} ; } ; ----Adjectives that form the comparative with a suffix, irregularities in the formation of adverbs. -----It concerns mostly adjectives with endings -ύς, -εία, -ύ, that differenciate from those ending in -ύς, -ιά, -ύ. mkAdjectiveIr : (s1,_ : Str) -> Adj = \eythis,eytheos -> let eyth = Predef.tk 2 eythis; eythIteros = mkComparative eythis ; eythIter = Predef.tk 2 eythIteros; adverb = eytheos; in { s = table { Posit | Superl => table { Masc | Change => table { Sg => table { Nom => eythis ; Gen |CPrep P_Dat=> eyth + "έος" ; Acc |CPrep P_se |CPrep PNul| Vocative => eyth + "ύ" } ; Pl => table { Nom | Vocative |Acc |CPrep P_se |CPrep PNul => eyth + "είς" ; Gen|CPrep P_Dat => eyth + "έων" }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => eyth + "εία"; Gen |CPrep P_Dat=> eyth + "είας" } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => eyth + "είες" ; Gen |CPrep P_Dat=> eyth + "ειών" }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => eyth + "ύ" ; Gen |CPrep P_Dat=> eyth + "έος" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> eyth + "έα" ; Gen|CPrep P_Dat => eyth + "έων" }} }; Compar => table { Masc | Change => table { Sg => table { Nom | Vocative => eythIteros ; Gen|CPrep P_Dat => eythIter + "ου"; Acc |CPrep P_se |CPrep PNul => eythIter + "ο" } ; Pl => table { Nom | Vocative => eythIter + "οι"; Gen|CPrep P_Dat => eythIter+ "ων"; Acc |CPrep P_se |CPrep PNul => eythIter + "ους" }} ; Fem => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => eythIter + "η" ; Gen|CPrep P_Dat => eythIter + "ης" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> eythIter + "ες"; Gen |CPrep P_Dat=> eythIter + "ων" }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => eythIter + "ο" ; Gen|CPrep P_Dat => eythIter + "ου" } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => eythIter + "α"; Gen|CPrep P_Dat => eythIter + "ων" }} } } ; adv = table { Posit => eytheos ; Compar => mkAdverbCompar eytheos ; Superl => mkAdverbSuper eytheos} ; } ; -------Adjectives that form the comparative using "πιό"------ mkAdjective : (s1,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj = \sn,sg,sa,sv,pn,pg,pa,snf,sgf,pnf,pgf,snn,sgn,pnn,pgn -> let adverb = mkAdverb snn; a = "πιό"; in { s = table { Posit => table { Masc => table { Sg => table { Nom => sn ; Gen|CPrep P_Dat => sg ; Acc |CPrep P_se |CPrep PNul => sa ; Vocative => sv } ; Pl => table { Nom | Vocative => pn ; Gen |CPrep P_Dat=> pg ; Acc |CPrep P_se |CPrep PNul => pa }} ; Change=> table { Sg => table { Nom => sn ; Gen|CPrep P_Dat => sg ; Acc |CPrep P_se |CPrep PNul=> sa ; Vocative => sv } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => pnn ; Gen|CPrep P_Dat => pgn }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => snf ; Gen|CPrep P_Dat => sgf } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => pnf ; Gen |CPrep P_Dat=> pgf }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => snn ; Gen|CPrep P_Dat => sgn } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> pnn ; Gen |CPrep P_Dat=> pgn }} } ; Compar| Superl => table { Masc => table { Sg => table { Nom => a ++ sn ; Gen|CPrep P_Dat => a ++ sg ; Acc |CPrep P_se |CPrep PNul => a ++ sa ; Vocative => a ++ sv } ; Pl => table { Nom | Vocative => a ++ pn ; Gen |CPrep P_Dat=> a ++ pg ; Acc |CPrep P_se |CPrep PNul=> a ++ pa }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => a ++ snf ; Gen|CPrep P_Dat => a ++ sgf } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => a ++ pnf ; Gen|CPrep P_Dat => a ++pgf }} ; Neut | Change=> table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => a ++ snn ; Gen|CPrep P_Dat => a ++ sgn } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => a ++ pnn ; Gen|CPrep P_Dat => a ++ pgn }} } }; adv = table { Posit => adverb ; Compar => adverb ; Superl => adverb} ; } ; -------Category of adjectives ending in -ων, -ουσα, -ον with stress movement.------------------ mkAdjective3 : (s1,_ : Str) -> Adj = \epeigwn,epeigontwn -> let a = "πιό"; epeIg = Predef.tk 2 epeigwn; epeIgon = epeIg + "ον" ; epeig = mkStemNouns epeIg ; epeigon = mkStemNouns epeIgon ; adverb = mkAdverb epeigon; in { s = table { Posit => table { Masc | Change => table { Sg => table { Nom | Vocative => epeigwn ; Gen |CPrep P_Dat=> epeIg + "οντος" ; Acc |CPrep P_se |CPrep PNul => epeIg + "οντα" } ; Pl => table { Nom | Vocative |Acc |CPrep P_se |CPrep PNul => epeIg + "οντες" ; Gen |CPrep P_Dat=> epeigontwn }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => epeIg + "ουσα";Gen |CPrep P_Dat=> epeIg + "ουσας" } ; Pl => table { Nom | Acc |Vocative|CPrep P_se |CPrep PNul => epeIg + "ουσες" ; Gen|CPrep P_Dat => epeig + "ουσών" }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => epeIg + "ον" ; Gen|CPrep P_Dat => epeIg + "οντος" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> epeIg + "οντα" ; Gen |CPrep P_Dat=> epeigontwn }} }; Compar | Superl => table { Masc | Change => table { Sg => table { Nom | Vocative => a ++ epeigwn; Gen |CPrep P_Dat=> a ++ epeIg + "οντος" ; Acc |CPrep P_se |CPrep PNul => a ++ epeIg + "οντα" } ; Pl => table { Nom | Vocative | Acc | CPrep P_se |CPrep PNul => a ++ epeIg + "οντες" ; Gen|CPrep P_Dat => a ++ epeigontwn }} ; Fem => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => a ++ epeIg + "ουσα" ; Gen |CPrep P_Dat=> a ++ epeIg + "ουσας" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => a ++ epeIg + "ουσες" ; Gen|CPrep P_Dat => a ++ epeig + "ουσών" }} ; Neut => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => a ++ epeIg + "ον"; Gen |CPrep P_Dat=> a ++ epeIg + "οντος" } ; Pl => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => a ++ epeIg + "οντα" ; Gen |CPrep P_Dat=> a ++ epeigontwn }} } } ; adv = table { Posit => adverb ; Compar => a ++ adverb ; Superl => a ++ adverb} ; } ; -------Category of adjectives ending in -ης, -ης, -ες with stress movement in Neutral.------------------ mkAdjective4 : (s1,_: Str) -> Adj = \sinithis,sInithes -> let adverb = mkAdverb sinithis; sinIthi = init sinithis; sinIth = Predef.tk 2 sinithis; sin = mkComparative sinithis ; si = Predef.tk 2 sin; in { s = table { Posit => table { Masc | Fem | Change=> table { Sg => table { Nom => sinithis ; Gen|CPrep P_Dat => sinIth + "ους" ; Acc | Vocative|CPrep P_se |CPrep PNul => sinIthi } ; Pl => table { Nom | Vocative | Acc |CPrep P_se |CPrep PNul => sinIth + "εις" ; Gen |CPrep P_Dat=> sinIth + "ων" }} ; Neut => table { Sg => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => sInithes ; Gen |CPrep P_Dat=> sinIth + "ους" } ; Pl => table { Nom | Acc |Vocative|CPrep P_se |CPrep PNul => sinIthi ; Gen |CPrep P_Dat=> sinIth + "ων" }} } ; Compar | Superl => table { Masc | Change => table { Sg => table { Nom => sin ; Gen |CPrep P_Dat=> si + "ου"; Acc |CPrep P_se |CPrep PNul => si + "ο"; Vocative => si + "ος" } ; Pl => table { Nom | Vocative => si + "οι"; Gen |CPrep P_Dat=> si+ "ων"; Acc |CPrep P_se |CPrep PNul =>si + "ους" }} ; Fem => table { Sg => table { Nom | Acc | Vocative|CPrep P_se |CPrep PNul => si + "η" ; Gen |CPrep P_Dat=> si + "ης" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul => si + "ες"; Gen |CPrep P_Dat=> si + "ων" }} ; Neut => table { Sg => table { Nom | Acc |Vocative|CPrep P_se |CPrep PNul=> si + "ο" ; Gen|CPrep P_Dat => si + "ου" } ; Pl => table { Nom | Acc | Vocative |CPrep P_se |CPrep PNul=> si + "α"; Gen |CPrep P_Dat=> si + "ων" }} } } ; adv = table { Posit => adverb ; Compar => sin ++ "τερα" ; Superl => sin ++ "τατα"} ; } ; ------ Indeclinable Adjectives ------ mkAdjAklito : Str -> Adj = \s1 -> let a = "πιό" ; in { s = table { Posit | Superl => table { Masc |Fem | Neut | Change => table { Sg |Pl => table { Nom | Gen | Acc| Vocative |CPrep P_se |CPrep PNul|CPrep P_Dat => s1 } } } ; Compar => table { Masc |Fem | Neut | Change => table { Sg |Pl => table { Nom | Gen | Acc| Vocative | CPrep P_se |CPrep PNul |CPrep P_Dat => a ++ s1 } }} }; adv = table { Posit => " " ; Compar => " " ; Superl => " "} ; } ; ---Adjectives with endings -ος (-ός), -η, -ο regAdj : Str -> Adj = \mikros -> case mikros of { mikr + "ός" => mkAdjective mikros (mikr + "ού") (mikr + "ό")(mikr + "έ") (mikr + "οί")(mikr + "ών")(mikr + "ούς") (mikr + "ή") (mikr + "ής") (mikr + "ές")(mikr + "ών") (mikr + "ό")(mikr + "ού")(mikr + "ά")(mikr + "ών") ; omorf + "ος" => mkAdjective mikros (omorf + "ου") (omorf + "ο") (omorf + "ε") (omorf + "οι")(omorf + "ων")(omorf + "ους") (omorf + "η") (omorf + "ης") (omorf + "ες")(omorf + "ων") (omorf + "ο")(omorf + "ου")(omorf + "α")(omorf + "ων") ; ex + "ων" => mkAdjective mikros (ex + "οντος") (ex + "οντα") (ex + "οντα") (ex + "οντες")(unstress ex + "όντων")(ex + "οντες") (ex + "ουσα")(ex + "ουσας") (ex + "ουσες")(ex + "ουσων") (ex + "ον")(ex+ "οντος")(ex + "οντα")(unstress ex + "όντων") ; nonExist => mkAdjective mikros (nonExist ) (nonExist ) (nonExist ) (nonExist)(nonExist )(nonExist ) (nonExist ) (nonExist ) (nonExist )(nonExist ) (nonExist )(nonExist )(nonExist )(nonExist ) } ; -----adjectives with endings -ος (-ός), -α , -ο | -ύς, -ια , -υ | -ης, -α , -ικο | -ών, -ουσα , -ων και -ης , -ια, -ι regAdj1 : Str -> Adj = \metrios -> case metrios of { metri + "ος" => mkAdjective metrios (metri + "ου") (metri + "ο")(metri + "ε") (metri + "οι")(metri + "ων")(metri + "ους") (metri + "α") (metri + "ας") (metri + "ες")(metri + "ων") (metri + "ο")(metri + "ου")(metri + "α")(metri + "ων") ; pali+ "ός" => mkAdjective metrios (pali + "ού") (pali + "ό")(pali + "έ") (pali + "οί")(pali + "ών")(pali + "ούς") (pali + "ά") (pali + "άς") (pali + "ές")(pali + "ών") (pali + "ό")(pali + "ού")(pali + "ά")(pali + "ών") ; pax + "ύς" => mkAdjective metrios (pax + "ύ") (pax + "ύ") (pax + "ύ")(pax + "ιοί")(pax + "ιών")(pax + "ιούς") (pax + "ιά")(pax + "ιάς") (pax + "ιές")(pax + "ιών") (pax + "ύ")(pax + "ιού")(pax + "ιά")(pax + "ιών") ; staxt + "ής" => mkAdjective metrios (staxt + "ή") (staxt + "ή") (staxt + "ή")(staxt + "ιοί")(staxt + "ιών")(staxt + "ιούς") (staxt + "ιά")(staxt + "ιάς") (staxt + "ιές")(staxt + "ιών") (staxt + "ί")(staxt + "ιού")(staxt + "ιά")(staxt + "ιών") ; tempel + "ης" => mkAdjective metrios (tempel + "η") (tempel + "η") (tempel + "η") (tempel + "ηδες")(tempel + "ηδων")(tempel + "ηδες") (tempel + "α")(tempel + "ας") (tempel + "ες")(tempel + "ων") (tempel + "ικο")(tempel + "ικου")(tempel + "ικα")(tempel + "ικων") ; par + "ών" => mkAdjective metrios (par + "όντος") (par + "όντα") (par + "όντα") (par + "όντες")(par + "όντων")(par + "όντες") (par + "ούσα")(par + "ούσας") (par + "ούσες")(par + "ουσών") (par + "όν")(par+ "όντος")(par + "όντα")(par + "όντων") } ; -----adjectives with endings -ος, -ια , -ο |-υς, -εια , -υ | -ης, -ης , -ες regAdj2 : Str -> Adj = \glikos -> case glikos of { glik + "ός" => mkAdjective glikos (glik + "ού") (glik + "ό") (glik + "έ")(glik + "οί")(glik + "ών")(glik + "ούς") (glik + "ιά") (glik + "ιάς") (glik + "ές")(glik + "ών") (glik + "ό")(glik + "ού")(glik + "ά")(glik + "ών") ; fresk + "ος" => mkAdjective glikos (fresk + "ου") (fresk + "ο") (fresk + "ε")(fresk + "οι")(fresk + "ων")(fresk + "ους") (fresk + "ια") (fresk + "ιας") (fresk + "ες")(fresk + "ων") (fresk + "ο")(fresk + "ουύ")(fresk + "α")(fresk + "ων") ; akriv + "ής" => mkAdjective glikos (akriv + "ή") (akriv + "ή") (akriv + "ή") (akriv + "είς")(akriv + "ών")(akriv + "είς") (akriv + "ής")(akriv + "ή") (akriv + "είς")(akriv + "ών") (akriv + "ές")(akriv + "ούς")(akriv + "ή")(akriv + "ών") } ; irregAdj : Str -> Adj = \ilIthios -> case ilIthios of { ilIth + "ιος" => mkAdjective ilIthios (ilIth + "ιου") (ilIth + "ιο") (ilIth + "ιε")(ilIth + "ιοι")(mkStemNouns ilIth + "ίων")(ilIth + "ιους") (ilIth + "ια") (ilIth + "ιας") (ilIth + "ιες")(mkStemNouns ilIth + "ίων") (ilIth + "ιο")(ilIth + "ιου")(ilIth + "ια")(mkStemNouns ilIth + "ίων") } ; --------------------------------------------------------------------------------------------------------------------------------------------- ---------For Adjectives with suffixed comparative---------------- ---Adjectives with endings -ος, -η, -ο regAdj3 : Str -> Adj = \mikros -> case mikros of { mikr + "ός" => mkAdjective2 mikros (mikr + "ού") (mikr + "ό")(mikr + "έ") (mikr + "οί")(mikr + "ών")(mikr + "ούς") (mikr + "ή") (mikr + "ής") (mikr + "ές")(mikr + "ών") (mikr + "ό")(mikr + "ού")(mikr + "ά")(mikr + "ών") (mikr + "ότερος") ; omorf + "ος" => mkAdjective2 mikros (omorf + "ου") (omorf + "ο") (omorf + "ε") (omorf + "οι")(omorf + "ων")(omorf + "ους") (omorf + "η") (omorf + "ης") (omorf + "ες")(omorf + "ων") (omorf + "ο")(omorf + "ου")(omorf + "α")(omorf + "ων") (omorf + "ότερος") } ; -----adjectives with endings -ος, -α , -ο | -υς, -ια , -υ και -ης , -ια, -ι regAdj4 : Str -> Adj = \metrios -> case metrios of { metri + "ος" => mkAdjective2 metrios (metri + "ου") (metri + "ο")(metri + "ε") (metri + "οι")(metri + "ων")(metri + "ους") (metri + "α") (metri + "ας") (metri + "ες")(metri + "ων") (metri + "ο")(metri + "ου")(metri + "α")(metri + "ων") (metri + "ότερος"); pali+ "ός" => mkAdjective2 metrios (pali + "ού") (pali + "ό")(pali + "έ") (pali + "οί")(pali + "ών")(pali + "ούς") (pali + "ά") (pali + "άς") (pali + "ές")(pali + "ών") (pali + "ό")(pali + "ού")(pali + "ά")(pali + "ών") (pali + "ότερος") ; pax + "ύς" => mkAdjective2 metrios (pax + "ύ") (pax + "ύ") (pax + "ύ")(pax + "ιοί")(pax + "ιών")(pax + "ιούς") (pax + "ιά")(pax + "ιάς") (pax + "ιές")(pax + "ιών") (pax + "ύ")(pax + "ιού")(pax + "ιά")(pax + "ιών")(pax + "ύτερος"); staxt + "ής" => mkAdjective2 metrios (staxt + "ή") (staxt + "ή") (staxt + "ή")(staxt + "ιοί")(staxt + "ιών")(staxt + "ιούς") (staxt + "ιά")(staxt + "ιάς") (staxt + "ιές")(staxt + "ιών") (staxt + "ί")(staxt + "ιού")(staxt + "ιά")(staxt + "ιών") (staxt + "ύτερος") } ; -----adjectives with endings -ος (-ός), -ια , -ο | -ύς, -εια , -υ | -ής, -ης , -ες regAdj5 : Str -> Adj = \glikos -> case glikos of { glik + "ός" => mkAdjective2 glikos (glik + "ού") (glik + "ό") (glik + "έ")(glik + "οί")(glik + "ών")(glik + "ούς") (glik + "ιά") (glik + "ιάς") (glik + "ές")(glik + "ών") (glik + "ό")(glik + "ού")(glik + "ά")(glik + "ών") (glik + "ότερος") ; fresk + "ος" => mkAdjective2 glikos (fresk + "ου") (fresk + "ο") (fresk + "ε")(fresk + "οι")(fresk + "ων")(fresk + "ους") (fresk + "ια") (fresk + "ιας") (fresk + "ες")(fresk + "ων") (fresk + "ο")(fresk + "ουύ")(fresk + "α")(fresk + "ων")(fresk + "ότερος") ; akriv + "ής" => mkAdjective2 glikos (akriv + "ή") (akriv + "ή") (akriv + "ή") (akriv + "είς")(akriv + "ών")(akriv + "είς") (akriv + "ής")(akriv + "ή") (akriv + "είς")(akriv + "ών") (akriv + "ές")(akriv + "ούς")(akriv + "ή")(akriv + "ών") (akriv + "έστερος") } ; -----Pattern for the final -ν in the Feminine Accusative of the definite article---------- FemAccFinalN : pattern Str = #("ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" ); mkDeterminer : (s1,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Number -> Det = \mn,mg,ma,yn,yg,ya,nn,ng,na,c,cg,ca,n -> { s = table { Masc => table { Nom => mn ; Gen |CPrep P_Dat=> mg ; Acc |CPrep P_se |CPrep PNul => ma ; Vocative => []} ; Fem => table { Nom => yn ; Gen |CPrep P_Dat=> yg ; Acc |CPrep P_se |CPrep PNul => ya ;Vocative => [] } ; Neut => table { Nom => nn ; Gen |CPrep P_Dat=> ng ; Acc |CPrep P_se |CPrep PNul => na; Vocative => [] } ; Change => table { Nom => c ; Gen|CPrep P_Dat => cg ; Acc |CPrep P_se |CPrep PNul => ca; Vocative => [] } } ; n = n ; } ; artDef : Gender -> Number -> Case -> Str = \g,n,c -> case of { => "ο"; => "του" ; => prepCase c++ "τον" ; => "στον" ; => "η" ; => "της" ; => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "την" ; _=> "τη"} ; => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "στην" ; _=> "στη"} ; => prepCase c++ "το" ; => "του" ; => "στο" ; => "οι"; => "των" ; => prepCase c++ "τους" ; => "στους" ; => "οι" ; => "των" ; => prepCase c++ "τις"; => "στις"; < Neut | Change ,Pl, Nom |Acc |CPrep PNul > => prepCase c++ "τα" ; < Neut | Change ,Pl, CPrep P_se > => "στα" ; => prepCase c++ "των" ; <_,_, Vocative > => " " } ; relPron : Bool => AAgr => Case => Str = \\b,ag,c => case b of { False => case c of { Nom => case of { => "η οποία" ; => "ο οποίος" ; => "το οποίο" ; => "οι οποίες" ; => "οι οποίοι" ; => "τα οποία" }; Gen |CPrep P_Dat => case of { => prepCase c ++"της οποίας" ; =>prepCase c ++ "του οποίου" ; => prepCase c ++"των οποίων" }; Acc | CPrep PNul => case of { => prepCase c ++ "την οποία" ; => prepCase c ++"τον οποίο" ; => prepCase c ++ "το οποίο" ; => prepCase c ++ "τις οποίες" ; => prepCase c ++"τους οποίους" ; => prepCase c ++"τα οποία" }; CPrep P_se => case of { => "στην οποία" ; => "στον οποίο" ; => "στο οποίο" ; => "στις οποίες" ; => "στους οποίους" ; => "στα οποία" } ; Vocative => case of {<_,_> => " " } } ; _ => "που" } ; artIndef : Gender -> Number-> Case -> Str = \g,n,c -> case of { => "ένας"; => "ενός" ; => prepCase c++ "ένα"; => " "; => prepCase c++ "μία" ; => "μίας" ; => prepCase c++ "μία" ; => " "; =>prepCase c++ "ένα" ; => "ενός"; => " " ; <_ ,Pl, _> =>prepCase c ++ " " } ; reflPron : Agr => Case => Str = \\ag,c => case of { < Ag _ Sg P1 ,Nom |Vocative > => "ο εαυτός μου" ; < Ag _ Sg P1 ,Gen |CPrep P_Dat > => "του εαυτού μου" ; < Ag _ Sg P1 ,Acc| CPrep PNul> => "τον εαυτό μου" ; < Ag _ Sg P1 ,CPrep P_se> => "στον εαυτό μου" ; < Ag _ Sg P2 ,Nom |Vocative > => "ο εαυτός σου" ; < Ag _ Sg P2 ,Gen |CPrep P_Dat > => "του εαυτού σου" ; < Ag _ Sg P2 ,Acc| CPrep PNul> => "τον εαυτό σου" ; < Ag _ Sg P2 ,CPrep P_se> => "στον εαυτό σου" ; < Ag Fem Sg P3 ,Nom |Vocative > => "ο εαυτός της" ; < Ag Fem Sg P3 ,Gen |CPrep P_Dat > => "του εαυτού της" ; < Ag Fem Sg P3 ,Acc| CPrep PNul> => "τον εαυτό της" ; < Ag Fem Sg P3 ,CPrep P_se> => "στον εαυτό της" ; < Ag _ Sg P3 ,Nom |Vocative > => "ο εαυτός του" ; < Ag _ Sg P3 ,Gen |CPrep P_Dat > => "του εαυτού του" ; < Ag _ Sg P3 ,Acc| CPrep PNul> => "τον εαυτό του" ; < Ag _ Sg P3 ,CPrep P_se> => "στον εαυτό του" ; < Ag _ Pl P1 ,Nom |Vocative > => "οι εαυτοί μας" ; < Ag _ Pl P1 ,Gen |CPrep P_Dat > => "των εαυτών μας" ; < Ag _ Pl P1 ,Acc| CPrep PNul > => "τους εαυτούς μας" ; < Ag _ Pl P1 ,CPrep P_se> => "στους εαυτούς μας" ; < Ag _ Pl P2 ,Nom |Vocative > => "οι εαυτοί σας" ; < Ag _ Pl P2 ,Gen |CPrep P_Dat > => "των εαυτών σας" ; < Ag _ Pl P2 ,Acc| CPrep PNul> => "τους εαυτούς σας" ; < Ag _ Pl P2 ,CPrep P_se> => "στους εαυτούς σας" ; < Ag _ Pl P3 ,Nom |Vocative > => "οι εαυτοί τους" ; < Ag _ Pl P3 ,Gen |CPrep P_Dat > => "των εαυτών τους" ; < Ag _ Pl P3 ,Acc| CPrep PNul> => "τους εαυτούς τους" ; < Ag _ Pl P3 ,CPrep P_se> => "στους εαυτούς τους" }; Predet : Type = {s :Number => Gender => Case => Str} ; mkPredet : (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10: Str) -> Predet = \olos,olou,olo,oli,olis,oloi,olwn,olous,oles,ola-> { s = table { Sg => table { Masc | Change => table { Nom => olos ; Gen |CPrep P_Dat=> olou ; Acc |CPrep P_se |CPrep PNul => olo ; Vocative => []} ; Fem => table { Nom => oli ; Gen |CPrep P_Dat=> olis ; Acc |CPrep P_se |CPrep PNul => oli ;Vocative => [] } ; Neut => table { Nom => olo ; Gen |CPrep P_Dat=> olou ; Acc |CPrep P_se |CPrep PNul => olo; Vocative => [] } } ; Pl => table { Masc => table { Nom => oloi ; Gen |CPrep P_Dat=> olwn ; Acc |CPrep P_se |CPrep PNul => olous ; Vocative => []} ; Fem => table { Nom => oles ; Gen |CPrep P_Dat=> olwn ; Acc |CPrep P_se |CPrep PNul => oles ;Vocative => [] } ; Neut |Change => table { Nom => ola ; Gen |CPrep P_Dat=> olwn ; Acc |CPrep P_se |CPrep PNul => ola; Vocative => [] } }}; } ; copula : Verb = { s = \\a => case a of { VPres _ Sg P1 Active _=> "είμαι" ; VPres _ Sg P2 Active _=> "είσαι" ; VPres _ Sg P3 Active _=> "είναι" ; VPres _ Pl P1 Active _=> "είμαστε" ; VPres _ Pl P2 Active _=> "είσαστε" ; VPres _ Pl P3 Active _=> "είναι" ; VPres _ Sg P1 Passive _=> "είμαι" ; VPres _ Sg P2 Passive _=> "είσαι" ; VPres _ Sg P3 Passive _=> "είναι" ; VPres _ Pl P1 Passive _=> "είμαστε" ; VPres _ Pl P2 Passive _=> "είσαστε" ; VPres _ Pl P3 Passive _=> "είναι" ; VPast _ Sg P1 Active _=> "ήμουν" ; VPast _ Sg P2 Active _=> "ήσουν" ; VPast _ Sg P3 Active _=> "ήταν" ; VPast _ Pl P1 Active _=> "ήμασταν" ; VPast _ Pl P2 Active _=> "ήσασταν" ; VPast _ Pl P3 Active _=> "ήταν" ; VPast _ Sg P1 Passive _=> "ήμουν" ; VPast _ Sg P2 Passive _=> "ήσουν" ; VPast _ Sg P3 Passive _=> "ήταν" ; VPast _ Pl P1 Passive _=> "ήμασταν" ; VPast _ Pl P2 Passive _=> "ήσασταν" ; VPast _ Pl P3 Passive _=> "ήταν" ; VNonFinite Active => "υπάρξει" ; VNonFinite Passive => "υπάρξει" ; VImperative Perf Sg Active=> "να είσαι" ; VImperative Perf Pl Active=> "να είστε" ; VImperative Imperf Sg Active=> "να είσαι" ; VImperative Imperf Pl Active=> "να είστε" ; VImperative _ Sg Passive => "να είσαι" ; VImperative _ Pl Passive=> "να είστε" ; Gerund => "όντας" ; Participle d g n c => (regAdj1 "ών").s !d! g !n !c } } ; Exist : Verb = { s = \\a => case a of { VPres _ Sg P1 Active _=> "υπάρχω" ; VPres _ Sg P2 Active _=> "υπάρχεις" ; VPres _ Sg P3 Active _=> "υπάρχει" ; VPres _ Pl P1 Active _=> "υπάρχουμε" ; VPres _ Pl P2 Active _=> "υπάρχετε" ; VPres _ Pl P3 Active _=> "υπάρχουν" ; VPres _ Sg P1 Passive _=> "υπάρχω" ; VPres _ Sg P2 Passive _=>"υπάρχει" ; VPres _ Sg P3 Passive _=> "υπάρχουμε" ; VPres _ Pl P1 Passive _=> "υπάρχουμε" ; VPres _ Pl P2 Passive _=> "υπάρχετε" ; VPres _ Pl P3 Passive _=> "υπάρχουν" ; VPast _ Sg P1 Active _=> "υπήρχα" ; VPast _ Sg P2 Active _=> "υπήρχες" ; VPast _ Sg P3 Active _=> "υπήρχε" ; VPast _ Pl P1 Active _=> "υπήρχαμε" ; VPast _ Pl P2 Active _=> "υπήρχατε" ; VPast _ Pl P3 Active _=> "υπήρχαν" ; VPast _ Sg P1 Passive _=> "υπήρχα" ; VPast _ Sg P2 Passive _=> "υπήρχες" ; VPast _ Sg P3 Passive _=> "υπήρχε" ; VPast _ Pl P1 Passive _=> "υπήρχαμε" ; VPast _ Pl P2 Passive _=> "υπήρχατε" ; VPast _ Pl P3 Passive _=> "υπήρχαν" ; VNonFinite Active => "υπάρξει" ; VNonFinite Passive => "υπάρξει" ; VImperative Perf Sg Active=> "να υπάρχεις" ; VImperative Perf Pl Active=> "να υπάρχετε" ; VImperative Imperf Sg Active=> "να υπάρχεις" ; VImperative Imperf Pl Active=> "να υπάρχετε" ; VImperative _ Sg Passive=> " " ; VImperative _ Pl Passive=> "" ; Gerund => "υπάρχοντας" ; Participle d g n c => (regAdj1 "υπάρχων").s !d! g !n !c } } ; auxVerb : Verb = mkAux "έχω" "είχα" "έχε" "έχετε" "έχων" ; mkAux : (x1,_,_,_,_: Str) -> Verb = \Exw,eIxa, Exe, Exete, Exwn-> let Ex= init Exw ; eIx = init eIxa ; in { s = table { VPres _ Sg P1 _ _=> Exw ; VPres _ Sg P2 _ _=> Ex + "εις" ; VPres _ Sg P3 _ _=> Ex + "ει" ; VPres _ Pl P1 _ _=> Ex+ "ουμε" ; VPres _ Pl P2 _ _=> Ex + "ετε" ; VPres _ Pl P3 _ _=> Ex + "ουν" ; VPast _ Sg P1 _ _=> eIxa ; VPast _ Sg P2 _ _=> eIx + "ες" ; VPast _ Sg P3 _ _ => eIx + "ε" ; VPast _ Pl P1 _ _ => eIx + "αμε" ; VPast _ Pl P2 _ _ => eIx + "ατε" ; VPast _ Pl P3 _ _ => eIx + "αν" ; VNonFinite Active => Ex + "ει" ; VNonFinite Passive => " " ; VImperative Perf Sg Active=> Exe ; VImperative Perf Pl Active=> Exe ; VImperative Imperf Sg Active=> Exe ; VImperative Imperf Pl Active=> Exe ; VImperative _ Sg Passive => " " ; VImperative _ Pl Passive=> " " ; Gerund => Ex + "οντας" ; Participle d g n c => (regAdj Exwn).s !d! g !n !c } }; conjThat : Str = "οτι" ; --------- Elision --------- vowel : Strs = strs { "α" ; "ά" ; "ο" ; "ό" ; "ε" ; "έ" ; "ι" ; "ί" ; "η" ; "ή"; "υ" ; "ύ" ; "ω" ; "ώ" ; "Α" ; "Ο" ; "Ι" ; "Ε" ; "Υ" ; "Η" ; "Ω" } ; elision : Str -> Str = \d -> d + pre {"ε" ; "'" / vowel} ; elisSe = elision "σ" ; ---To control the stress movement we define the stress/unstressed vowels, and convert them to their opposite----- stressedVowel : pattern Str = #("ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "εύ"); unstressedVowel : pattern Str = #("α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" | "ευ"); unstress : Str -> Str = \v -> case v of { "ά" => "α" ; "ό" => "ο" ; "ί" => "ι" ; "έ" => "ε" ; "ή" => "η" ; "ύ" => "υ"; "ώ" => "ω" ; "εύ" => "ευ" ; _ => v } ; stress : Str -> Str = \x -> case x of { "α" => "ά" ; "ο" => "ό" ; "ι" => "ί" ; "ε" => "έ" ; "η" => "ή" ; "υ" => "ύ" ; "ω" => "ώ" ; "ευ" => "εύ" ; _ => x } ; mkVerbStem : Str -> Str = \s -> case s of { c + v@(#stressedVowel) + x@(_ + _) => c + unstress v + x } ; }