Greek by Ioanna Papodopoulou - complete, 27th RGL language

This commit is contained in:
aarne
2013-04-25 13:22:28 +00:00
parent 7190af9c7c
commit 5612fcfacf
45 changed files with 8359 additions and 494 deletions

View File

@@ -67,6 +67,8 @@ January 2013
<div class=news2>
<table class=news>
<tr><td>2013-04-25:<td>New resource grammar language: Greek.
See <a href="lib/doc/synopsis.html">library synopsis</a>.
<tr><td>2013-01-31:<td><strong>GF 3.4 released!</strong>
<a href="download/release-3.4.html">Release notes</a>.
<tr><td>2012-12-10:<td>
@@ -75,7 +77,7 @@ January 2013
<tr><td>2012-11-18:<td>
<A HREF="http://school.grammaticalframework.org/2013">GF Summer School</A>
in Frauenchiemsee, 18-30 August 2013.
<tr><td>2012-11-18:<td>New resource grammar language: Chinese
<tr><td>2012-11-18:<td>New resource grammar language: Chinese.
See <a href="lib/doc/synopsis.html">library synopsis</a>.
Complete but not yet perfect.
<tr><td>2012-06-29:<td>GF sources now mirrored in GitHub, with change
@@ -246,6 +248,7 @@ support for an increasing number of languages, currently including
<LI>Finnish
<LI>French
<LI>German
<li>Greek
<li>Hebrew (fragments)
<LI>Hindi
<LI><A HREF="http://www.interlingua.com/">Interlingua</A>

View File

@@ -1,5 +1,5 @@
lang1 = "Eng"
lang2 = "Chi"
lang2 = "Gre"
-- to write a comparison for two languages
@@ -14,7 +14,7 @@ mkExx sss = case sss of
(s1:ss1,s2:ss2) | isMsg s1 -> mkExx (ss1,s2:ss2)
(s1:ss1,s2:ss2) | isMsg s2 -> mkExx (s1:ss1,ss2)
(s1:ss1,s2:ss2) | s1 /= s2 ->
putStrLn (drops s1) >> putStrLn (filter (not . (==' ')) (drops s2)) >> putStrLn [] >> mkExx (ss1,ss2) -- show strings
putStrLn (drops s1) >> putStrLn (drops s2) >> putStrLn [] >> mkExx (ss1,ss2) -- show strings
(s1:ss1,s2:ss2) | s1 == s2 && not (isJunk s1) ->
putStrLn (drops s1) >> mkExx (ss1,ss2) -- show the term
(s1:ss1,s2:ss2) | s1 == s2 -> mkExx (ss1,ss2)

View File

@@ -4,6 +4,8 @@ all: exx synopsis
index:
txt2tags -thtml index.txt
status:
txt2tags -thtml status.txt
synopsis:
runghc MkSynopsis.hs
@@ -27,6 +29,7 @@ exx: exx-script
gf -retain -s ../alltenses/TryFin.gfo <api-examples.gfs >api-examples-Fin.txt
gf -retain -s ../alltenses/TryFre.gfo <api-examples.gfs >api-examples-Fre.txt
gf -retain -s ../alltenses/TryGer.gfo <api-examples.gfs >api-examples-Ger.txt
gf -retain -s ../alltenses/TryGre.gfo <api-examples.gfs >api-examples-Gre.txt
gf -retain -s ../alltenses/TryHin.gfo <api-examples.gfs >api-examples-Hin.txt
gf -retain -s ../alltenses/TryIta.gfo <api-examples.gfs >api-examples-Ita.txt
gf -retain -s ../alltenses/TryJpn.gfo <api-examples.gfs >api-examples-Jpn.txt

View File

@@ -19,7 +19,7 @@ revealedLang = "Eng"
-- all languages shown
apiExxFiles = ["api-examples-" ++ lang ++ ".txt" | lang <- words
-- "Eng Chi"
"Afr Bul Cat Chi Dan Dut Eng Fin Fre Ger Hin Ita Jpn Lav Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd"
"Afr Bul Cat Chi Dan Dut Eng Fin Fre Ger Gre Hin Ita Jpn Lav Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd"
]
main = do
@@ -249,6 +249,7 @@ paradigmFiles = [
("Finnish", srcPath "/finnish/ParadigmsFin.gf"),
("French", srcPath "/french/ParadigmsFre.gf"),
("German", srcPath "/german/ParadigmsGer.gf"),
("Greek", srcPath "/greek/ParadigmsGre.gf"),
("Hindi", srcPath "/hindi/ParadigmsHin.gf"),
-- ("Interlingua", srcPath "/interlingua/ParadigmsIna.gf"),
("Italian", srcPath "/italian/ParadigmsIta.gf"),

View File

@@ -7,7 +7,7 @@
<CENTER>
<H1>The Status of the GF Resource Grammar Library</H1>
<FONT SIZE="4"><I>Aarne Ranta</I></FONT><BR>
<FONT SIZE="4">20130130</FONT>
<FONT SIZE="4">20130425</FONT>
</CENTER>
<P>
@@ -222,6 +222,20 @@ are marked in the table
<TD>*AR,HH,EG</TD>
</TR>
<TR>
<TD>Gre</TD>
<TD>Greek</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*IP</TD>
</TR>
<TR>
<TD>Heb</TD>
<TD>Hebrew</TD>
<TD>+</TD>
@@ -615,6 +629,7 @@ GP Gabriele Paganelli,
IA Ingrid Andersson,
IL Inari Listenmaa,
IN Ilona Novak,
IP Ioanna Papadopoulou,
JB Jean-Philippe Bernardy,
JC John J. Camilleri,
JD Jherna Devi,

View File

@@ -29,6 +29,7 @@ are marked in the table
| Fin | Finnish | + | + | ++ | + | + | + | + | - | + | *AR
| Fre | French | + | + | ++ | + | + | + | + | + | + | *AR,RE
| Ger | German | + | + | ++ | + | + | + | + | + | + | *AR,HH,EG
| Gre | Greek | + | - | ++ | + | + | + | - | - | - | *IP
| Heb | Hebrew | + | - | - | - | - | - | - | - | - | *DD
| Hin | Hindi | + | + | ++ | + | + | + | + | - | - | *SV,*KP,MH,AR
| Ina | Interlingua | + | + | ++ | + | + | - | - | - | - | JB
@@ -98,6 +99,7 @@ GP Gabriele Paganelli,
IA Ingrid Andersson,
IL Inari Listenmaa,
IN Ilona Novak,
IP Ioanna Papadopoulou,
JB Jean-Philippe Bernardy,
JC John J. Camilleri,
JD Jherna Devi,

View File

@@ -8,7 +8,7 @@
=Introduction=
The GF Resource Grammar Library is the standard library for Grammatical Framework.
It covers the morphology and basic syntax of currently 26 languages.
It covers the morphology and basic syntax of currently 27 languages.
This document contains the most important parts of the GF Resource Grammar API,
as needed by a GF application programmer.
@@ -23,12 +23,12 @@ constructing trees in them.
- [Chapter 2 #toc5]: syntactic construction functions, with cross-links and
examples.
- [Chapter 3 #toc83]: morphological paradigms.
- [Chapter 4 #toc108]: additional libraries.
- [Chapter 5 #toc115]: how to "browse" the library by
- [Chapter 4 #toc110]: additional libraries.
- [Chapter 5 #toc116]: how to "browse" the library by
loading the grammars into the ``gf`` command editor.
- [Chapter 6 #toc116]: a brief example of how application grammars can
- [Chapter 6 #toc117]: a brief example of how application grammars can
use the resource modules.
- [Detailed table of contents #toc117].
- [Detailed table of contents #toc118].
Other relevant documents:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
--# -path=.:alltenses:prelude
resource CombinatorsGre = Combinators with
(Cat = CatGre),
(Structural = StructuralGre),
(Constructors = ConstructorsGre) ;

View File

@@ -0,0 +1,3 @@
--# -path=.:alltenses:prelude
resource ConstructorsGre = Constructors with (Grammar = GrammarGre) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:alltenses
resource SymbolicGre = Symbolic with
(Symbol = SymbolGre),
(Grammar = GrammarGre) ;

5
lib/src/api/SyntaxGre.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:./alltenses:../prelude
instance SyntaxGre of Syntax =
ConstructorsGre, CatGre, StructuralGre, CombinatorsGre ;

17
lib/src/api/TryGre.gf Normal file
View File

@@ -0,0 +1,17 @@
--# -path=.:alltenses
resource TryGre = SyntaxGre, LexiconGre, ParadigmsGre ;
{-
-[mkAdv, mkDet,mkQuant]**
open (P = ParadigmsGre) in {
oper
mkAdv = overload SyntaxGre {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
}
-}

View File

@@ -0,0 +1,80 @@
concrete AdjectiveGre of Adjective = CatGre ** open ResGre, Prelude in {
flags coding=utf8;
lin
PositA a = {
s = \\_=> a.s ! Posit;
adv = a.adv ;
} ;
ComparA a np = {
s = \\d,g,n,c => a.s ! Compar! g ! n ! Nom ++ "από" ++ (np.s ! CPrep PNul).comp ;
adv = a.adv ;
} ;
ComplA2 adj np = {
s = \\d,g,n,c => adj.s ! Posit !g ! n ! Nom ++ appCompl adj.c2 np ;
adv = adj.adv ;
isPre = False
} ;
ReflA2 adj = {
s = \\d,g,n,c => adj.s ! Posit !g ! n ! Nom ++ adj.c2.s ++ reflPron ! (Ag g n P3) !Acc ;
isPre = False ;
adv= adj.adv
} ;
UseA2 a = {
s = \\_ => a.s ! Posit ;
adv = a.adv ;
} ;
UseComparA a = {
s = \\_ => a.s ! Compar ;
adv = a.adv ;
} ;
CAdvAP ad ap np = {
s = \\d,g,n,c => ad.s ++ ap.s ! d ! g ! n ! c ++ ad.p ++ (np.s ! ad.c).comp ;
adv = ap.adv ;
} ;
AdjOrd ord = {
s = \\_, g, n, c => ord.s ! Posit ! g !n ! c;
adv = ord.adv ;
} ;
SentAP ap sc = {
s = \\d,g,n,c => ap.s ! d! g ! n! Nom ++ sc.s ;
adv = ap.adv ;
isPre = False
} ;
AdAP ada ap = {
s = \\d,g,n,c => ada.s ++ ap.s ! d ! g ! n ! c ;
adv = ap.adv ;
} ;
AdvAP ap adv = {
s = \\d,g,n,c=> ap.s ! d ! g! n ! Nom ++ adv.s ;
isPre = False ;
adv= ap.adv
} ;
}

View File

@@ -0,0 +1,35 @@
concrete AdverbGre of Adverb = CatGre ** open ResGre, Prelude in {
flags coding = utf8 ;
lin
PositAdvAdj a = {s = a.adv ! Posit} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.adv ! Posit ++ cadv.p ++ (np.s ! cadv.c).comp
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.adv ! Posit ++ cadv.p ++ "ότι" ++ s.s ! Ind
} ;
PrepNP prep np = {
s = prep.s ++ (np.s ! prep.c).comp
} ;
AdAdv = cc2 ;
PositAdAAdj a = {s = a.adv ! Posit} ;
SubjS subj s = {
s = subj.s ++ s.s ! subj.m
} ;
AdnCAdv cadv = {s = cadv.s ++ cadv.p} ;
}

8
lib/src/greek/AllGre.gf Normal file
View File

@@ -0,0 +1,8 @@
--# -path=.:../abstract:../common
concrete AllGre of AllGreAbs =
LangGre,
ExtraGre
** {} ;

View File

@@ -0,0 +1,4 @@
abstract AllGreAbs =
Lang,
ExtraGreAbs
** {} ;

View File

@@ -0,0 +1,87 @@
concrete BackwardGre of Backward = CatGre ** open ResGre in {
flags optimize=all_subs ;
lin
-- A repository of obsolete constructs, needed for backward compatibility.
-- They create spurious ambiguities if used in combination with Lang.
-- from Verb 19/4/2008
ComplV2 v2 np =
let
nps = np.s ! v2.c
in {
v = v2 ;
clit = nps.clit ;
obj = \\_ => nps.obj
} ;
-- ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
-- ComplV3 v np np2 =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
-- ComplV2V v np vp =
-- insertObj (\\a => infVP v.isAux vp Simul CPos a)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2S v np s =
-- insertObj (\\_ => conjThat ++ s.s)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2Q v np q =
-- insertObj (\\_ => q.s ! QIndir)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2A v np ap =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
-- from Sentence 19/4/2008
- SlashV2 np v2 =
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
-- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a
--- (insertObj (\\a => infVP vv.isAux (predV v2) Simul CPos a) (predVV vv)) **
-- {c2 = v2.c2} ;
-- from Noun 19/4/2008
--NumInt n = {s = n.s ; n = Pl} ;
-- OrdInt n = {s = n.s ++ "th"} ; --- DEPRECATED
-- DetSg quant ord = {
-- s = quant.s ! Sg ++ ord.s ;
-- n = Sg
-- } ;
-- DetPl quant num ord = {
-- s = quant.s ! num.n ++ num.s ++ ord.s ;
-- n = num.n
-- } ;
-- NoNum = {s = []; n = Pl } ;
-- DefArt = {s = \\_ => artDef} ;
-- IndefArt = {
-- s = table {
-- Sg => artIndef ;
-- Pl => []
-- }
-- } ;
--MassDet = {s = \\_ => []} ;
-- from Structural 19/4/2008
-- that_NP = regNP "that" Sg ;
-- these_NP = regNP "these" Pl ;
-- this_NP = regNP "this" Sg ;
-- those_NP = regNP "those" Pl ;
}

2840
lib/src/greek/BeschGre.gf Normal file

File diff suppressed because it is too large Load Diff

102
lib/src/greek/CatGre.gf Normal file
View File

@@ -0,0 +1,102 @@
concrete CatGre of Cat = CommonGre ** open ResGre, Prelude in {
flags coding =utf8 ;
lincat
S = {s : Mood => Str} ;
QS = {s : QForm => Str} ;
RS = {s : Mood => Agr => Str ; c : Case} ;
SSlash = { s : AAgr => Mood => Str ;n3 : Agr => Str ; c2 : Compl} ;
Cl = {s :Order => ResGre.TTense => Anteriority => Polarity => Mood => Str} ;
ClSlash = {s : AAgr => Order => ResGre.TTense => Anteriority => Polarity => Mood => Str ;n3 : Agr => Str ; c2 : Compl} ;
Imp = {s : Polarity => Number => Aspect => Str } ;
QCl = {s : ResGre.TTense => Anteriority => Polarity => QForm => Str} ;
IP = {s : Gender => Case => Str ; n : Number ;a : AAgr};
IComp = {s : Str} ;
IDet = {s : Gender => Case => Str ; n : Number} ;
IQuant = {s : Number => Gender => Case => Str } ;
RCl = {s : Agr => ResGre.TTense => Anteriority => Polarity => Mood => Str ; c : Case } ;
RP = {s : Bool => AAgr => Case => Str ; a : AAgr ; hasAgr : Bool} ;
VP = ResGre.VP ;
VPSlash = ResGre.VP ** {n3 : Agr => Str ; c2 : Compl} ;
Comp = {s : Agr => Str} ;
AP = ResGre.Adj ;
-- Noun
CN = Noun ;
NP =NounPhrase;
Pron = Pronoun ;
Det = {s : Gender => Case => Str ; sp : Gender => Case => Str ; n : Number ;isNeg : Bool};
Predet = {s :Number => Gender => Case =>Str} ;
Ord = {s :Degree => Gender => Number => Case => Str ; adv : Degree => Str } ;
Num = {s : Gender => Case => Str ; isNum : Bool ; n : Number} ;
Card = {s : Gender => Case => Str ; n : Number} ;
Quant = ResGre.Quantifier;
-- Numerals
Numeral = {s : CardOrd => Str ; n : Number } ;
Digits = {s : CardOrd => Str ; n : Number} ;
-- Structural
Conj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str ; m : Mood} ;
Prep = {s : Str ; c : Case ; isDir : Bool} ;
-- Open lexical classes, e.g. Lexicon
V, VS, VQ, VA = Verb ;
V2, VV, V2S, V2Q = Verb ** {c2 : Compl} ;
V3, V2V,V2A = Verb ** {c2, c3 : Compl} ;
A = ResGre.Adj ; --{s : Degree => Gender => Number => Case => Str } ;
A2 = {s :Degree => Gender => Number => Case => Str ; adv : Degree => Str ;c2 : Compl } ;
N = Noun;
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Compl} ;
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Compl} ;
PN = PName ;
}

View File

@@ -0,0 +1,30 @@
concrete CommonGre of Common = open (R = ParamX), ResGre in {
flags coding = utf8 ;
lincat
Text = {s : Str} ;
Phr = {s : Str} ;
Utt = {s : Str} ;
Voc = {s : Str} ;
SC = {s : Str} ;
Adv = {s : Str} ;
AdV = {s : Str} ;
AdA = {s : Str} ;
AdN = {s : Str} ;
IAdv = {s : Str} ;
CAdv = {s : Str; p : Str} ** {c:Case};
PConj = {s : Str} ;
Interj = {s : Str} ;
Temp = {s : Str ; t : TTense ; a : R.Anteriority ;m : Mood } ;
Tense = {s : Str ; t : TTense ; m : Mood } ;
Ant = {s : Str ; a : R.Anteriority} ;
Pol = {s : Str ; p : R.Polarity} ;
}

View File

@@ -0,0 +1,77 @@
concrete ConjunctionGre of Conjunction =
CatGre ** open CommonGre, ResGre, Coordination, Prelude in {
flags coding =utf8 ;
lin
ConjS conj ss = conjunctDistrTable Mood conj ss ;
ConjAdv conj ss = conjunctDistrSS conj ss ;
ConjNP conj ss = heavyNP (conjunctDistrTable Case conj ss ** {
a = Ag (agrFeatures ss.a).g (conjNumber (agrFeatures ss.a).n conj.n) (agrFeatures ss.a).p ;
isClit = False ; isNeg = ss.isNeg
}) ;
ConjAP conj ss = conjunctDistrTable4 Degree Gender Number Case conj ss ** {
adv = ss.adv
} ;
ConjRS conj ss = conjunctDistrTable2 Mood Agr conj ss ** {
c = ss.c
} ;
ConjIAdv = conjunctDistrSS ;
ConjCN co ns = conjunctDistrTable2 Number Case co ns ** {g = ns.g;} ;
BaseS = twoTable Mood ;
ConsS = consrTable Mood comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseNP x y = {
s1 = \\c => (x.s ! conjunctCase c).comp ;
s2 = \\c => (y.s ! conjunctCase c).comp ;
a = conjAgr Sg x.a y.a ; isNeg = orB x.isNeg y.isNeg
} ;
ConsNP x xs = {
s1 = \\c => (x.s ! conjunctCase c).comp ++ comma ++ xs.s1 ! c ;
s2 = \\c => xs.s2 ! conjunctCase c ;
a = conjAgr Sg x.a xs.a ; isNeg = orB x.isNeg xs.isNeg
} ;
BaseAP x y = twoTable4 Degree Gender Number Case x y ** {adv = x.adv} ;
ConsAP xs x = consrTable4 Degree Gender Number Case comma xs x ** {adv = x.adv};
BaseIAdv = twoSS ;
ConsIAdv = consrSS comma ;
BaseRS x y = twoTable2 Mood Agr x y ** {c = y.c} ;
ConsRS xs x = consrTable2 Mood Agr comma xs x ** {c = xs.c} ;
BaseCN x y = twoTable2 Number Case x y ** {g = conjGender x.g y.g } ;
ConsCN x xs = consrTable2 Number Case comma x xs ** {g = conjGender x.g xs.g } ;
lincat
[S] = {s1,s2 : Mood => Str} ;
[Adv] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr } ;
[AP] = {s1,s2 : Degree => Gender => Number => Case => Str ; adv : Degree => Str } ;
[RS] = {s1,s2 : Mood => Agr => Str ; c : Case} ;
[CN] = {s1,s2 : Number => Case => Str ; g : Gender} ;
}

27
lib/src/greek/ExtraGre.gf Normal file
View File

@@ -0,0 +1,27 @@
concrete ExtraGre of ExtraGreAbs = CatGre **
open
CommonGre,
ResGre,
NounGre,
PhraseGre,
SentenceGre,
Prelude in {
flags coding = utf8 ;
lin
-- TImperf = {s = [] ; t = ResGre.TImperf; m = Ind} ;
UttImpSgImperf pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg ! Imperf} ;
UttImpPlImperf pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl ! Imperf} ;
theyFem_Pron = mkPron "αυτές" "τους" "τις" "αυτές" "αυτών" Fem Pl P3 ;
theyNeut_Pron = mkPron "αυτά" "τους" "τα" "αυτά" "αυτών" Neut Pl P3 ;
}

View File

@@ -0,0 +1,12 @@
abstract ExtraGreAbs = Extra ** {
fun
TPasse, TImperf : Tense ;
theyFem_Pron: Pron ;
theyNeut_Pron: Pron ;
UttImpSgImperf : Pol -> Imp -> Utt; -- (don't) love yourself
UttImpPlImperf : Pol -> Imp -> Utt; -- (don't) love yourselves
}

View File

@@ -0,0 +1,26 @@
concrete GrammarGre of Grammar =
VerbGre,
NounGre,
SentenceGre,
PhraseGre,
StructuralGre,
RelativeGre,
AdjectiveGre,
ConjunctionGre,
NumeralGre,
AdverbGre,
TenseGre,
TextGre,
IdiomGre,
QuestionGre
;

55
lib/src/greek/IdiomGre.gf Normal file
View File

@@ -0,0 +1,55 @@
concrete IdiomGre of Idiom = CatGre ** open Prelude,BeschGre, ResGre in {
flags coding=utf8 ;
lin
ImpersCl vp = predVP [] (Ag Neut Sg P3) vp ;
GenericCl vp = predVP "κάποιος" (Ag Neut Sg P3) vp ;
CleftNP np rs = predVP [] (np.a)
(insertComplement (\\_ => rs.s ! Ind ! np.a)
(insertComplement (\\_ => (np.s ! rs.c).comp) (predV copula))) ;
CleftAdv ad s = predVP [] (agrP3 Masc Sg)
(insertComplement (\\_ => "που" ++ s.s ! Ind)
(insertComplement (\\_ => ad.s) (predV copula))) ;
ExistNP np =
predVP [] (np.a)
(insertComplement (\\_ => (np.s ! Nom).comp) (predV Exist)) ;
ExistIP ip = {
s = \\t,a,p =>
let
cls = (predVP [] (agrP3 Neut ip.n) (predV Exist)).s ! Inv ! t ! a ! p ! Ind ;
who = ip.s ! Neut ! Acc
in table {
QDir => who ++ cls ;
QIndir => who ++ cls
}
} ;
ProgrVP vp = {
v = vp.v;
clit = vp.clit ;
clit2 = vp.clit2 ;
comp = \\a => vp.comp ! a;
isNeg=False;
voice = vp.voice ;
aspect = Imperf
} ;
ImpPl1 vp = {s = (predVP [] (Ag Masc Pl P1) vp).s ! Main ! TPres ! Simul ! Pos !Hortative } ;
ImpP3 np vp = {s = (predVP (np.s ! Nom).comp np.a vp).s ! Inv ! TPres ! Simul ! Pos !Hortative } ;
}

4
lib/src/greek/LangGre.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete LangGre of Lang =
GrammarGre,
LexiconGre
;

360
lib/src/greek/LexiconGre.gf Normal file
View File

@@ -0,0 +1,360 @@
concrete LexiconGre of Lexicon = CatGre **
open ParadigmsGre,ResGre, BeschGre, Prelude in {
flags coding = utf8 ;
lin
add_V3 = dirV3 (v_Verb1dx "προσθέτω" "προσθέσω" "πρόσθεσα" "πρόσθετα")prepse ;
airplane_N = mkN "αεροπλάνο" ;
alas_Interj = ss "αλλοίμονο" ;
already_Adv = ss "ήδη" ;
animal_N = mkN "ζώο" ;
answer_V2S = mkV2S (v_Verb2a "απαντώ" "απαντήσω" "απάντησα" "απαντούσα") gen ;
apartment_N = mkN "διαμέρισμα" "διαμερίσματα" Neut;
apple_N = mkN "μήλο" ;
art_N = mkN "τέχνη" Fem ;
ashes_N = mkN "στάχτη" Fem ;
ask_V2Q = mkV2Q (v_Verb2a "ρωτώ" "ρωτήσω" "ρώτησα" "ρωτούσα") acc ;
baby_N = mkN "μωρό" ;
back_N = mkN "πλάτη" Fem;
bad_A = mkAd3 "κακός" ;
bank_N = mkN "τράπεζα" Fem;
bark_N =mkN "γάβγισμα" "γαβγίσματα" Neut ;
beautiful_A = mkAd3 "όμορφος" ;
become_VA = mkVA (v_VerbDeponent3 "γίνομαι" "γίνω" "έγινα" "γινόμουν" "γίνε" "γίνετε" "γινωμένος") ;
beer_N = mkNoun_thalassa "μπύρα" Fem ;
beg_V2V = mkV2V (v_Verb2a "παρακαλώ" "παρακαλέσω" "παρακάλεσα" "παρακαλούσα" ) acc acc ;
belly_N = mkN "κοιλιά" ;
big_A = mkAd3 "μεγάλος" ;
bike_N = mkN "ποδήλατο" "ποδηλάτων" Neut;
bird_N = mkN "πουλί" ;
bite_V2 = dirV2 (v_Verb1b "δαγκώνω" "δαγκώσω" "δάγκωσα" "δάγκωνα") ;
black_A = mkA "μαύρος" ;
blood_N = regIrreg "αίμα" ;
blow_V = v_Verb2a "φυσώ" "φυσήξω" "φύσηξα" "φυσούσα" ;
blue_A = mkAdjAklito "μπλέ" ;
boat_N = mkN "βάρκα" Fem;
bone_N = mkN "κόκκαλο" ;
breast_N = mkN "στήθος" Fem ;
breathe_V = v_VerbNoPassive "αναπνέω" "αναπνεύσω" "ανέπνευσα" "ανέπνεα" "ανέπνευσε" "" ;
book_N =mkN "βιβλίο" ;
boot_N = mkN "μπότα" Fem;
boss_N = mkN "αφεντικό" ;
boy_N = mkN "αγόρι" Neut;
bread_N = mkN "ψωμί" ;
break_V2 = dirV2(v_VerbContr2 "σπάω" "σπάσω" "έσπασα" "έσπαζα") ;
broad_A = mkA "ευρύς" "ευρέως" ;
brother_N2 = ofN2 (mkN "αδελφός") ;
brown_A = mkAdjAklito "καφέ" ;
burn_V= v_VerbContr2 "κλαίω" "κλάψω" "έκλαψα" "έκλαιγα" ;
butter_N = mkN "βούτυρο" "βουτύρων" Neut;
buy_V2= dirV2 (v_Verb1d "αγοράζω" "αγοράσω" "αγόρασα" "αγόραζα" ) ;
camera_N = mkN "κάμερα" Fem;
cap_N = mkN "καπάκι" Neut;
car_N = mkN "αυτοκίνητο" "αυτοκινήτων" Neut ;
carpet_N = mkN "χαλί" ;
cat_N = mkN "γάτα" Fem;
ceiling_N = mkN "ταβάνι" Neut ;
chair_N = mkN "καρέκλα" Fem ;
cheese_N = mkN "τυρί";
child_N = mkN "παιδί";
church_N = mkN "εκκλησία" Fem;
city_N = mkN "πόλη" "πόλεις" Fem;
clean_A = mkAd3 "καθαρός" ;
clever_A = mkAd3 "έξυπνος" ;
close_V2 = dirV2 (v_Verb1c "κλείνω" "κλείσω" "έκλεισα" "έκλεινα") ;
cloud_N= mkN "σύννεφο" ;
coat_N = mkN "παλτό" ;
cold_A = mkAd "κρύος" ;
come_V = v_VerbDeponent4 "έρχομαι" "έρθω" "ήρθα" "ερχόμουν" "έλα" "ελάτε" "ερχόμενος" ;
computer_N = mkN "υπολογιστής" ;
correct_A = mkAd3 "σωστός" ;
country_N = mkN "χώρα" Fem;
count_V2 = dirV2 (v_Verb2a "μετρώ" "μετρήσω" "μέτρησα" "μετρούσα") ;
cousin_N = mkN "ξάδελφος" "ξαδέλφων" Masc ;
cow_N = mkN "αγελάδα" ;
cut_V2 = dirV2 (v_Verb1c "κόβω" "κόψω" "έκοψα" "έκοβα") ;
day_N = mkN "μέρα" Fem;
die_V = v_VerbNoPassive "πεθαίνω" "πεθάνω" "πέθανα" "πέθαινα" "πέθανε" "πεθαμένος" ;
dig_V =v_Verb1c "σκάβω" "σκάψω" "έσκαψα" "έσκαβα" ;
dirty_A = regAdj "βρώμικος" ;
distance_N3 = mkN3 (mkN "απόσταση" "αποστάσεις" Fem) acc (mkPreposition "ως" ** {lock_Prep = <>});
doctor_N = mkN "γιατρός" ;
dog_N = mkN "σκύλος" ;
door_N = mkN "πόρτα" Fem;
do_V2 = dirV2 (v_VerbNoPassive1 "κάνω" "κάνω" "έκανα" "έκανα" " ") ;
drink_V2 = dirV2 (v_VerbContrIrregNPassPerf "πίνω" "πιώ" "ήπια" "έπινα");
dry_A = mkA "στεγνός" ;
dull_A = mkA "αμβλύς" "αμβλέως" ;
dust_N = mkN "σκόνη" Fem ;
ear_N =mkN "αφτί" ;
earth_N = mkN "γή" "γής" "γή" "γή" "" "" "" "" Fem ;
easy_A2V = mkA2V (mkAd "εύκολος") acc gen ;
eat_V2 = dirV2 (v_VerbContrIrreg "τρώω" "φάω" "έφαγα" "έτρωγα" ) ;
egg_N = mkN "αβγό" ;
empty_A = mkAd "άδειος" ;
enemy_N = mkN "εχθρός" ;
eye_N =mkN "μάτι" Neut ;
factory_N = mkN "εργοστάσιο" "εργοστασίων" Neut;
fall_V = v_VerbNoPassive1 "πέφτω" "πέσω" "έπεσα" "έπεφτα" "πεσμένος" ;
far_Adv = ss "μακρυά" ;
father_N2 = ofN2 (mkN "πατέρας") ;
fat_N = mkN "λίπος" Neut ;
fear_VS = mkVS (v_VerbDeponent "φοβάμαι" "φοβηθώ" "φοβήθηκα" "φοβόμουν" "φοβήσου" "φοβισμένος") ;
fear_V2 =dirV2 (v_VerbDeponent "φοβάμαι" "φοβηθώ" "φοβήθηκα" "φοβόμουν" "φοβήσου" "φοβισμένος") ;
feather_N = mkN "φτερό" ;
fight_V2 = dirV2 (v_Verb2a "πολεμώ" "πολεμήσω" "πολέμησα" "πολεμούσα" ) ;
find_V2 = dirV2 (v_VerbContracIrregNopassive "βρίσκω" "βρώ" "βρήκα" "έβρισκα" "βρες" "βρισκόμενος");
fingernail_N = mkN "νύχι" Neut ;
fire_N = mkN "φωτιά" ;
fish_N = mkN "ψάρι" Neut ;
float_V = v_VerbNoPassive1 "πλέω" "πλεύσω" "έπλευσα" "έπλεα" "πλεούμενος" ;
floor_N = mkN "πάτωμα" "πατώματα" Neut;
flower_N = mkN "λουλούδι" Neut ;
flow_V = v_Verb2b "κυλώ" "κυλήσω" "κύλησα" "κυλούσα" ;
fly_V = v_Verb2b "πετώ" "πετάξω" "πέταξα" "πετούσα" ;
fog_N = mkN "ομίχλη" Fem ;
foot_N = mkN "πόδι" Neut ;
forest_N = mkN "δάσος" Neut ;
forget_V2 = dirV2 (v_VerbNoPassive3 "ξεχνώ" "ξεχάσω" "ξέχασα" "ξεχνούσα" "ξέχνα" "ξεχασμένος" );
freeze_V = v_VerbNoPassive "παγώνω" "παγώσω" "πάγωσα" "πάγωνα" "πάγωσε" "παγωμένος" ;
fridge_N = mkN "ψυγείο" ;
friend_N = mkN "φίλος" ; --ΟΧΙ γιατι εχει 3 γενη
fruit_N = mkN "φρούτο" ;
full_A = mkA "γεμάτος" ;
fun_AV = mkAV (mkAd "αστείος") ;
garden_N = mkN "κήπος" ;
girl_N = mkN "κορίτσι" Neut ;
give_V3 = dirV3 (v_Verb1a "δίνω" "δώσω" "έδωσα" "έδινα") gen ;
glove_N = mkN "γάντι" Neut;
gold_N = mkN "χρυσός" ;
good_A = mkAd3 "καλός" ;
go_V = v_Verbirreg_pigaInw "πηγαίνω" "πάω" "πήγα" "πήγαινα" ;
grammar_N =mkN "γραμματική" ;
grass_N = mkN "γρασίδι" Neut ;
green_A = regAdj "πράσινος" ;
guts_N = mkN "έντερο" "εντέρων" Neut ;
hair_N =mkN "τρίχα" Fem ;
hand_N = mkN "χέρι" Neut ;
harbour_N = mkN "λιμάνι" Neut;
hate_V2 = dirV2 (v_mkVerb2B3 "μισώ" "μισήσω" "μίσησα" "μισούσα");
hat_N = regN "καπέλο" ;
head_N =mkN "κεφάλι" Neut ;
heart_N =mkN "καρδιά" ;
hear_V2 = dirV2 (v_VerbContr "ακούω" "ακούσω" "άκουσα" "άκουγα");
heavy_A =mkAd4 "βαρύς" ;
hill_N = mkN "λόφος" ;
hit_V2 = dirV2 (v_Verb2a "χτυπώ" "χτυπήσω" "χτύπησα" "χτυπούσα" );
hold_V2 = dirV2 (v_Verb2a "κρατώ" "κρατήσω" "κράτησα" "κρατούσα" );
hope_VS = mkVS (v_VerbNoPassive "ελπίζω" "ελπίσω" "ήλπισα" "ήλπιζα" "έλπισε" " ") ;
horn_N =mkN "κέρατο" "κεράτων" Neut;
horse_N = mkN "άλογο" "αλόγων" Neut;
hot_A = mkAd3 "ζεστός" ;
house_N = mkN "σπίτι" Neut;
hunt_V2 =dirV2 (v_Verb2a "κυνηγώ" "κυνηγήσω" "κυνήγησα" "κυνηγούσα" );
husband_N =mkN "σύζηγος" "συζήγων" Masc ;
ice_N = mkN "πάγος" ;
important_A = mkAd3 "σημαντικός" ;
industry_N = mkN "βιομηχανία" Fem ;
iron_N = mkN "σίδερο" ;
john_PN = mkPN "Γιάννης" ;
jump_V = v_Verb2a "πηδώ" "πηδήξω" "πήδηξα" "πηδούσα";
kill_V2= dirV2 (v_Verb1dx "σκοτώνω" "σκοτώσω" "σκότωσα" "σκότωνα" ) ;
king_N = regNaniso "βασιλιάς" ;
knee_N = mkN "γόνατο" "γονάτων" Neut;
know_V2 = dirV2 (v_VerbNoPassive1 "ξέρω" "ξέρω" "ήξερα" "ήξερα" " ");
know_VQ = mkVQ (v_VerbNoPassive1 "ξέρω" "ξέρω" "ήξερα" "ήξερα" " ");
know_VS = mkVS (v_VerbNoPassive1 "ξέρω" "ξέρω" "ήξερα" "ήξερα" " ");
lake_N = mkN "λίμνη" Fem;
lamp_N = mkN "λάμπα" Fem ;
language_N =mkN "γλώσσα" Fem ;
laugh_V = v_Verb2a "γελώ" "γελάσω" "γέλασα" "γελούσα" ;
leaf_N = mkN "φύλλο" ;
learn_V2 = dirV2 (v_Verb1dxx "μαθαίνω" "μάθω" "έμαθα" "μάθαινα");
leather_N = mkN "δέρμα" "δέρματα" Neut ;
leave_V2 = dirV2 (v_Verb1b "αφήνω" "αφήσω" "άφησα" "άφηνα" );
left_Ord =mkA "αριστερός";
leg_N = mkN "πόδι" Neut ;
lie_V = compoundV (v_VerbContrIrreg2 "λέω" "πώ" "είπα" "έλεγα" ) "ψέματα" ;
like_V2 = dirV2 (v_Verb2a "αγαπώ" "αγαπήσω" "αγάπησα" "αγαπούσα" );
like_V2 = dirV2 (v_Verb2a "αγαπώ" "αγαπήσω" "αγάπησα" "αγαπούσα" );
listen_V2 = dirV2 (v_VerbContr "ακούω" "ακούσω" "άκουσα" "άκουγα");
liver_N = mkN "συκώτι" Neut ;
live_V = VerbNoPassive4 "ζώ" "ζήσω" "έζησα" "ζούσα" "ζήσε" " " ;
long_A = mkAd4 "μακρύς" ;
lose_V2 = dirV2 (v_Verb1a "χάνω" "χάσω" "έχασα" "έχανα") ;
louse_N =mkN "ψείρα" Fem;
love_N = mkN "αγάπη" Fem ;
love_V2 = dirV2 (v_Verb2a "αγαπώ" "αγαπήσω" "αγάπησα" "αγαπούσα" );
man_N = mkN "άνδρας" Masc ;
married_A2 = mkA2 (mkA "παντρεμένος") (mkPreposition "με" ** {lock_Prep = <>});
meat_N = regIrreg "τέρας" ;
milk_N = regIrreg "γάλα" ;
moon_N = mkN "φεγγάρι" Neut;
mother_N2 = ofN2 (mkN "μητέρα");
mountain_N = mkN "βουνό";
mouth_N = mkN "στόμα" "στόματα" Neut;
music_N = mkN "μουσική" ;
name_N = mkN "όνομα" "ονόματα" Neut;
narrow_A = mkA "στενός" ;
near_A = mkA "κοντινός" ;
neck_N = mkN "λαιμός" ;
new_A = mkAd "καινούριος" ;
newspaper_N = mkN "εφημερίδα" ;
night_N = mkN "νύχτα" Fem ;
nose_N = mkN "μύτη" Fem ;
now_Adv = ss "τώρα" ;
number_N = mkN "αριθμός" ;
oil_N = mkN "λάδι" Neut;
old_A = mkAd "παλιός" ;
open_V2 = dirV2 (v_Verb1b "ανοίγω" "ανοίξω" "άνοιξα" "άνοιγα");
paint_V2A = mkV2A (v_Verb1a "βάφω" "βάψω" "έβαψα" "έβαφα" ) acc acc;
paper_N = mkN "χαρτί" ;
paris_PN = mkPN "Παρίσι" ;
peace_N = mkN "ειρήνη" Fem;
pen_N = mkNounAklito "στυλό" Neut;
person_N = mkN "πρόσωπο" "προσώπων" Neut ;
planet_N = mkN "πλανήτης" Neut;
plastic_N = mkN "πλαστικό" ;
play_V = v_Verb1a "παίζω" "παίξω" "έπαιξα" "έπαιζα" ;
play_V2 = dirV2 (v_Verb1a "παίζω" "παίξω" "έπαιξα" "έπαιζα" );
policeman_N = mkN "αστυνομικός" ;
priest_N = regNaniso "παπάς" ;
probable_AS = mkAS (mkAd3 "πιθανός") ;
pull_V2 = dirV2 ( v_Verb2a "τραβώ" "τραβήξω" "τράβηξα" "τραβούσα" ) ;
push_V2 = dirV2 (v_Verb1c "σπρώχνω" "σπρώξω" "έσπρωξα" "έσπρωχνα" ) ;
put_V2 = dirV2 (v_Verb1c "βάζω" "βάλω" "έβαλα" "έβαζα" ) ;
queen_N = mkN "βασίλισσα" Fem;
question_N = mkN "ερώτηση" "ερωτήσεις" Fem ;
radio_N = mkN "ραδιόφωνο" "ραδιοφώνων" Neut ;
rain_N = mkN "βροχή" ;
rain_V0 = mkV0 (v_mkVerbAproswpo "βρέχει" "βρέξει" "έβρεξε" "έβρεχε") ;
read_V2 = dirV2 (v_Verb1d "διαβάζω" "διαβάσω" "διάβασα" "διάβαζα");
ready_A = mkA "έτοιμος" ;
reason_N = mkN "λόγος" ;
red_A = regAdj "κόκκινος" ;
religion_N = mkN "θρησκεία" Fem ;
restaurant_N = mkN "εστιατόριο" "εστιατορίων" Neut ;
right_Ord =mkAd "δεξιός" ;
river_N = mkN "ποτάμι" Neut ;
road_N = mkN "δρόμος" ;
rock_N = mkN "βράχος" ;
roof_N = mkN "στέγη" Fem;
root_N = mkN "ρίζα" Fem ;
rope_N = mkN "σχοινί" ;
rotten_A = mkAd "σάπιος" ;
round_A = mkA "στρογγυλός" ;
rubber_N = mkN "γόμα" Fem ;
rub_V2 = dirV2 (v_Verb1a "τρίβω" "τρίψω" "έτριψα" "έτριβα") ;
rule_N = mkN "κανόνας" ;
run_V = VerbNoPassive1 "τρέχω" "τρέξω" "έτρεξα" "έτρεχα" " " ;
salt_N = mkN "αλάτι" Neut;
sand_N = mkN "άμμος" "άμμων" Fem;
say_VS = mkVS ( v_VerbContrIrreg2 "λέω" "πώ" "είπα" "έλεγα");
school_N = mkN "σχολείο" ;
science_N = mkN "επιστήμη" Fem ;
scratch_V2 = dirV2 (v_Verb1a "ξύνω" "ξύσω" "έξυσα" "έξυνα") ;
sea_N = mkN "θάλασσα" Fem ;
seed_N =mkN "σπόρος" ;
seek_V2 = dirV2 (v_Verb2a "αναζητώ" "αναζητήσω" "αναζήτησα" "αναζητούσα");
see_V2 = dirV2 ( v_VerbContrIrreg3 "βλέπω" "δώ" "είδα" "έβλεπα" );
sell_V3 = dirV3 (v_Verb2a "πουλώ" "πουλήσω" "πούλησα" "πουλούσα") prepse;
send_V3 = dirV3 (v_Verb1a "στέλνω" "στείλω" "έστειλα" "έστελνα") prepse ;
sew_V = v_Verb1a "ράβω" "ράψω" "έραψα" "έραβα" ;
sharp_A =mkA "αιχμηρός" ;
sheep_N = mkN "πρόβατο" "προβάτων" Neut ;
ship_N = mkN "πλοίο" ;
shirt_N = mkN "πουκάμισο" ;
shoe_N = mkN "παπούτσι" Neut;
shop_N = mkN "κατάστημα" "καταστήματα" Neut ;
short_A = mkAd "κοντός" ;
silver_N = mkN "ασήμι" Neut;
sing_V = v_Verb2a "τραγουδώ" "τραγουδήσω" "τραγούδησα" "τραγουδούσα" ;
sister_N = mkN "αδελφή" ;
sit_V = v_VerbDeponent5 "κάθομαι" "καθήσω" "κάθησα" "καθόμουν" "κάθισε" "καθίστε" "καθισμένος" ;
skin_N = regIrreg "δέρμα" ;
sky_N = mkN "ουρανός" ;
sleep_V = v_VerbDeponent "κοιμάμαι" "κοιμηθώ" "κοιμήθηκα" "κοιμόμουν" "κοιμήσου" "κοιμισμένος" ;
small_A = mkAd3 "μικρός" ;
smell_V = v_Verb1d "μυρίζω" "μυρίσω" "μύρισα" "μύριζα" ;
smoke_N = mkN "καπνός" ;
smooth_A = mkA "μαλακός" ;
snake_N = mkN "φίδι" Neut;
snow_N = mkN "χιόνι" Neut;
sock_N = mkN "κάλτσα" Fem ;
song_N = mkN "τραγούδι" Neut ;
speak_V2 = dirV2 ( v_Verb2a "μιλώ" "μιλήσω" "μίλησα" "μιλούσα") ;
spit_V = v_Verb1c "φτύνω" "φτύσω" "έφτυσα" "έφτυνα" ;
split_V2 = dirV2 (v_Verb1d "χωρίζω" "χωρίσω" "χώρισα" "χώριζα") ;
squeeze_V2 = dirV2 (v_Verb1c "σφίγγω" "σφίξω" "έσφιξα" "έσφιγγα" );
stab_V2 = dirV2 (v_Verb1b "μαχαιρώνω" "μαχαιρώσω" "μαχαίρωσα" "μαχαίρωνα");
stand_V = v_VerbDeponent2 "στέκομαι" "σταθώ" "στάθηκα" "στεκόμουν" "στάσου" "στεκόμενος" ;
star_N = mkN "αστέρι" Neut ;
steel_N = mkN "ατσάλι" Neut;
stick_N = mkN "ραβδί" ;
stone_N = mkN "πέτρα" Fem ;
stop_V = v_Verb2a "σταματώ" "σταματήσω" "σταμάτησα" "σταματούσα" ;
stove_N = mkN "φούρνος" ;
straight_A = mkAd "ίσιος" ;
student_N = mkN "φοιτητής" ;
stupid_A = mkAdIrreg "ηλίθιος" ;
suck_V2 = dirV2 ( v_Verb2a "ρουφώ" "ρουφήξω" "ρούφηξα" "ρουφούσα") ;
sun_N = mkN "ήλιος" ;
swell_V = v_Verb1c "πρήζω" "πρήξω" "έπρηξα" "έπρηζα" ;
swim_V = v_VerbNoPassive3 "κολυμπώ" "κολυμπήσω" "κολύμπησα" "κολυμπούσα" "κολύμπα" "" ;
switch8off_V2 = dirV2 (v_Verb1a "σβήνω" "σβήσω" "έσβησα" "έσβηνα") ;
switch8on_V2 = dirV2 (v_Verb1b "ανάβω" "ανάψω" "άναψα" "άναβα") ;
table_N = mkN "τραπέζι" Neut ;
tail_N =mkN "ουρά" ;
talk_V3 = mkV3 (v_Verb2a "μιλώ" "μιλήσω" "μίλησα" "μιλούσα") prepse (mkPreposition "για" ** {lock_Prep = <>}) ;
teacher_N =mkN "δάσκαλος" "δασκάλων" Masc;
teach_V2 = dirV2 ( v_Verb1d "διδάσκω" "διδάξω" "δίδαξα" "δίδασκα") ;
television_N = mkN "τηλεόραση" "τηλεοράσεις" Fem ;
thick_A = mkAd "παχύς";
thin_A = mkA "λεπτός" ;
think_V = v_VerbDeponent2 "σκέφτομαι" "σκεφτώ" "σκέφτηκα" "σκεφτόμουν" "σκέψου" "σκεπτόμενος" ;
throw_V2 = dirV2 (v_Verb1c "ρίχνω" "ρίξω" "έριξα" "έριχνα" );
tie_V2 = dirV2 (v_Verb1a "δένω" "δέσω" "έδεσα" "έδενα" );
today_Adv = ss "σήμερα" ;
tongue_N =mkN "γλώσσα" Fem;
tooth_N = mkN "δόντι" Neut;
train_N = mkN "τρένο";
travel_V = v_Verb1b "ταξιδεύω" "ταξιδέψω" "ταξίδεψα" "ταξίδευα" ;
tree_N = mkN "δέντρο";
turn_V = v_Verb1d "γυρίζω" "γυρίσω" "γύρισα" "γύριζα" ;
ugly_A = mkA "άσχημος" ;
uncertain_A = mkA "αβέβαιος" ;
understand_V2 = dirV2 (v_VerbNoPassive "καταλαβαίνω" "καταλάβω" "κατάλαβα" "καταλάβαινα" "κατάλαβε" " ") ;
university_N = mkN "πανεπιστήμιο" "πανεπιστημίων" Neut;
village_N = mkN "χωριό";
vomit_V = v_Verb2c "ξερνώ" "ξεράσω" "ξέρασα" "ξερνούσα" ;
wait_V2 = dirV2 ( v_VerbNoPassive "περιμένω" "περιμένω" "περίμενα" "περίμενα" "περίμενε" " ") ;
walk_V = v_Verb2a "περπατώ" "περπατήσω" "περπάτησα" "περπατούσα" ;
warm_A = mkAd3 "ζεστός" ;
war_N = mkN "πόλεμος" "πολέμων" Masc;
wash_V2 = dirV2 (v_Verb1c "πλένω" "πλύνω" "έπλυνα" "έπλενα" );
watch_V2 = dirV2 (v_Verb1b "κοιτάζω" "κοιτάξω" "κοίταξα" "κοίταζα");
water_N = mkN "νερό";
wet_A = mkA "υγρός" ;
white_A = mkA "άσπρος" ;
wide_A = mkAd "φαρδύς" ;
wife_N =mkN "σύζηγος" "συζήγων" Fem ;
wind_N = regNaniso "αέρας" ;
window_N = mkN "παράθυρο" "παραθύρων" Neut ;
wine_N = mkN "κρασί" ;
wing_N = mkN "φτερό" ;
win_V2 = dirV2 (v_Verb1dx "κερδίζω" "κερδίσω" "κέρδισα" "κέρδιζα") ;
wipe_V2 = dirV2 (v_Verb1dx "σκουπίζω" "σκουπίσω" "σκούπισα" "σκούπιζα") ;
woman_N =mkN "γυναίκα" Fem;
wonder_VQ = mkVQ (v_VerbDeponent "αναρωτιέμαι" "αναρωτηθώ" "αναρωτήθηκα" "αναρωτιόμουν" "αναρωτήσου" "αναρωτώμενος") ;
wood_N = mkN "ξύλο" ;
worm_N = mkN "σκουλήκι" Neut ;
write_V2 = dirV2 (v_Verb1a "γράφω" "γράψω" "έγραφα" "έγραψα" ) ;
year_N = regIrreg "χρόνος" ;
yellow_A = mkA "κίτρινος" ;
young_A = mkAd "νέος" ;
} ;

View File

@@ -0,0 +1,12 @@
resource MakeStructuralGre = open CatGre, ParadigmsGre, ResGre, Prelude in {
oper
mkSubj : Str -> Subj = \x ->
{s = x ; m = Ind ; lock_Subj = <>} ;
mkConj : Str -> Str -> Number -> Conj = \x,y,n ->
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
}

View File

@@ -0,0 +1,58 @@
--# -path=.:../../prelude
-- This resource morphology contains definitions needed in the resource
-- syntax. To build a lexicon, it is better to use $ParadigmsEng$, which
-- gives a higher-level access to this module.
resource MorphoGre = open Prelude, (Predef=Predef), ResGre in {
flags coding=utf8 ;
--2 Determiners
--oper
--mkDet : (s1,_,_,_,_,_,_,_,_ : Str) -> Number -> Det = \mn,mg,ma,yn,yg,ya,nn,ng,na,n ->
-- {
-- s = table {
-- Masc => table { Nom => mn ; Gen => mg ; Acc => ma } ;
-- Fem => table { Nom => yn ; Gen => yg ; Acc => ya } ;
-- Neut => table { Nom => nn ; Gen => ng ; Acc => na }
-- } ;
-- n = n ;
-- } ;
--2 Pronouns
--mkPronoun: (aftos,tou,ton : Str) -> Gender -> Number -> Person -> Pronoun =
-- \aftos,tou,ton,g,n,p -> {
-- s = table {
-- Nom => {clit = [] ; obj = aftos; isClit = False} ;
-- Gen => {clit = tou ; obj = [] ; isClit = True} ;
-- Acc => {clit = ton ; obj = [] ; isClit = True}
-- } ;
-- g = g;
-- a = Ag g n p
-- } ;
-- mkPronoun: (aftos,tou,ton, afton : Str) -> Gender -> Number -> Person -> Pronoun =
-- \aftos,tou,ton,afton, g,n,p -> {
-- s = table {
-- Nom => {clit = [] ; obj = aftos; isClit = False ; emph = [] } ;
-- Gen => {clit = tou ; obj = [] ; isClit = True ; emph = [] } ;
-- Acc => {clit = ton ; obj = [] ; isClit = True ; emph = Preposition.c ++ afton}
-- } ;
-- g = g;
-- a = Ag g n p
-- } ;
} ;

247
lib/src/greek/NounGre.gf Normal file
View File

@@ -0,0 +1,247 @@
concrete NounGre of Noun = CatGre ** open ResGre, ParadigmsGre, Prelude in {
flags coding= utf8 ;
lin
DetCN det cn =
let
g = cn.g ;
n = det.n
in heavyNPpol det.isNeg {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.n ! c ;
a =Ag cn.g det.n P3 ;
} ;
UsePN pn = {
s = \\c=> {
comp = artDef pn.g Sg c ++ pn.s ! Sg ! c ;
c1 = [] ;
c2 = [] ;
isClit = False
} ;
a = Ag pn.g Sg P3;
isNeg =False;
} ;
UsePron pron = pron ** {isNeg = False} ;
PredetNP pred np =
let agr = complAgr np.a in
heavyNPpol np.isNeg {
s = \\c => pred.s !agr.n ! agr.g ! c ++ (np.s ! c).comp;
a =Ag agr.g agr.n P3 ;
} ;
PPartNP np v2 =
let agr = agrFeatures np.a
in
{
s = \\c => {
comp = possCase agr.g agr.n c ++ v2.s ! Participle Posit agr.g agr.n c ++ (np.s ! c).comp ;
c1 = [] ;
c2 = [] ;
isClit = False
} ;
a = np.a ;
isNeg =False;
} ;
AdvNP np adv = {
s = \\c => {
comp = (np.s ! c).comp ++ adv.s;
c1 = [] ;
c2 = [] ;
isClit = False
} ;
a = np.a ;
isNeg =False;
} ;
RelNP np rs = {
s = \\c => {
comp = (np.s ! c).comp ++ "," ++ rs.s! Ind ! np.a ;
c1 = [] ;
c2 = [] ;
isClit = False
} ;
a = np.a ;
isNeg =False;
} ;
DetNP det =
let
g = Neut ;
n = det.n
in heavyNP {
s = det.sp ! g ;
a = agrP3 g n ;
isClit = False
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! num.isNum ! g ! num.n ! c ++ num.s ! g !c;
sp = \\g,c => case num.isNum of {
True => quant.s ! True ! g! num.n ! c ++ num.s ! g !c;
False => quant.sp !g ! num.n ! c ++ num.s ! g!c
} ;
n = num.n ;
isNeg = quant.isNeg
} ;
DetQuantOrd quant num ord = {
s,sp = \\g,c => quant.s ! num.isNum ! g ! num.n ! c ++ num.s ! g !c++
ord.s ! Posit ! g ! num.n !c;
n = num.n ;
isNeg = quant.isNeg
} ;
NumPl = {s = \\g,c => []; n = Pl ; isNum = False} ;
NumSg = {s = \\g,c => []; n = Sg ; isNum = False} ;
NumCard n = n ** {isNum = True} ;
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
AdNum adn num = {s = \\g,c => adn.s ++ num.s!g!c; n = num.n } ;
OrdNumeral numeral = {s = \\_,g,n,c=> numeral.s ! NOrd g n c ;
adv= table { Posit => " " ; Compar => " " ; Superl => " "}
} ;
OrdDigits numeral = {s = \\_,g,n,c=> numeral.s ! NOrd g n c ;
adv= table { Posit => " " ; Compar => " " ; Superl => " "}
} ;
OrdSuperl a = {s = \\d,g,n,c=> a.s ! Superl ! g ! n ! c ;
adv= a.adv
} ;
DefArt = {
s = \\_,g,n,c => artDef g n c ;
sp = \\g,n,c => artDef g n c ;
isNeg =False ;
} ;
IndefArt = {
s = \\_,g,n,c => artIndef g n c ;
sp = \\g,n,c => artIndef g n c ;
isNeg =False ;
} ;
MassNP cn =
let
g = cn.g ;
n = Sg
in heavyNP {
s = \\c => cn.s ! n ! c ;
c1 = [];
c2 = [];
isClit = False ;
a = agrP3 g n ;
isNeg =False;
} ;
PossPron pron = {
s = \\_,g,n,c =>possCase g n c ++ (regAdj "δικός").s !Posit! g !n !c ++ pron.poss ;
sp = \\ g,n,c =>possCase g n c ++ (regAdj "δικός").s !Posit! g !n !c ++ pron.poss;
isNeg = False;
} ;
UseN n = n;
ComplN2 f x = {
s = \\n,c => f.s ! n ! c++ appCompl f.c2 x ;
g = f.g ;
} ;
ComplN3 f x = {
s = \\n,c => f.s ! n ! c++ appCompl f.c2 x ;
g = f.g ;
c2 = f.c3
} ;
UseN2 n = n ;
Use2N3 f = f ;
Use3N3 f = f ** {c2 = f.c3} ;
AdjCN ap cn = {
s = \\n,c => ap.s ! Posit ! cn.g ! n ! c ++ cn.s ! n ! c ;
g = cn.g
} ;
RelCN cn rs =
let
g = cn.g ;
in {
s = \\n,c => cn.s ! n ! c ++"," ++ rs.s ! Ind ! agrP3 g n ;
g = g
} ;
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;
ApposCN cn np =
let g = cn.g
in {
s = \\n,c => cn.s ! n ! c ++ (np.s ! Nom).comp ;
g = g
} ;
PossNP cn np =
let g = cn.g
in {
s = \\n,c => cn.s ! n !c ++ (np.s ! Gen).c1 ;
g = g
} ;
PartNP cn np =
let g = cn.g
in {
s = \\n,c => cn.s ! n !c ++ (np.s ! Nom).comp ;
g = g
} ;
CountNP det np =
let agr = complAgr np.a
in {
s = \\c => {
comp = det.s ! agr.g ! c ++ "από" ++ (np.s ! CPrep PNul).comp ;
c1 = [] ;
c2 = [] ;
isClit = False
} ;
a = Ag agr.g det.n P3;
isNeg =False;
} ;
}

312
lib/src/greek/NumeralGre.gf Normal file
View File

@@ -0,0 +1,312 @@
concrete NumeralGre of Numeral = CatGre ** open ResGre,Prelude in {
flags coding= utf8 ;
lincat
Digit = {s : DForm => CardOrd => Str} ;
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
Sub100 = {s : CardOrd => Str ; n : Number} ;
Sub1000 = {s : CardOrd => Str ; n : Number} ;
Sub1000000 = {s : CardOrd => Str ; n : Number} ;
lin num x = x ;
lin n2 = mkNum "δύο" "δώδεκα" "είκοσι" "διακόσια" "δεύτερος" "δωδέκατος" "εικοστός" "διακοσιοστός" "δις" "δωδεκάκις" "εικοσάκις" "διακοσάκις" ;
lin n3 = mkNum3 "τρία" "δεκατρία" "τριάντα" "τριακόσια" "τρίτος" "τριακοστός" "τριακοσιοστός" "τρις" "δεκατριάκις" "τριαντάκις" "τριακοσάκις";
lin n4 = mkNum3 "τέσσερα" "δεκατέσσερα" "σαράντα" "τετρακόσια" "τέταρτος" "τεσσαρακοστός" "τετρακοσιοστός" "τετράκις" "δεκατετράκις" "τεσσαρακοντάκις" "τετρακοσάκις" ;
lin n5 = mkNum2 "πέντε" "δεκαπέντε" "πενήντα" "πεντακόσια" "πέμπτος" "πεντηκοστός" "πεντακοσιοστός" "πεντάκις" "δεκαπεντάκις" "πεντηκοντάκις" "πεντακοσάκις";
lin n6 = mkNum2 "έξι" "δεκαέξι" "εξήντα" "εξακόσια" "έκτος" "εξηκοστός" "εξακοσιοστός" "εξακισ" "δεκαεξάκις" "εξηκοντάκις" "εξακοσάκις" ;
lin n7 = mkNum2 "εφτά" "δεκαεφτά" "εβδομήντα" "εφτακόσια" "έβδομος" "εβδομηκοστός" "εφτακοσιοστός" "εφτάκις" "δεκαεφτάκις" "εβδομηκοντάκις" "επτακοσάκις";
lin n8 = mkNum2 "οχτώ" "δεκαοχτώ" "ογδόντα" "οχτακόσια" "όγδοος" "ογδοηκοστός" "οχτακοσιοστός" "οχτακισ" "δεκαοκτάκις" "ογδοηκοντάκις" "οκτακοσάκις";
lin n9 = mkNum2 "εννιά" "δεκαεννιά" "ενενήντα" "εννιακόσια" "ένατος" "ενενηκοστός" "εννιακοσιοστός" "εννιάκις" "δεκαεννεάκις" "ενενηκοντάκις" "εννεακοσάκις";
lin pot01 = mkNumEna "ένα" "έντεκα" "ενδέκατος" "δέκα" "εκατό" "πρώτος" "δέκατος" "εκατοστός" "εντεκάκις" "δεκάκις" "εκατοντάκις" ** {n = Sg} ;
lin pot0 d = d ** {n = Pl} ;
lin pot110 = {s=\\c => pot01.s ! ten ! c; n = Pl} ;
lin pot111 = spl ((mkNumEna "" "έντεκα" "ενδέκατος" "" "" "" "" "" "εντεκάκις" "" "").s !teen ) ;
lin pot1to19 d = {s = d.s ! teen } ** {n = Pl} ;
lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
lin pot1plus d e = {s = \\co =>
d.s ! ten ! co ++ e.s ! unit !co ; n = Pl} ;
lin pot1as2 n = n ;
lin pot2 d = {s = d.s ! hundr isNot} ** {n = Pl} ;
lin pot2plus d e = {s = \\co =>
d.s ! hundr Is ! co ++ e.s ! co ; n = Pl} ;
lin pot2as3 n = n ;
lin pot3 n = {
s = \\co => case n.n of {
Sg => Xilias co n.s n.n ++ cardOrdXiliaSg "χίλια" "χιλιοστός" ! co ;
Pl => Xilias co n.s n.n ++ cardOrdXiliaPl "χιλιάδες" "χιλιοστός" ! co }
} ** {n = Pl} ;
lin pot3plus n m = {
s = \\co => case n.n of {
Sg => Xilias co n.s n.n ++ cardOrdXiliaSg "χίλια" "χιλιοστός" ! co ++ m.s ! co ;
Pl => Xilias co n.s n.n ++ n.s ! NCardX ++ cardOrdXiliaPl "χιλιάδες" "χιλιοστός" ! co ++ m.s ! co }
} ** {n = Pl} ;
oper
invNum : CardOrd = NCard Fem Nom ;
Xilias : CardOrd -> (CardOrd => Str) -> Number -> Str = \co,d,n ->
case n of {Sg =>[] ; _ =>
case co of {
NOrd _ _ _ => d ! NCardX ;
_ => d ! invNum
}
} ;
-----regular form of numerals-------
mkNum : (x1,_,_,_,_,_,_,_,_,_,_,x11 : Str) -> {s : DForm => CardOrd => Str} =
\dyo,dwdeka,eikosi,diakosia,deyteros,dwdekatos,eikostos,diakosiostos,dis,dwdekakis,eikosakis, diakosakis ->
{s = table {
unit => cardOrd dyo deyteros dis;
teen => cardOrd dwdeka dwdekatos dwdekakis;
ten => cardOrd eikosi eikostos eikosakis ;
hundr _ => cardOrd4 diakosia diakosiostos diakosakis
}
} ;
-----case with complex teen ("δεκατος έβδομος") -------
mkNum2 : (x1,_,_,_,_,_,_,_,_,_,x10 : Str) -> {s : DForm => CardOrd => Str} =
\dyo,dwdeka,eikosi,diakosia,deyteros,eikostos,diakosiostos,dis, dwdekakis,eikosakis, diakosakis ->
{s = table {
unit => cardOrd dyo deyteros dis ;
teen => cardOrd2 dwdeka deyteros dwdekakis ;
ten => cardOrd eikosi eikostos eikosakis;
hundr _ => cardOrd4 diakosia diakosiostos diakosakis
}
} ;
mkNum3 : (x1,_,_,_,_,_,_,_,_,_,x10 : Str) -> {s : DForm => CardOrd => Str} =
\tria,dekatria,trianta,triakosia,tritos,triakostos,triakosiostos,tris,dekatriakis, triantakis, triakosakis ->
{s = table {
unit => cardOrd4 tria tritos tris ;
teen => cardOrd3 dekatria tritos dekatriakis ;
ten => cardOrd trianta triakostos triantakis ;
hundr _ => cardOrd4 triakosia triakosiostos triakosakis
}
} ;
-----Number 1 is a case itself. ------
mkNumEna : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> {s : DForm => CardOrd => Str} =
\ena,enteka,endekatos, deka,ekato, protos,dekatos,ekatostos, entekakis,dekakis, ekatontakis->
{s = table {
unit => cardOrd4 ena protos ena ;
teen => cardOrd enteka endekatos entekakis;
ten => cardOrd deka dekatos dekakis;
hundr Is => cardOrd (ekato + "ν") ekatostos ekatontakis ;
hundr isNot => cardOrd ekato ekatostos ekatontakis
}
} ;
cardOrd : Str -> Str ->Str -> CardOrd => Str = \dyo,deyteros,dis ->
table {
NCard _ _ => dyo ;
NCardX => dis ;
NOrd g n c => (regAdj deyteros).s ! Posit ! g ! n ! c
} ;
cardOrd2 : Str -> Str -> Str -> CardOrd => Str = \dyo,deyteros, dis ->
table {
NCard _ _ => dyo ;
NCardX => dis;
NOrd g n c => (regAdj "δέκατος").s ! Posit ! g ! n ! c ++ (regAdj deyteros).s ! Posit ! g ! n ! c
} ;
cardOrd3 : Str -> Str ->Str -> CardOrd => Str = \tria,tritos, tris ->
table {
NCard g c => case <g,c> of {
<Masc, Gen|CPrep P_Dat> => mkGen134 tria;
<Masc, Nom > => mkMasc134 tria;
<Masc, _> => mkMascAcc134 tria;
<Fem, Nom | Acc | Vocative | CPrep P_se |CPrep PNul > => mkFem134 tria ;
<Neut | Change, Nom | Acc | Vocative|CPrep P_se |CPrep PNul > => tria ;
<Neut | Change, Gen|CPrep P_Dat> => mkGen134 tria;
<Fem, Gen|CPrep P_Dat> => mkGenFem134 tria
} ;
NCardX => tris ;
NOrd g n c => (regAdj "δέκατος").s ! Posit ! g ! n ! c ++ (regAdj tritos).s ! Posit ! g ! n ! c
} ;
cardOrd4 : Str -> Str ->Str -> CardOrd => Str = \tria,tritos, tris ->
table {
NCard g c => case <g,c> of {
<Masc , Gen|CPrep P_Dat> => mkGen134 tria;
<Masc, Nom > => mkMasc134 tria;
<Masc, _> => mkMascAcc134 tria;
<Fem, Nom | Acc | Vocative | CPrep P_se |CPrep PNul > => mkFem134 tria ;
<Neut | Change, Nom | Acc | Vocative |CPrep P_se |CPrep PNul > => tria ;
<Neut | Change, Gen|CPrep P_Dat> => mkGen134 tria;
<Fem, Gen|CPrep P_Dat> => mkGenFem134 tria
} ;
NCardX => tris ;
NOrd g n c => (regAdj tritos).s ! Posit ! g ! n ! c
} ;
cardOrdXiliaSg : Str -> Str -> CardOrd => Str = \xilia, xiliostos ->
table {
NCard g c => case <g,c> of {
<Masc, Gen|CPrep P_Dat> => mkGen134 xilia;
<Masc, Nom > => mkMasc134 xilia;
<Masc, _> => mkMascAcc134 xilia;
<Fem, Nom | Acc | Vocative | CPrep P_se |CPrep PNul > => mkFem134 xilia ;
<Neut | Change, Nom | Acc | Vocative |CPrep P_se |CPrep PNul > => xilia ;
<Neut | Change, Gen|CPrep P_Dat> => mkGen134 xilia;
<Fem, Gen|CPrep P_Dat> => mkGenFem134 xilia
} ;
NCardX => [] ;
NOrd g n c => (regAdj xiliostos).s ! Posit ! g ! n ! c
} ;
cardOrdXiliaPl : Str -> Str -> CardOrd => Str = \xiliades,xiliostos ->
table {
NCard g c => case <g,c> of {
<_,Nom | Acc | Vocative | CPrep P_se |CPrep PNul> => xiliades ;
<_,Gen|CPrep P_Dat> => mkPlxiliaGen xiliades
} ;
NCardX => [] ;
NOrd g n c => (regAdj xiliostos).s ! Posit ! g ! n ! c
} ;
mkGen134: Str -> Str = \s -> case s of
{
x+ "τρία" => x+ "τριών" ;
x+ "ένα" => x+ "ενός" ;
x+ "τέσσερα" => x+ "τεσσάρων" ;
x+ "όσια" => x+ "οσίων";
x+ "χίλια" => x+ "χιλίων"
};
mkMasc134: Str -> Str = \s -> case s of
{
x+ "τρία" => x+ "τρείς" ;
x+ "ένα" => x+ "ένας" ;
x+ "τέσσερα" => x+ "τέσσερεις" ;
x+ "όσια" => x+ "όσιοι";
x+ "χίλια" => x+ "χίλιοι"
};
mkMascAcc134: Str -> Str = \s -> case s of
{
x+ "τρία" => x+ "τρείς" ;
x+ "ένα" => x+ "έναν" ;
x+ "τέσσερα" => x+ "τέσσερεις" ;
x+ "όσια" => x+ "όσιους";
x+ "χίλια" => x+ "χίλιους"
};
mkFem134: Str -> Str = \s -> case s of
{
x+ "τρία" => x+ "τρείς" ;
x+ "ένα" => x+ "μία" ;
x+ "τέσσερα" => x+ "τέσσερεις" ;
x+ "όσια" => x+ "όσιες";
x+ "χίλια" => x+ "χίλιες"
};
mkGenFem134: Str -> Str = \s -> case s of
{
x+ "τρία" => x+ "τριών" ;
x+ "ένα" => x+ "μίας" ;
x+ "τέσσερα" => x+ "τεσσάρων";
x+ "όσια" => x+ "οσίων";
x+ "χίλια" => x+ "χιλίων"
};
mkPlxiliaGen :Str -> Str = \s -> case s of
{
x+ "χιλιάδες" => x+ "χιλιάδων" };
spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> {
s = s ;
n = Pl
} ;
-- numerals as sequences of digits
lincat
Dig = TDigit ;
lin
IDig d = d ;
IIDig d i = {
s = \\o => d.s ! NCard Neut Nom ++ i.s ! o ;
n = Pl
} ;
D_0 = mk2Dig "0" Pl;
D_1 = mk3Dig "1" Sg ;
D_2 = mk2Dig "2" Pl ;
D_3 = mk2Dig "3" Pl;
D_4 = mk2Dig "4" Pl;
D_5 = mk2Dig "5" Pl;
D_6 = mk2Dig "6" Pl;
D_7 = mk2Dig "7" Pl;
D_8 = mk2Dig "8" Pl;
D_9 = mk2Dig "9" Pl ;
oper
mk3Dig : Str -> Number -> TDigit = \c,n -> {
s = table {NCard _ _ => c ;
NCardX => c ;
NOrd Masc _ _ => c + "ος" ; NOrd Fem _ _=> c + "η" ;
NOrd _ _ _=> c + "ο"
} ;
n = n
} ;
mk2Dig : Str ->Number -> TDigit = \c,n -> {
s = table {NCard _ _ => c ;
NCardX => c ;
NOrd Masc _ _=> c + "ος" ; NOrd Fem _ _=> c + "η" ;
NOrd _ _ _=> c + "ο"
} ;
n = n
} ;
TDigit = { n : Number ; s : CardOrd => Str } ;
}

View File

@@ -0,0 +1 @@
resource OverloadGre = Overload with (Grammar = GrammarGre) ;

View File

@@ -0,0 +1,315 @@
resource ParadigmsGre =
open ResGre, CatGre,BeschGre, Prelude in {
flags coding = utf8 ;
oper
masculine : Gender = Masc ;
feminine : Gender = Fem ;
neutral : Gender = Neut ;
accusative : Case = Acc ;
genitive : Case = Gen ;
indicative : Mood = Ind ;
conjunctive : Mood = Con ;
singular : Number = Sg;
plural : Number = Pl;
mkN = overload {
mkN : (dentro : Str) -> N
= \n -> lin N (regN n) ;
mkN : (s : Str) -> Gender -> N
= \n,g -> lin N (mkN1 n g) ;
mkN : (s1,s2,s3,s4,p1,p2,p3,p4 : Str) -> Gender -> N
= \s1,s2,s3,s4,p1,p2,p3,p4,g -> lin N (mkNoun s1 s2 s3 s4 p1 p2 p3 p4 g) ;
mkN : (s1,s2: Str) -> Gender -> N
= \s1,s2,g -> lin N (mkNending s1 s2 g) ;
};
mkN1 : Str -> Gender -> N = \x,g ->
case x of {
c + ("α"|"η") => mkNoun_thalassa x g ;
c + ("ας"|"ης"|"ής"|"έας"| "ος") => mkNoun_touristas x g;
c + ("ι"|"υ"|"όι"|"άι") => mkNoun_agori x g ;
c + ("ον"|"όν"|"άν"|"αν" | "εν" ) => mkNoun_endiaferon x g
} ** {lock_N = <>} ;
mkNending : Str -> Str -> Gender -> N = \x,n,g ->
case <x,n> of {
<c + "ος", c + "ων"> => mkNoun_anthropos x n g ;
<c + "η", c + "εις"> => mkNoun_kivernisi x n g ;
<c + "ης", c + "ηδες"> => mkNoun_fournaris x n g ;
<c + "ας", c + "ων"> => mkNoun_filakas x n g ;
<c + "ο", c + "ων"> => mkNoun_prosopo x n g ;
<c + ("ώς" | "ός" | "ως" ) , c + ("ος"|"ός" ) > => mkNoun_fws x n g ;
<c + ("μα" | "ιμο" ), c + "ατα"> => mkNoun_provlima x n g ;
<c + "ος", c + "η"> => mkNoun_megethos x n g
} ** {lock_N = <>} ;
mkN2 : N -> Prep -> N2 ; ---η μητέρα + γενική
ofN2 : N -> N2 ;
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
ofN2 n = mkN2 n gen ;
mkN3 : N -> Prep -> Prep -> N3 ;
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mkPN = overload {
mkPN : (anna : Str) -> PN
= \p -> lin PN (regName p) ;
mkPN : (nm,gm,am,vm,pn,pa : Str) -> Gender -> PN
= \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ;
} ;
makeNP = overload {
makeNP : (_,_,_: Str) -> Number -> Gender -> NP = mkpanta;
makeNP : Str -> Number -> Gender ->Bool -> NP = mkkati
} ;
mkpanta : Str -> Str -> Str -> Number -> Gender -> NP =
\tapanta, twnpantwn,stapanta, n, g -> let ag = agrP3 g n in
{s = \\c => case c of
{Nom | Vocative => {c1 = [] ; c2 = [];
comp = tapanta; isClit = False
} ;
Gen |CPrep P_Dat => {c1 = []; c2 = [];
comp = twnpantwn; isClit = False};
Acc => {c1 = []; c2 = [];
comp = tapanta; isClit = False};
CPrep P_se => {c1 = []; c2 = [];
comp = stapanta ; isClit = False};
CPrep PNul => {c1 = []; c2 = [];
comp = tapanta; isClit = False}
};
a = ag ;
isNeg = False ;
lock_NP = <>
};
mkkati : Str ->Number -> Gender -> Bool -> NP =
\kati, n, g,b -> let ag = agrP3 g n in
{s = \\c => case c of
{Nom | Vocative |Gen |CPrep P_Dat |Acc |CPrep P_se |CPrep PNul=> {c1 = [] ; c2 = [];
comp = kati; isClit = False}
};
a = ag ;
isNeg = b ;
lock_NP = <>
};
mkA = overload {
mkA : (a : Str) -> A
= \a -> lin A (regAdj a) ;
mkA : (a,b: Str) -> A
= \a,b -> lin A (mkA1 a b)
};
mkAd: Str -> A = \s -> regAdj1 s **{lock_A = <>} ;
mkAd2 : Str -> A = \s -> regAdj2 s **{lock_A = <>} ;
mkAd3 : Str -> A = \s -> regAdj3 s **{lock_A = <>} ;
mkAd4 : Str -> A = \s -> regAdj4 s **{lock_A = <>} ;
mkAd5 : Str -> A = \s -> regAdj5 s **{lock_A = <>} ;
mkAdIrreg : Str -> A = \s -> irregAdj s **{lock_A = <>} ;
mkA1 : Str -> Str -> A = \x,n ->
case <x,n> of {
<c + "ης", c + "ες"> => mkAdjective4 x n ;
<c + "ων", c + "όντων"> => mkAdjective3 x n ;
<c + "ύς", c + "έως"> => mkAdjectiveIr x n
} ** {lock_A = <>} ;
mkA2 : A -> Prep -> A2 ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkA2V : A -> Prep -> Prep -> A2V;
A2S, A2V : Type = A2 ;
mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ;
mkAV v = v ** { lock_AV = <>} ;
mkAV : A -> AV ;
AS, AV : Type = A ;
mkAS : A -> AS ;
mkAS v = v ** {lock_AS = <>} ;
mkV2 = overload {
mkV2 : V -> V2
= dirV2 ;
mkV2 : V -> Prep -> V2
= mmkV2
} ;
mkVS : V -> VS ;
mkVS v = v ** {m = \\_ => Ind; lock_VS = <>} ;
mkVQ : V -> VQ ;
mkVQ v = v ** {lock_VQ = <>} ;
mkVV : V -> VV ;
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
mkVA : V -> VA ;
mkVA v = v ** {lock_VA = <>} ;
acc : Prep ;
gen : Prep ;
dat : Prep ;
prepse : Prep ;
mkPrep : Str -> Preposition ;
mkPrep2 : Str -> Preposition ;
mkPrep3 : Str -> Preposition ;
mkPrep4 : Str -> Preposition ;
Preposition = Compl ;
acc = complAcc ** {lock_Prep = <>} ;
gen = complGen ** {lock_Prep = <>} ;
dat = complDat ** {lock_Prep = <>} ;
prepse = complPrepSe** {lock_Prep = <>} ;
mkPrep p = {s = p ; c = CPrep PNul ; isDir = False ; lock_Prep = <>} ;
mkPrep2 p = {s = p ; c = CPrep P_se ; isDir = False ; lock_Prep = <>} ; -----for compround preposition using a preposition plus "σε"(μέσα σε)
mkPrep3 p = {s = p ; c = Gen ; isDir = False ; lock_Prep = <>} ; -----preposition that takes a genitive instead of accusative
mkPrep4 p = {s = p ; c = CPrep P_Dat ; isDir = False ; lock_Prep = <>} ; -----for few prepositions that use dative
Preposition : Type ;
mkPreposition : Str -> Preposition ;
mkPreposition = mkPrep ;
mkPreposition2 : Str -> Preposition ;
mkPreposition2 = mkPrep2 ;
mkPreposition3 : Str -> Preposition ;
mkPreposition3 = mkPrep3 ;
mkPreposition4 : Str -> Preposition ;
mkPreposition4 = mkPrep4 ;
mkV3 : overload {
mkV3 : V -> V3 ;
mkV3 : V -> Prep -> V3 ;
mkV3 : V -> Prep -> Prep -> V3
} ;
mkV3 = overload {
mkV3 : V -> V3 = dirdirV3 ; -- dino,_,_
mkV3 : V -> Prep -> V3 = dirV3 ; -- bazw,_,se
mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- milaw, se, gia
} ;
mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
dirV3 v p = mmkV3 v acc p ;
dirdirV3 v = dirV3 v gen ;
mmkV3 : V -> Prep -> Prep -> V3 ; -- milaw, se, gia
dirV3 : V -> Prep -> V3 ; -- dino,_,se
dirdirV3 : V -> V3 ; -- dino,_,_
mmkV : V -> Str -> V ;
mmkV v s = v ** {s = s } ;
expressV : V -> Str -> V = \v,s -> mmkV v s ;
mmkV2 : V -> Prep -> V2 ;
mmkV2 v p = v ** {c2 = p ; lock_V2 = <>} ;
dirV2 : V -> V2 = \v -> mmkV2 v acc ;
mkV2V : V -> Prep -> Prep -> V2V ;
mkV2V v p q = mmkV3 v p q ** {lock_V2V = <>} ;
mkV2S : V -> Prep -> V2S ;
mkV2S v p = mmkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
mkV2Q : V -> Prep -> V2Q ;
mkV2Q v p = mmkV2 v p ** {lock_V2Q = <>} ;
mkV2A : V -> Prep -> Prep -> V2A ;
mkV2A v p q = mmkV3 v p q ** {lock_V2A = <>} ;
mkV0 : V -> V0 ;
V0 : Type ;
V0 : Type = V;
mkV0 v = v ** {lock_V0 = <>} ;
mkNV : Verb -> V = \v -> {s = v.s ;vtype = v.vtype ;lock_V = <> } ;
---- for verbs that are formed periphrastically /usually a verb and a noun ( to lie -> λέω ψέματα / to sunbathe -> κάνω ηλιοθεραπεία)----
compoundV : Verb -> Str -> V = \v,f -> {s = \\vf => v.s ! vf ++ f; lock_V = <>} ;
v_mk_Prepei :(x1,x2 : Str) -> V = \x1,x2 -> mkNV (mk_Prepei x1 x2) ;
v_Verb1a :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1a x1 x2 x3 x4) ;
v_Verb1b :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1b x1 x2 x3 x4) ;
v_Verb1c :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1c x1 x2 x3 x4) ;
v_Verb1d :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1d x1 x2 x3 x4) ;
v_Verb1dx :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1dx x1 x2 x3 x4) ;
v_Verb1dxx :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1dxx x1 x2 x3 x4) ;
v_Verb1dxxx :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1dxxx x1 x2 x3 x4) ;
v_Verb1prepSuf :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb1prepSuf x1 x2 x3 x4) ;
v_Verb2a :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb2a x1 x2 x3 x4) ;
v_Verb2b :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb2b x1 x2 x3 x4) ;
v_Verb2c :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb2c x1 x2 x3 x4) ;
v_Verb2Ba :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb2Ba x1 x2 x3 x4) ;
v_Verb2Bb :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verb2Bb x1 x2 x3 x4) ;
v_mkVerb2B3 :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (mkVerb2B3 x1 x2 x3 x4) ;
v_Verbirreg_pigaInw :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (Verbirreg_pigaInw x1 x2 x3 x4) ;
v_mkVerbAproswpo :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (mkVerbAproswpo x1 x2 x3 x4) ;
v_VerbContr :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContr x1 x2 x3 x4) ;
v_VerbContr2 :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContr2 x1 x2 x3 x4) ;
v_VerbContrIrreg :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContrIrreg x1 x2 x3 x4) ;
v_VerbContrIrreg2 :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContrIrreg2 x1 x2 x3 x4) ;
v_VerbContrIrreg3 :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContrIrreg3 x1 x2 x3 x4) ;
v_VerbContrIrregNPassPerf :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbContrIrregNPassPerf x1 x2 x3 x4) ;
v_VerbExw :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbExw x1 x2 x3 x4) ;
v_VerbExwNoPass :(x1,x2,x3,x4 : Str) -> V = \x1,x2,x3,x4 -> mkNV (VerbExwNoPass x1 x2 x3 x4) ;
v_VerbContr2NoPassive :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbContr2NoPassive x1 x2 x3 x4 x5) ;
v_VerbNoPassive1 :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbNoPassive1 x1 x2 x3 x4 x5) ;
v_VerbNoPassive2syll :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbNoPassive2syll x1 x2 x3 x4 x5) ;
v_Verb2aIrreg :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (Verb2aIrreg x1 x2 x3 x4 x5) ;
v_VerbNpperf :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbNpperf x1 x2 x3 x4 x5) ;
v_VerbNpperf2 :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbNpperf2 x1 x2 x3 x4 x5) ;
v_VerbIN :(x1,x2,x3,x4,x5 : Str) -> V = \x1,x2,x3,x4,x5 -> mkNV (VerbIN x1 x2 x3 x4 x5) ;
v_VerbDeponent :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbDeponent x1 x2 x3 x4 x5 x6) ;
v_VerbDeponent2 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbDeponent2 x1 x2 x3 x4 x5 x6) ;
v_VerbNoPassive :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbNoPassive x1 x2 x3 x4 x5 x6) ;
v_VerbNoPassive2 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbNoPassive2 x1 x2 x3 x4 x5 x6) ;
v_VerbNoPassive3 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbNoPassive3 x1 x2 x3 x4 x5 x6) ;
v_VerbNoPassive4 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbNoPassive4 x1 x2 x3 x4 x5 x6) ;
v_VerbNoPassive5 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbNoPassive5 x1 x2 x3 x4 x5 x6) ;
v_VerbContracIrregNopassive :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbContracIrregNopassive x1 x2 x3 x4 x5 x6) ;
v_VerbContracIrregNopassive2 :(x1,x2,x3,x4,x5,x6 : Str) -> V = \x1,x2,x3,x4,x5,x6-> mkNV (VerbContracIrregNopassive2 x1 x2 x3 x4 x5 x6) ;
v_VerbDeponent3 :(x1,x2,x3,x4,x5,x6,x7 : Str) -> V = \x1,x2,x3,x4,x5,x6,x7-> mkNV (VerbDeponent3 x1 x2 x3 x4 x5 x6 x7) ;
v_VerbDeponent4 :(x1,x2,x3,x4,x5,x6,x7 : Str) -> V = \x1,x2,x3,x4,x5,x6,x7-> mkNV (VerbDeponent4 x1 x2 x3 x4 x5 x6 x7) ;
v_VerbDeponent5 :(x1,x2,x3,x4,x5,x6,x7 : Str) -> V = \x1,x2,x3,x4,x5,x6,x7-> mkNV (VerbDeponent5 x1 x2 x3 x4 x5 x6 x7) ;
}

View File

@@ -0,0 +1,35 @@
concrete PhraseGre of Phrase = CatGre ** open Prelude, CommonGre, ResGre,ParadigmsGre in {
flags coding=utf8 ;
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = {s = s.s ! Ind} ;
UttQS qs = {s = qs.s ! QDir} ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg ! Perf} ; -----Imperf in Extra
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl !Perf} ; ----- Imperf in Extra
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl ! Perf} ;
UttIP ip = {s = ip.s ! Masc ! Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = (np.s ! Nom).comp } ;
---- UttNP np = {s = ((np.s ! Nom).comp | [] ) } ; -- AR removed empty string variant
UttVP vp = {s = (predVP [] (Ag Masc Sg P3) vp).s ! Main ! TPres ! Simul ! Pos !Con} ;
UttAdv adv = adv ;
UttCN n = {s = n.s ! Sg ! Nom} ;
UttCard n = {s = n.s ! Neut ! Nom } ;
UttInterj i = i ;
UttAP ap = {s = ap.s ! Posit ! Masc ! Sg ! Nom } ;
NoPConj = {s = []} ;
PConjConj conj = {s = conj.s2} ;
NoVoc = {s = []} ;
VocNP np = {s = "," ++ (np.s ! Vocative).comp } ;
}

View File

@@ -0,0 +1,150 @@
concrete QuestionGre of Question = CatGre ** open ResGre, Prelude in {
flags coding= utf8 ;
lin
QuestCl cl = {
s = \\t,a,p =>
let cls = cl.s ! Main ! t ! a ! p !Ind ;
in table {
QDir => cls ;
QIndir => "αν" ++ cls
}
} ;
QuestVP qp vp = {
s = \\t,a,p =>
let cl = (predVP (qp.s ! qp.a.g ! Nom) (Ag qp.a.g qp.n P3 ) vp).s ! Main! t ! a! p! Ind
in table {
QDir => cl ;
QIndir => cl
}
} ;
QuestIComp icomp np = {
s = \\t,a,p =>
let
vp = predV copula;
cl = (predVP (np.s ! Nom).comp np.a vp).s ! Inv ! t ! a ! p! Ind ;
why = icomp.s
in table {
QDir => why ++ cl ;
QIndir => why ++ cl
}
} ;
QuestSlash ip slash = {
s = \\t,a,p =>
let
cls = slash.s ! ip.a ! Inv ! t ! a ! p! Ind;
who = ip.s ! Masc ! slash.c2.c ++slash.c2.s
in table {
QDir => who ++ cls ;
QIndir => who ++ cls
}
} ;
QuestIAdv iadv cl = {
s = \\t,a,p =>
let
cls = cl.s ! Inv ! t ! a ! p!Ind ;
why = iadv.s
in table {
QDir => why ++ cls ;
QIndir => why ++ cls
}
} ;
CompIAdv a = a ;
CompIP ip = {s = ip.s !Masc ! Nom} ;
PrepIP p ip = {
s = p.s ++ ip.s! Masc ! p.c
} ;
AdvIP ip adv = {
s = \\g,c => ip.s ! g! c ++ adv.s ;
n = ip.n;
a = ip.a
} ;
AdvIAdv i a = {s = i.s ++ a.s} ;
IdetCN idet cn =
let
g= cn.g ;
n = idet.n;
a = aagr g n
in {
s = \\g,c => idet.s ! cn.g ! c ++ cn.s ! n ! c ;
n = n ;
a = a
} ;
IdetQuant idet num =
let
n = num.n
in {
s = \\g,c => idet.s ! n! g ! c ++ num.s !g !c;
n = n
} ;
IdetIP idet =
let
g = Neut ;
n = idet.n ;
a = aagr g n
in {
s = idet.s ;
n = n ;
a =a
} ;
lincat
QVP = ResGre.VP ;
lin
ComplSlashIP vp ip = insertObject vp.c2 {s = \\c => {
comp = ip.s ! Masc ! c ;
c1 = [] ;
c2 = [] ;
isClit = False
} ;a = Ag Masc ip.n P3;isNeg= False } vp ;
AdvQVP vp adv = insertAdv adv.s vp ;
AddAdvQVP vp adv = insertAdv adv.s vp ;
QuestQVP qp vp = {
s = \\t,a,p =>
let
cl = (predVP (qp.s ! qp.a.g ! Nom) (Ag qp.a.g qp.n P3 ) vp).s ! Main! t ! a! p! Ind
in table {
QDir => cl ;
QIndir => cl
}
} ;
}

View File

@@ -0,0 +1,53 @@
concrete RelativeGre of Relative = CatGre ** open Prelude, ResGre in {
flags coding= utf8;
lin
RelCl cl = {
s = \\ag,t,a,p,_ =>"ώστε" ++ cl.s ! Main ! t ! a ! p ! Ind ;
c = Nom
} ;
RelVP rp vp = case rp.hasAgr of {
True => {s = \\ag,t,a,p,m =>
(predVP
(rp.s ! False! complAgr ag ! Nom )
(Ag rp.a.g rp.a.n P3)
vp).s ! Main !t !a! p! m ; c = Nom } ;
False => {s = \\ag,t,a,p,m =>
(predVP
(rp.s ! True! complAgr ag ! Nom)
ag
vp).s! Main !t! a! p! m ; c = Nom
}
} ;
RelSlash rp slash = {
s = \\ag,t,a,p,m =>
let aag = complAgr ag
in
slash.c2.s ++ rp.s ! False ! aag ! slash.c2.c ++
slash.s ! aag ! Main ! t ! a ! p ! m ;
c = Acc
} ;
FunRP p np rp = {
s = \\_,a,c => (np.s ! c).comp ++ p.s ++ rp.s ! False ! a ! p.c ;
a = complAgr np.a ;
hasAgr = True
} ;
IdRP = {
s = relPron ;
a = {g = Masc ; n = Sg} ;
hasAgr = False
} ;
}

1835
lib/src/greek/ResGre.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,103 @@
concrete SentenceGre of Sentence = CatGre ** open Prelude, ResGre,ParadigmsGre in {
flags coding= utf8;
lin
PredVP np vp = predVPPol np.isNeg ((np.s ! Nom).comp) np.a vp ;
---- PredVP np vp = predVPPol np.isNeg ((np.s ! Nom).comp | [] ) np.a vp ; -- AR removed empty subject variant
PredSCVP sc vp = predVP sc.s (agrP3 Neut Sg) vp ;
SlashVP np v2 = {s = \\agr =>
let
vp = v2
in
(predVP (np.s ! Nom).comp np.a vp).s ;n3 = v2.n3 ; c2 = v2.c2 };
AdvSlash slash adv = {
s = \\ag,o,m,t,a,p => slash.s !ag ! o ! m ! t! a ! p ++ adv.s ;
n3 = slash.n3 ;
c2 = slash.c2
} ;
SlashPrep cl prep = {
s = \\_ => cl.s ;
n3 = \\_ => [] ;
c2 = {s = prep.s ; c = prep.c ; isDir = False}
} ;
SlashVS np vs slash = {
s = \\ag =>
(predVP
(np.s ! Nom).comp np.a
(insertComplement (\\b => conjThat ++ slash.s ! ag ! Ind)
(predV vs))).s
} ** {n3 = slash.n3 ; c2 = slash.c2};
ImpVP vp = {
s = \\pol,n,aspect=>
let
a = Ag Masc Sg P2 ;
a2 = Ag Masc Pl P2 ;
in
case <pol,n,aspect> of {
<Pos,Sg,Perf> => vp.v.s ! VImperative Perf Sg Active ++ vp.clit ++ vp.clit2 ++ vp.comp ! a ;
<Pos,Pl,Perf> => vp.v.s ! VImperative Perf Pl Active ++ vp.clit ++ vp.clit2 ++vp.comp ! a2 ;
<Pos,Sg,Imperf> => vp.v.s ! VImperative Imperf Sg Active ++ vp.clit ++ vp.clit2 ++ vp.comp ! a ;
<Pos,Pl,Imperf> => vp.v.s ! VImperative Imperf Pl Active ++ vp.clit ++ vp.clit2 ++vp.comp ! a2 ;
<Neg,Sg,Perf> => "μην" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Con Sg P2 Active Perf++ vp.comp ! a ;
<Neg,Pl,Perf> => "μην" ++ vp.clit ++ vp.clit2++ vp.v.s ! VPres Con Pl P2 Active Perf++ vp.comp ! a2;
<Neg,Sg,Imperf> => "μην" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Ind Sg P2 Active Perf++ vp.comp ! a ;
<Neg,Pl,Imperf> => "μην" ++ vp.clit ++ vp.clit2++ vp.v.s ! VPres Ind Pl P2 Active Perf++ vp.comp ! a2
} ;
} ;
EmbedS s = {s = conjThat ++ s.s ! Ind} ;
EmbedQS qs = {s = qs.s ! QIndir} ;
EmbedVP vp = {s = (predVP [] (Ag Masc Sg P3) vp).s ! Main ! TPres ! Simul ! Pos !Con};
UseCl t p cl = {s = \\o => t.s ++ p.s ++ cl.s !Main ! t.t !t.a! p.p ! t.m } ;
UseQCl t p cl = {
s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q
} ;
UseRCl t p cl = {
s = \\r,ag => t.s ++ p.s ++ cl.s ! ag ! t.t ! t.a ! p.p ! r ;
c = cl.c
} ;
UseSlash t p cl = {
s = \\ag,m =>
t.s ++ p.s ++ cl.s ! ag ! Main ! t.t ! t.a ! p.p ! m ;
n3 = cl.n3 ;
c2 = cl.c2
} ;
AdvS a s ={s = \\m => a.s ++ s.s ! m} ;
ExtAdvS a s ={s = \\m => a.s ++ "," ++ s.s ! m} ;
SSubjS a s b = {
s = \\m => a.s !m ++ s.s ++ b.s ! s.m
} ;
RelS s r = {
s = \\o => s.s ! o ++ "," ++ r.s ! Ind ! agrP3 Neut Sg
} ;
}

View File

@@ -0,0 +1,39 @@
resource StressGre = {
flags coding=utf8 ;
oper
mkN : Str -> Str * Str = \s -> case s of {
c + v@(#stressedVowel) + x@(? + ?) + "α" => <s,c + unstress v + x + "ών"> ;
_ => <s,s>
} ;
stressedVowel : pattern Str = #("ά" | "ό" | "ί"| "έ" );
unstress : Str -> Str = \v -> case v of {
"ά" => "α" ;
"ό" => "ο" ;
"ί" => "ι" ;
"έ" => "ε" ;
_ => v
} ;
stress : Str -> Str = \v -> case v of {
"α" => "ά" ;
"ο" => "ό" ;
"ι" => "ί" ;
"ε" => "έ" ;
_ => v
} ;
}

View File

@@ -0,0 +1,264 @@
concrete StructuralGre of Structural = CatGre **
open ResGre, ParadigmsGre, MakeStructuralGre, BeschGre,
Prelude in {
flags coding = utf8 ;
lin
above_Prep = mkPreposition "πάνω από" ;
after_Prep = mkPreposition "μετά από" ;
all_Predet = { s = \\n,g,c => (regAdj "όλος").s ! Posit ! g ! n ! c };
almost_AdA, almost_AdN = ss "σχεδόν" ;
although_Subj = ss "παρόλο που" ** {m = Ind} ;
always_AdV = ss "πάντα" ;
and_Conj = {s1 = [] ; s2 = "και" ; n = Pl} ;
because_Subj = ss "επειδή" ** {m = Ind} ;
before_Prep = mkPreposition "πρίν από" ;
behind_Prep = mkPreposition "πίσω από" ;
between_Prep = mkPreposition2 "ανάμεσα";
both7and_DConj = {s1,s2 = "και" ; n = Pl} ;
but_PConj = ss "αλλά" ;
by8agent_Prep = mkPreposition "από";
by8means_Prep = mkPreposition "από";
can8know_VV = mkVV (v_VerbNoPassive1 "ξέρω" "ξέρω" "ήξερα" "ήξερα" " ") ;
can_VV = mkVV (v_VerbNoPassive5 "μπορώ" "μπορέσω" "μπόρεσα" "μπορούσα" "μπόρεσε" " " ) ;
during_Prep = mkPreposition3 "κατα τη διάρκεια" ;
either7or_DConj = mkConj "είτε" "ή" plural ;
every_Det = let kathenas : ResGre.Gender => ResGre.Case => Str = \\g,c => case <g,c> of {
<Masc| Change,Nom |Vocative> => "ο καθένας";
<Masc| Change,Gen|CPrep P_Dat> => "του καθενός" ;
<Masc| Change, Acc |CPrep P_se | CPrep PNul> => prepCase c ++ "τον καθένα" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++ "η καθεμία";
<Fem,Gen|CPrep P_Dat > => "της καθεμίας" ;
<Neut,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"το καθένα";
<Neut,Gen|CPrep P_Dat > => "του καθενός"
}; in {
s = \\_,c => prepCase c ++ "κάθε" ;
sp = kathenas ;
n = Sg ;
isNeg = False
} ;
everybody_NP = nppolPos (mkDeterminer "όλοι" "όλων" "όλους" "όλες" "όλων" "όλες" "όλα" "όλων" "όλα" "όλα" "όλων" "όλα" Pl) ;
everything_NP = makeNP "τα πάντα" "των πάντων" "στα πάντα" Pl Neut ;
everywhere_Adv = ss "παντού" ;
few_Det ={s,sp = \\g,c => case <g,c> of {
<Masc,Nom |Vocative> => "λίγοι";
<Masc,Gen|CPrep P_Dat> => "λίγων" ;
<Masc ,Acc |CPrep P_se | CPrep PNul> =>prepCase c ++"λίγους" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"λίγες";
<Fem,Gen|CPrep P_Dat > => "λίγων" ;
<Neut| Change,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"λίγα";
<Neut| Change,Gen|CPrep P_Dat > => "λίγων"
};
n= Pl;
isNeg = False
} ;
for_Prep = mkPreposition "για" ;
from_Prep = mkPreposition "από" ;
he_Pron = mkPron "αυτός" "του" "τον" "αυτόν" "αυτού" Masc Sg P3 ;
here_Adv = ss "εδώ" ;
here7to_Adv = ss "ως εδώ" ;
here7from_Adv = ss "από εδώ " ;
how_IAdv = ss "πόσο" ;
how8much_IAdv = ss "πόσο" ;
how8many_IDet = mkDeterminer "πόσοι" "πόσων" "πόσους" "πόσες" "πόσων" "πόσες" "πόσα" "πόσων" "πόσα" "πόσοι" "πόσων" "πόσους" Pl ;
i_Pron = mkPron "εγώ" "μου" "με" "εμένα" "εμού" Masc Sg P1 ;
if_Subj = ss "αν" ** {m = Ind};
in8front_Prep = mkPreposition "μπροστά από";
in_Prep = complPrepSe;
it_Pron = mkPron "αυτό" "του" "το" "αυτό" "αυτού" Neut Sg P3 ;
less_CAdv = {s="λιγότερο"; p= "από" ; c= CPrep PNul ; lock_CAdv = <>} ;
many_Det = {s,sp = \\g,c => case <g,c> of {
<Masc,Nom |Vocative> => "πολλοί";
<Masc |Fem | Neut |Change,Gen|CPrep P_Dat> => "πολλών" ;
<Masc ,Acc |CPrep P_se | CPrep PNul> =>prepCase c ++ "πολλούς" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"πολλές";
<Neut| Change,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"πολλά"
};
n= Pl;
isNeg = False
} ;
more_CAdv = {s="πιό"; p="από" ; c= CPrep PNul} ;
most_Predet = { s = \\n,g,c => artDef g n c ++ (regAdj "περισσότερος").s ! Posit ! g ! n ! c };
much_Det = {s,sp = \\g,c => case <g,c> of{
<Masc| Change,Nom> => "πολύς";
<Masc| Change,Gen|CPrep P_Dat> => "πόλύ" ;
<Masc| Change,Acc |CPrep P_se | CPrep PNul> => prepCase c ++"πολύ" ;
<Masc| Change,Vocative> => "πολύ" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> =>prepCase c ++ "πολλή";
<Fem,Gen|CPrep P_Dat > => "πολλής" ;
<Neut,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"πολύ";
<Neut,Gen|CPrep P_Dat > => "πολύ"
};
n= Sg;
isNeg = False
} ;
must_VV = mkVV (v_mk_Prepei "πρέπει" "έπρεπε" ** {lock_V = <>});
no_Utt = ss "όχι" ;
on_Prep = complPrepSe ;
only_Predet =let mono : Number =>Gender=> Case => Str= \\n,g,c => case <n,g,c> of {<_,_,_> => prepCase c ++ "μόνο" } in { s = mono} ;
or_Conj = {s1 = [] ; s2 = "ή" ; n = Sg} ;
otherwise_PConj = ss "αλλιώς" ;
part_Prep = complGen ;
please_Voc = ss "παρακαλώ" ;
possess_Prep = complGen ;
quite_Adv = ss "αρκετά" ;
she_Pron = mkPron "αυτή" "της" "την" "αυτήν" "αυτής" Fem Sg P3 ;
so_AdA = ss "τόσο" ;
someSg_Det = {s,sp = \\g,c => case <g,c> of {
<Masc| Change,Nom> => "κάποιος";
<Masc| Change,Gen|CPrep P_Dat> => "κάποιου" ;
<Masc| Change,Acc |CPrep P_se | CPrep PNul> =>prepCase c ++ "κάποιον" ;
<Masc| Change,Vocative> => "κάποιε" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κάποια";
<Fem,Gen|CPrep P_Dat > => "κάποιας" ;
<Neut,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κάποιο";
<Neut,Gen|CPrep P_Dat > => "κάποιου"
};
n= Sg;
isNeg = False
} ;
somePl_Det = {s,sp = \\g,c => case <g,c> of {
<Masc,Nom |Vocative> => "κάποιοι";
<Masc |Fem | Neut |Change,Gen|CPrep P_Dat> => "κάποιων" ;
<Masc ,Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κάποιους" ;
<Fem,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κάποιες";
<Neut| Change,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κάποια"
};
n= Pl;
isNeg = False
} ;
somebody_NP = nppolPos (mkDeterminer "κάποιος" "κάποιου" "κάποιον" "κάποια" "κάποιας" "κάποια" "κάποιο" "κάποιου" "κάποιο" "κάποιος" "κάποιου" "κάποιον" Sg ) ;
something_NP = makeNP "κάτι" Sg Neut False ;
somewhere_Adv = ss "κάπου" ;
that_Quant = { s = \\_,g,n,c => prepCase c ++ (regAdj "εκείνος").s ! Posit ! g ! n ! c ++ artDef g n c ; sp =\\g,n,c => (regAdj "εκείνος").s ! Posit ! g ! n ! c ; isNeg =False };
that_Subj = ss "οτι" ** {m = Ind} ;
there_Adv = ss "εκεί" ;
there7to_Adv = ss "ως εκεί" ;
there7from_Adv = ss "απο εκεί";
therefore_PConj = ss "γι'αυτό" ;
they_Pron = mkPron "αυτοί" "τους" "τους" "αυτούς" "αυτών" Masc Pl P3 ;
this_Quant = {
s =\\_,g,n,c => prepCase c ++ (regAdj "αυτός").s ! Posit ! g ! n ! c ++ artDef g n c ;
sp =\\g,n,c => (regAdj "αυτός").s ! Posit ! g ! n ! c ;
isNeg =False
};
through_Prep = mkPrep4 "μέσω";
to_Prep = complPrepSe ;
too_AdA = ss "υπερβολικά" ;
under_Prep = mkPreposition "κάτω από" ;
very_AdA = ss "πολύ" ;
want_VV = mkVV (VerbNoPassive2syll "θέλω" "θελήσω" "θέλησα" "ήθελα" "ηθελημένος" ** {lock_V = <>}) ;
we_Pron = mkPron "εμείς" "μας" "μας" "εμάς" "ημών" Masc Pl P1 ;
whatPl_IP = {s = \\g,c => prepCase c ++ "τι" ; n= Pl; a = a} where {a = aagr Masc Pl} ;
whatSg_IP = {s = \\g,c => prepCase c ++ "τι" ; n= Sg; a = a} where {a = aagr Masc Sg} ;
when_IAdv = ss "πότε" ;
when_Subj = ss "όταν" ** {m =Con} ;
where_IAdv = ss "που" ;
which_IQuant = {s = table {
Sg => table {Masc | Change=> table { Nom => "ποιός";
Gen => "ποιού";
Acc | CPrep P_se |CPrep PNul => "ποιόν" ;
Voc => " "
};
Fem => table { Nom | Acc | CPrep P_se |CPrep PNul => "ποιά";
Gen => "ποιάς";
Voc => " "
};
Neut => table { Nom | Acc | CPrep P_se |CPrep PNul => "ποιό";
Gen => "ποιού";
Voc => " "
} };
Pl => table {Masc => table { Nom => "ποιoί";
Gen => "ποιών";
Acc |CPrep P_se |CPrep PNul => "ποιούς" ;
Voc => " "
};
Fem => table { Nom | Acc | CPrep P_se |CPrep PNul => "ποιές";
Gen => "ποιών" ;
Voc => " "
};
Neut | Change => table { Nom | Acc | CPrep P_se |CPrep PNul => "ποιά";
Gen => "ποιών";
Voc => " "
}}}};
whoSg_IP = {s = \\g,c => case <g,c> of {
<Masc ,Nom> =>prepCase c ++ "ποιός" ;
<Fem ,Nom | Acc |CPrep P_se | CPrep PNul > =>prepCase c ++ "ποιά" ;
<Neut| Change ,Nom | Acc | CPrep P_se | CPrep PNul > =>prepCase c ++ "ποιό" ;
<Fem ,Gen> =>prepCase c ++"ποιάς" ;
<Neut | Change | Masc,Gen> => prepCase c ++"ποιού" ;
<Masc ,Acc |CPrep P_se | CPrep PNul > => prepCase c ++"ποιόν" ;
_ => " "
};
a = {g = Masc ; n = Sg} ;
n=Sg
};
whoPl_IP = {s = \\g,c => case <g,c> of {
<Masc ,Nom> => prepCase c ++"ποιοί" ;
<Fem ,Nom | Acc | CPrep P_se | CPrep PNul > => prepCase c ++ "ποιές" ;
<Neut| Change ,Nom | Acc | CPrep P_se | CPrep PNul > => prepCase c ++"ποιά" ;
<Fem | Neut | Change | Masc,Gen> => prepCase c ++"ποιών" ;
<Masc,Acc | CPrep P_se | CPrep PNul > => prepCase c ++"ποιούς" ;
_ => " "
};
a = {g = Masc ; n = Pl} ;
n=Pl
};
why_IAdv = ss "γιατί" ;
with_Prep = mkPreposition "με" ;
without_Prep = mkPreposition "χωρίς" ;
yes_Utt = ss "ναι" ;
youSg_Pron = mkPron "εσύ" "σου" "σε" "εσένα" "εσού" Masc Sg P2 ;
youPl_Pron = mkPron "εσείς" "σας" "σας" "εσάς" "υμών" Masc Pl P2 ;
youPol_Pron = mkPron "εσείς" "σας" "σας" "εσάς" "υμών" Masc Pl P2 ;
no_Quant = let kanenas : ResGre.Gender => ResGre.Number => ResGre.Case => Str = \\g,n,c => case <g,n,c> of {
<Masc| Change,Sg,Nom |Vocative> => "κανένας";
<Masc| Change,Sg,Gen|CPrep P_Dat> => "κανενός" ;
<Masc| Change,Sg, Acc |CPrep P_se | CPrep PNul> => prepCase c ++ "κανέναν" ;
<Fem,Sg,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++ "καμία";
<Fem,Sg,Gen|CPrep P_Dat > => "καμιάς" ;
<Neut,Sg,Nom |Vocative |Acc |CPrep P_se | CPrep PNul> => prepCase c ++"κανένα";
<Neut,Sg,Gen|CPrep P_Dat > => "κανενός" ;
<_,Pl,_> => " " };
in {
s = \\_ => kanenas ;
sp = kanenas ;
isNeg = True
} ;
not_Predet = let oxi : Number =>Gender=> Case => Str= \\n,g,c => case <n,g,c> of {<_,_,_> => prepCase c ++ "όχι" } in { s = oxi} ;
if_then_Conj = {s1 = "αν" ; s2 = "τότε" ; n = Sg ; lock_Conj = <>} ;
at_least_AdN = ss "τουλάχιστον" ;
at_most_AdN = ss "το πολύ" ;
nobody_NP = nppolNeg (mkDeterminer "κανένας" "κανενός" "κανέναν" "καμία" "καμιάς" "καμία" "κανένα" "κανενός" "κανένα" "κανένας" "κανενός" "κανέναν" Sg) ;
nothing_NP = makeNP "τίποτα" Sg Neut True;
except_Prep = mkPreposition "εκτός απο";
as_CAdv = {s="τόσο"; p="όσο" ; c= Nom} ;
have_V2 = dirV2 (mkAux "έχω" "είχα" "έχε" "έχετε" "έχων" ** {lock_V = <>}) ;
lin language_title_Utt = ss "Ελληνικά" ;
}

View File

@@ -0,0 +1,46 @@
concrete SymbolGre of Symbol =
CatGre ** open Prelude, CommonGre, ResGre in {
flags coding= utf8 ;
lin
SymbPN i = {s = \\_,_ => i.s ; g = Masc };
IntPN i = {s = \\_,_ => i.s ; g = Masc } ;
FloatPN i = {s = \\_,_ => i.s ; g = Masc } ;
NumPN i = {s = \\_,_ => i.s ! Masc ! Nom ; g = Masc } ;
CNIntNP cn i = heavyNP {
s = \\c => prepCase c ++ cn.s ! Sg!c ++ i.s ;
a = agrP3 cn.g Sg ;
hasClit = False
} ;
CNSymbNP det cn xs = let g = cn.g in heavyNP {
s = \\c => det.s ! g ! c ++ cn.s ! det.n ! c++ xs.s ;
a = agrP3 g det.n ;
hasClit = False
} ;
CNNumNP cn i = heavyNP {
s = \\c => artDef cn.g Sg c ++ cn.s ! Sg!c ++ i.s ! Masc!c ;
a = agrP3 cn.g Sg ;
hasClit = False
} ;
SymbS sy = {s = \\_ => sy.s} ;
SymbNum n = {s = \\_,_ => n.s ; isNum = True ; n = Pl} ;
SymbOrd n = {s = \\_,_,_,_ => n.s ++ "." ; adv= table { Posit => " " ; Compar => " " ; Superl => " "}} ;
lincat
Symb, [Symb] = SS ;
lin
MkSymb s = s ;
BaseSymb = infixSS "και" ;
ConsSymb = infixSS "," ;
}

26
lib/src/greek/TenseGre.gf Normal file
View File

@@ -0,0 +1,26 @@
--concrete TenseEll of Tense =
-- CatEll ** open ResEll, CommonEll , Prelude in {
concrete TenseGre of Tense = ResGre [TTense,Mood,Voice] ,CommonGre ** open (R = ParamX) in {
flags coding = utf8 ;
lin
TTAnt t a = {s = t.s ++ a.s ; t = t.t ; a = a.a ; m = t.m } ;
TPres = {s = [] ; t = ResGre.TPres ; m = Ind} ;
TPast = {s = [] ; t = ResGre.TPast; m = Ind} ;
TFut = {s = [] ; t = ResGre.TFut; m = Ind} ;
TCond = {s = [] ; t = ResGre.TCond; m = Ind} ;
ASimul = {s = []} ** {a = R.Simul} ;
AAnter = {s = []} ** {a = R.Anter} ; --# notpresent
PPos = {s = []} ** {p = R.Pos} ;
PNeg = {s = []} ** {p = R.Neg} ;
}

11
lib/src/greek/TextGre.gf Normal file
View File

@@ -0,0 +1,11 @@
concrete TextGre of Text = CatGre ** {
flags coding=utf8 ;
lin
TEmpty = {s = []} ;
TFullStop x xs = {s = x.s ++ "." ++ xs.s} ;
TQuestMark x xs = {s = x.s ++ ";" ++ xs.s} ;
TExclMark x xs = {s = x.s ++ "!" ++ xs.s} ;
}

122
lib/src/greek/VerbGre.gf Normal file
View File

@@ -0,0 +1,122 @@
concrete VerbGre of Verb = CatGre ** open ResGre,CommonGre, Prelude in {
flags coding = utf8;
lin
UseV v = predV v ;
ComplVV v vp =
insertComplement (\\a => case a of {
Ag _ n p => "να" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Con n p Active Perf ++ vp.comp ! a}) (predV v) ;
ComplVS v s =
insertComplement(\\_ => "ότι" ++ s.s ! Ind) (predV v);
ComplVQ v q =
insertComplement (\\_ => q.s ! QIndir) (predV v) ;
ComplVA v ap = insertComplement (\\a => case a of {
Ag g n _ => ap.s ! Posit ! g ! n ! Nom } ) (predV v) ;
SlashV2a v = mkVPSlash v.c2 (predV v)** {n3 = \\_ => [] ;c2 = v.c2 } ;
Slash2V3 v np = mkVPSlash v.c3 (insertObject v.c2 np (predV v)) ** {n3 = \\_ => [] ;c2 = v.c3 } ;
Slash3V3 v np = mkVPSlash v.c2 (insertObject v.c3 np (predV v))** {n3 = \\_ => []; c2 = v.c2 } ;
SlashV2V v vp = mkVPSlash v.c2 ( predV v) ** {
n3 = \\a =>
let agr = clitAgr a
in
v.c3.s ++ "να" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Con agr.n agr.p Active Perf ++ vp.comp! a ;
c2 = v.c2
} ;
SlashV2S v s = mkVPSlash v.c2 (predV v) ** {
n3 = \\_ => "οτι" ++ s.s ! Ind;
c2 = v.c2
} ;
SlashV2Q v q = mkVPSlash v.c2 (predV v )** {
n3 = \\_ => q.s ! QIndir;
c2 = v.c2
} ;
SlashV2A v ap = mkVPSlash v.c2 (predV v )** {
n3 =\\a => let agr = complAgr a in ap.s ! Posit ! agr.g ! agr.n ! Acc ;
c2 = v.c2
} ;
ComplSlash vp np = insertObject vp.c2 np (insertComplement (\\a => vp.c2.s ++ vp.n3 ! np.a ) vp ) ;
SlashVV v vp =
insertComplement (\\a => case a of {
Ag _ n p => "να" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Con n p Active Perf++ vp.comp ! a})
(predV v) ** {n3 = vp.n3 ; c2 = vp.c2} ;
SlashV2VNP v np vp =
mkVPSlash vp.c2( insertObject v.c2 np (predV v)) ** {
n3 = \\a =>
let agr = clitAgr a
in
v.c2.s ++ "να" ++ vp.clit ++ vp.clit2 ++ vp.v.s ! VPres Con agr.n agr.p Active Perf ++ vp.comp! a ;
c2 = v.c2
} ;
ReflVP v = insertComplement (\\a => v.c2.s ++ reflPron ! a ! Acc) v ;
UseComp comp = insertComplement comp.s (predV copula) ;
PassV2 v = {
v = v ;
clit = [] ;
clit2 = [] ;
comp = \\a => [] ;
isNeg = False;
voice = Passive ;
aspect = Perf ;
} ;
AdvVP vp adv = insertAdv adv.s vp ;
AdVVP adv vp= insertAdV adv.s vp ;
AdvVPSlash vp adv = insertAdv adv.s vp ** {n3 = \\_ => [] ;c2 = vp.c2} ;
AdVVPSlash adv vp = insertAdV adv.s vp ** {n3 = \\_ => [] ;c2 = vp.c2} ;
VPSlashPrep vp prep = vp ** {n3 = \\_ => [] ;
c2 = {s = prep.s ; c = prep.c ; isDir = False}
} ;
CompAP ap = {s=\\a => case a of {
Ag g n _ => ap.s ! Compar! g ! n ! Nom
}
} ;
CompNP np = {s = \\_ => (np.s ! Nom).comp} ;
CompAdv a = {s = \\_ => a.s} ;
CompCN cn = {s=\\a => case a of {
Ag _ n p => cn.s ! n ! Nom
}
} ;
UseCopula = predV copula ;
}