1
0
forked from GitHub/gf-core
Files
gf-core/lib/src/ancient_greek/MorphoGrc.gf
2016-05-25 12:35:37 +00:00

1838 lines
98 KiB
Plaintext

--# -path=.:../prelude:../common
--
--1 A Simple Greek Resource Morphology
--
-- Based on E.Bornemann/E.Risch: Griechische Grammatik, 2.Auflage 1978 (2008)
-- (referred to as BR <Paragraph>) www.diesterweg.de, ISBN 978-3-425-06850-3
-- Author: Hans Leiss, LMU Munich, CIS Aug.2012, Dec.2015
-- This resource morphology contains definitions needed in the resource
-- syntax. To build a lexicon, it is better to use $ParadigmsGrc$, which
-- gives a higher-level access to this module.
resource MorphoGrc = ResGrc ** open Prelude, (P=Predef), (Ph=PhonoGrc) in {
flags optimize=noexpand ; --
--2 Phonology
--
-- See PhonGrc.gf
--
-- For $ParadigmsGer$.
--
--2 Nouns
--
-- See ResGrc.gf. (Default case should be in ResGrc, the others be moved here.)
--
--3 Proper names
--
-- See ResGrc.gf. (Default case should be in ResGrc, the others be moved here.)
--2 Determiners
oper
-- Determiner : Type = {s : Gender => Case => Str ; n : Number} ;
mkDeterminer : Number -> (Case => Str) -> (Case => Str) -> (Case => Str) -> Determiner =
\n,mc,fc,nc -> {s = table{ Masc => mc ; Fem => fc ; Neutr => nc } ; n = n} ;
mkDeterminer2 : Number -> (Case => Str) -> (Case => Str) -> Determiner =
\n,mc,nc -> {s = table{ Masc|Fem => mc ; Neutr => nc } ; n = n} ;
-- Used in StructuralGrc:
-- cc mkDeterminer2 Sg (cases "tis" "tina'" "tino's*" "tini'") (cases "ti" "ti" "tino's*" "tini'")
detLikeAdj = overload {
detLikeAdj : Number -> Str -> Determiner = detLikeAdj1 ;
detLikeAdj : Number -> Str -> Str -> Determiner = detLikeAdj2 ;
} ;
detLikeAdj2 : Number -> Str -> Str -> Determiner = \n,pas,pantos ->
let adj:Adj = adj3 pas pantos
in {s = \\g,c => adj.s ! AF g n c ; n = n } ;
detLikeAdj1 : Number -> Str -> Determiner = \n,oligos ->
let adj:Adj = adjAO oligos
in {s = \\g,c => adj.s ! AF g n c ; n = n } ;
--2 Pronouns
-- Personal pronouns have different forms, depending on whether they are
-- emphasized or not, e.g. "e)moy~" vs. "moy". Possessive pronouns are
-- used like adjectives, not like determiners.
-- A Pron here combines personal and possessive forms.
Pron : Type = {
s : PronForm => Str ;
a : Agr
} ;
mkPron : Gender -> Number -> Person -> Pron = \g,n,p ->
let pers = mkPersPron g n p ;
poss = mkPossPron g n p
in { s = table { NPCase t c => pers ! t ! c ;
NPPoss g' n' c => poss.s ! AF g' n' c } ;
a = Ag g n p
} ;
mkPersPron : Gender -> Number -> Person -> (Tonicity => Case => Str) = \g,n,p ->
case <g,n,p> of {
<_,Sg,P1> => table{Ton => cases "e)gw'" "e)me'" "e)moy~" "e)moi'" ;
Aton => cases "" "me" "moy" "moi"};
<_,Sg,P2> => table{Ton => cases "sy'" "se'" "soy~" "soi'" ;
Aton => cases "" "se" "soy" "soi"} ;
<_,Pl,P1> => table{Ton => cases "h(mei~s*" "h(ma~s*" "h(mw~n" "h(mi~n" ;
Aton => cases "" "" "h(mw~n" "h(~min"} ;
<_,Pl,P2> => table{Ton => cases "y(mei~s*" "y(ma~s*" "y(mw~n" "y(mi~n" ;
Aton => cases "" "" "y(mw~n" "y(mi~n"} ;
<_,Dl,P1> => table{Ton => cases "nw'" "nw'" "nw|~n" "nw|~n" ; -- BR 74.3
Aton => cases "" "" "nw|~n" "nw|~n"} ;
<_,Dl,P2> => table{Ton => cases "sfw'" "sfw'" "sfw|~n" "sfw|~n" ; -- BR 74.3
Aton => cases "" "" "" ""} ;
<Masc, Sg,P3> => table{Ton => cases "oy(~tos*" "toy~ton" "toy'toy" "toy'tw|" ;
Aton => cases "" "ay)to'n" "ay)toy~" "ay)tw|" } ;
<Fem, Sg,P3> => table{Ton => cases "ay)'th" "tay'thn" "tay'ths*" "tay'th|" ;
Aton => cases "" "ay)th'n" "ay)th~s*" "ay)th|" } ;
<Neutr,Sg,P3> => table{Ton => cases "toy~to" "toy~to" "toy'toy" "toy'tw|" ;
Aton => cases "" "ay)to'" "ay)toy~" "ay)tw|" } ;
<Masc, Pl,P3> => table{Ton => cases "oy(~toi" "toy'toys*" "toy'twn" "toy'tois*" ;
Aton => cases "" "ay)toy's*" "ay)tw~n" "ay)toi~s*" } ;
<Fem, Pl,P3> => table{Ton => cases "ay(~tai" "tay'tas*" "toy'wn" "tay'tais*" ;
Aton => cases "" "ay)ta's*" "ay)tw~n" "ay)tai~s*" } ;
<Neutr,Pl,P3> => table{Ton => cases "tay~ta" "tay~ta" "toy'twn" "toy'tois*" ;
Aton => cases "" "ay)ta'" "ay)tw~n" "ay)toi~s" } ;
<_,Dl,P3> => table{Ton => cases "" "" "" "" ; -- TODO (not in BR)
Aton => cases "" "" "" "" } -- TODO (not in BR)
} ;
-- emphasized, non-reflexive possessive pronoun BR 67
mkPossPron : Gender -> Number -> Person -> { s : AForm => Str } = \g,n,p ->
case <p,n> of { <P1,Sg> => (adjAO "e)mo's") ;
<P2,Sg> => (adjAO "so's") ;
<P1,Pl> => (adj2AO "h(me'teros" "h(mete'ra_s") ;
<P2,Pl> => (adj2AO "y(me'teros" "y(mete'ra_s") ;
<P3,Sg|Pl> => {s = \\_ => houtos_Quantifier.s!n!g!Gen } ; -- BR 67 2, or: "ekei~noy|hs"
-- <P3,Pl> => (adj2AO "sfe'teros" "sfete'ra_s") ; -- reflexive
-- else undefined ;
_ => { s = \\_ => "---" } } ; -- dual
-- TODO: add reflexive forms (i.e. he sees his own child) vs. his=John's ReflPron.Gen
-- ATon: use postponed persPron.Gen: o filos moy
-- Other forms of pronouns have different types:
reflPron : Agr => Case => Str = -- BR 66
let dAsp : Str -> Str =
\str -> case str of { "ay)" + r => "ay" + r ; _ => str }
in table {
Ag g Sg P1 => \\c => "e)m"+ dAsp(autos.s ! g ! Sg ! c) ;
Ag g Sg P2 => \\c => "se" + dAsp(autos.s ! g ! Sg ! c) ;
Ag g Sg P3 => \\c => "e(" + dAsp(autos.s ! g ! Sg ! c) ;
Ag g Pl P3 => \\c => "e(" + dAsp(autos.s ! g ! Pl ! c) ;
Ag g n p => \\c => (mkPersPron g n p) ! Ton ! c
++ autos.s ! g ! Pl ! c
} ;
reciPron : Gender => Case => Str = -- BR 65 (cf. ExtraGrc.gf)
table { Masc => table { Acc => "a)llh'loys*" ;
Gen => "a)llh'lwn" ;
Dat => "a)llh'lois*" ;
_ => [] } ;
Fem => table { Acc => "a)llh'la_s*" ;
Gen => "a)llh'lwn" ;
Dat => "a)llh'lais*" ;
_ => [] } ;
Neutr => table { Acc => "a)llh'la" ;
Gen => "a)llh'lwn" ;
Dat => "a)llh'lois*" ;
_ => [] }
} ;
-- Interrogative and indefinite pronouns:
iPron : Number => Gender => Case => Str = -- BR 70
table { Sg => table { Masc | Fem => cases "ti's*" "ti'na" "ti'nos*" "ti'ni" ;
Neutr => cases "ti'" "ti'" "ti'nos*" "ti'ni" } ;
Pl | Dl => -- do dual forms exist?
table { Masc | Fem => cases "ti'nes*" "ti'nas*" "ti'nwn" "ti'si" ; -- ti'sin
Neutr => cases "ti'na*" "ti'na" "ti'nwn" "ti'si" } -- tisi'n
} ;
indefPron : Number => Gender => Case => Str = -- BR 70
table { Sg => table { Masc | Fem => cases "tis*" "tina'" "tino's*" "tini'" ;
Neutr => cases "ti" "ti" "tino's*" "tini'" } ;
Pl | Dl => -- do dual forms exist?
table { Masc | Fem => cases "tine's*" "tina's*" "tinw~n" "tisi'" ; -- tisi'n
Neutr => cases "tina*" "tina" "tinwn" "tisi" } -- tisi'n
} ;
iPronNP : Gender -> Number -> { s : Case => Str ;
a : Agr ; isPron : Prelude.Bool } =
\g,n -> { s = iPron ! n ! g ; a = Ag g n P3 ; isPron = True } ;
indefPronNP : Gender -> Number -> { s : Case => Str ;
a : Agr ; isPron : Prelude.Bool ; e : Case => Str } =
\g,n -> { s = indefPron ! n ! g ;
a = Ag g n P3 ;
isPron = True ;
e = indefPron ! n ! g } ; -- emphasized form?
-- Moved to RelativeGrc: relPronSg, relPronPl : Gender => Case => Str
mkIP : Number -> Gender -> { s : Case => Str ; n : Number } =
\n,g -> { s = iPron ! n ! g ; n = n } ; -- g : gender?
-- ti's, ti' can be used attributetively, too, so g should not be inherent
-- Demonstrative pronouns: BR 68 1. o'de, 2. oy~tos, 3. ekei~nos see ExtraGrc.gf
--2 Adjectives
--
-- There are `two-ending' adjectives, where masculine and feminine forms are the same,
-- and `three-ending' ones, with separate endings for masculine, feminine and neuter.
--
-- Adj = {s : AForm => Str} ;
--
-- Adjectives inflect according to gender, number and case, and follow largely the
-- noun declension classes, i.e. are like the combination of a masculine, a feminine
-- and a neuter noun (of the same declension).
--
-- However, there are separate accentuation rules (like BR 45.3, that the accent
-- in adjectives whose stem ends in -n is as far to the left as consistent with
-- the general accent rules).
--
-- See the beginning in ResGrc
--
--2 Verbs
--
-- Depending on a vowel insertion between stem and endings, one distinguishes
-- thematic conjugation = w-conjugation (paideyw) = mkVerbW from
-- athematic conjugation = mi-conjugation (didwmi) = mkVerbMi
--
-- The forms of a greek verb are derived from 7 aspect/tempus-stems: BR 80 2
--
-- asp/tempus-stem w- mi- conjucation form:
-- act|med|pass Pres : paideyw didwmi VAct (VPres VInd) Sg P1
-- act|med Fut : paideysw dwsw VAct (VFut FInd) Sg P1
-- act|med Aor : epaideysa edwka VAct (VAor VInd) Sg P1
-- act Perf : pepaideyka dedwka VAct (VPerf VInd) Sg P1
-- med|pass Perf : pepaideymai dedomai VMed (VPerf VInd) Sg P1
-- pass Aor : epaideyvhn edothn VPass (VAor VInd) Sg P1
-- VAdj : paideytos dotos VAdj Masc Sg Nom
-- The verbal adjective VAdj may be missing.
-- The aspect/tempus stems are usually derived from a common verb stem by
-- ablaut, initial reduplication, or suffixes.
-- *Weak* stems resp. tempora are those where the tempus stem is obtained by adding
-- a specific consonant, *strong* stems/tempora those without such a consonant.
-- Conjugation classes depend on how the following tempus stems are formed:
-- weak(I)/strong(II) act|med Aor,
-- weak(I)/strong(II) pass Aor,
-- weak(I)/strong(II) act Perf.
param
tempType = weak | strong ;
-- Show the row of guessed verb stems (use a tuple with fields ordered as in verbstems;
-- a record with field names would be reordered lexicographically)
-- Memo: gf > cc -list verbstems
oper
verbstems = <"PresAct", "FutAct", "AorAct", "PerfAct", "PerfMedPass", "AorPass", "VAdj"> ;
guessVerbstems : Str -> Str * Str * Str * Str * Str * Str * Str = \verb ->
case verb of { _ + "w" => guessVerbstemsW verb ;
_ + "mi" => guessVerbstemsMi verb ;
_ => P.error "Use -w or -mi" };
-- tempusstems: BR 80 2 (weak: by adding tempus marker)
-- act|med|pass Pres : paideyw VAct (VPres VInd) Sg P1
-- act|med Fut : paideysw VAct (VFut FInd) Sg P1
-- act|med Aor : epaideysa VAct (VAor VInd) Sg P1
-- act Perf : pepaideyka VAct (VPerf VInd) Sg P1
-- med|pass Perf : pepaideymai VMed (VPerf VInd) Sg P1
-- pass Aor : epaideyvhn VPass (VAor VInd) Sg P1
-- VAdj : paideytos VAdj Masc Sg Nom
-- verbal adjective (may be missing)
-- Easier handling of accents:
a3 : Str -> Str = \str -> addAccent (Acute 3) str ;
a2 : Str -> Str = \str -> addAccent (Acute 2) str ;
dA : Str -> Str = \str -> dropAccent str ;
menos : Number -> Str = \n -> (case n of { Sg => "me'nos*" ;
_ => "me'noi" }) ;
--3 W-conjugation: --------------------------------------------------------
-- BR distinguish 7 classes of present stems (see below), the first two of
-- which are subdivided into
--
-- (a) verba vocalia, i.e. verbal stem ends in a vowel
-- expl: paideyw_V, timaw_V, poiew_V, doylow_V
-- (b) verba muta, i.e. verbal stem ends in muta consonant (p,b,f | t,d,v | k,g,c)
-- expl: leipw_V
-- (c) verba liquida, i.e. verbal stem ends in liq.consonant (l,r) or nasal (m,n,(n)g)
-- expl: derw_V
mkVerbW1 : Str -> Verb = \paidey'w ->
case paidey'w of {
x + (#Ph.diphthong | #Ph.vowel) + (""| #Ph.accent) + "w" => mkVerbW1voc paidey'w ;
x + (("p"|"k"|"t")
|("f"|"c"|"v")|("b"|"g"|"d")|"z") + "w" => mkVerbW1mut paidey'w ;
x + (#Ph.vowel) + (""| #Ph.accent) +
("r"|"l"|"m"|"n"|"mn") + "w" => mkVerbW1liq paidey'w ; -- BR 103.1
x + "ll" + "w" => mkVerbW1liq paidey'w ; -- BR 103.2a
x + (("ai'"|"ei'"|"i_"|"y_")+("n"|"r")) + "w" => mkVerbW1liq paidey'w ; -- BR 103.2b
_ => mkVerbW1voc paidey'w -- default
} ;
mkVerbW7 : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1,
MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb =
\paidey'w, paidey'sw, epai'deysa, pepai'deyka,
pepai'deymai, epaidey'vhn, paideyto's ->
case paidey'w of { _ + (#Ph.vowel|#Ph.diphthong) + (#Ph.accent|"") + "w"
=> mkVerbW7voc paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ;
_ + (#Ph.labial|#Ph.guttural|#Ph.dental|"z") + "w"
=> mkVerbW7mut paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ;
_ + (#Ph.liquid|#Ph.nasal) + "w"
=> mkVerbW7liq paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ;
_ => P.error "insufficient case in MorphoGrc.mkVerbW7" } ;
-- w-conjugation with weak tempus-stems: see BR 91 - 107
-- Show the row of stemforms, for weak w-conjugation: -- BR 91, 92
guessVerbstemsW : Str -> Str * Str * Str * Str * Str * Str * Str = \paidey'w ->
let
paidey' = P.tk 1 paidey'w ; -- BR: Praesensstamm
epaidey' = augment paidey' ;
epai'dey = a2 epaidey' ; -- check syllability?
pepaidey' = reduplicate paidey' ;
pepai'dey = a2 pepaidey' ; -- check syllability?
in
<paidey'w , (paidey'+"sw") , (epai'dey+"sa") ,
(pepai'dey+"ka") , (pepai'dey+"mai") , (epaidey'+"vhn") ,
(dA paidey' +"to's*")> ;
-- Active endings:
actPresInd = endingsV <"w", "eis*", "ei", "omen", "ete", "oysi", "eton", "eton"> ;
actPresConj= endingsV <"w", "h|s*", "h|", "wmen", "hte", "wsi", "hton", "hton"> ;
actPresOpt = endingsV <"oimi", "ois*", "oi", "oimen", "oite", "oien", "oiton", "oi'thn"> ;
actImpfInd = endingsV <"on", "es*", "e", "omen", "ete", "on", "eton", "e'thn"> ;
actAorInd = endingsV <"a", "as*", "e", "amen", "ate", "an", "aton", "a'thn"> ;
actAorOpt = endingsV <"aimi", "ais*", "ai", "aimen", "aite", "aien", "aiton", "ai'thn"> ;
actPerfInd = endingsV <"a", "as*", "e", "amen", "ate", "asi", "aton", "aton"> ;
actPlqmInd = endingsV <"ein", "eis*", "ei", "emen", "ete", "esan", "eton", "e'thn"> ;
-- contracted future
actFutInd = endingsV <"w~", "ei~s*", "ei~", "oy~men", "ei~te", "oy~si",
"ei~ton", "ei~ton"> ; -- BR 104.1 (dual:HL)
actFutOpt = endingsV <"oi~mi", "oi~s*", "oi~", "oi~men", "oi~te", "oi~en",
"oiton", "oi'thn"> ; -- BR 104.1
-- Medium endings:
medPresInd = endingsV <"omai", "h|", "etai", "o'meva", "esve", "ontai", "esvon", "esvon"> ;
medPresConj = endingsV <"wmai", "h|", "htai", "w'meva", "hsve", "wntai", "hsvon", "hsvon"> ;
medPresOpt = endingsV <"oi'mhn","oio","oito","oi'meva","oisve","ointo","oisvon","oi'svhn"> ;
medImpfInd = endingsV <"o'mhn", "oy", "eto", "o'meva", "esve", "onto", "esvon", "e'svhn"> ;
medAorInd = endingsV <"a'mhn", "w", "ato", "a'meva", "asve", "anto", "asvon", "a'svhn"> ;
medAorOpt = endingsV <"ai'mhn","aio","aito","ai'meva","aisve","ainto","aisvon","ai'svhn"> ;
medPerfInd = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ;
medPerfConj = endingsV <"w)~", "h|)~s", "h|)~", "w)~men", "h)~te", "w)~si",
"h~ton", "h~ton"> ; -- Dual BR 138/141
medPerfOpt = endingsV <"ei)'hn", "ei)'hs", "ei)'h", "ei)~men", "ei)~te", "ei)~en",
"ei)~ton", "ei)~ton"> ; -- Dual BR 138, 141
medPlqmInd = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ;
-- contracted future:
medFutInd = endingsV <"oy~mai", "h|~", "ei~tai", "oy'meva", "ei~sve", "oy~ntai",
"ei~svon", "ei~svon"> ; -- BR 104.1
medFutOpt = endingsV <"oi'mhn","oi~o","oi~to","oi'meva","oi~sve","oi~nto",
"oi~svon","oi'svhn"> ; -- BR 104.1
-- Passive endings:
passFutInd = endingsV <"h'somai","h'sh|","h'setai","hso'meva","h'sesve","h'sontai",
"h~svon","h~svon"> ;
passAorInd = endingsV <"hn","hs*","h","hmen","hte","hsan","hton","h'thn"> ;
passAorConj= endingsV <"w~","h|~s*","h|~","w~men","h~te","w~si","h~ton","h'thn"> ;
passAorOpt = endingsV <"ei'hn","ei'hs*","ei'h","ei~men","ei~te","ei~en","ei~ton","ei'thn"> ;
-- Imperative endings:
actPresImp = endingsImp <"e","e'tw","ete","o'ntwn"> ;
actAorImp = endingsImp <"on","a'tw","ate","a'ntwn"> ;
medPresImp = endingsImp <"oy","e'svw","esve","e'svwn"> ;
medAorImp = endingsImp <"ai","a'svw","asve","a'svwn"> ;
medPerfImp = endingsImp <"so","svw","sve","svwn"> ;
passAorImp = endingsImp <"vhti","vh'tw","vhte","ve'ntwn"> ;
-- We define mkVerbW in such a way that each full form depends on only one of the
-- 7 aspect/tense stems, so that we can use mkVerbW for weak and strong verbs.
-- (Strong verbs are treated in (d) BR 108 - 115.)
-- Done: act|med VAor weak|strong BR 109
-- act VPerf|VPlqm strong -a BR 112 (anything to do?)
-- TODO: act VAor "wurzelaorist" BR 110
-- pass VAor|VFut strong BR 111
-- act VPerf|VPlqm strong -a BR 112.1 ge-graf-[k]a: omit k after consonant-stem
-- TODO: cover monosyllabic stems, cover medium future in active verbs
-- We split the construction of verb paradigms into active, medium and passive
-- constructions, so that intransitive verbs, deponentia and the similarity of medium
-- and passive can be defined more easily.
mkActW : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1 : Str) -> Vform => Str =
\paidey'w, paidey'sw, epai'deysa, pepai'deyka ->
let
-- present stem: paidey (used for VPres(VInd|VConj|VOpt),
-- VImpf, VImp, VInf GPres, partDiathPres)
paidey' = P.tk 1 paidey'w ;
pai'dey = a2 paidey'; -- check syllability?
paidey = dA paidey' ;
epaidey' = augment paidey' ;
epaidey = dA epaidey' ;
epai'dey = a2 epaidey ; -- check syllability?
-- future stem: paideys
paidey's = P.tk 1 paidey'sw ;
paideys = dA paidey's ;
-- weak/strong: s/-
-- act|med aorist stem: paideys -- e-paideys-a / e-bal-on
aor : tempType = -- e-li(ps)-a / TODO
case epai'deysa of { stm + "on" => strong ; _ => weak } ; -- BR 109
actAorInd' = case aor of { weak => actAorInd ; strong => actImpfInd } ;
actAorOpt' = case aor of { weak => actAorOpt ; strong => actPresOpt } ;
epai'deys : Str = case aor of { weak => P.tk 1 epai'deysa ;
strong => P.tk 2 epai'deysa } ;
epaideys = dA epai'deys ;
epaidey's = a3 epai'deys ;
pai'deyS = unaugment epai'deys ; -- aorist-stem =/= future-stem
paidey'S = a3 pai'deyS ;
paideyS = dA pai'deyS ;
-- act perfect stem: pepaideyk -- weak/strong: k/-
pepai'deyk = P.tk 1 pepai'deyka ; -- for VAct (VPerf|VPlqm)
pepaideyk = dA pepai'deyk; -- pepai'dey-k-a / ge'graph-a
pepaidey'k = a3 pepaideyk ; -- inflection: strong=weak BR 112
epepaidey'k = augment pepaidey'k ; -- perhaps ablaut,aspiration for Wlab,Wmut
-- to cover verba contracta ending in -a.'w, -e'w, -o'w,
-- apply contractVowels to the forms of the present stem: BR 93
cV : Str -> Str -> Str = case paidey' of { -- "a'" is short by convention
_ + ("a'" | "e'" | "o'") => Ph.contractVowels ; -- cV2
_ => \w1,w2 -> w1+w2 } ;
-- participles as adjectives (don't use adj3nt for each of the 4x45 af's):
partPres = (adj3nt (paidey' + "wn") (paidey' + "ontos")) ;
partFut = (adj3nt (paidey's + "wn") (paidey's + "ontos")) ;
partAor = (case aor of { -- BR 109
weak => adj3nt (paidey'S + "a_s") (paidey'S + "antos") ;
strong => adj3nt (paideyS + "w~n" ) (paideyS + "o'ntos") }) ;
partPerf = (adj3d (pepaideyk + "w's") (pepaideyk + "o'tos")) ;
-- BR 44.6 (fem: kyi~a)
in
table { -- accents ok
Fin (VPres VInd) n p => cV paidey' (actPresInd n p) ;
Fin (VPres VConj) n p => cV paidey' (actPresConj n p) ;
Fin (VPres VOpt) n p => case <n,p> of {
<Dl,P3> => cV paidey (actPresOpt n p) ;
_ => cV paidey' (actPresOpt n p) } ;
Fin VImpf n p => case <n,p> of {
<Pl,P1> => cV epaidey' (actImpfInd n p) ;
<Pl,P2> => cV epaidey' (actImpfInd n p) ;
<Dl,P1> => cV epaidey' (actImpfInd n p) ;
<Dl,P2> => cV epaidey' (actImpfInd n p) ;
<Dl,P3> => cV epaidey (actImpfInd n p) ;
_ => cV epai'dey (actImpfInd n p) } ;
Fin (VFut FInd) n p => paidey's + actPresInd n p ;
Fin (VFut FOpt) n p => case <n,p> of {
<Dl,P3> => paideys + actPresOpt n p ;
_ => paidey's + actPresOpt n p } ;
Fin (VPerf VInd) n p => case n of {
Sg => pepai'deyk + actPerfInd n p ;
_ => pepaidey'k + actPerfInd n p } ;
Fin (VPerf VConj) n p => pepaidey'k + actPresConj n p ;
Fin (VPerf VOpt) n p => case <n,p> of {
<Dl,P3> => pepaideyk + actPresOpt n p ;
_ => pepaidey'k + actPresOpt n p } ;
Fin (VAor VInd) n p => case <n,p> of {
<Sg,_> | <Pl,P3> => epai'deys + actAorInd' n p ;
<Dl,P3> => epaideys + actAorInd' n p ;
_ => epaidey's + actAorInd' n p } ;
Fin (VAor VConj) n p => paidey'S + actPresConj n p ;
Fin (VAor VOpt) n p => case <n,p> of {
<Dl,P3> => paideyS + actAorOpt' n p ;
_ => paidey'S + actAorOpt' n p } ;
Fin VPlqm n p => case <n,p> of {
<Dl,P3> => dA epepaidey'k + actPlqmInd n p ;
_ => epepaidey'k + actPlqmInd n p } ;
Imp IPres np => cV (case np of {
SgP2 => pai'dey ;
PlP2 => paidey';
_ => paidey }) (actPresImp np) ;
Imp IAor np => case np of {
SgP2 => pai'deyS ;
PlP2 => paidey'S;
_ => paideyS } + actAorImp np ;
Imp IPerf np => nonExist ;
Inf GPres => cV paidey' "ein" ;
Inf GFut => paidey's + "ein" ;
Inf GAor => case aor of {
weak => addAccent (Circum 2) (paidey'S + "ai") ;
strong => paideyS + "ei~n" } ; -- BR 109
Inf GPerf => pepaideyk + "e'nai" ;
Part GPres af => Ph.contractVowels (partPres.s ! af) ; -- TODO poioyy'shs etc
Part GFut af => partFut.s ! af ;
Part GAor af => partAor.s ! af ;
Part GPerf af => partPerf.s ! af
} ;
mkMedW : (MedPresIndSgP1, MedFutSgP1, MedAorSgP1, MedPerfIndSgP1 : Str) -> Vform => Str =
\paidey'omai, paidey'somai, epaideysa'mhn, pepai'deymai ->
let
-- present stem: paidey, used for VPres VInd|VConj|VOpt,
-- VImpf, VImp, VInfPres, partDiathPres
paidey' : Str = P.tk 4 paidey'omai ;
paidey = dA paidey' ;
epaidey' = augment paidey' ;
epaidey = dA epaidey' ;
-- future stem: paideys -- aorist-stem =/= future-stem
paidey's = P.tk 4 paidey'somai ;
paideys = dA paidey's ;
-- act|med aorist stem: paideyS -- weak/strong: s/-
aor : tempType = -- e-paidey-s-amhn / e-bal-omhn
case epaideysa'mhn of { stm + "o'mhn" => strong ; _ => weak } ; -- BR 109
medAorInd' = case aor of { weak => medAorInd ; strong => medImpfInd } ;
medAorOpt' = case aor of { weak => medAorOpt ; strong => medPresOpt } ;
epaideyS = P.tk 5 epaideysa'mhn ;
epaidey'S = a3 epaideyS ;
epai'deyS = case (toWord epaideyS).s of { Multi => a2 epaideyS ; _ => a3 epaideyS } ;
pai'deyS = unaugment epai'deyS ;
paidey'S = a3 pai'deyS ;
paideyS = dA pai'deyS ;
-- med|pass perfect stem: pepaidey
pepai'dey = P.tk 3 pepai'deymai ;
pepaidey = dA pepai'dey ;
pepaidey' = a3 pepaidey ; -- pepaidey'= reduplicate paidey' ;
epepaidey'= augment pepaidey';
epepai'dey = a2 epepaidey' ;
-- to cover verba contracta ending in -a.'w, -e'w, -o'w,
-- apply contractVowels to the forms of the present stem: BR 93
cV : Str -> Str -> Str = case paidey' of { -- "a'" is short by convention
_ + ("a'" | "e'" | "o'") => Ph.contractVowels ; -- cV2
_ => \w1,w2 -> w1+w2 } ;
partPres = (adj2AO (paidey + "o'menos") (paidey + "ome'nhs")) ; -- BR 82.2b, 91
partFut = (adj2AO (paideys + "o'menos") (paideys + "ome'nhs")) ;
partAor = (adj2AO (paideyS + "a'menos") (paideyS + "ame'nhs")) ;
partPerf = (adj2AO (pepaidey + "me'nos") (pepaidey + "me'nhs")) ;
in
table { -- accents ok
Fin (VPres VInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => cV paidey (medPresInd n p) ;
_ => cV paidey' (medPresInd n p) } ;
Fin (VPres VConj) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => cV paidey (medPresConj n p) ;
_ => cV paidey' (medPresConj n p) } ;
Fin (VPres VOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => cV paidey (medPresOpt n p) ;
_ => cV paidey' (medPresOpt n p) } ;
Fin VImpf n p => case <n,p> of {
<_,P1> | <Dl,P3> => cV epaidey (medImpfInd n p) ;
_ => cV epaidey'(medImpfInd n p) } ;
Fin (VFut FInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => paideys + medPresInd n p ;
_ => paidey's + medPresInd n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => paideys + medPresOpt n p ;
_ => paidey's + medPresOpt n p } ;
Fin (VPerf VInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => pepaidey' + medPerfInd n p ;
_ => pepai'dey + medPerfInd n p } ;
Fin (VPerf VConj) n p => pepaidey + (menos n) ++ medPerfConj n p ;
Fin (VPerf VOpt) n p => pepaidey + (menos n) ++ medPerfOpt n p ;
Fin (VAor VInd) n p => case <n,p> of {
<Sg,P1> | <Pl,P1> |
<Dl,P1> | <Dl,P3> => epaideyS + medAorInd' n p ;
_ => epaidey'S + medAorInd' n p } ;
Fin (VAor VConj) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => paideyS + medPresConj n p ;
_ => paidey'S + medPresConj n p } ;
Fin (VAor VOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => paideyS + medAorOpt' n p ;
_ => paidey'S + medAorOpt' n p } ;
Fin VPlqm n p => case <n,p> of {
<_,P1> | <Dl,P3> => epepaidey' + medPlqmInd n p ;
_ => epepai'dey + medPlqmInd n p } ;
-- imperative accents ok for paideyein
Imp IPres np => cV (case np of {
SgP2 | PlP2 => paidey';
_ => paidey }) (medPresImp np) ;
Imp IAor np => case np of {
SgP2 => pai'deyS + case aor of {
strong => "oy~" ; -- BR 109.1
weak => medAorImp np } ;
PlP2 => paidey'S + medAorImp np ;
_ => paideyS + medAorImp np } ;
Imp IPerf np => case np of {
SgP2 | PlP2 => pepai'dey ;
_ => pepaidey' } + medPerfImp np ;
-- accents ok -- Accents in infinite verb forms: BR 88
Inf GPres => cV paidey' "esvai" ;
Inf GFut => paidey's + "esvai" ;
Inf GAor => case aor of {
weak => paidey'S + "asvai";
strong => paideyS + "e'svai" } ; -- BR 109
Inf GPerf => pepaidey + "~" + "svai" ; -- verba vocalia only
--
Part GPres af => partPres.s ! af ;
Part GFut af => partFut.s ! af ;
Part GAor af => partAor.s ! af ;
Part GPerf af => partPerf.s ! af
} ;
mkVerbW7voc : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1,
MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb =
\paidey'w, paidey'sw, epai'deysa, pepai'deyka,
pepai'deymai, epaidey'vhn, paideyto's ->
let
-- present stem: paidey (used for VPres(VInd|VConj|VOpt),
-- VImpf, VImp, VInfPres, partDiathPres)
paidey' = P.tk 1 paidey'w ;
pai'dey = a2 paidey'; -- TODO: check syllability, monosyl
paidey = dA paidey' ;
-- future stem: paideys
paidey's : Str = case paidey'sw of { fstem + "somai" => fstem ; _ => P.tk 1 paidey'sw } ;
paideys = dA paidey's ;
-- weak/strong: s/-
-- act|med aorist stem: paideyS -- e-paideys-a / e-bal-on
aor : tempType =
case epai'deysa of { stm + "on" => strong ; _ => weak } ; -- BR 109
epai'deys : Str = case aor of { strong => P.tk 2 epai'deysa ;
weak => P.tk 1 epai'deysa } ;
epaideysa'mhn = case aor of { strong => dA epai'deys + "o'mhn" ;
_ => dA epai'deys + "a'mhn" } ;
pai'deyS = unaugment epai'deys ;
paidey'S = a3 pai'deyS ;
paideyS = dA pai'deyS ;
-- act perfect stem: pepaideyk -- weak/strong: k/-
pepai'deyk = P.tk 1 pepai'deyka ; -- for VAct (VPerf|VPlqm)
pepaideyk = dA pepai'deyk;
-- med|pass perfect stem: pepaidey
pepai'dey = P.tk 3 pepai'deymai ;
pepaidey = dA pepai'dey ;
pepaidey' = a3 pepaidey ; -- pepaidey'= reduplicate paidey' ;
epepaidey'= augment pepaidey';
epepai'dey = a2 epepaidey' ;
-- pass aorist stem: epaideyv -- for VPass (VAor (VInd|VConj|VOpt))
epaidey'v = P.tk 2 epaidey'vhn ; -- VPass (VFut FInd|FOpt)
epaideyv = dA epaidey'v ;
paidey'v = unaugment epaidey'v ;
paideyv = dA paidey'v ; -- for temporal augments ?
aorPass : tempType = -- weak/strong: v/-
case epaidey'v of { _ + "v" => weak ; _ => strong } ;
-- verbal adjective: paidey-tos
paideyte'os : Str =
case paideyto's of { x + ("to's"|"to's*") => x + "te'os" ;
_ => paideyto's } ; -- P.error
-- to cover verba contracta ending in -a.'w, -e'w, -o'w,
-- apply contractVowels to the forms of the present stem: BR 93
cV : Str -> Str = case paidey' of { -- "a'" is short by convention
_ + ("a'" | "e'" | "o'") => Ph.contractVowels ;
_ => \w -> w } ;
med = mkMedW (paidey'+"omai") (paidey's+"omai") epaideysa'mhn pepai'deymai ;
partPres = (adj2AO (cV (paidey + "o'menos")) (cV (paidey + "ome'nhs"))) ;
partFut = (adj2AO (paideyv + "hso'menos") (paideyv + "hsome'nhs")) ;
partAor = (adj3nt (paideyv + "ei's") (paideyv + "e'ntos")) ; -- BR 46.b 3
partPerf = (adj2AO (pepaidey+"me'nos") (pepaidey+"me'nhs")) ;
in
{ act = mkActW paidey'w paidey'sw epai'deysa pepai'deyka ;
med = med ;
pass = table { -- only the forms differing from medium:
Fin (VFut FInd) n p => case <n,p> of {
<Dl,P2> |<Dl,P3> => paidey'v + passFutInd n p ;
_ => paideyv + passFutInd n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => paideyv + "hs" + medPresOpt n p ;
_ => paideyv + "h's" + medPresOpt n p } ;
Fin (VAor VInd) n p => case <n,p> of {
<Dl,P3> => epaideyv + passAorInd n p ;
_ => epaidey'v + passAorInd n p } ;
Fin (VAor VConj) n p => paideyv + passAorConj n p ;
Fin (VAor VOpt) n p => paideyv + passAorOpt n p ;
Fin tmpMod n p => med ! ( Fin tmpMod n p) ;
Imp IPres np => cV (case np of {
SgP2 | PlP2 => paidey';
_ => paidey } + medPresImp np) ;
Imp IAor np => case np of {
SgP2 => paidey' + (case aorPass of {
strong => "vi" ; -- not -ti, BR 111.1
_ => passAorImp np }) ;
PlP2 => paidey' + passAorImp np ;
_ => paidey + passAorImp np } ;
Imp IPerf np => med ! (Imp IPerf np) ;
Inf GPres => cV (paidey' + "esvai") ; -- cV: BR 93
Inf GFut => paideyv + "h'sesvai" ;
Inf GAor => paideyv + "h~nai" ;
Inf GPerf => pepaidey + "~" + "svai" ; -- verba vocalia only
Part GPres af => partPres.s ! af ;
Part GFut af => partFut.s ! af ;
Part GAor af => partAor.s ! af ;
Part GPerf af => partPerf.s ! af
} ;
vadj1 : Adj = case paideyto's of { x+"e'on" => adjAO (x+"o's") ; -- pay'w,...,payste'on (not: payst(e)o's)
_ => adjAO paideyto's } ;
vadj2 : Adj = case paideyte'os of { x+"e'on" => adjAO (x+"e'os") ;
_ => adjAO paideyte'os } ;
vtype = VFull ;
} ;
-- (a) verba vocalia (and contracta) BR 91
mkVerbW1voc : Str -> Verb = \paidey'w -> -- BR 91, 92
let
paidey' : Str =
case paidey'w of { -- BR 95 (here aw = a.w)
x+y@("e"|"i"|"r") + "a'w" => x+y+"a_'" ;
x + "a'w" => x+ "h'" ;
x + "e'w" => x+ "h'" ;
x + "o'w" => x+ "w'" ;
_ => P.tk 1 paidey'w } ;
epaidey' = augment paidey' ;
epai'dey = a2 epaidey' ; -- check syllability?
pepaidey' = reduplicate paidey' ;
pepai'dey = a2 pepaidey' ; -- check syllability?
in
mkVerbW7voc paidey'w (paidey'+"sw") (epai'dey+"sa")
(pepai'dey+"ka") (pepai'dey+"mai") (epaidey'+"vhn")
(dA paidey' +"to's*") ;
-- TODO: verba vocalia with ablaut BR 96, with -s stem BR 97 or -eF,aF stem BR 98
--(b) verba muta (labial (p-stem), guttural (k-stem), dental (t-stem)) BR 99
-- Weak tempusstems use the same tempus-consonant as the verba vocalia, but
-- the p-,k-,t- combines with initial consonants of the ending.
-- t-stems have weak perfect -ka; aorist -sa is changed to -ka
-- p/k-stems have perfect with -fa or -ca.
-- Examples: (p-stem) tre'pw, gra'fw, tri_'bw (BR 99.1 pres-stem = verbal stem)
-- (k-stem) diw'kw, a)'rcw, le'gw
-- (t-stem) a(ny'tw, pei'vw, psey'dw
{- not used:
param vstemType =
Vocal | Labial | Dental | Guttural | Liquidal | Nasal ;
oper
vstem : Str -> vstemType =
\str -> case str of { _+(#Ph.vowel|#Ph.diphthong)+(#Ph.accent|"")+"w" => Vocal ;
_ + #Ph.labial => Labial ;
_ + #Ph.dental => Dental ;
_ + #Ph.guttural => Guttural ;
_ + #Ph.liquid => Liquidal ;
_ + #Ph.nasal => Nasal ;
_ => P.error "unknown stem type"
} ;
-}
-- mkVerbW1mut is essentially mkVerbW1voc + application of soundlaw mC to the resulting forms.
-- Use only for verbs whose 7 stems can simply be derived from (VPres Ind Sg P1).
mkVerbW1mut : Str -> Verb = \paidey'w -> -- BR (99) 100
let
paidey':Str = case paidey'w of {
x+(#Ph.diphthong|#Ph.vowel) -- BR 99.1
+(("p"|"k"|"t")|("f"|"c"|"v")|("b"|"g"|"d"))
+"w" => P.tk 1 paidey'w ;
-- the following may guess the wrong verbal stem: P.error "use mkVerbW7mut!"
x+"pt" + "w" => x + "p" ; -- or x+"f" or x+"b"
x+"tt" + "w" => x + "k" ; -- or x+"c" or x+"t" or x+"v"
x+"z" + "w" => x + "d" ; -- or x+"g"
x + "w" => x
} ;
epaidey' = augment paidey' ;
epai'dey = a2 epaidey' ;
pepaidey' = reduplicate paidey' ;
pepai'dey = a2 pepaidey' ;
-- BR 100 needs *verbstem* ; we instead take consonant at ending of *present stem*
-- dental stems: weak VPerf with -ka BR 100.a, labial/guttural stems: strong Perf -fa/-ca BR 112
pepai'deyka : Str = case pepai'dey of {
x+("t"|"d"|"v") => pepai'dey+"ka" ; -- BR 100.a
x+("p"|"b"|"f") => (P.tk 1 pepai'dey)+"fa" ; -- BR 100.b
x+("k"|"c"|"g") => (P.tk 1 pepai'dey)+"ca" ; -- BR 100.b
_ => pepai'dey+"ka" } ;
epaidey'vhn : Str = case epaidey' of { x+#Ph.consonant => epaidey'+"hn" ; -- BR 111
_ => epaidey'+"vhn" } ; -- strong/weak pass Aor
mC : Str -> Str = Ph.mutaSConsonant ; -- BR 101.1 a
-- the multisyllabic -i'zw verbs are omitted here and should be treated in mkVerbW7mut
-- since their verb stem cannot be guessed in general
verb : Verb = mkVerbW7voc paidey'w (paidey'+"sw") (epai'dey+"sa") pepai'deyka
(pepai'dey+"mai") epaidey'vhn (dA paidey' +"to's*") ;
in {
act = table { vform => mC (verb.act ! vform) } ; -- BR 100, 101.1 a
med = table { Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'")
=> mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n")
=> mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ;
Inf GPerf => a2 (mC (dA (verb.med ! (Inf GPerf)))) ; -- BR 101.1 a
-- TODO Perf VInd: peivw -> pepei(v)ka drop v BR 100 - why?
vform => mC (verb.med ! vform) } ;
pass = table { Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'")
=> mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n")
=> mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ;
Inf GPerf => a2 (mC (dA (verb.pass ! (Inf GPerf)))) ; -- BR 101.1 a
-- Imp Sg P2 -vi, not -ti BR 111.1
vform => mC (verb.pass ! vform) } ;
vadj1 = { s = table { af => mC (verb.vadj1.s ! af) } ; adv = mC (verb.vadj1.adv) } ;
vadj2 = { s = table { af => mC (verb.vadj2.s ! af) } ; adv = mC (verb.vadj2.adv) } ;
vtype = VFull ;
} ;
-- Unfinished, 12/2015: TODO: complete mkVerbW7mut for providing tempus stems (how to undo mC-applications?)
-- for example, to specify act VFut -s-omai (middle future), and to do strong tempora.
-- Q: do we need a separate version to specify the verbal stem?
-- cc mkVerbW7mut "kry'ptw" "kry'qw" "e)'kryqa" "ke'kryfa" "ke'krymmai" "e)kry'fvhn" "krypto's"
mkVerbW7mut : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1,
MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb =
\kry'ptw, kry'qw, e'kryqa, ke'kryfa, -- paidey'w, paidey'sw, epai'deysa, pepai'deyka,
ke'krymmai, ekry'fvhn, krypto's -> -- pepai'deymai, epaidey'vhn, paideyto's
let
mC : Str -> Str = Ph.mutaConsonant ;
-- use mkVerbW7voc with reconstructed stem+endings, and then apply the soundlaws (mC, cV?)
-- present stem: BR 99 (no need to undo sound laws)
paidey' = P.tk 1 kry'ptw ;
-- verbal stem (in general undecidable, how the stem _+j ended)
-- 1. stem+w, 2.a labial stems: _(p|b|f)+j+w > _+pt+w, 2.b guttural|dental stems: _(k|c|t|v)+j+w > _tt+w
{-
stemtype : vstemType =
case dA paidey' of { _ + "pt" => Labial ;
_ + ("i"|"i."|"a"|"a.") + "z" => Dental ; -- BR 99.2b roughly
_ => P.error ("Morpho.mkVerbW7mut: unknown verbstem type" ++ paidey'} ;
-}
-- future stem
paidey's : Str = -- undo soundlaw x+ps+w > x+q+w to get future stem x+p, or just drop +w
case kry'qw of { stm + "qw" => stm + "p" ;
stm + "w" => stm ;
stm + "w~" => stm ;
stm + "omai" => stm ;
stm + "oy~mai" => stm } ;
fut : tempType = case kry'qw of { _ + "w~" => strong ; _ => weak } ; -- BR 102.1 (only for -i'zw ?)
-- BR 102.1 contracted future in multisyllabic words in -izw
actFut : MoodF -> Number -> Person -> Str = \m,n,p ->
case m of { FInd => actFutInd n p ; FOpt => actFutOpt n p } ;
medFut : MoodF -> Number -> Person -> Str = \m,n,p ->
case m of { FInd => medFutInd n p ; FOpt => medFutOpt n p } ;
-- We omit checking that -i'zw is multisyllabic; use mkVerbW1 for sw'zw e.a.
-- contracted : Bool = case paidey'w of {
-- _ + "i'zw" => case (toWord paidey'w).s of { Multi => True ; _ => False } ;
-- _ => False } ;
medPartFut = (adj2AO (dA paidey's + "oy'menos") (dA paidey's + "oyme'nhs")) ; -- BR 102.1
-- act|med aorist stem: paideys -- e-paideys-a / e-bal-on
aor : tempType = -- e-li(ps)-a / TODO
case e'kryqa of { _ + ("sa" | "qa" | "xa") => weak ;
_ + ("sa" | "qa" | "xa")+"'mhn" => weak ; -- HL ??
_ + ("fa"|"pa"|"on") => strong ;
_ => P.error ("MorphoGrc.mkVerbW7mut: unrecognized act|med aorist stem " ++ e'kryqa) } ;
actAorInd' = case aor of { weak => actAorInd ; strong => actImpfInd } ;
actAorOpt' = case aor of { weak => actAorOpt ; strong => actPresOpt } ;
epai'deys : Str = -- TODO -mhn etc
case aor of { weak => case e'kryqa of { x+"sa" => x+"s" ;
x+"qa" => x+"ps" ;
x+"xa" => x+"ks" ;
_ => P.tk 1 e'kryqa } ;
strong => case e'kryqa of { x+"on" => x ;
_ => P.tk 1 e'kryqa }
} ;
-- perfect stem
perf : tempType = case ke'kryfa of { _ + ("fa" | "ca") => strong ;
_ + "ka" => weak ;
_ => P.error ("Morpho:mkVerb7mut: undefined perfect temp for " ++ ke'kryfa) } ;
pepai'deyk = P.tk 1 ke'kryfa ;
epepaidey'k = augment (a3 pepai'deyk) ; -- act Fin VPlqm. TODO ablaut, aspirant?
-- med|pass perfect stem:
pepai'dey : Str
= let ke'krym = P.tk 3 ke'krymmai ; -- undo assimilation
p : Str = case kry'ptw of { x+"pt"+"w" => "p" ; -- | "f" | "b"
x+"tt"+"w" => "k" ; -- | "c"
x+"z"+"w" => "d" ; -- | "g" (rare)
x+c@#Ph.consonant+"w" => c ;
_ => P.error ("Morpho.mkVerbW7mut: undefined med-pass perfect stem " ++ ke'krymmai ++ "/" ++ kry'ptw)
} ;
in case ke'krym of { x+"m" => P.tk 1 ke'krym + p ; -- undo assimilation
x+"s" => ke'krym ;
x+#Ph.consonant => ke'krym ;
_ => P.error ("Morpho.mkVerbW7mut: undefined med-pass perfect stem for " ++ ke'krymmai) } ;
-- aorist passiv:
epaidey'v : Str = case ekry'fvhn of { x+"vhn" => x + "v" ; _ => P.tk 2 ekry'fvhn } ; -- weak/strong
-- construct verb = mkVerbW7voc with reconstructed stem+endings, and then apply the soundlaws (mC, cV?)
-- kry'ptw, kry'qw, e'kryqa, ke'kryfa,
verb = mkVerbW7voc (paidey' + "w") (paidey's + "sw") (epai'deys + "a") (pepai'deyk +"a")
-- ke'krymmai, ekry'fvhn, krypto's
(pepai'dey + "mai") (epaidey'v + "hn") krypto's
in { act = table { -- verbal stem: how to undo soundlaw in stem+j+w > present-stem+w ???
-- dental stems: weak VPerf with -ka BR 100.a, labial/guttural stems: strong Perf -fa/-ca BR 112
-- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut
Fin (VFut mod) n p => case fut of { strong => (paidey's + (actFut mod n p) ) ; -- BR 102.1
weak => mC (verb.act ! (Fin (VFut mod) n p)) } ;
Inf GFut => case fut of { strong => (paidey's + "ei~n") ;
_ => mC (verb.act ! (Inf GFut)) } ;
-- TODO: Part GFut: -w~n, -ou~sa, -oy~n BR 102.1, BR 104.3
Part GFut af => case fut of { strong => paidey's+"w~n -oy~sa -oy~n 102" ;
weak => mC (verb.act ! (Part GFut af)) } ;
Fin VPlqm n p => case <n,p> of { <Dl,P3> => dA epepaidey'k + actPlqmInd n p ;
_ => epepaidey'k + actPlqmInd n p } ;
vform => mC (verb.act ! vform) } ;
med = table { -- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut
Fin (VFut mod) n p => case fut of { strong => (paidey's + (medFut mod n p) ) ; -- BR 102.1
weak => mC (verb.med ! (Fin (VFut mod) n p)) } ;
Inf GFut => case fut of { strong => (paidey's + "ei~svai") ;
_ => (verb.med ! (Inf GFut)) } ;
Part GFut af => case fut of { strong => medPartFut.s ! af ; --oy'menos BR 102.1, BR 104.3
weak => mC (verb.med ! (Part GFut af)) } ;
-- Perf|Plqm: BR 101.1a apply cV to drop s at endings -s_ between consonants
Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'")
=> mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin (VPerf mod) n p => mC (verb.med ! (Fin (VPerf mod) n p)) ;
Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n")
=> mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ;
Fin VPlqm n p => mC (verb.med ! (Fin VPlqm n p)) ;
Inf GPerf => a2 (mC (dA (verb.med ! (Inf GPerf)))) ; -- BR 101.1 a
Imp IPerf np => mC (verb.med ! (Imp IPerf np)) ;
-- Perf: BR 102.2 tre'pw,stre'fw,tre'fw change -e- to -a- by BR 28
vform => mC (verb.med ! vform) } ;
pass = table { -- Fut as in medium ?
-- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut
Fin (VFut mod) n p => case fut of { strong => (paidey's + (medFut mod n p) ) ; -- BR 102.1
weak => mC (verb.med ! (Fin (VFut mod) n p)) } ;
Inf GFut => case fut of { strong => (paidey's + "ei~svai") ;
_ => (verb.med ! (Inf GFut)) } ;
Part GFut af => case fut of { strong => medPartFut.s ! af ; --oy'menos BR 102.1, BR 104.3
weak => mC (verb.med ! (Part GFut af)) } ;
-- Perf
Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'")
=> mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n")
=> mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ;
Inf GPerf => mC (verb.pass ! (Inf GPerf)) ; -- BR 101.1 a
vform => mC (verb.pass ! vform) } ;
vadj1 = { s = table { af => mC (verb.vadj1.s ! af) } ; adv = mC (verb.vadj1.adv) } ;
vadj2 = { s = table { af => mC (verb.vadj2.s ! af) } ; adv = mC (verb.vadj2.adv) } ;
vtype = VFull ;
} ;
--(c) verba liquida: stem ends in l, r, n, m BR 103-107
-- BR 103 de'rw, me'nw, ne'mw , -llw, -ai'nw, -ei'nw, -i_'nw, -y_'nw,
-- TODO BR 104 imp ; (BR 101.b gender agreement)
-- correct accents Act Perf: h)~ggelka > h)'ggelka, in VPass Perf ?
-- Status: 27.12.2015
-- Fut|AorI, BR 104.3: ok, except accents in participles and Imp VAct SgP2
-- Other tempora, BR 105: a+b ok, TODO c: monosyllabic stems
-- Perf|Plqm, BR 106: ok
-- Special stems, BR 107: TODO (skip)
-- In case Wliq-verbs have weak Pass Aor|Fut (-vhn|-vhsomai), try mkVerbW1liq,
-- for strong Pass Aor|Fut (-hn|-hsomai), we need mkVerbW7liq
mkVerbW1liq : Str -> Verb = \fai'nw -> -- BR
let
fa'n : Str = case fai'nw of { x + "ai'n" + "w" => x + "a'n" ; -- BR 103
x + "ei'n" + "w" => x + "e'n" ;
x + "i_'n" + "w" => x + "i.'n" ;
x + "y_'n" + "w" => x + "y.'n" ;
x + "ai'r" + "w" => x + "a'r" ;
x + "ei'r" + "w" => x + "e'r" ;
x + "i_'r" + "w" => x + "i.'r" ;
x + "y_'r" + "w" => x + "y.'r" ;
x + "ll" + "w" => x + "l" ;
_ => P.tk 1 fai'nw
} ;
fA'n : Str = case (toWord fa'n).s of { -- BR 105.c
Mono => case fa'n of { f + "e" + n => f + "a" + n ; _ => fa'n } ;
_ => fa'n } ;
efa'n = augment fA'n ;
efh'n : Str = case fa'n of { x + v@("a")+a@("'"|"")+c@("n"|"m"|"l"|"r")
=> case x of { _+("e"|"i"|"r") => augment (x+ "a_" + a+c) ;
_ => augment (x+ "h" + a+c) } ;
x + v@("e"|"i."|"y.") + a@("'"|"")+c@("n"|"m"|"l"|"r")
=> augment (x + (Ph.ersatzdehnung v) + a+c) ;
_ => augment fa'n } ; -- BR 104.2
pe'fan = a2 (reduplicate fA'n) ;
in
mkVerbW7liq fai'nw (dA fa'n +"w~") (a2 efh'n +"a") (pe'fan+"ka")
(pe'fan+"mai") (efa'n+"vhn") (dA fA'n +"to's*") ; -- weak Pass Aor
-- To generate -Wliq paradigms with strong Pass Aor etc. use mkVerbW7liq:
-- expl: (edar+"hn"), not (edar+"vhn")
-- cc -unqual mkVerbW7liq "a)gge'llw" "a)ggelw~" "h)'ggeila" "h)'ggelka"
-- "h)'ggelmai" "h)gge'lvhn" "a)ggelto's"
mkVerbW7liq : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1,
MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb =
\fai'nw, fanw', e'fhna, pe'fagka, -- paidey'w, paidey'sw, epai'deysa, pepai'deyka,
pe'fasmai, efa'nvhn, fanto's -> -- pepai'deymai, epaidey'vhn, paideyto's
let
verb = mkVerbW7voc fai'nw fanw' e'fhna pe'fagka pe'fasmai efa'nvhn fanto's ;
paidey' = P.tk 1 fai'nw ;
paidey = dA paidey' ;
paideys = P.tk 2 fanw' ;
pe'fan = P.tk 2 pe'fagka ;
pepaidey = dA pe'fan ;
epai'deys = P.tk 1 e'fhna ; -- a2 efh'n ;
epaideys = dA epai'deys ; -- dA efh'n ;
epaidey's = a3 epaideys ; -- efh'n
paidey'S = unaugment epaidey's ;
paideyS = dA paidey'S ;
fan : Str = case fai'nw of { x + "ai'n" + "w" => x + "a'n" ; -- BR 103
x + "ei'n" + "w" => x + "e'n" ;
x + "i_'n" + "w" => x + "i.'n" ;
x + "y_'n" + "w" => x + "y.'n" ;
x + "ai'r" + "w" => x + "a'r" ;
x + "ei'r" + "w" => x + "e'r" ;
x + "i_'r" + "w" => x + "i.'r" ;
x + "y_'r" + "w" => x + "y.'r" ;
x + "ll" + "w" => x + "l" ;
_ => P.tk 1 fai'nw
} ;
nC : Str -> Str = case fan of {
_ + "n" => \str -> case str of { x + "ns" + c@#Ph.consonant + y
=> x + "n" + c + y ; -- BR 106.a
x + "nm" + y => x + "sm" + y ; -- BR 105.b
_ => Ph.nasalConsonant str } ; -- nk > g
_ => \str -> case str of { x + c1@("r"|"l"|"m") + "s" + c@#Ph.consonant + y
=> x + c1 + c + y ; -- BR 106.a
_ => str }
} ; -- BR 105 in tempora other than Pres,Fut
partMedFut = (adj2AO (paideys + "oy'menos") (paideys + "oyme'nhs")) ;
partMedAor = (adj2AO (paideyS + "a'menos") (paideyS + "ame'nhs")) ;
-- modify verb built with mkVerbW7voc by modification with soundlaw nC e.a. where needed:
in
{ act = table { Fin (VAor VInd) n p => case <n,p> of {
<Sg,_> | <Pl,P3> => epai'deys + actAorInd n p ;
<Dl,P3> => epaideys + actAorInd n p ;
_ => epaidey's + actAorInd n p } ;
Fin (VAor VConj) n p => paidey'S + actPresConj n p ;
Fin (VAor VOpt) n p => case <n,p> of {
<Dl,P3> => paideyS + actAorOpt n p ;
_ => paidey'S + actAorOpt n p } ;
Fin (VFut FInd) n p => paideys + (actFutInd n p) ; -- BR 104.1
Fin (VFut FOpt) n p => paideys + (actFutOpt n p) ; -- BR 104.1
Fin (VPerf mod) n p => nC (verb.act ! (Fin (VPerf mod) n p)) ;
Fin VPlqm n p => nC (verb.act ! (Fin VPlqm n p)) ; -- BR 105.a
Inf GFut => paideys + "ei~n" ; -- BR 104.1
Inf GPerf => nC (verb.act ! (Inf GPerf)) ; -- BR 105.a
-- TODO: Imp GAor Act SgP2 accent a)'ggeil-on|ai, fh~non
Part GPerf af => nC (verb.act ! Part GPerf af) ; -- nC by BR 105.a
-- TODO: Part GFut: -w~n, -oy~ntos BR 104.3
form => verb.act ! form } ;
med = table { Fin (VFut FInd) n p => paideys + (medFutInd n p) ; -- BR 104.1
Fin (VFut FOpt) n p => paideys + (medFutOpt n p) ; -- BR 104.1
Fin (VPerf VInd) Pl P3 -- BR 106.1 a (TODO gender agreement: Neutr "e)sti'")
=> nC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin (VPerf mod) n p => nC (verb.med ! (Fin (VPerf mod) n p)) ;
Fin VPlqm Pl P3 -- BR 106.1 a (TODO gender agreement, Neutr "h)~n")
=> nC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ;
Fin VPlqm n p => nC (verb.med ! (Fin VPlqm n p)) ;
Imp IPerf np => nC (verb.med ! (Imp IPerf np)) ;
Inf GFut => paideys + "ei~svai" ; -- BR 104.1
-- Inf GPerf: change Wvoc+~stai to nC(Wliq'+(s)tai):
Inf GPerf => a2 (nC (dA (verb.med ! (Inf GPerf)))) ; -- BR 106.1 a
Part GFut af => partMedFut.s ! af ;
Part GAor af => partMedAor.s ! af ;
Part GPerf af => nC (verb.med ! (Part GPerf af)) ; -- BR 105.a
form => verb.med ! form } ; -- BR 104.1,3
pass = table { Fin (VPerf VInd) Pl P3 -- BR 101 b (TODO gender agreement: Neutr "e)sti'")
=> nC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ;
Fin (VPerf mod) n p => nC (verb.pass ! (Fin (VPerf mod) n p)) ;
Fin VPlqm n p => nC (verb.pass ! (Fin VPlqm n p)) ;
Imp IPerf np => nC (verb.pass ! (Imp IPerf np)) ;
Inf GPerf => a2 (nC (dA (verb.pass ! (Inf GPerf)))) ; -- BR 106.1 a
Part GPerf af => nC (verb.pass ! (Part GPerf af)) ; -- BR 105.a
form => verb.pass ! form } ;
vadj1 : Adj = verb.vadj1 ;
vadj2 : Adj = verb.vadj2 ;
vtype = VFull ;
} ;
-- Deponents: verbs without active forms.
-- STATUS: partial, some forms missing, no sound laws used yet.
-- Deponentia passiva: the aorist uses the passive forms (-vhn),
-- the future uses medium (-somai) or passive (-vh-somai) forms BR 117
-- We store the forms in the med-field.
-- cc mkVerbDepPass "ai)de'omai" "ai)de'somai" "h|)de'svhn" "h|)'desmai"
-- cc mkVerbDepPass "h('domai" "h(svh'somai" "h('svhn" "h('desmai"
mkVerbDepPass : (MedPresInd, MedOrPassFut, PassAorInd, MedPerfInd: Str) -> Verb =
\paidey'omai, paidey'somai, epaidey'vhn, pepai'deymai ->
let
med : Vform => Str = mkMedW paidey'omai paidey'somai epaidey'vhn pepai'deymai ;
epaidey'v = P.tk 2 epaidey'vhn ;
epaideyv = dA epaidey'v ;
paidey'v = unaugment epaidey'v ;
paideyv = dA paidey'v ;
paidey = dA (P.tk 4 paidey'omai) ;
in
{ act = table { _ => nonExist } ;
med = med ;
pass = table { -- only the forms differing from medium: (copy from mkVerbW)
Fin (VFut FInd) n p => case <n,p> of {
<Dl,P2> |<Dl,P3> => paidey'v + passFutInd n p ;
_ => paideyv + passFutInd n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => paideyv + "hs" + medPresOpt n p ;
_ => paideyv + "h's" + medPresOpt n p } ;
Fin (VAor VInd) n p => case <n,p> of {
<Dl,P3> => epaideyv + passAorInd n p ;
_ => epaidey'v + passAorInd n p } ;
Fin (VAor VConj) n p => paideyv + passAorConj n p ;
Fin (VAor VOpt) n p => paideyv + passAorOpt n p ;
Fin tmpMod n p => med ! (Fin tmpMod n p) ;
Imp IPres n_p => "TODO" ;
Imp IAor n_p => "TODO" ;
Imp IPerf n_p => nonExist ;
Inf GFut => paideyv + "h'sestai" ;
Inf GAor => paideyv + "h~nai" ;
Inf tmp => med ! (Inf tmp) ;
Part GFut af => med ! (Part GFut af) ++ "TODO: -vh-somenos" ;
Part GAor af => med ! (Part GAor af) ++ "TODO: -eis" ;
Part tmp af => med ! (Part tmp af)
} ;
vadj1 : Adj = adjAO (paidey + "to's") ;
vadj2 : Adj = adjAO (paidey + "te'os") ;
vtype = DepPass
} ;
-- Deponentia media: the aorist and future use the medium forms (-sa'mhn,-somai).
-- There may additionally be a passive aorist and future (with passive meaning). BR 118
-- mkVerbDepMed : (MedPresInd, MedFut, MedAorInd, MedPassPerfInd : Str) -> Verb =
-- \ma'comai, macoy'mai, emacesa'mhn, mema'chmai ->
mkVerbDepMed : (MedPresInd, MedFut, MedAorInd, MedPerfInd: Str) -> Verb =
\paidey'omai, paidey'somai, epaideysa'mhn, pepai'deymai ->
-- cc -unqual mkVerbDepMed "vea'omai" "vea_'somai" "e)vea_sa'mhn" "teve'amai" ;
let
med : Vform => Str = mkMedW paidey'omai paidey'somai epaideysa'mhn pepai'deymai ;
epaidey'vhn = a3 (P.tk 5 epaideysa'mhn) + "vhn" ;
epaidey'v = P.tk 2 epaidey'vhn ;
epaideyv = dA epaidey'v ;
paidey'v = unaugment epaidey'v ;
paideyv = dA paidey'v ;
paidey = dA (P.tk 4 paidey'omai) ;
in
{ act = table { _ => "---" } ;
med = med ; -- TODO: Part Perf af => pe-paidey-me'nos
pass = table { -- only the forms differing from medium: (copy from mkVerbW)
Fin (VFut FInd) n p => case <n,p> of {
<Dl,P2> |<Dl,P3> => paidey'v + passFutInd n p ;
_ => paideyv + passFutInd n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => paideyv + "hs" + medPresOpt n p ;
_ => paideyv + "h's" + medPresOpt n p } ;
Fin (VAor VInd) n p => case <n,p> of {
<Dl,P3> => epaideyv + passAorInd n p ;
_ => epaidey'v + passAorInd n p } ;
Fin (VAor VConj) n p => paideyv + passAorConj n p ;
Fin (VAor VOpt) n p => paideyv + passAorOpt n p ;
Fin tmpMod n p => med ! (Fin tmpMod n p) ;
Imp IPres n_p => "TODO" ;
Imp IAor n_p => "TODO" ;
Imp IPerf n_p => nonExist ;
Inf GFut => paideyv + "h'sestai" ;
Inf GAor => paideyv + "h~nai" ;
Inf tmp => med ! (Inf tmp) ;
Part tmp af => med ! (Part tmp af) ++ "TODO"
} ;
vadj1 : Adj = adjAO (paidey + "to's") ;
vadj2 : Adj = adjAO (paidey + "te'os") ;
vtype = DepMed
} ;
{-
--- far too slow: (or makes the machine hang) GF-compiler bug?
mkVerbDepMed1a : Str -> Verb = \paidey'omai -> -- sketch only
case paidey'omai of {
stm + v@(#PhonoGrc.vowel) + acnt@("'"|"~"|"") + "omai"
=> mkVerbDepMed paidey'omai (stm + v + acnt + "somai")
(augment (stm+v) + "sa'mhn") (a2 (reduplicate (stm+v)) + "mai") ;
-- _ => mkVerbDepMed "vea'omai" "vea_'somai" "e)vea_sa'mhn" "teve'amai"
_ => P.error "not a dep.med"
} ;
-- much faster:
mkVerbDepMed1 : Str -> Verb = \paidey'omai ->
let mkForms : Str -> Str * Str * Str * Str = \paideyomai -> -- sketch only, when
case paideyomai of { -- stems ends in vowel
stm + v@(#PhonoGrc.vowel) + acnt@("'"|"~"|"") + "omai"
=> <paideyomai, (stm + v + acnt + "somai"),
(augment (stm+v) + "sa'mhn"),(a2 (reduplicate (stm+v)) + "mai")> ;
_ => <"vea'omai", "vea_'somai", "e)vea_sa'mhn", "teve'amai"> } ;
-- _ => P.error "not a dep.med" } ;
forms = mkForms paidey'omai
in
mkVerbDepMed forms.p1 forms.p2 forms.p3 forms.p4
;
-}
-- TODO: prefix-verbs and reduplication: ap-e'comai
mkVerbDep : Str -> VType -> Verb = \paidey'omai,vt ->
-- assume given form ends in -omai
let paidey' = P.tk 4 paidey'omai ;
paidey = dA paidey' ;
paidey'somai = paidey' + "somai" ; -- TODO: add sound laws
aor = case vt of {DepMed => (augment paidey)+"sa'mhn" ;
_DepPass => (augment paidey')+"vhn" } ;
perf = a2 (reduplicate paidey) + "mai" ;
fut = paidey'somai ;
-- fut = case vt of { DepMed => paidey'somai ;
-- _DepPass => paidey'somai
-- | (paidey + "vh'somai") }; -- optionally 2 futs
in
case vt of {DepMed => mkVerbDepMed paidey'omai fut aor perf ;
DepPass => mkVerbDepPass paidey'omai fut aor perf ;
VFull => P.error ("mkVerbDep: provided form does not end in -omai")
} ;
-- ---------------------------------------------------------------------------------
--3 Mi-conjugation (almost ok for ti'vhmi, but wrong for i('hmi)
-- Smart Mi-conjuation: from P1 Sg Praes Ind, determine whether the verb's present stem
-- a) is formed from the root by reduplication (with i) of the prefix, as in di-dwmi,
-- b) is formed from the root by appending -ny- before the endings, as in deik-ny-mi
-- c) is the same as the verbal root, as in fh-mi, ei~-mi, ei-mi', crhnai=crh'+ei~nai, kei-mai
-- But why am I doing this? Just use the mkVerb*Mi7 function for the few mi-verbs! (and some
-- fiddling with the prefixverbs).
mkVerbMi1 : Str -> Verb = \dei'knymi ->
case dei'knymi of {
dei'kny + "mi" + ("'"|"")
=> case dei'kny of { x + "ny" => mkVerbNyMi dei'knymi ;
_ => case (reduplicatedPresent dei'knymi) of
{ True => mkVerbRedupMi1 dei'knymi ;
_ => mkVerbRootMi1 dei'knymi }
} ;
_ => P.error ("Not a -mi verb: " ++ dei'knymi)
} ;
reduplicatedPresent : Str -> Bool = \str -> case str of {
("i"|"e") + "("+ (#Ph.accent|"") + "s" + y => True ;
"i("+ #Ph.accent + "h" + y => True ;
c@#Ph.consonant + "i" + (#Ph.accent|"") + d@#Ph.consonant + y =>
case <c,d> of { <"p","f"> | <"t","v"> | <"c","k"> => True ;
_ => case P.eqStr c d of {
P.PTrue => True ; _ => False
} -- BR 22 (partly)
} ;
_ => False } ;
unreduplicatePresent : Str -> Str = \str -> case str of {
("i"|"e") + "("+ (#Ph.accent|"") + "s" + y => "s" + y ; -- i('sthmi
"i("+ a@#Ph.accent + "h" + y => "h" + "(" + a + y ;
c@#Ph.consonant + "i" + a@(#Ph.accent|"") + d@#Ph.consonant + y =>
case a of {"~" => addAccent (Circum 2) (d + y) ;
_ => addAccent (Acute 2) (d + y) } ;
_ => str } ;
guessVerbstemsMi : Str -> Str * Str * Str * Str * Str * Str * Str = \dei'knymi ->
case dei'knymi of {
x + "nymi" =>
let
dei'kny = P.tk 2 dei'knymi ;
dei'k = P.tk 2 dei'kny ;
e'deik = a2 (augment (dA dei'k)) ;
de'deik = a2 (reduplicate dei'k) ;
mC : Str -> Str = Ph.mutaConsonant ;
in
<dei'knymi, mC(dei'k+"sw"), mC(e'deik+"sa"), de'deik+"a",
mC(de'deik+"mai"), mC(e'deik+"vhn"), mC(dA dei'k +"to's*")> ;
_ =>
case reduplicatedPresent dei'knymi of {
True => let
di'dw = P.tk 2 dei'knymi ;
dw = unreduplicatePresent di'dw ;
edw = augment dw ;
dedw = reduplicate dw ;
do = Ph.ablaut dw ;
dedo = Ph.ablaut dedw ;
edo = augment do ;
in <di'dw +"mi", dw+"sw", edw+"ka", dedw+"ka",
dedo+"mai", edo+"vhn", (dA do)+"to's*"> ;
_ => let
fh : Str = case dei'knymi of { x + "mi" + ("'"|"") => x ; _ => dei'knymi } ;
efh = augment fh ;
pefh = reduplicate fh ;
efa = Ph.ablaut efh ;
fa = Ph.ablaut fh ;
in <fh+"mi", fh+"sw", efh+"sa", pefh+"ka",
pefh+"mai", efa+"vhn", fa+"to's*">
}
} ;
-- BR 135 a)
-- cc mkVerbstemsMi "dei'knymi" -- ok
-- cc mkVerbstemsMi "zey'gnymi" -- ok
-- cc mkVerbstemsMi "mei'gnymi" -- ok
-- cc mkVerbstemsMi "ph'gnymi" -- Act ok, Med/Pass ph'gnymai
-- cc mkVerbstemsMi "r(h'gnymi" -- Act ok, Med/Pass r(h'nymai
-- cc mkVerbstemsMi "kera'nnymi" -- Bad
-- cc mkVerbstemsMi "krema'nnymi" -- Poor
-- cc mkVerbstemsMi "peta'nnymi" -- Need: soundlaws
-- cc mkVerbstemsMi "skeda'nnymi" -- a'nsw > a_'sw > a_'w > w~
mkVerbNyMi1 : Str -> Verb = \dei'knymi ->
let
dei'knu = P.tk 2 dei'knymi ;
dei'k : Str = case dei'knu of { x + "ny" => x ; _ => dei'knu } ;
e'deik = a3 (augment (dA dei'k)) ;
de'deik = a2 (reduplicate dei'k) ;
mC : Str -> Str = Ph.mutaConsonant ;
in
mkVerbNyMi7 (dei'knymi) (mC (dei'k+"sw")) (mC (e'deik+"sa")) (de'deik+"a") -- de'deica TODO
(mC (de'deik+"mai")) (mC (e'deik+"vhn")) (dA dei'k +"to's*") ;
--
-- cc -unqual mkVerbNyMi7 "dei'knymi" "dei'xw" "e)'deixa" "de'deica"
-- "de'deigmai" "e)dei'cvhn" "deikt'os"
mkVerbRedupMi1 : Str -> Verb =
\di'dwmi -> -- P.error ("Presumably a -mi verb with reduplicated present stem: " ++ didwmi) ;
let
di'dw = P.tk 2 di'dwmi ;
dw' = unreduplicatePresent di'dw ;
do' = Ph.ablaut dw' ;
e'dw = a3 (augment dw') ;
de'dw = a3 (reduplicate dw') ;
de'do = Ph.ablaut de'dw ;
edo' = a3 (Ph.ablaut (P.drop 1 e'dw)) ;
in mkVerbRedupMi di'dwmi (dw'+"sw") (e'dw+"ka")
(de'dw+"ka") (de'do+"mai") (edo'+"vhn") (dA do'+"to's*") ;
mkVerbNyMi : Str -> Verb =
\dei'knymi -> -- P.error ("Presumably a -nymi verb: " ++ dei'knymi) ;
let
dei'knu : Str = case dei'knymi of { x + "mi'" => x ; _ => P.tk 2 dei'knymi } ;
dei'k : Str = case dei'knu of { x + "ny" => x ; _ => dei'knu } ;
e'deik = a3 (augment (dA dei'k)) ;
de'dei = a2 (reduplicate (P.tk 1 dei'k)) ;
in
mkVerbRedupMi (dei'knymi) (dei'k+"sw") (e'deik+"sa")
(de'dei+"ka") (de'dei+"g"+"mai") (e'deik+"x"+"vhn")
(dA dei'k +"to's*") ;
mkVerbRootMi1 : Str -> Verb =
\fhmi' -> P.error ("Presumably a -mi verb with verbal root as present stem: " ++ fhmi') ;
-- Active endings: (no thematic vowel added to present stem)
actPresIndMi = endingsV <"mi", "s*", "si", "men", "te", "a_si", "ton", "ton"> ;
actPresOptMi = endingsV <"n", "s*", "", "men", "te", "en", "ton", "thn"> ;
actImpfIndMi = endingsV <"n", "s*", "", "men", "te", "san", "ton", "thn"> ;
actAorIndMi = endingsV <"", "s*", "e", "men", "te", "san", "ton", "thn"> ; -- HL
actPerfIndMi = endingsV <"a", "as*", "e", "amen", "ate", "asi", "aton", "aton"> ;
actPlqmIndMi = endingsV <"ein", "eis*", "ei", "emen", "ete", "esan", "eton", "e'thn"> ;
actPresImpMi = endingsImp <"i","tw","te","ntwn"> ; -- <""|"vi","tw","te","ntwn"> BR 82 c
actAorImpMi = endingsImp <"s*","tw","te","ntwn"> ;
-- Medium endings:
medPresIndMi = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ;
medPresConjMi= endingsV <"mai", "|", "tai", "meva", "sve", "ntai", "svon", "svon"> ;
medPresOptMi = endingsV <"mhn", "o", "to", "meva", "sve", "nto", "svon", "svhn"> ;
medImpfIndMi = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ;
medAorIndMi = endingsV <"mhn", "", "to", "meva", "sve", "nto", "svon", "svhn"> ;
medPerfIndMi = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ;
medPerfConjMi =
endingsV <"w)~", "h|)~s", "h|)~", "w)~men", "h)~te", "w)~si", "svon", "svon"> ;
medPerfOptMi =
endingsV <"ei)'hn", "ei)'hs", "ei)'h", "ei)~men", "ei)~te", "ei)~en", "svon","svhn"> ;
medPlqmIndMi = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ;
-- Passive endings:
passFutIndMi = endingsV <"h'somai","h'sh|","h'setai","hso'meva","h'sesve","h'sontai",
"h~svon","h~svon"> ;
passAorIndMi = endingsV <"hn","hs*","h","hmen","hte","hsan","hton","h'thn"> ;
passAorConjMi= endingsV <"w~","h|~s*","h|~","w~men","h~te","w~si","h~ton","h'thn"> ;
passAorOptMi = endingsV <"ei'hn","ei'hs*","ei'h","ei~men","ei~te","ei~en","ei~ton","ei'thn"> ;
-- passAorImp = endingsImp <"vhti","vh'tw","vhte","ve'ntwn"> ;
-- b) Mi-verbs with reduplication in the present tense BR 129
-- cc -unqual mkVerbRedupMi "di'dwmi" "dw'sw" "e)'dwka" "de'dwka" "de'domai" "e)do'vhn" "doto's*"
mkVerbRedupMi : (ActPresInd, ActFut, ActAor, ActPerf,
MedPerf, PassAor, VAdj1 : Str) -> Verb =
-- \paideyw, paideysw, epai'deysa, pepai'deyka, pepaideymai, epaideyvhn, paideytos ->
\di'dwmi, dw'sw, e'dwka, de'dwka, de'domai, edo'vhn, doto's ->
let
mC : Str -> Str = Ph.mutaConsonant ;
cV : Str -> Str = Ph.contractVowels ;
dropS : Str -> Str = \str ->
case str of { x + "o'so" => x + "oy~" ;
x + "oso" => x + "oy" ;
x + "e'so" => x + "oy~" ;
_ => str } ;
-- verbal stem:
dw' = P.tk 2 dw'sw ; -- VAct (_ VInd) Sg
dw = dA dw' ;
do' = Ph.ablaut dw' ; -- VAct (_ VInd) Pl ; VMed|Pass _ _
do = dA do' ;
-- present stem: didw, dido (reduplicated)
di'dw = P.tk 2 di'dwmi ;
didw = dA di'dw ;
di'do = Ph.ablaut di'dw ;
dido = dA di'do ;
dido' = a3 dido ;
edi'do = augment di'do ;
edido = dA edi'do ;
edidw = augment didw ;
-- future stem: dw's
dw's = P.tk 1 dw'sw ;
dws = dA dw's ;
do's = Ph.ablaut dw's ;
-- act|med aorist stem: e'dwk
e'dwk = P.tk 1 e'dwka ; -- epai'dey
edwk = dA e'dwk ;
edw'k = a3 edwk ;
edo = Ph.ablaut(P.tk 1 edwk) ;
e'do = a2 edo ;
edo' = a3 edo ;
-- act perfect stem: de'dwk = pepaideyk -- weak/strong: k/-
de'dwk = P.tk 1 de'dwka ;
dedwk = dA de'dwk ;
dedw'k = a3 dedwk ;
ede'dwk = augment de'dwk ;
ededwk = augment dedwk ;
ededw'k = augment dedw'k ;
-- med|pass perfect stem: dedo = pepaidey
de'do = P.tk 3 de'domai ;
dedo = dA de'do ;
dedo' = a3 dedo ;
ededo = augment dedo ;
-- pass aorist stem: do-v = epaideyv -- weak/strong: v/-
dov = unaspirate (mC (do + "v")) ; -- strong??
edov = augment dov ;
edo'v = a3 edov ;
-- verbal adjective: do-tos = paidey-tos -
dote'os : Str = case doto's of { dot + ("o's"|"o's*") => dot + "e'os*"
; _ => doto's } ; -- Error
-- participles
partActPres = (adj3nt (di'dw + "wn") (di'dw + "ontos")) ;
partActFut = (adj3nt (di'dw + "s" + "wn") (di'dw + "s" + "ontos")) ;
partActAor = (adj3nt (di'dw + "sa_s") (di'dw + "sa" + "ntos")) ;
partActPerf = (adj3nt (dedwk + "w's") (dedwk + "o'tos")) ; -- TODO fem kuia
partMedPres = (adj2AO (dido' + "menos") (dido + "me'nhs")) ; -- check
partMedFut = (adj2AO (dws + "o'menos") (dws + "ome'nhs")) ; -- check
partMedAorPerf = (adj2AO (dws + "o'menos") (dws + "ome'nhs")) ; -- check
-- to share most of the medium table with passive:
med = table {
Fin (VPres VInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => dido' + medPresIndMi n p ;
_ => di'do + medPresIndMi n p } ;
Fin (VPres VConj) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => cV(dido + medPresConj n p) ;
_ => cV(dido' + medPresConj n p) } ;
Fin (VPres VOpt) n p => case <n,p> of {
<Sg,P1> | <Pl,P1>
| <Dl,P3> => dido+"i'" + medPresOptMi n p ;
_ => dido+"i~" + medPresOptMi n p } ;
Fin VImpf n p => case <n,p> of { -- todo
<_,P1> | <Dl,P3> => a3 edido + medImpfIndMi n p ;
_ => edi'do + medImpfIndMi n p } ;
Fin (VFut FInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => dws + medPresInd n p ;
_ => dw's + medPresInd n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => dws + medPresOpt n p ;
_ => dw's + medPresOpt n p } ;
Fin (VPerf VInd) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => toCircumflex(dedo' + medPerfIndMi n p) ;
_ => mC(de'do + medPerfIndMi n p) } ;
Fin (VPerf VConj) n p => dedo + (menos n) ++ medPerfConjMi n p ;
Fin (VPerf VOpt) n p => dedo + (menos n) ++ medPerfOptMi n p ;
Fin (VAor VInd) n p => case <n,p> of {
<Sg,P1> | <Pl,P1> |
<Dl,P1> | <Dl,P3> => a3 edo + medAorIndMi n p ; -- TODO i/y-stems use thematic conj
_ => a2 edo + medAorIndMi n p } ; -- BR 128 3 ??
Fin (VAor VConj) n p => case <n,p> of {
<Pl,P1> | <Dl,P1> => cV(do + medPresConj n p) ;
_ => cV(do' + medPresConj n p) } ;
Fin (VAor VOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => do + "i'" + medPresOptMi n p ;
_ => do + "i~" + medPresOptMi n p } ;
Fin VPlqm n p => case <n,p> of {
<_,P1> | <Dl,P3> => a3 ededo + medPlqmIndMi n p ; -- TODO accents
_ => mC(a2 ededo + medPlqmIndMi n p) } ;
Imp IPres np => case np of {
SgP2 | PlP2 => di'do + medPerfImp np ;
_ => dido' + medPerfImp np } ;
Imp IAor np => dropS (do' + medPerfImp np) ;
Imp IPerf np => case np of {
SgP2 | PlP2 => dropS (mC (a2 dedo + medPerfImp np)) ; -- dedeigso => xo
_ => a3 dedo + medPerfImp np } ;
-- infinite forms:
Inf GPres => di'do + "svai" ;
Inf GFut => dw' + "se" + "svai" ;
Inf GAor => do' + "svai";
Inf GPerf => de'do + "svai" ; -- perfekt-stem keinai?
--
Part GPres af => partMedPres.s ! af ;
Part GFut af => partMedFut.s ! af ;
Part (GAor | GPerf) af => partMedAorPerf.s ! af
} ;
in
{ act = table {
Fin (VPres VInd) n p => case <n,p> of {
<Sg,_> => di'dw + actPresIndMi n p ;
<Pl,P3> => dido' + actPresIndMi n p ;
_ => di'do + actPresIndMi n p } ;
Fin (VPres VConj) n p => cV(a3 didw + actPresConj n p) ; -- cV: BR 128 3
Fin (VPres VOpt) n p => case <n,p> of {
<Sg,_ > => dido+"i'h" + actPresOptMi n p ;
<Dl,P3> => dido+"i'" + actPresOptMi n p ;
_ => dido+"i~" + actPresOptMi n p } ;
Fin VImpf n p => case <n,p> of { -- Sg differs for the
<Sg,_> => edi'do + (case P.dp 1 edi'do of -- 'big' mi-verbs!
{"e" => "i" ; "o" => "y" ; _ => ""})
+ actImpfIndMi n p ;
<Dl,P3> => a3 edido + actImpfIndMi n p ;
_ => edi'do + actImpfIndMi n p } ;
Fin (VFut FInd) n p => case n of {
Sg => dw's + actPresInd n p ;
_ => do's + actPresInd n p } ; -- Pl do' BR 128 2
Fin (VFut FOpt) n p => case <n,p> of {
<Dl,P3> => dws + actPresOpt n p ;
_ => dw's + actPresOpt n p } ; -- -o-i_ why o?
Fin (VPerf VInd) n p => case n of {
Sg => de'dwk + actPerfIndMi n p ;
_ => dedw'k + actPerfIndMi n p } ;
Fin (VPerf VConj) n p => dedw'k + actPresConj n p ;
Fin (VPerf VOpt) n p => case <n,p> of {
<Dl,P3> => dA de'dwk + actPresOpt n p ;
_ => dedw'k + "oi" + actPresOptMi n p } ; -- oi-h ??
Fin (VAor VInd) n p => case <n,p> of {
<Sg,P3> => e'dwk + actAorIndMi n p ;
<Sg, _> => e'dwk + "a" + actAorIndMi n p ;
<Dl,P3> => a3 edo + actAorIndMi n p ;
_ => e'do + actAorIndMi n p } ;
Fin (VAor VConj) n p => cV(do' + actPresConj n p) ; -- cV BR 128.3
Fin (VAor VOpt) n p => case <n,p> of {
<Sg,_ > => cV(do + "i'h") + actPresOptMi n p ;
<Dl,P3> => cV(do + "i'") + actPresOptMi n p ;
_ => cV(do + "i~") + actPresOptMi n p } ;
Fin VPlqm n p => case <n,p> of {
<Dl,P3> => ededwk + actPlqmIndMi n p ;
_ => ededw'k + actPlqmIndMi n p } ;
Imp IPres np => case np of {
SgP2 | PlP2 => di'do ;
_ => dido' } + actPresImpMi np ;
Imp IAor np => do' + actAorImpMi np ;
Imp IPerf np => "---" ;
-- Accents in infinite verb forms: BR 88
Inf GPres => dido' + "nai" ;
Inf GFut => dw' + "nai" ;
Inf GAor => addAccent (Circum 2) (cV (do + "enai")) ; -- BR 130 c
Inf GPerf => dedwk + "e'nai" ;
--
Part GPres af => partActPres.s ! af ;
Part GFut af => partActFut.s ! af ;
Part GAor af => partActAor.s ! af ;
Part GPerf af => partActPerf.s ! af
} ;
med = med ;
pass = table { -- just the difference to the medium
Fin (VFut FInd) n p => case <n,p> of {
<Dl,P2> | <Dl,P3> => dov + passFutIndMi n p ;
_ => dov + passFutIndMi n p } ;
Fin (VFut FOpt) n p => case <n,p> of {
<_,P1> | <Dl,P3> => dov + "hs" + medPresOpt n p ;
_ => dov + "h's" + medPresOpt n p } ;
Fin (VAor VInd) n p => case <n,p> of {
<Dl,P3> => edov + passAorIndMi n p ;
_ => edo'v + passAorIndMi n p } ;
Fin (VAor VConj) n p => dov + passAorConjMi n p ;
Fin (VAor VOpt) n p => dov + passAorOptMi n p ;
Fin tmod n p => med ! (Fin tmod n p) ;
Imp IAor np => case np of {
SgP2 | PlP2 => di'dw ;
_ => didw } + passAorImp np ;
Imp itmp np => med ! (Imp itmp np) ;
Inf GFut => dov + "h'" + "se" + "svai" ;
Inf GAor => dov + "h~" + "nai" ;
Inf tmp => med ! (Inf tmp) ; -- GPres => di'do + "svai" ;
-- GPerf => de'do + "svai"
Part tmp af => med ! (Part tmp af)
} ;
vadj1 : Adj = adjAO doto's ;
vadj2 : Adj = adjAO dote'os ;
vtype = VFull
} ;
-- TODO: nymi-verbs: combine present stem forms of mi-verbs with other forms of w-verbs
mkVerbNyMi7 : (s1,_,_,_,_,_,s7 : Str) -> Verb =
\dei'knymi, dei'xw, e'deixa, de'deica, de'deigmai, edei'cvhn, deikto's ->
let -- EXPENSIVE:
vmi = mkVerbRedupMi dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ;
vw = mkVerbW7voc dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ;
dei'kny = P.tk 2 dei'knymi ; -- present stem
deikny = dA dei'kny ;
deikny' = a3 deikny ;
in
{ act = table { Fin (VPres VOpt) n p => case <n,p> of {
<Dl,P3> => deikny + actPresOpt n p ;
_ => deikny' + actPresOpt n p } ;
Fin (VPres mod) n p => vmi.act ! (Fin (VPres mod) n p) ;
Fin VImpf n p => vmi.act ! (Fin VImpf n p) ;
Inf form => vmi.act ! (Inf form) ;
Part GPres af => vmi.act ! (Part GPres af) ; -- TODO
Part GFut af => vmi.act ! (Part GFut af) ;
Part GAor af => vmi.act ! (Part GAor af) ;
Part GPerf af => vw.act ! (Part GPerf af) ;
else => vw.act ! else } ;
med = table { Fin (VPres VOpt) n p => case <n,p> of {
<Sg,P1> | <Pl,P1>
| <Dl,P3> => deikny + medPresOpt n p ;
_ => deikny' + medPresOpt n p } ;
Fin (VPres mod) n p => vmi.med ! (Fin (VPres mod) n p) ;
Fin VImpf n p => vmi.med ! (Fin VImpf n p) ;
Fin (VPerf mod) n p => vmi.med ! (Fin (VPerf mod) n p) ; -- ?
Fin VPlqm n p => vmi.med ! (Fin VPlqm n p) ; -- ?
Imp itmp np => vmi.med ! (Imp itmp np) ; -- ?
Inf form => vmi.med ! (Inf form) ;
Part tmp af => vw.med ! (Part tmp af) ; -- guessed, TODO
else => vw.med ! else } ;
pass = table { Part tmp af => vw.pass ! (Part tmp af) ;-- TODO
form => vmi.pass ! form } ; -- GUESSED
vadj1 = vw.vadj1 ;
vadj2 = vw.vadj2 ;
vtype = VFull ;
} ;
-- c) Mi-verbs which have the verbal root as present stem: TODO fhmi', ei)~mi, ei)mi' BR 138
mkVerbEimi : (s1,_,_,_,_,_,s7 : Str) -> Verb =
\dei'knymi, dei'xw, e'deixa, de'deica, de'deigmai, edei'cvhn, deikto's ->
let -- EXPENSIVE:
vw = mkVerbW7voc dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ;
dei'kny = P.tk 2 dei'knymi ; -- present stem
deikny = dA dei'kny ;
deikny' = a3 deikny ;
in -- BR 138
{ act = table { Fin (VPres VInd) Sg P1 => "ei)mi'" ;
Fin (VPres VInd) Sg P2 => "ei)~" ;
Fin (VPres VInd) Sg P3 => "e)sti'n" ;
Fin (VPres VInd) Pl P1 => "e)sme'n" ;
Fin (VPres VInd) Pl P2 => "e)ste'" ;
Fin (VPres VInd) Pl P3 => "ei)si'n" ;
Fin (VPres VInd) Dl P1 => "e)sme'n" ;
Fin (VPres VInd) Dl p => "ei)'eton" ; -- HL
Fin (VPres VConj) Sg P1 => "w)~" ;
Fin (VPres VConj) Sg P2 => "h|)~s*" ;
Fin (VPres VConj) Sg P3 => "h|)~" ;
Fin (VPres VConj) Pl P1 => "w)~men" ;
Fin (VPres VConj) Pl P2 => "h)~te" ;
Fin (VPres VConj) Pl P3 => "w)~sin" ;
Fin (VPres VOpt) Sg p => "ei)'h" + actPresOptMi Sg p ;
Fin (VPres VOpt) n p => "ei)~" + actPresOptMi n p ;
Fin VImpf Sg P2 => "h)~" + "sva" ;
Fin VImpf Sg P3 => "h)~" + "n" ;
Fin VImpf n p => "h)~" + actImpfIndMi n p ;
Fin (VFut FInd) Sg P3 => "e)'s" + "tai" ;
Fin (VFut FInd) Pl P1 => "e)s" + medPresInd Pl P1 ;
Fin (VFut FInd) Dl P1 => "e)s" + medPresInd Dl P1 ;
Fin (VFut FInd) n p => "e)'s" + medPresInd n p ;
Fin (VFut FOpt) Pl P1 => "e)s" + medPresOpt Pl P1 ;
Fin (VFut FOpt) Dl P1 => "e)s" + medPresOpt Dl P1 ;
Fin (VFut FOpt) n p => "e)'s" + medPresOpt n p ;
Inf GPres => "ei)~nai" ;
Inf GFut => "e)'sesvai" ;
Inf form => vw.act ! (Inf form) ;
-- Part GPres af => (adj3nt (cV "w)'n") (cV "o)'ntos*")).s ! af ;
Part GFut af => (adj3nt ("e)'s" + "wn") ("e)'s" + "ontos")).s ! af ;
Part GAor af => (adj3nt ("gene's" + "a_s") ("genes" + "a'ntos")).s ! af ;
Part GPerf af => "---" ;
Imp IPres SgP2 => "i)'svi" ;
Imp IPres SgP3 => "e)'stw" ;
Imp IPres PlP2 => "e)'ste" ;
Imp IPres PlP3 => "e)'stwn" ;
else => vw.act ! else } ; -- imports wrong forms
med = table { _ => "---" } ;
pass = table { _ => "---" } ;
vadj1 = { s = table { _ => "---" } ; adv = [] } ;
vadj2 = { s = table { _ => "---" } ; adv = [] } ;
vtype = VFull ;
} ;
-- vmi = mkVerbMi dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ;
-- eimi_V : Verb = -- just to have something
-- mkVerbRedupMi "ei)mi'" "e)'somai" "e)geno'mhn" -- BR 138
-- "de'deica" "de'deigmai" "e)dei'cvhn" -- rubbish
-- "deicto's*" ; -- rubbish
eimi_V = mkVerbEimi "ei)m'" "e)'swmai" "e)geno'mhn" "ge'gona" "bla" "bla'vhn" "blato's" ;
-- For $Numeral$.
Digit = {s : DForm => CardOrd => Str} ;
-- TODO: check if adjAO is the proper inflection for ordinals
cardOne : Gender * Case => Str =
table { <Masc, Nom> => "ei(~s*" ;
<Masc, Acc> => "e('na" ;
<Masc|Neutr, Gen> => "e(no's*" ;
<Masc|Neutr, Dat> => "e(ni'" ;
< Fem, Nom> => "mi'a" ;
< Fem, Acc> => "mi'an" ;
< Fem, Gen> => "mia~s*" ;
< Fem, Dat> => "mia|~" ;
<Neutr, Nom|Acc> => "e('n" ;
<_, Voc> => "e('ne" -- HL
} ;
cardOrd : Str -> Str -> Str -> CardOrd => Str = \pente,pemptos,pentakis ->
table { -- BR 73
NCard g c => case pente of {
-- special inflection for eis, dyo, treis, tettares BR 73.1, HL: Voc guessed
"ei(~s" => cardOne ! <g,c> ;
"dy'o" => table Case ["dy'o" ; "dy'o" ; "dyoi~n" ; "dyoi~n" ; "dy'a" ] ! c ;
"trei~s" => let forms : (Gender * Case) => Str =
table { < Masc|Neutr, Nom|Acc > => "trei~s" ;
< Fem, Nom|Acc > => "tri'a" ;
< _ , Gen > => "triw~n" ;
< _ , Dat > => "trisi'" ;
< _ , Voc > => "trei~s" }
in forms ! <g,c> ;
"te'ttares" => let forms : (Gender * Case) => Str =
table { < Masc|Neutr, Nom|Acc > => "te'ttares" ;
< Fem, Nom|Acc > => "te'ttara" ;
< _ , Gen > => "tetta'rw~n" ;
< _ , Dat > => "te'ttarsi" ;
< _ , Voc > => "te'ttare" }
in forms ! <g,c> ;
adj@(_ + "i") + "oi"
=> (adjAO (adj+"os")).s ! AF g Pl c ;
_ => pente
} ;
NOrd a => (adjAO pemptos).s ! a ;
NAdv => canonize pentakis
} ;
cardOrdTeen : Str -> Str -> CardOrd => Str = \pentekaideka,pemptos ->
let pentekaidekakis : Str = case pemptos of {
"tri'tos" => "triskaideka'kis" ;
"te'tartos" => "tetrakaideka'kis" ;
_ => dA (P.tk 2 pentekaideka) + "ka'kis"
} ;
cardO : CardOrd => Str = cardOrd pentekaideka pemptos pentekaidekakis ;
ordA : AForm => Str = (adjAO pemptos).s ;
deka : AForm => Str = (adjAO "de'katos").s
in
table { NCard g c => cardO ! NCard g c ;
NOrd a => case pentekaideka of {
d@("e('n" | "dw'") + _ => (dA d) + deka ! a ;
_ => ordA ! a ++ "kai`" ++ deka ! a } ;
NAdv => canonize pentekaidekakis
} ;
mkDigit : (x1,_,_,x4,x5 : Str) -> Digit =
-- three,thirteen,thirty,third,three-times
\treis,treis_kai_deka,triakonta,tritos,tris ->
let triakostos : Str =
case triakonta of { "de'ka" => "de'katos" ;
triako + ("si" | "nta") => (dA triako)+"sto's" } ;
triakontakis : Str =
case triakonta of { "de'ka" => "deka'kis" ;
eiko + "si" => dA eiko + "sa'kis" ;
triako + "nta" => (dA triako)+"nta'kis" } ;
triakosi : Str =
case triakonta of { "de'ka" => "e(kat" ;
eiko + "si" => "diako'si" ;
triako + "nta" => (dA triako)+"'si" }
in {s = table {
DUnit => cardOrd treis tritos tris ;
DTeen => cardOrdTeen treis_kai_deka tritos;
DTen => cardOrd triakonta triakostos triakontakis ;
DHundred => case triakonta of {
"de'ka" => cardOrd "e(kato'n" "e(katosto's" "e(katonta'kis" ;
_ => cardOrd (triakosi + "oi") (dA triakosi + "osto's")
(dA triakosi + "a'kis") }
}
} ;
invNum : CardOrd = NCard Masc Nom ;
} ;