1
0
forked from GitHub/gf-core

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

@@ -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 ;
}