1
0
forked from GitHub/gf-core
Files
gf-core/lib/src/greek/ResGre.gf

1826 lines
72 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--# -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 <o,t,ant,m> of {
<Main, TPres,Simul,Ind> => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as ! t ++ comp;
<Inv, TPres,Simul,Ind> => negpm ++ clit ++ clit2 ++ verb m vo as ! t ++ subj ++ comp ;
<Main, TPres,Anter,Ind> => subj ++ negpm ++ clit ++ clit2++ verb m vo as! TCond ++ comp ;
<Inv, TPres,Anter,Ind> => negpm ++ clit ++ clit2 ++ verb m vo as ! TCond ++ subj ++ comp ;
<Main,TFut,Simul,Ind> => subj ++ negpm ++ "θα" ++ clit ++ clit2 ++verb m vo as! t ++ comp ;
<Inv,TFut,Simul,Ind> => negpm ++ "θα"++ clit ++ clit2++ verb m vo as! t ++ subj ++ comp ;
<Main,TFut,Anter,Ind> => subj ++ negpm ++ "θα" ++ clit ++ clit2 ++ verb m vo as! TCond ++ comp ;
<Inv,TFut,Anter,Ind> => negpm ++"θα" ++ clit ++ clit2 ++ verb m vo as! TCond ++ subj ++ comp ;
<Main,TCond,Simul,Ind> => subj ++ negpm ++ "θα" ++ clit ++ verb m vo Imperf! TPast ++ comp ;
<Inv,TCond,Simul,Ind> => negpm ++ "θα" ++ clit ++ clit2 ++ verb m vo Imperf ! TPast ++ subj ++ comp ;
<Main,TCond,Anter,Ind> => subj ++ negpm ++ "θα"++ clit ++ clit2 ++ verb m vo as! TImperf ++ comp ;
<Inv,TCond,Anter,Ind> => negpm ++ "θα" ++clit ++ clit2 ++ verb m vo as! TImperf ++ subj ++comp ;
<Main, TPast,Simul,Ind> => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as! TPast ++ comp ;
<Inv, TPast,Simul,Ind> => negpm ++ clit ++ clit2 ++ verb m vo as! TPast ++ subj ++ comp ;
<Main, TPast,Anterior,Ind> => subj ++ negpm ++ clit ++ clit2 ++ verb m vo as!TImperf ++ comp;
<Inv, TPast,Anterior,Ind> => 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 ;
<Main, _,_,Hortative> => subj ++ "ας" ++ negpm ++ clit ++ clit2 ++ verb m vo as! t ++ comp ;
<Inv, _,_,Hortative> => "ας" ++ 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 <t,vo,as> of {
<TPast,Active, Perf> => v.s ! VPast Ind n p Active Perf ;
<TPast,Passive, Perf> => v.s ! VPast Ind n p Passive Perf ;
<TPast,Active, Imperf> => v.s ! VPast m n p Active Imperf;
<TPast,Passive, Imperf> => v.s ! VPast m n p Passive Imperf;
<TFut,Active,Imperf> => v.s ! VPres Ind n p Active Imperf;
<TFut,Passive,Imperf> => v.s ! VPres Ind n p Passive Imperf;
<TFut,Active,Perf> => v.s ! VPres Con n p Active Perf;
<TFut,Passive, Perf> => v.s ! VPres Con n p Passive Perf;
<TImperf,Active,_> => v.s ! VPast m n p Active Imperf;
<TImperf,Passive,_> => v.s ! VPast m n p Passive Imperf;
<TPres,Active,_> => v.s ! VPres m n p Active Perf;
<TPres,Passive,_> => 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 <p,q> of {
<_,P1> | <_,P2> => P1 ;
<P1,P3> => P1 ;
<P2,P3> => P2 ;
<P3,P3> => 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 <g,n,c> of {
<Masc | Change , Sg, Nom> => "ο";
<Masc | Change,Sg, Gen|CPrep P_Dat> => "του" ;
<Masc | Change,Sg, Acc | CPrep PNul > => prepCase c++ "τον" ;
<Masc | Change,Sg,CPrep P_se > => "στον" ;
<Fem, Sg, Nom> => "η" ;
<Fem, Sg, Gen|CPrep P_Dat> => "της" ;
<Fem, Sg, Acc |CPrep PNul> => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "την" ; _=> "τη"} ;
<Fem, Sg, CPrep P_se > => pre { "ά" | "ό" | "ί"| "έ" | "ή" | "ύ"| "ώ" | "α" | "ο" | "ι"| "ε" |"η" | "υ" | "ω" |"κ"|"π" |"τ"| "ξ" |"ψ"| "γκ" |"μπ" |"ντ" => "στην" ; _=> "στη"} ;
<Neut, Sg, Nom | Acc |CPrep PNul> => prepCase c++ "το" ;
<Neut, Sg, Gen|CPrep P_Dat> => "του" ;
<Neut, Sg, CPrep P_se > => "στο" ;
<Masc,Pl, Nom> => "οι";
<Masc,Pl, Gen|CPrep P_Dat> => "των" ;
<Masc,Pl, Acc |CPrep PNul> => prepCase c++ "τους" ;
<Masc,Pl,CPrep P_se > => "στους" ;
<Fem, Pl, Nom> => "οι" ;
<Fem, Pl, Gen|CPrep P_Dat> => "των" ;
<Fem, Pl, Acc |CPrep PNul> => prepCase c++ "τις";
<Fem, Pl, CPrep P_se > => "στις";
< Neut | Change ,Pl, Nom |Acc |CPrep PNul > => prepCase c++ "τα" ;
< Neut | Change ,Pl, CPrep P_se > => "στα" ;
<Neut | Change, Pl, Gen|CPrep P_Dat> => prepCase c++ "των" ;
<_,_, Vocative > => " "
} ;
relPron : Bool => AAgr => Case => Str = \\b,ag,c =>
case b of {
False => case c of {
Nom => case <ag.g, ag.n > of
{<Fem,Sg> => "η οποία" ;
<Masc |Change,Sg> => "ο οποίος" ;
<Neut,Sg> => "το οποίο" ;
<Fem,Pl> => "οι οποίες" ;
<Masc |Change,Pl> => "οι οποίοι" ;
<Neut,Pl> => "τα οποία"
};
Gen |CPrep P_Dat => case <ag.g, ag.n > of
{<Fem,Sg> => prepCase c ++"της οποίας" ;
<Masc |Change |Neut,Sg> =>prepCase c ++ "του οποίου" ;
<Masc |Change |Fem |Neut ,Pl> => prepCase c ++"των οποίων"
};
Acc | CPrep PNul => case <ag.g, ag.n > of
{<Fem,Sg> => prepCase c ++ "την οποία" ;
<Masc |Change,Sg> => prepCase c ++"τον οποίο" ;
<Neut,Sg> => prepCase c ++ "το οποίο" ;
<Fem,Pl> => prepCase c ++ "τις οποίες" ;
<Masc |Change,Pl> => prepCase c ++"τους οποίους" ;
<Neut,Pl> => prepCase c ++"τα οποία"
};
CPrep P_se => case <ag.g, ag.n > of
{<Fem,Sg> => "στην οποία" ;
<Masc |Change,Sg> => "στον οποίο" ;
<Neut,Sg> => "στο οποίο" ;
<Fem,Pl> => "στις οποίες" ;
<Masc |Change,Pl> => "στους οποίους" ;
<Neut,Pl> => "στα οποία"
} ;
Vocative => case <ag.g, ag.n > of
{<_,_> => " "
}
} ;
_ => "που"
} ;
artIndef : Gender -> Number-> Case -> Str = \g,n,c ->
case <g,n,c> of {
<Masc | Change,Sg, Nom > => "ένας";
<Masc | Change,Sg, Gen|CPrep P_Dat> => "ενός" ;
<Masc | Change,Sg, Acc |CPrep P_se |CPrep PNul> => prepCase c++ "ένα";
<Masc | Change ,Sg, Vocative> => " ";
<Fem, Sg, Nom > => prepCase c++ "μία" ;
<Fem, Sg, Gen|CPrep P_Dat> => "μίας" ;
<Fem, Sg, Acc |CPrep P_se |CPrep PNul > => prepCase c++ "μία" ;
<Fem ,Sg, Vocative> => " ";
<Neut,Sg, Nom|Acc |CPrep P_se |CPrep PNul > =>prepCase c++ "ένα" ;
<Neut,Sg, Gen|CPrep P_Dat> => "ενός";
<Neut ,Sg, Vocative> => " " ;
<_ ,Pl, _> =>prepCase c ++ " "
} ;
reflPron : Agr => Case => Str = \\ag,c => case <ag,c > 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
} ;
}