Files
gf-rgl/src/ancient_greek/CatGrc.gf
Krasimir Angelov fb398c603e The new Decimal API
2023-08-21 20:14:26 +02:00

138 lines
4.6 KiB
Plaintext

--# -path=.:../abstract:../common:prelude
concrete CatGrc of Cat = CommonX - [Temp,Tense] ** open ResGrc, Prelude in {
flags optimize=all_subs ;
lincat
Temp = {s : Str ; t : VTense ; a : Anteriority } ;
Tense = {s : Str ; t : VTense } ; -- cf. TenseGrc, ResGrc
-- Tensed/Untensed
S = {s : Str} ;
QS = {s : QForm => Str} ;
RS = { s : Agr => Str } ;
SSlash = {s : Str ; c2 : Preposition} ;
-- Sentence
-- We parameterize clauses by VTense rather than Temp or Tense and Anteriority,
-- since absolute or relative tenses are hardly expressed in Greek.
Cl = ResGrc.Clause ; -- {s : VTense => Polarity => Order => Str} ;
ClSlash = {
s : VTense => Polarity => Order => Str ;
c2 : Preposition
} ;
Imp = {s : Polarity => VPImpForm => Str} ;
-- Question
QCl = {s : VTense => Polarity => QForm => Str} ;
IP = { s : Case => Str ; n : Number } ;
-- IComp = {s : Str} ;
IDet = {s : Gender => Case => Str ; n : Number} ;
IQuant = {s : Number => Gender => Case => Str} ;
-- Relative
RCl = {
s : VTense => Polarity => Agr => Str ;
c : Case
} ;
RP = {s : Gender => Number => Case => Str } ;
-- Verb
VP = ResGrc.VP ;
VPSlash = ResGrc.VP ** {c2 : Preposition} ;
Comp = { s : Agr => Str } ;
-- Adverb is defined in CommonX as Adv = { s : Str } ;
-- TODO: Adverbs derived from adjectives have comparative and superlative forms
-- Adjective
AP = { s : AForm => Str } ; -- ResGrc: AForm = AF Gender Number Case
-- TODO: s : Agr => AForm => Str for possessive: one's nice
-- Noun, whose adjective or genitive object may depend on the subject (reflexive possessive)
CN = { s : Number => Case => Str ; -- noun only
s2 : Number => Case => Str ; -- attributes (pre- or postnominal)
isMod : Bool ; -- attribute nonempty?
rel : Number => Str ; -- relative clause (dep. on Agr ?)
g : Gender } ;
NP = {s : Case => Str ;
isPron : Bool ;
e : Case => Str ; -- emphasized pronoun, or ignored
a : Agr } ; -- We need: isPron: PronTon | PronAton | None
-- pron: Tonicity
-- TODO: For CompNP in Verb, we would like to suppress the article
-- At sentence beginnings, (kai|men|de) may be inserted between DefArt and CN
-- NPRefl: noun phrase which may depend on the subject (via reflexive object or possessive)
-- See ExtraGrc
Pron = { s : PronForm => Str ; a : Agr } ; -- personal and possessive
Det = Determiner ; -- = { s : Gender => Case => Str ; n : Number } ;
-- Predet = {s : Str} ; s : Number => Gender => Case => Str ??
Num = {s : Gender => Case => Str ; n : Number ; isCard : Bool} ;
Card = {s : Gender => Case => Str ; n : Number} ; -- cardinals > 200 are adjectives
Ord = {s : AForm => Str} ; -- number: oi tritoi anthropoi?
Quant = Quantifier ; -- = { s : Number => Gender => Case => Str } ;
-- Numeral
Numeral = {s : CardOrd => Str ; n : Number} ;
Digits = {s : Str ; unit : Unit} ;
Decimal = {s : Str ; unit : Unit ; hasDot : Bool} ;
-- Structural
Conj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str} ;
Prep = Preposition ; -- = {s : Str ; c : Case} ;
-- Open lexical classes, e.g. Lexicon
V, VS, VA, VQ, VV = Verb ;
V2, V2A, V2S = Verb ** {c2 : Preposition} ;
V2V,V2Q = Verb ** {c2 : Preposition ; isAux : Bool} ;
V3 = Verb ** {c2, c3 : Preposition} ;
A = Adjective ; -- including degree
A2 = Adjective ** {c2 : Preposition} ; -- TODO: add degree
N = Noun ; -- = {s : Number => Case => Str ; g : Gender}
N2 = Noun ** {c2 : Preposition ; obj : Agr => Str } ;
-- we add obj to N2 to have ComplN3 : N3 -> NP -> N2 (which should be N3 -> NP -> CN2!)
N3 = Noun ** {c2,c3 : Preposition} ;
PN = ProperNoun ; -- = {s : Case => Str ; g : Gender ; n : Number} ;
-- default linearizations, stolen from CatGer.gf and modified:
linref
-- SSlash = \ss -> ss.s ! Main ++ ss.c2.s ;
-- ClSlash = \cls -> cls.s ! MIndic ! Pres ! Simul ! Pos ! Main ++ cls.c2.s ;
VP = \vp -> useInfVP vp ;
VPSlash = \vps -> useInfVP vps ++ vps.c2.s ;
V, VS, VQ, VA = \v -> useInfVP (predV v) ;
V2, V2A, V2Q, V2S = \v -> useInfVP (predV v) ++ v.c2.s ;
V3 = \v -> useInfVP (predV v) ++ v.c2.s ++ v.c3.s ;
VV = \v -> useInfVP (predV v) ;
V2V = \v -> useInfVP (predV v) ++ v.c2.s ;
Conj = \c -> c.s1 ++ c.s2 ;
CN = \cn -> cn.s2 ! Sg ! Nom ++ cn.s ! Sg ! Nom ++ cn.rel ! Sg ;
}