mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-13 23:09:31 -06:00
partial implementation of Ancient Greek RGL
This commit is contained in:
407
lib/src/ancient_greek/AccentsGrc.gf
Normal file
407
lib/src/ancient_greek/AccentsGrc.gf
Normal file
@@ -0,0 +1,407 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
--1 Greek auxiliary operations. -- NOT USED. Remember old version; sound law SL etc
|
||||
|
||||
resource AccentsGrc = {
|
||||
|
||||
flags
|
||||
optimize = noexpand ;
|
||||
|
||||
oper
|
||||
|
||||
-- Accent shift and accent change: the following functions are applied to
|
||||
-- the stem in certain cases:
|
||||
|
||||
-- a) when the Pl Gen ending w~n is added, the accent in the stem
|
||||
-- must be removed using dropAccent:
|
||||
|
||||
dropAccent : Str -> Str = \str -> case str of {
|
||||
x + ("'" | "`" | "~") + z => x + z ;
|
||||
x + "=" + z => x + "-" + z ;
|
||||
_ => str
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
{- Redesign: ------------------------------------------------------------------
|
||||
|
||||
Try to extract the patterns of vowel lengths and accent position
|
||||
and do the paradigms with less pattern matching.
|
||||
|
||||
We need the general rule:
|
||||
1. the accent position is taken from SgNom, and only moved on demand.
|
||||
2. a shift is demanded if a an ending with a long vowel is added and
|
||||
the accent position is on the 3rd last vowel.
|
||||
3. if an ending with accent is added, the accent in the stem has to be dropped.
|
||||
|
||||
-- Declension I,II: Word`stock'+NomSgEnding => wordkind includes ending.
|
||||
Then from lists of endings *without accent* one takes the accent position
|
||||
from the user-provided form(s), and given the vowel length of the ending,
|
||||
determines the accent position of other forms
|
||||
-- Declension III:
|
||||
Wordstem+Ending (wordstem+os=GenSg) => NomSg may have empty ending
|
||||
Then the accent position is taken from the NomSg.
|
||||
-}
|
||||
|
||||
oper
|
||||
Position : PType = Predef.Ints 3 ;
|
||||
|
||||
WPat = { syl : Syllability ;
|
||||
v : VPat * VPat * VPat ;
|
||||
s : Str * Str * Str * Str;
|
||||
acnt : Accent
|
||||
} ;
|
||||
param
|
||||
Accent = Acute Position | Circum Position | NoAccent ;
|
||||
Syllability = Mono | Bi | Many ;
|
||||
|
||||
Vowel = A | E | I | O | U | AU | EU | OU | AI | EI | OI | UI |
|
||||
-- vowel with spirtus asper/lenis:
|
||||
Aa | Ea | Ia | Oa | Ua | AUa | EUa | OUa | AIa | EIa | OIa | UIa |
|
||||
Al | El | Il | Ol | Ul | AUl | EUl | OUl | AIl | EIl | OIl | UIl |
|
||||
-- vowel with iota subscriptum and spiritus
|
||||
Ai | Ei | Oi | Aia | Eia | Oia | Ail | Eil | Oil
|
||||
;
|
||||
|
||||
VPat = NoVowel | Short Vowel | Long Vowel ; -- 1+45+45 = 91 possibilities
|
||||
|
||||
Spirit = Asper | Lenis | NoSpirit ;
|
||||
|
||||
oper
|
||||
removeLength : Str -> Str = \str -> case str of {
|
||||
"a_" | "a." => "a" ; "i_" | "i." => "i" ; "y_" | "y." => "y" ; x => x } ;
|
||||
|
||||
toStr : VPat -> Str = \vpat -> case vpat of {
|
||||
Short A => "a" ;
|
||||
Short E => "e" ;
|
||||
Short I => "i" ;
|
||||
Short O => "o" ;
|
||||
Short U => "y" ;
|
||||
Long A => "a_" ; -- maybe better "a", since the unicode-table has not a_'
|
||||
Long E => "h" ;
|
||||
Long I => "i_" ;
|
||||
Long O => "w" ;
|
||||
Long U => "y_" ;
|
||||
Long AU => "ay" ;
|
||||
Long EU => "ey" ;
|
||||
Long OU => "oy" ;
|
||||
Long AI => "ai" ;
|
||||
Long EI => "ei" ;
|
||||
Long OI => "oi" ;
|
||||
Long UI => "yi" ;
|
||||
Short AI => "ai" ;
|
||||
Short OI => "oi" ;
|
||||
-- vowels and diphthongs with spriritus asper:
|
||||
Short Aa => "a(" ;
|
||||
Short Ea => "e(" ;
|
||||
Short Ia => "i(" ;
|
||||
Short Oa => "o(" ;
|
||||
Short Ua => "y(" ;
|
||||
-- Long Aa
|
||||
Long Ea => "h(" ;
|
||||
-- Long Ia
|
||||
Long Oa => "w(" ;
|
||||
-- Long Ua
|
||||
Long AUa => "ay(" ;
|
||||
Long EUa => "ey(" ;
|
||||
Long OUa => "oy(" ;
|
||||
Long AIa => "ai(" ;
|
||||
Long EIa => "ei(" ;
|
||||
Long OIa => "oi(" ;
|
||||
Long UIa => "yi(" ;
|
||||
-- vowels and diphthongs with spriritus lenis:
|
||||
Short Al => "a)" ;
|
||||
Short El => "e)" ;
|
||||
Short Il => "i)" ;
|
||||
Short Ol => "o)" ;
|
||||
Short Ul => "y)" ;
|
||||
-- Long Al
|
||||
Long El => "h)" ;
|
||||
-- Long Il
|
||||
Long Ol => "w)" ;
|
||||
-- Long Ul
|
||||
Long AUl => "ay)" ;
|
||||
Long EUl => "ey)" ;
|
||||
Long OUl => "oy)" ;
|
||||
Long AIl => "ai)" ;
|
||||
Long EIl => "ei)" ;
|
||||
Long OIl => "oi)" ;
|
||||
Long UIl => "yi)" ;
|
||||
-- vowels with iota subscriptum, and spirits
|
||||
Long Ai => "a|" ;
|
||||
Long Ei => "e|" ;
|
||||
Long Oi => "o|" ;
|
||||
Long Aia => "a|(" ;
|
||||
Long Eia => "h|(" ;
|
||||
Long Oia => "w|(" ;
|
||||
Long Ail => "a|)" ;
|
||||
Long Eil => "h|)" ;
|
||||
Long Oil => "w|)" ;
|
||||
NoVowel => "" ; -- TODO: trema etc. perhaps I2 = "i-"
|
||||
_ => "*" -- ca.30 possibilities
|
||||
} ;
|
||||
|
||||
toVPat : Str -> VPat = \str -> case str of {
|
||||
("a."|"a") => Short A ;
|
||||
("i."|"i"|"i-"|"i=") => Short I ;
|
||||
("y."|"y"|"y-"|"y=") => Short U ;
|
||||
"a_" => Long A ;
|
||||
"i_" => Long I ;
|
||||
"y_" => Long U ;
|
||||
"a" => Short A ;
|
||||
"e" => Short E ;
|
||||
"i" => Short I ;
|
||||
"o" => Short O ;
|
||||
"y" => Short U ;
|
||||
"a" => Long A ; -- maybe better "a", since the unicode-table has not a_'
|
||||
"h" => Long E ;
|
||||
"i" => Long I ;
|
||||
"w" => Long O ;
|
||||
"y" => Long U ;
|
||||
"ay" => Long AU ;
|
||||
"ey" => Long EU ;
|
||||
"oy" => Long OU ;
|
||||
"ai" => Long AI ;
|
||||
"ei" => Long EI ;
|
||||
"oi" => Long OI ;
|
||||
"yi" => Long UI ;
|
||||
-- vowels and diphthongs with spriritus asper:
|
||||
"a(" => Short Aa ;
|
||||
"e(" => Short Ea ;
|
||||
"i(" => Short Ia ;
|
||||
"o(" => Short Oa ;
|
||||
"y(" => Short Ua ;
|
||||
-- Long Aa
|
||||
"h(" => Long Ea ;
|
||||
-- Long Ia
|
||||
"w(" => Long Oa ;
|
||||
-- Long Ua
|
||||
"ay(" => Long AUa ;
|
||||
"ey(" => Long EUa ;
|
||||
"oy(" => Long OUa ;
|
||||
"ai(" => Long AIa ;
|
||||
"ei(" => Long EIa ;
|
||||
"oi(" => Long OIa ;
|
||||
"yi(" => Long UIa ;
|
||||
-- vowels and diphthongs with spriritus lenis:
|
||||
"a)" => Short Al ;
|
||||
"e)" => Short El ;
|
||||
"i)" => Short Il ;
|
||||
"o)" => Short Ol ;
|
||||
"y)" => Short Ul ;
|
||||
-- Long Al
|
||||
"h)" => Long El ;
|
||||
-- Long Il
|
||||
"w)" => Long Ol ;
|
||||
-- Long Ul
|
||||
"ay)" => Long AUl ;
|
||||
"ey)" => Long EUl ;
|
||||
"oy)" => Long OUl ;
|
||||
"ai)" => Long AIl ;
|
||||
"ei)" => Long EIl ;
|
||||
"oi)" => Long OIl ;
|
||||
"yi)" => Long UIl ;
|
||||
-- vowels with iota subscriptum, and spirits
|
||||
"a|" => Long Ai ;
|
||||
"e|" => Long Ei ;
|
||||
"o|" => Long Oi ;
|
||||
"a|(" => Long Aia ;
|
||||
"h|(" => Long Eia ;
|
||||
"w|(" => Long Oia ;
|
||||
"a|)" => Long Ail ;
|
||||
"h|)" => Long Eil ;
|
||||
"w|)" => Long Oil ;
|
||||
_ => NoVowel -- TODO: trema etc. perhaps I2 = "i-"
|
||||
} ;
|
||||
|
||||
-- accent ~ can only be on long vowels, hence y~ must become <Long U, Circum> etc:
|
||||
|
||||
toVPat2 : Str -> Str -> VPat = \o,z ->
|
||||
case o of { (#shortV|#restV) => case z of {"~"+_ => toVPat (removeLength o + "_") ;
|
||||
_ => toVPat o} ;
|
||||
_ => toVPat o } ;
|
||||
|
||||
toAcntPos : Str -> Accent = \str ->
|
||||
case str of { -- we don't check for double accent; the leftmost accent counts
|
||||
-- 3 syllables
|
||||
("'"|"('"|")'") + _ + "$" + _ + "$" + _ => Acute 1 ;
|
||||
("~"|"(~"|")~") + _ + "$" + _ + "$" + _ => Circum 1 ;
|
||||
_ + "$" + "'" + _ + "$" + _ => Acute 2 ;
|
||||
_ + "$" + "~" + _ + "$" + _ => Circum 2 ;
|
||||
_ + "$" + _ + "$" + "'" + _ => Acute 3 ;
|
||||
_ + "$" + _ + "$" + "~" + _ => Circum 3 ;
|
||||
-- 2 syllables
|
||||
("'"|"('"|")'") + _ + "$" + _ => Acute 2 ;
|
||||
("~"|"(~"|")~") + _ + "$" + _ => Circum 2 ;
|
||||
_ + "$" + "'" + _ => Acute 3 ;
|
||||
_ + "$" + "~" + _ => Circum 3 ;
|
||||
-- 1 syllable
|
||||
("'"|"('"|")'") + _ => Acute 3 ;
|
||||
("~"|"(~"|")~") + _ => Circum 3 ;
|
||||
-(_ + ("'" | "~" | "`") + _) => NoAccent ;
|
||||
_ => Predef.error "Error: double accent"
|
||||
} ;
|
||||
|
||||
-- The order of the patterns in the pattern alternatives is important since
|
||||
-- diphthongs match against vowel+vowel, and short vowels.
|
||||
-- (Here "ai", "oi" count as long; for end syllables, this is adjusted in addAccent.)
|
||||
|
||||
wpat : Str -> WPat = \str ->
|
||||
let T = "$" ;
|
||||
da = dropAccent
|
||||
in
|
||||
case str of {
|
||||
-- monosyllabic words:
|
||||
y@(("r(" | "") + #nonvowels)
|
||||
+ o@((#diphthong | #longV | #shortV | #restV) + (#spirit | ""))
|
||||
+ z@#nonvowels
|
||||
=> { syl = Mono ;
|
||||
v = <NoVowel, NoVowel, toVPat2 o z> ;
|
||||
acnt = toAcntPos z ;
|
||||
s = <[] , [] , y , da z>
|
||||
} ;
|
||||
-- bisyllabic words:
|
||||
x@(("r(" | "") + #nonvowels)
|
||||
+ e@((#diphthong | #longV | #shortV | #restV) + (#spirit | ""))
|
||||
+ y@#nonvowels
|
||||
+ o@(#diphthong | #longV | #shortV | #restV)
|
||||
+ z@#nonvowels
|
||||
=> { syl = Bi ;
|
||||
v = <NoVowel , toVPat2 e y, toVPat2 o z> ;
|
||||
acnt = toAcntPos (y + T + z) ;
|
||||
s = <[] , x , da y , da z>
|
||||
} ;
|
||||
-- manysyllabic words:
|
||||
r@_
|
||||
+ a@((#diphthong | #longV | #shortV | #restV) + (#spirit | ""))
|
||||
+ x@#nonvowels
|
||||
+ e@(#diphthong | #longV | #shortV | #restV)
|
||||
+ y@#nonvowels
|
||||
+ o@(#diphthong | #longV | #shortV | #restV)
|
||||
+ z@#nonvowels
|
||||
=> { syl = Many ;
|
||||
v = <toVPat2 a x, toVPat2 e y, toVPat2 o z> ;
|
||||
acnt = toAcntPos (x + T + y + T + z) ;
|
||||
s = <r , da x , da y , da z>
|
||||
} ;
|
||||
_ => -- Predef.error "vowel/accent pattern not recognized"
|
||||
{ syl = Mono ;
|
||||
v = <NoVowel,NoVowel,NoVowel> ;
|
||||
acnt= NoAccent ;
|
||||
s = <"BUGGY","VOWEL","ACCENT","PATTERN">
|
||||
}
|
||||
} ;
|
||||
|
||||
-- Add an accent to an unaccentuated string; includes necessary accent changes and shifts
|
||||
-- (We don't check that the given string has enough vowels.)
|
||||
|
||||
merge : (Str * Str * Str * Str) -> (Str * Str * Str) -> Str =
|
||||
\cs,vs -> cs.p1 + vs.p1 + cs.p2 + vs.p2 + cs.p3 + vs.p3 + cs.p4 ;
|
||||
|
||||
glue : (Str * Str * Str * Str )-> (VPat * VPat * VPat) -> Str =
|
||||
\cs,vs -> cs.p1 + (toStr vs.p1) + cs.p2 + (toStr vs.p2) + cs.p3 + (toStr vs.p3) + cs.p4 ;
|
||||
|
||||
addAccent0 : Accent -> Str -> Str = \accent,str -> str ; -- for testing
|
||||
|
||||
-- addAccent inserts the given accent = (accnt pos) to the vowel at the position,
|
||||
-- and for pos=1=3rd last and last vowel is short, puts the accent to 2nd last:
|
||||
addAccent : Accent -> Str -> Str = \accent,str ->
|
||||
let
|
||||
w = wpat str ;
|
||||
v1 = toStr w.v.p1 ; -- third last vowel
|
||||
v2 = toStr w.v.p2 ; -- second last vowel
|
||||
v3 = toStr w.v.p3 ; -- last vowel
|
||||
v2s = removeLength v2 ;
|
||||
v3s = removeLength v3 ;
|
||||
in
|
||||
case accent of {
|
||||
Acute 3 => merge w.s <v1, v2, v3 + "'"> ;
|
||||
Circum 3 => merge w.s <v1, v2, v3s + "~"> ;
|
||||
Acute 2 => case <w.v.p2, w.v.p3> of { -- BR 9 4
|
||||
<Long u2, Short u3> => merge w.s <v1, v2s + "~", v3> ;
|
||||
_ => merge w.s <v1, v2 + "'", v3>
|
||||
} ;
|
||||
Circum 2 => merge w.s <v1, v2s + "~", v3> ; -- change to ' for v2 short?
|
||||
Acute 1 => case <w.v.p3, w.s.p4> of {
|
||||
<Short _, _> => merge w.s <v1 + "'", v2, v3> ; -- BR 9 1.b
|
||||
<Long AI,""> => merge w.s <v1 + "'", v2, v3> ; -- BR 29.7 declension ; conjug?
|
||||
<Long OI,""> => merge w.s <v1 + "'", v2, v3> ; -- BR 29.7 declension ; conjug?
|
||||
_ => merge w.s <v1, v2 + "'", v3> -- sometimes changes to "~" needed?
|
||||
} ;
|
||||
_ => -- Predef.error ("Illegal accentuation for " ++ str)
|
||||
str
|
||||
} ;
|
||||
|
||||
-- from accent position in stem to accent position in (stem+long ending): ?
|
||||
-- stempos1,stempos2,stempos3 => (stem+end)pos1,(stem+end)pos2,(stem+end)pos3
|
||||
|
||||
addAccent' : Accent -> Str -> Str = \accent,str ->
|
||||
let
|
||||
accent' = case accent of {Acute 2 => Acute 1 ;
|
||||
Circum 2 => Acute 1 ;
|
||||
Acute 3 => Acute 2 ;
|
||||
Circum 3 => Circum 2 ;
|
||||
_ => accent}
|
||||
in addAccent accent' str ;
|
||||
-}
|
||||
-- --------------------------------------------------------------------------------
|
||||
|
||||
{- Sound laws on structured string (Example)
|
||||
|
||||
-- Problem:
|
||||
-- In addNEnding, an accent on the ending overwrites accents on the stem.
|
||||
-- But if vowel contraction <e',ei> => <[],ei~> deletes the final vowel of
|
||||
-- the stem, one would need to shift stem parts to the right:
|
||||
-- c1+v1+c2+v2+c3+v3+[]++[]+v+c2 => c1+v1+c2+v2+c3+[]+[]++[]+(v3+v)+c2
|
||||
-- to avoid the adjacent []+[]. But c1 may contain vowels, and the number of
|
||||
-- syllables is not exactly known!
|
||||
-- If we use c1+v1+c2+v2+c3+v3+[]++[]+v+c2 => c1+v1+c2+v2+c3+(v3+v)+[]++[]+[]+c2,
|
||||
-- as with <e',ei> => <ei~,[]>, we have to adjust the accent in the stem. (ToDo)
|
||||
-- (could also turn the ending to c2+[]+[], but need not).
|
||||
|
||||
-- cV2 : soundlaw = \s2 -> <"", contractVowels s2.p1 s2.p2> ; -- deprec.
|
||||
|
||||
-- Test
|
||||
SL : Soundlaw = \we -> let S = we.p1 ;
|
||||
E = we.p2 ;
|
||||
sv3 : Str = S.v.p3 + case S.a of { Acute 3 => "'" ;
|
||||
Circum 3 => "~" ;
|
||||
_ => "" } ;
|
||||
sc4 = S.c.p4 ;
|
||||
ec1 = E.c.p1 ;
|
||||
ev = E.v ;
|
||||
in case <sv3,sc4,ec1,ev> of {
|
||||
<_,"","",_> => let vs = cV2 <sv3,ev> ; -- contractVowels
|
||||
S2 = substV3 S vs.p1 ;
|
||||
E2 = toNEnding (vs.p2 + E.c.p2)
|
||||
in <S2, E2> ;
|
||||
<_,?+_,_+("m"|"s"|"t"|"v"),_> =>
|
||||
let cs = mC2 <sc4,ec1> ;
|
||||
S2 = substC4 S cs.p1 ;
|
||||
E2 = substC E <cs.p2,E.c.p2>
|
||||
in <S2, E2> ;
|
||||
_ => we } ;
|
||||
|
||||
substV3 : Word -> Str -> Word = -- assume that w.v.p3 and u are not "" !!
|
||||
\w,u -> { a = case u of { _+"~" => Circum 3 ; _+"'" => Acute 3 ; _ => w.a } ;
|
||||
s = w.s ;
|
||||
v = <w.v.p1, w.v.p2, dropAccent u> ; -- We need u=/=[], else w.v.p1 prevents shifting
|
||||
l = <w.l.p1, w.l.p2, vowelLength (dropAccent u)> ; -- TODO: short "ai" etc
|
||||
c = w.c } ;
|
||||
substC : NEnding -> (Str*Str) -> NEnding =
|
||||
\w,cs -> { a = w.a ; v = w.v ; l = w.l ; c = cs } ;
|
||||
|
||||
-- expl: cc SL <toWord "nanoga'", toNEnding "wn">
|
||||
|
||||
toStrN3 : Word -> Str -> Str =
|
||||
\w,e -> let we = SL (adjustAccent <w, toNEnding e>)
|
||||
in toStrT (concat we) ;
|
||||
|
||||
-- toStrN3 : Word -> Str -> Str = \w,e -> let we = (SL <w, toNEnding e>)
|
||||
-- in toStr (addNEnding we.p1 we.p2) ;
|
||||
|
||||
-- cc let we = (SL <toWord "gene'", toNEnding "i">) in toStr (addNEnding we.p1 we.p2)
|
||||
-- cc toStr (addNEnding (SL <toWord "gene'", toNEnding "i">).p1 (SL <toWord "gene'", toNEnding "i">).p2)
|
||||
-}
|
||||
|
||||
}
|
||||
42
lib/src/ancient_greek/AdjectiveGrc.gf
Normal file
42
lib/src/ancient_greek/AdjectiveGrc.gf
Normal file
@@ -0,0 +1,42 @@
|
||||
concrete AdjectiveGrc of Adjective = CatGrc ** open ResGrc, Prelude, (M=MorphoGrc) in {
|
||||
|
||||
lin
|
||||
PositA a = { s = \\af => a.s ! Posit ! af } ;
|
||||
|
||||
ComparA a np = let agr = Ag Masc Sg P3 -- Default, TODO : s : Agr => ...
|
||||
in {
|
||||
s = \\af => a.s ! Compar ! af ++ np.s ! Gen ;
|
||||
} ;
|
||||
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
|
||||
-- TODO: where is the argument of an A going - before or after the adjective?
|
||||
ComplA2 a np = let agr = Ag Masc Sg P3 -- DEFAULT, need ap.s : Agr => ... TODO
|
||||
in {
|
||||
s = \\af => a.s ! Posit ! af ++ a.c2.s ++ np.s ! a.c2.c ;
|
||||
} ;
|
||||
|
||||
ReflA2 a = {
|
||||
s = \\af => a.s ! Posit ! af ++ a.c2.s ++ -- P3 ??
|
||||
M.reflPron ! (Ag (genderAf af) (numberAf af) P3) ! a.c2.c ;
|
||||
} ;
|
||||
|
||||
SentAP ap sc = {
|
||||
s = \\af => ap.s ! af ++ sc.s ;
|
||||
} ;
|
||||
|
||||
AdAP ada ap = {
|
||||
s = \\af => ada.s ++ ap.s ! af ;
|
||||
} ;
|
||||
|
||||
UseA2 a = { s = a.s ! Posit } ;
|
||||
|
||||
UseComparA a = {
|
||||
s = a.s ! Compar
|
||||
} ;
|
||||
|
||||
-- TODO:
|
||||
-- CAdvAP : CAdv -> AP -> NP -> AP -- as cool as John
|
||||
AdjOrd ord = ord ; -- Ord -> AP = { s : AForm => Str } -- warmest
|
||||
|
||||
}
|
||||
26
lib/src/ancient_greek/AdverbGrc.gf
Normal file
26
lib/src/ancient_greek/AdverbGrc.gf
Normal file
@@ -0,0 +1,26 @@
|
||||
concrete AdverbGrc of Adverb = CatGrc ** open ResGrc, Prelude in {
|
||||
|
||||
lin
|
||||
PositAdvAdj a = { s = a.adv ! Posit } ;
|
||||
|
||||
ComparAdvAdj cadv a np = let agr = Ag Neutr Sg P3 -- default, TODO s:Agr => ..
|
||||
in {
|
||||
s = cadv.s ++ a.adv ! Compar ++ np.s ! Gen -- TODO: check
|
||||
} ;
|
||||
|
||||
-- ComparAdvAdjS cadv a s = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
|
||||
-- } ;
|
||||
|
||||
PrepNP prep np = { -- prepositions need stressed pronouns, BR
|
||||
s = appPrep prep np -- default; TODO s:Agr => ..
|
||||
} ;
|
||||
|
||||
-- AdAdv = cc2 ;
|
||||
|
||||
SubjS = cc2 ;
|
||||
-----b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
||||
--
|
||||
-- AdnCAdv cadv = {s = cadv.s ++ "than"} ;
|
||||
--
|
||||
}
|
||||
8
lib/src/ancient_greek/AllGrc.gf
Normal file
8
lib/src/ancient_greek/AllGrc.gf
Normal file
@@ -0,0 +1,8 @@
|
||||
--# -path=.:../../gf/lib/src/abstract:../common:../prelude
|
||||
-- --# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete AllGrc of AllGrcAbs =
|
||||
LangGrc,
|
||||
ExtraGrc,
|
||||
BornemannGrc -- added HL
|
||||
** {} ;
|
||||
8
lib/src/ancient_greek/AllGrcAbs.gf
Normal file
8
lib/src/ancient_greek/AllGrcAbs.gf
Normal file
@@ -0,0 +1,8 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
abstract AllGrcAbs =
|
||||
Lang,
|
||||
Bornemann,
|
||||
ExtraGrcAbs,
|
||||
TransferGrcAbs
|
||||
** {} ;
|
||||
76
lib/src/ancient_greek/BackwardGrc.gf
Normal file
76
lib/src/ancient_greek/BackwardGrc.gf
Normal file
@@ -0,0 +1,76 @@
|
||||
--concrete BackwardGrc of Backward = CatGrc ** open ResGrc 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 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 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) 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 ;
|
||||
--
|
||||
--}
|
||||
224
lib/src/ancient_greek/Bornemann.gf
Normal file
224
lib/src/ancient_greek/Bornemann.gf
Normal file
@@ -0,0 +1,224 @@
|
||||
abstract Bornemann = Cat ** {
|
||||
|
||||
fun
|
||||
-- A-declension of nouns and adjectives
|
||||
|
||||
-- Femina ending in -a_, -h, -a. BR 32
|
||||
|
||||
idea_N : N ; -- Form, Gestalt
|
||||
chora_N : N ; -- Land
|
||||
stratia_N : N ; -- Heer
|
||||
doxa_N : N ; -- Meinung
|
||||
glotta_N : N ; -- Zunge
|
||||
|
||||
macha_N : N ; -- Kampf
|
||||
nika_N : N ; -- Sieg
|
||||
tima_N : N ; -- Ehre
|
||||
thalatta_N : N ; -- Meer
|
||||
gephyra_N : N ; -- Bruecke
|
||||
|
||||
-- Masculina ending in -a_s*, -hs* BR 33
|
||||
|
||||
neanias_N : N ; -- Juengling
|
||||
polita_N : N ; -- Buerger
|
||||
dikasta_N : N ; -- Richter
|
||||
atreida_N : N ; -- Atride
|
||||
|
||||
-- Contracta of the A-declension
|
||||
|
||||
athena_N : N ; -- Athena
|
||||
gea_N : N ; -- Erde
|
||||
hermea_N : N ; -- Hermes
|
||||
|
||||
-- O-declension
|
||||
|
||||
-- Nouns ending in -os* (Masc of Fem), -on (Neutr)
|
||||
|
||||
logos_N : N ; -- Wort, Rede
|
||||
demos_N : N ; -- Volk
|
||||
anthropos_N : N ; -- Mensch
|
||||
hodos_N : N ; -- Weg
|
||||
doron_N : N ; -- Geschenk
|
||||
-- ergon_N : N ;
|
||||
|
||||
-- Adjectives of A- or O-declination
|
||||
|
||||
dikaios_A : A ; -- gerecht
|
||||
neos_A : A ; -- neu
|
||||
idios_A : A ; -- eigen
|
||||
dikaios_A : A ; -- gerecht
|
||||
patrwos_A : A ; -- vaeterlich
|
||||
aisxros_A : A ; -- haesslich
|
||||
philos_A : A ; -- lieb
|
||||
delos_A : A ; -- offenbar
|
||||
lithinos_A : A ; -- steinern
|
||||
oligos_A : A ; -- wenig
|
||||
agathos_A : A ; -- gut
|
||||
|
||||
-- Contracta of the O-declension
|
||||
|
||||
-- Nouns and adjectives of 2 endings
|
||||
|
||||
nous_N : N ;
|
||||
osteon_N : N ;
|
||||
eunous_A : A ;
|
||||
|
||||
-- Adjectives (3-ending) of A- and O-declension
|
||||
|
||||
argyrous_A : A ;
|
||||
chrysous_A : A ;
|
||||
|
||||
-- Attical O-declension
|
||||
|
||||
news_N : N ;
|
||||
Meneleos_PN : PN ;
|
||||
ilews_A : A ;
|
||||
|
||||
-- Noun declension III
|
||||
|
||||
krathr_N : N ; -- stem in -r, -l BR 42
|
||||
rhtwr_N : N ;
|
||||
als_N : N ;
|
||||
vhr_N : N ;
|
||||
fylax_N : N ; -- gutturals -k, -g, -x BR 43
|
||||
aix_N : N ;
|
||||
gyps_N : N ; -- labials -p, -b, -f
|
||||
fleps_N : N ;
|
||||
esvhs_N : N ; -- dentals -t, -d, -v BR 44
|
||||
elpis_N : N ;
|
||||
caris_N : N ;
|
||||
swma_N : N ;
|
||||
ellhn_N : N ; -- stem in -n BR 45
|
||||
agwn_N : N ;
|
||||
poimhn_N : N ;
|
||||
daimwn_N : N ;
|
||||
gigas_N : N ; -- stem in -nt BR 46
|
||||
odoys_N : N ;
|
||||
gerwn_N : N ;
|
||||
|
||||
-- stems ending in -r with 3 ablautlevels BR 47
|
||||
pathr_N : N ;
|
||||
mhthr_N : N ;
|
||||
vygathr_N : N ;
|
||||
gasthr_N : N ;
|
||||
anhr_N : N ;
|
||||
|
||||
-- stems ending in -s BR 48
|
||||
genos_N : N ;
|
||||
eugenhs_A : A ;
|
||||
diogenhs_PN : PN ;
|
||||
periklhs_PN : PN ;
|
||||
philosopher_N : N ; -- filosofos_N : N ;
|
||||
|
||||
-- stems ending in i with ablaut e BR 49
|
||||
polis_N : N ;
|
||||
dynamis_N : N ;
|
||||
|
||||
-- stems ending in y with ablaut
|
||||
phcys_N : N ;
|
||||
asty_N : N ;
|
||||
hdys_A : A ;
|
||||
|
||||
-- pure stems ending in y
|
||||
icvys_N : N ;
|
||||
sys_N : N ;
|
||||
erinys : N ;
|
||||
pitys_N : N ;
|
||||
|
||||
-- stems ending in ey BR 52
|
||||
basileys_N : N ;
|
||||
|
||||
-- monosyllabic stems ending in ou, au, eu BR 53
|
||||
boys_N : N ;
|
||||
nays_N : N ;
|
||||
zeys_PN : PN ;
|
||||
|
||||
-- stems ending in oi and w BR 54
|
||||
peivw_N : N ;
|
||||
hrws_N : N ;
|
||||
|
||||
-- Adjectives of the 3rd declension:
|
||||
|
||||
-- BR 44: stem ending in -t,-d,-v
|
||||
acaris_A : A ; -- BR 44.5
|
||||
eyelpis_A : A ;
|
||||
apolis_A : A ;
|
||||
agnws_A : A ; -- BR 57, 1-ending
|
||||
penhs_A : A ;
|
||||
fygas_A : A ;
|
||||
apais_A : A ;
|
||||
makar_A : A ;
|
||||
pepaideykws_A : A ; -- BR 44.6
|
||||
|
||||
-- BR 45: stem ending in -n
|
||||
eydaimwn_A : A ;
|
||||
|
||||
-- BR 46: stem ending in -nt
|
||||
pas_A : A ;
|
||||
ekwn_A : A ;
|
||||
lywn_A : A ;
|
||||
lysas_A : A ;
|
||||
veis_A : A ;
|
||||
dys_A : A ;
|
||||
carieis_A : A ;
|
||||
|
||||
-- Verbs
|
||||
-- w-conjugation:
|
||||
-- a) verba vocalia, i.e. verbal stem ends in a vowel
|
||||
paideyw_V : V ; -- BR 91
|
||||
timaw_V : V ; -- BR 93, with contraction
|
||||
poiew_V : V ;
|
||||
doylow_V : V ;
|
||||
|
||||
-- b) verba muta, i.e. verbal stem ends in muta consonant (p,b,f | t,d,v | k,g,c)
|
||||
leipw_V : V ; -- BR 99 - BR 102
|
||||
elleipw_V : V ; -- prefix-verb en+leipw
|
||||
trepw_V : V ; -- BR 99.1
|
||||
grafw_V : V ;
|
||||
tribw_V : V ;
|
||||
diwkw_V : V ;
|
||||
arcw_V : V ;
|
||||
legw_V : V ;
|
||||
anytw_V : V ;
|
||||
peivw_V : V ;
|
||||
pseydw_V : V ;
|
||||
|
||||
typtw_V : V ;
|
||||
kryptw_V : V ;
|
||||
blabtw_V : V ;
|
||||
fylattw_V : V ;
|
||||
|
||||
ktizw_V : V ;
|
||||
nomizw_V : V ;
|
||||
swzw_V : V ;
|
||||
scizw_V : V ;
|
||||
evizw_V : V ;
|
||||
|
||||
-- c) verba liquida, i.e. verbal stem ends in liq.consonant (l,r) or nasal (m,n,(n)g)
|
||||
derw_V : V ;
|
||||
menw_V : V ;
|
||||
nemw_V : V ;
|
||||
angellw_V : V ;
|
||||
fainw_V : V ;
|
||||
|
||||
-- deponents
|
||||
veaomai_V : V ;
|
||||
acvomai_V : V ;
|
||||
|
||||
-- mi-conjugation:
|
||||
tivhmi_V : V ; -- BR 129 mi-verbs with reduplication in the present stem
|
||||
ihmi_V : V ;
|
||||
didwmi_V : V ;
|
||||
-- isthmi_V : V ;
|
||||
|
||||
deiknymi_V : V ;
|
||||
|
||||
-- Greek tablets:
|
||||
pythagoras_PN : PN ;
|
||||
advise_V2V : V2V ;
|
||||
abstain_V2 : V2 ;
|
||||
letter_N : N ;
|
||||
eimi_V : V ;
|
||||
|
||||
pistos_A2 : A2 ;
|
||||
} ;
|
||||
229
lib/src/ancient_greek/BornemannGrc.gf
Normal file
229
lib/src/ancient_greek/BornemannGrc.gf
Normal file
@@ -0,0 +1,229 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
-- in mkN we may write "...os" instead of "...os*"
|
||||
|
||||
concrete BornemannGrc of Bornemann =
|
||||
CatGrc ** open ParadigmsGrc, (M=MorphoGrc) in {
|
||||
|
||||
flags optimize=values ;
|
||||
|
||||
lin
|
||||
|
||||
|
||||
-- A-declension, examples from Bornemann/Risch, Griechische Grammatik, BR 32
|
||||
|
||||
idea_N = mkN "i)de'a_" ; -- "i)de'a_" Form, Gestalt
|
||||
chora_N = mkN "cw'ra_" ; -- "cw'ra_" Land
|
||||
stratia_N = mkN "stratia_'" ; -- "stratia_'" Heer
|
||||
doxa_N = mkN "do'xa" "do'xhs*" ; -- "do'xa." Meinung
|
||||
glotta_N = mkN "glw~tta" "glw'tths*"; -- "glw~tta." Zunge
|
||||
macha_N = mkN "ma'ch" ; -- "ma.'ca_" Kampf
|
||||
nika_N = mkN "ni'kh" "ni'khs*" "ni~kai" ; -- "ni_'ka_" Sieg
|
||||
tima_N = mkN "timh'" ; -- "ti_mh'" Ehre
|
||||
thalatta_N = mkN "va'latta" "vala'tths*"; -- "va'latta." Meer
|
||||
gephyra_N = mkN "ge'fyra" "gefy'ras*"; -- "ge'phu_ra." Bruecke
|
||||
|
||||
-- Masculina ending in -a_s*, -hs* BR 33
|
||||
neanias_N = mkN "neani'as*" ; -- "nea_ni.'a_" Juengling
|
||||
polita_N = mkN "poli'ths*" "poli~tai" ; -- "poli_'ta_", Buerger accentChange i~ta, i~tai
|
||||
dikasta_N = mkN "dikasth's*" ; -- Richter
|
||||
atreida_N = mkN "A)trei='dhs*" "A)trei=~dai" ; -- Atride
|
||||
-- Contracta of the A-declension: -aa_ > a_, ea_ > h BR 34
|
||||
athena_N = mkN "A)vhna~" ; -- Athena
|
||||
gea_N = mkN "gh~" ; -- Erde
|
||||
hermea_N = mkN "E(rmh~s*" ; -- Hermes
|
||||
|
||||
-- O-declension
|
||||
|
||||
-- Nouns ending in -os or -on: BR 36
|
||||
logos_N = mkN "lo'gos" ; -- Wort, Rede
|
||||
demos_N = mkN "dh~mos" ; -- Volk
|
||||
anthropos_N = mkN "a)'nvrwpos" "a)nvrw'poy" masculine ; -- Mensch
|
||||
hodos_N = mkN feminine (mkN "o(do's*") ; -- Weg
|
||||
doron_N = mkN "dw~ron" ; -- Geschenk
|
||||
-- ergon_N = mkN "e)'rgon" ; -- TESTWORD
|
||||
|
||||
-- 3 ending adjectives:
|
||||
|
||||
dikaios_A = mkA "di'kaios*" "dikai'a_s*" ; -- gerecht
|
||||
neos_A = mkA "ne'os" ;
|
||||
idios_A = mkA "i)'dios" ;
|
||||
patrwos_A = mkA "patrw|~os" ; -- vaeterlich
|
||||
aisxros_A = mkA "ai)sxro's" ; -- haesslich
|
||||
philos_A = mkA "fi'los" ;
|
||||
delos_A = mkA "dh~los" ;
|
||||
lithinos_A = mkA "li'vinos" ;
|
||||
oligos_A = mkA "o)li'gos" ;
|
||||
agathos_A = mkA "a)gavo's" ; -- gut
|
||||
|
||||
nous_N = mkN "noy~s*" ;
|
||||
osteon_N = mkN "o)stoy~n" ; -- Knochen
|
||||
eunous_A = mkA "ey)'noys" ;
|
||||
|
||||
argyrous_A = mkA "a)rgyroy~s" ; -- silvern
|
||||
chrysous_A = mkA "crysoy~s" ; -- golden
|
||||
|
||||
|
||||
news_N = mkN "new's*" ; -- nounOs added 2/16
|
||||
Meneleos_PN = mkPN (mkN "Menele'os") singular ;
|
||||
ilews_A = mkA "i_('lews" ;
|
||||
|
||||
-- Declension III for nouns and adjectives
|
||||
-- BR 42: stem ending in -r or -l
|
||||
krathr_N = mkN "kra_th'r" "kra_th~ros" masculine ;
|
||||
rhtwr_N = mkN "rh'twr" "rh'toros" masculine ;
|
||||
als_N = mkN "a('ls" "a(lo's" masculine ;
|
||||
vhr_N = mkN "vh'r" "vhro's" masculine ;
|
||||
-- BR 43: stem ending in -k,-g,-c or -p,-b,-f
|
||||
fylax_N = mkN "fy'lax" "fy'lakos" masculine ;
|
||||
aix_N = mkN "ai)~x" "ai)go's" feminine ;
|
||||
gyps_N = mkN "gy_'ps" "gy_po's" masculine ;
|
||||
fleps_N = mkN "fle'ps" "flebo's" feminine ;
|
||||
-- BR 44: stem ending in -t,-d,-v
|
||||
esvhs_N = mkN "e)svh's" "e)svh~tos" feminine ;
|
||||
elpis_N = mkN "e)lpi.'s" "e)lpi'dos" feminine ;
|
||||
caris_N = mkN "ca'ri.s" "ca'ritos" feminine ; --
|
||||
swma_N = mkN "sw~ma" "sw'matos" neuter ;
|
||||
-- BR 45: stem ending in -n
|
||||
ellhn_N = mkN "E('llhn" "E('llhnos" masculine ;
|
||||
agwn_N = mkN "a)gw'n" "a)gw~nos" masculine ;
|
||||
poimhn_N = mkN "poimh'n" "poime'nos" masculine ; -- sgVoc falsch, datPl falsch
|
||||
daimwn_N = mkN "dai'mwn" "dai'monos" masculine ; -- datPl daimousi; richtig daimosi
|
||||
-- BR 46: stem in -nt
|
||||
gigas_N = mkN "gi'ga_s" "gi'gantos" masculine ; -- sgVoc falsch
|
||||
odoys_N = mkN "o)doy's" "o)do'ntos" masculine ; --
|
||||
gerwn_N = mkN "ge'rwn" "ge'rontos" masculine ; --
|
||||
|
||||
-- Adjectives of 3rd declension:
|
||||
-- BR 44: stem ending in -t,-d,-v
|
||||
-- acaris_A = mkA "a)'caris" "a)ca'ritos" ; -- TODO adj3
|
||||
-- eyelpis_A = mkA "ey)'elpis" "ey)elpi'dos" ; -- TODO adj3
|
||||
-- apolis_A = mkA "a)'polis" "a)po'lidos" ; -- TODO adj3
|
||||
-- agnws_A = mkA "a)gnw's" "a)gnw~tos" ; -- BR 57, 1-ending TODO adj3
|
||||
-- penhs_A = mkA "pe'nhs" "pe'nhtos" ; -- TODO adj3/adjustAccent
|
||||
-- fygas_A = mkA "fyga's" "fyga'dos" ; -- TODO adj3
|
||||
-- apais_A = mkA "a)'pais" "a)'paidos" ; -- TODO adj3
|
||||
-- makar_A = mkA "ma'kar" "ma'karos" ; -- TODO adj3
|
||||
pepaideykws_A = mkA "pepaideykw's" ; -- BR 44.6
|
||||
|
||||
-- BR 45: stem ending in -n
|
||||
eydaimwn_A = mkA "ey)dai'mwn" "ey)dai'monos" ; -- datPl daimousi; richtig daimosi
|
||||
|
||||
-- BR 46.b
|
||||
pas_A = mkA "pa~s" "panto's" ;
|
||||
ekwn_A = mkA "e(kw'n" "e(ko'ntos" ;
|
||||
lywn_A = mkA "ly_'wn" "ly_'ontos" ;
|
||||
lysas_A = mkA "ly_'sas" "ly_'santos" ;
|
||||
veis_A = mkA "vei's" "vento's" ;
|
||||
dys_A = mkA "dy_'s" "dy'ntos" ;
|
||||
carieis_A = mkA "cari'eis" "cari'entos" ;
|
||||
|
||||
-- BR 47: stems ending in -r with 3 ablautlevels
|
||||
pathr_N = mkN "path'r" "patro's" "pate'ra" masculine ;
|
||||
mhthr_N = mkN "mh'thr" "mhtro's" "mhte'ra" feminine ;
|
||||
vygathr_N = mkN "vyga'thr" "vygatro's" "vygate'ra" feminine ;
|
||||
gasthr_N = mkN "gasth'r" "gastro's" feminine ;
|
||||
anhr_N = mkN "a)nh'r" "a)ndro's" "a)'ndra" masculine ;
|
||||
|
||||
-- BR 48: stems ending in -s
|
||||
genos_N = mkN "ge'nos" "ge'noys" neuter ;
|
||||
diogenhs_PN = mkPN "Dioge'nhs" masculine ; -- mkN "Dioge'nhs" "Dioge'noys" masculine ;
|
||||
periklhs_PN = mkPN "Periklh~s" masculine ;
|
||||
philosopher_N = mkN "filo'sofos" "filoso'foy" masculine ; -- filosofos
|
||||
-- For stems ending a vowel:
|
||||
-- BR 49: -i with ablaut -e:
|
||||
polis_N = mkN "po'lis" "po'lews" feminine ;
|
||||
dynamis_N = mkN "dy'namis" "dyna'mews" feminine ;
|
||||
-- -y with ablaut -e:
|
||||
phcys_N = mkN "ph~cys" "ph'cews" feminine ; -- TODO to a)'sty
|
||||
asty_N = mkN "a)'sty" "a)'stews" neuter ;
|
||||
-- BR 51: -y_ or -y without ablaut:
|
||||
icvys_N = mkN "icvy~s" "icvy'os" masculine ;
|
||||
sys_N = mkN "sy~s" "syo's" masculine ; -- and feminine
|
||||
erinys_N = mkN "E)ri_ny_'s" "E)ri_ny'os" feminine ;
|
||||
pitys_N = mkN "pi'ty.s" "pi'tyos" feminine ;
|
||||
-- BR 52: stems ending in -ey
|
||||
basileys_N = mkN "basiley's" "basile'ws" masculine ;
|
||||
-- BR 53: -oy, -ay, -ey
|
||||
boys_N = mkN "boy~s" "boo's" masculine ; -- also: feminine
|
||||
nays_N = mkN "nay~s" "new's" feminine ;
|
||||
-- zeys_PN = mkPN (mkN "zey's" "dio's" masculine) singular ; -- TODO: zey'n > di'a ; no Pl
|
||||
zeys_PN = mkPN "Zey's*" "Dio's*" "Dii='" "Di'a" "Zey~" masculine ;
|
||||
-- BR 54: -w
|
||||
peivw_N = mkN "peivw'" "peivoy~s" feminine ;
|
||||
hrws_N = mkN "h('rws" "h('rwos" masculine ;
|
||||
|
||||
-- W-Conjugation
|
||||
-- a) verba vocalia
|
||||
paideyw_V = mkV "paidey'w" ;
|
||||
timaw_V = mkV "tima'w" ; -- "timh'sw" ;
|
||||
poiew_V = mkV "poie'w" ; -- "poih'sw" ;
|
||||
doylow_V = mkV "doylo'w" ; -- "doylw'sw" ;
|
||||
|
||||
-- b) verba muta
|
||||
-- labial
|
||||
leipw_V = mkV "lei'pw" "lei'qw" "e)'lipa" "le'loipa" "le'leipmai" "e)lei'fvhn" "leipto's" ;
|
||||
elleipw_V = prefixV "e)'n" -- gf does not permit to reuse leipw_V: prefixV "e)'n" leipw_V ;
|
||||
(mkV "lei'pw" "lei'qw" "e)'lipa" "le'loipa" "le'leipmai" "e)lei'fvhn" "leipto's") ;
|
||||
-- 1. simple ones (present stem = verbal stem)
|
||||
trepw_V = mkV "tre'pw" ;
|
||||
grafw_V = mkV "gra'fw" ;
|
||||
tribw_V = mkV "tri_'bw" ;
|
||||
diwkw_V = mkV "diw'kw" ;
|
||||
arcw_V = mkV "a)'rcw" ;
|
||||
legw_V = mkV "le'gw" ;
|
||||
anytw_V = mkV "a(ny'tw" ;
|
||||
peivw_V = mkV "pei'vw" ;
|
||||
pseydw_V = mkV "psey'dw" ;
|
||||
|
||||
typtw_V = mkV "ty'ptw" ;
|
||||
kryptw_V = mkV "kry'ptw" ;
|
||||
blabtw_V = mkV "bla'ptw" ; -- stem blab !
|
||||
fylattw_V = mkV "fyla'ttw" ; -- stem fylak ! BUG with mC: tt>st
|
||||
|
||||
ktizw_V = mkV "kti'zw" ; -- j-stem cannot be guessed, need a good mkVerbW7mut !
|
||||
nomizw_V = mkV "nomi'zw" "nomiw~" "e)no'misa" "neno'mika" "neno'mismai" "e)nomi'svhn" "nomisto's" ;
|
||||
swzw_V = mkV "sw|'zw" ;
|
||||
scizw_V = mkV "sci'zw" ;
|
||||
evize_V = "e)vi'zw" ;
|
||||
|
||||
-- c) verba liquida
|
||||
derw_V = mkV "de'rw" ;
|
||||
menw_V = mkV "me'nw" ;
|
||||
nemw_V = mkV "ne'mw" ;
|
||||
angellw_V = mkV "a)gge'llw" ;
|
||||
fainw_V = mkV "fai'nw" ;
|
||||
-- fainw_V = mkV "fai'nw" "fanw~" "e)'fhna" "pe'fagka" "pe'fasmai" "e)fa'nhn" "fanto's";
|
||||
|
||||
--deponents
|
||||
veaomai_V = mkV "vea'omai" depMed ;
|
||||
acvomai_V = mkV "acvomai" depPass ;
|
||||
|
||||
-- Mi-Conjugation, present stem with reduplication:
|
||||
tivhmi_V = mkV "ti'vhmi" "vh'sw" "e)'vhka" "te'vhka" "kei~mai" "e)te'vhn" "veto's" ;
|
||||
-- ihmi_V = mkV "i('hmi" "h('sw" "h(~ka" "ei(~ka" "ei(~mai" "ei('vhn" "e(to's" ;
|
||||
didwmi_V = mkV "di'dwmi" "dw'sw" "e)'dwka" "de'dwka" "de'domai" "e)do'vhn" "doto's" ;
|
||||
-- isthmi_V = mkV "i('svhmi" "svh'sw" "e)'svhsa"
|
||||
-- Mi-Conjugation, present stem with -ny-
|
||||
deiknymi_V = mkV "dei'knymi" "dei'xw" "e)'deixa" "de'deica" "de'deigmai" "e)dei'cvhn" "deikto's" ;
|
||||
-- Mi-Conjugation, present stem as verbal root:
|
||||
-- "ei)mi'"
|
||||
|
||||
-- Example sentence: Greek school tablet, F.G.Kenyon
|
||||
-- Pyvagoras filosofos apobas kai grammata didaskwn syneboyleyen tois eaytoy mavhtais enaimonwn apecesvai.
|
||||
-- Pythagoras the philospher when going away and teaching letters advised his students to abstain from meat.
|
||||
|
||||
pythagoras_PN = mkPN (mkN "Pyva'goras") singular ;
|
||||
-- advise_V = prefixV "sy'n" (mkV "boyley'w") ;
|
||||
advise_V2V = mkV2V (prefixV "sy'n" (mkV "boyley'w")) datPrep ;
|
||||
abstain_V2 = mkV2 (prefixV "a)po'" (mkV "e)'cw")) genPrep ; -- apecw tina tinos + apecomai tinos V3/Vrefl?
|
||||
-- leave_V2 = dirV2 (prefixV "a)po'" (mkV "bai'nw")) ; -- LexiconGrc
|
||||
-- student_N = mkN masculine (mkN "mavhth's*") ; -- LexiconGrc, TODO check
|
||||
-- teach_V2 = mkV2 "dida'skw" ; -- LexiconGrc
|
||||
letter_N = mkN "gra'mma" "gra'mmatos" neuter ;
|
||||
eimi_V = lin V (MorphoGrc.eimi_V) ;
|
||||
|
||||
pistos_A2 = mkA2 (mkA "pisto's") datPrep ;
|
||||
} ;
|
||||
|
||||
|
||||
145
lib/src/ancient_greek/BugGrc.gf
Normal file
145
lib/src/ancient_greek/BugGrc.gf
Normal file
@@ -0,0 +1,145 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
resource BugGrc = ParamX ** open (Ph=PhonoGrc), ResGrc, (P=Predef) in {
|
||||
|
||||
-- flags optimize = noexpand ; -- optimize=all is impossible with addAccent
|
||||
flags optimize = noexpand;
|
||||
oper
|
||||
vowel : pattern Str = Ph.vowel ; -- Syntax problem: I still have to use #Ph.vowel, not #vowel
|
||||
toWord : Str -> Word = ResGrc.toWord ; -- else I get a ConcreteLazy error: missing pattern
|
||||
{-
|
||||
-- I. problematic calls are:
|
||||
call1 : Str = toStrNs1 (toWord "ge'ne") "os*" ; -- 500ms
|
||||
call2 : Str = toStrNs2 (toWord "ge'ne") "os*" ; -- 12ms
|
||||
call3 : Str = toStrNs3 (toWord "ge'ne") "os*" ; -- 12ms
|
||||
call4 : Str = toStrNs4 (toWord "ge'ne") "os*" ; -- 450ms
|
||||
|
||||
-- cc Id (toStrNs1) ; -- loops(?)
|
||||
-- ...
|
||||
-- cc Id (toStrNs4) ; -- loops(?)
|
||||
|
||||
toStrNs1 : Word -> Str -> Str = -- bad
|
||||
\w,e -> let we = adjustAccent <w, toNEnding e> ;
|
||||
sl : Soundlaw =
|
||||
case e of { #Ph.vowel + _ => \xy -> (cV (dS xy)) ;
|
||||
_ => \xy -> xy } ;
|
||||
we' = sl we
|
||||
in toStr (concat we') ;
|
||||
|
||||
toStrNs2 : Word -> Str -> Str = -- ok
|
||||
\w,e -> let we = adjustAccent <w, toNEnding e> ;
|
||||
we' : Word*NEnding = case e of { #Ph.vowel + _ => (cV (dS we)) ;
|
||||
_ => we } ;
|
||||
in toStr (concat we') ;
|
||||
|
||||
slOrig : Soundlaw = \ue -> case (toStr ue.p2) of { #Ph.vowel + _ => (cV (dS ue)) ; _ => ue } ;
|
||||
toStrNs3 : Word -> Str -> Str = -- ok
|
||||
\w,e -> let we = adjustAccent <w, toNEnding e> ;
|
||||
sl : Soundlaw = slOrig ;
|
||||
we' = sl we ;
|
||||
in toStr (concat we') ;
|
||||
|
||||
toStrNs4 : Word -> Str -> Str = -- bad
|
||||
\w,e -> let we = adjustAccent <w, toNEnding e> ;
|
||||
sl : Soundlaw = -- = slOrig
|
||||
\ue -> case (toStr ue.p2) of { #Ph.vowel + _ => (cV (dS ue)) ; _ => ue } ;
|
||||
we' = sl we ;
|
||||
in toStr (concat we') ;
|
||||
|
||||
Id : (Word -> Str -> Str) -> (Word -> Str -> Str) = \x -> x ;
|
||||
|
||||
-- Also note: cc toStrNs1 (toWord "ge'ne") "o*s" ; -- "o*s" instead o "os*" !
|
||||
-- shows
|
||||
|
||||
-- ====================================================================================
|
||||
-- II. Embedding further: try building part of a noun paradigm using the toStrNs-functions
|
||||
-- in some variations, and define . Then the slowdown muliplies(?) if the problem is nested.
|
||||
--
|
||||
-- cc the following call5 under various sl:Soundlaw, definied outside toStrNs (ls1 - ls6)
|
||||
-- used in the let sl : Soundlaw = ... of toStrNs
|
||||
-- either a) by let sl : Soundlaw = slX (X=1,..,6)
|
||||
-- or b) by let sl : Soundlaw = ... defining term of lsX .
|
||||
|
||||
call5 : {PlGen : Str ; SgDat : Str} = noun3s "ge'nos*" "genoy~s*" ResGrc.Neutr ;
|
||||
|
||||
toStrNs : Word -> Str -> Str =
|
||||
\w,e -> let we = adjustAccent <w, toNEnding e> ;
|
||||
sl : Soundlaw = sl6 ; -- 30ms
|
||||
-- sl : Soundlaw = \ue -> (cV (dS (adjustAccent ue))) ; -- 2000ms
|
||||
--
|
||||
-- sl : Soundlaw = sl5 ; -- 12ms
|
||||
-- sl : Soundlaw = \ue -> case (toStr ue.p2) of { #Ph.vowel + _ => (cV (dS ue)) ; _ => ue } ; -- 730ms
|
||||
--
|
||||
-- sl : Soundlaw = sl4 ; -- 20ms
|
||||
-- sl : Soundlaw = \we -> case (toStr we.p2) of { #Ph.vowel + _ => we ; _ => we } ; -- Bug we_25
|
||||
-- sl : Soundlaw = \ue -> case (toStr ue.p2) of { #Ph.vowel + _ => ue ; _ => ue } ; -- 20ms
|
||||
--
|
||||
-- sl : Soundlaw = sl3 ; -- 50ms
|
||||
-- sl : Soundlaw = toSL' (\xy -> case xy of {<x+"e","o"+y> => <x,"oy"+y> ; _ => xy }) ; -- 50ms
|
||||
we' = sl we ;
|
||||
in toStr (concat we') ;
|
||||
|
||||
sl1 : Soundlaw = (\xy -> xy) ; -- identity
|
||||
sl2 : Soundlaw = toSL' (\xy -> xy) ; -- identity
|
||||
sl3 : Soundlaw = toSL' (\xy -> case xy of {<x+"e","o"+y> => <x,"oy"+y> ; _ => xy }) ;
|
||||
sl4 : Soundlaw = \we -> case (toStr we.p2) of { #Ph.vowel + _ => we ; _ => we } ; -- identity
|
||||
sl5 : Soundlaw = \ue -> case (toStr ue.p2) of { #Ph.vowel + _ => (cV (dS ue)) ; _ => ue } ;
|
||||
sl6 : Soundlaw = \ue -> (cV (dS (adjustAccent ue))) ; -- 900ms
|
||||
|
||||
noun3s : Str -> Str -> Gender -> { SgDat : Str ; PlGen : Str } = \genos, genoys, g ->
|
||||
let
|
||||
-- BR 48: stems ending in s; input needs -s* at the end
|
||||
w = toWord genos ;
|
||||
syl = w.s ;
|
||||
stem : Str = case genoys of {
|
||||
stm + ("oy's*"|"oy~s*") => stm + "e";
|
||||
_ => Predef.tk 4 genoys + "e" } ;
|
||||
-- toStrNs : Word -> Str -> Str = toStrNs; -- does not(?) compile
|
||||
ge'ne:Word = let stm : Word = toWord stem
|
||||
in case stm.a of { NoAccent => toWord (addAccentW w.a stm) ;
|
||||
_ => stm } ;
|
||||
genei = toStrNs ge'ne (endingsN3!Sg!Dat!g!syl) ; -- Accent: gene'+wn > genw~n
|
||||
genwn = toStrNs ge'ne (endingsN3!Pl!Gen!g!syl) ; -- not: ge'ne+wn > ge'nwn
|
||||
in { SgDat = genei ; PlGen = genwn } ;
|
||||
-}
|
||||
-- III. Finally, if you uncomment -- toStrNs in noun3s, it seems not to compile ...
|
||||
|
||||
{- Generic overwriting of table slots does not work in GF:
|
||||
|
||||
exception : (P:PType) -> (V:Type) -> (p:P) -> (v:V) -> (P => V) -> (P => V) =
|
||||
\P,V,p,v,t -> table { p => v ; x => t ! x } ;
|
||||
|
||||
updateAdj : (AForm => Str) -> (AForm => Str) =
|
||||
\adj -> exception AForm Str (AF Masc Sg Nom) "new" adj ;
|
||||
|
||||
updateMSN : (AForm => Str) -> (AForm => Str) = -- nongeneric; this works
|
||||
\adj -> table { (AF Masc Sg Nom) => "new" ; form => adj ! form } ;
|
||||
|
||||
equal : (P:PType) -> P -> P -> Bool =
|
||||
\P,p,q -> case q of { p => True ; _ => False } ;
|
||||
|
||||
eq : (P:PType) -> (P*P) => Bool =
|
||||
\P -> table (P*P) { <p,p> => True ; _ => False } ;
|
||||
|
||||
Lang> cc exception
|
||||
\P_205,V_206,p_207,v_208,t_209 -> table P_205 {
|
||||
^^^^^ p_210 => v_208;
|
||||
^^^^^
|
||||
x_211 => t_209 ! x_211
|
||||
}
|
||||
-}
|
||||
|
||||
eqParam : (P:PType) -> P -> P -> Predef.PBool =
|
||||
\P,p,q -> Predef.eqStr ((Predef.show P) p) ((Predef.show P) q);
|
||||
|
||||
-- cc eqParam ResGrc.Gender ResGrc.Fem ResGrc.Masc
|
||||
-- Predef.PFalse
|
||||
|
||||
|
||||
exception : (P:PType) -> (V:Type) -> (p:P) -> (v:V) -> (P => V) -> (P => V) =
|
||||
\P,V,p,v,t -> \\q => table { Predef.PTrue => v ; Predef.PFalse => t ! q } ! (eqParam P p q) ;
|
||||
|
||||
|
||||
tab1 : ResGrc.Gender => Str = \\c => "masc" ;
|
||||
tab2 : ResGrc.Gender => Str = exception ResGrc.Gender Str ResGrc.Fem "fem" tab1 ;
|
||||
}
|
||||
136
lib/src/ancient_greek/CatGrc.gf
Normal file
136
lib/src/ancient_greek/CatGrc.gf
Normal file
@@ -0,0 +1,136 @@
|
||||
--# -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} ;
|
||||
|
||||
-- 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 ;
|
||||
|
||||
}
|
||||
15
lib/src/ancient_greek/CombinatorsGrc.gf
Normal file
15
lib/src/ancient_greek/CombinatorsGrc.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
--# -path=.:alltenses:prelude
|
||||
|
||||
resource CombinatorsGrc = Combinators - [appCN, appCNc] with
|
||||
(Cat = CatGrc),
|
||||
(Structural = StructuralGrc),
|
||||
(Noun = NounGrc),
|
||||
(Constructors = ConstructorsGrc) **
|
||||
{
|
||||
oper
|
||||
appCN : CN -> NP -> NP
|
||||
= \cn,x -> mkNP the_Art (PossNP cn x) ;
|
||||
appCNc : CN -> [NP] -> NP
|
||||
= \cn,xs -> let np : NP = mkNP and_Conj xs
|
||||
in mkNP the_Art (PossNP cn np) ;
|
||||
}
|
||||
74
lib/src/ancient_greek/ConjunctionGrc.gf
Normal file
74
lib/src/ancient_greek/ConjunctionGrc.gf
Normal file
@@ -0,0 +1,74 @@
|
||||
--# -path=.:../abstract
|
||||
|
||||
concrete ConjunctionGrc of Conjunction =
|
||||
CatGrc ** open ResGrc, Coordination, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
ConjS = conjunctDistrSS ;
|
||||
|
||||
ConjAdv = conjunctDistrSS ;
|
||||
|
||||
ConjNP conj ss = -- TODO: adapt to proper nps later
|
||||
let
|
||||
bigNPs = conjunctDistrTable Case conj ss
|
||||
in
|
||||
{ s = \\c => bigNPs.s ! c } ** {
|
||||
a = conjAgr (agrP3 conj.n) ss.a ;
|
||||
e = \\_ => [] ;
|
||||
isPron = False
|
||||
} ;
|
||||
|
||||
ConjAP conj ss = conjunctDistrTable AForm conj ss ;
|
||||
|
||||
ConjCN conj ss =
|
||||
let bigCNs = conjunctDistrTable2 Number Case conj ss
|
||||
in
|
||||
{ s = bigCNs.s ;
|
||||
s2 = \\n,c => [] ;
|
||||
isMod = True ;
|
||||
rel = \\_ => [] ;
|
||||
g = Neutr -- irrelevant
|
||||
} ;
|
||||
|
||||
-- These fun's are generated from the list cat's.
|
||||
|
||||
BaseS = twoSS ;
|
||||
ConsS = consrSS comma ;
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS comma ;
|
||||
BaseNP x y =
|
||||
{ s1 = bigNP x ; s2 = bigNP y ; a = conjAgr x.a y.a } ;
|
||||
ConsNP x xs =
|
||||
{ s1 = \\c => (bigNP x) ! c ++ comma ++ xs.s1 ! c ;
|
||||
s2 = xs.s2 ;
|
||||
a = conjAgr x.a xs.a } ;
|
||||
BaseAP x y =
|
||||
{ s1 = bigAP x ; s2 = bigAP y } ;
|
||||
ConsAP x xs =
|
||||
{ s1 = \\a => (bigAP x) ! a ++ comma ++ xs.s1 ! a ;
|
||||
s2 = xs.s2 } ;
|
||||
BaseCN x y =
|
||||
{ s1 = bigCN x ; s2 = bigCN y } ;
|
||||
ConsCN x xs =
|
||||
{ s1 = \\n,c => bigCN x ! n ! c ++ comma ++ xs.s1 ! n ! c ;
|
||||
s2 = xs.s2 } ;
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
||||
[AP] = {s1,s2 : AForm => Str} ;
|
||||
[CN] = {s1,s2 : Number => Case => Str} ;
|
||||
|
||||
oper
|
||||
bigAP : AP -> AForm => Str =
|
||||
\ap -> \\a => ap.s ! a ; -- TODO: add objects of adjective
|
||||
bigNP : NP -> Case => Str =
|
||||
\np -> \\c => case np.isPron of { False => np.s ! c ; True => np.e ! c } ;
|
||||
bigCN : CN -> Number => Case => Str = -- TODO: add ..., *if* cn.rel is nonempty
|
||||
\cn -> \\n,c => cn.s2 ! n ! c ++ cn.s ! n ! c ; -- ++ comma ++ cn.rel ! n ;
|
||||
}
|
||||
|
||||
8
lib/src/ancient_greek/ConstructionGrc.gf
Normal file
8
lib/src/ancient_greek/ConstructionGrc.gf
Normal file
@@ -0,0 +1,8 @@
|
||||
--# -path=.:../abstract
|
||||
|
||||
concrete ConstructionGrc of Construction = CatGrc **
|
||||
open SyntaxGrc, SymbolicGrc, ParadigmsGrc,
|
||||
(L = LexiconGrc), (E = ExtraGrc), (G = GrammarGrc), (I = IrregGrc), (R = ResGrc), (N = NounGrc), Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
}
|
||||
3
lib/src/ancient_greek/ConstructorsGrc.gf
Normal file
3
lib/src/ancient_greek/ConstructorsGrc.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
--# -path=.:alltenses:prelude
|
||||
|
||||
resource ConstructorsGrc = Constructors with (Grammar = GrammarGrc) ;
|
||||
6
lib/src/ancient_greek/DocumentationGrc.gf
Normal file
6
lib/src/ancient_greek/DocumentationGrc.gf
Normal file
@@ -0,0 +1,6 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
-- documentation of Greek in Ancient Greek: the default introduced in LangGrc
|
||||
|
||||
concrete DocumentationGrc of Documentation = CatGrc **
|
||||
DocumentationGrcFunctor with (Terminology = TerminologyGrc) ;
|
||||
23
lib/src/ancient_greek/DocumentationGrcFunctor.gf
Normal file
23
lib/src/ancient_greek/DocumentationGrcFunctor.gf
Normal file
@@ -0,0 +1,23 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
incomplete concrete DocumentationGrcFunctor of Documentation = CatGrc ** open
|
||||
Terminology, -- the interface that generates different documentation languages
|
||||
ResGrc,
|
||||
ParadigmsGrc,
|
||||
(G = GrammarGrc),
|
||||
(S = SyntaxGrc),
|
||||
(L = LexiconGrc),
|
||||
Prelude,
|
||||
HTML
|
||||
in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
|
||||
lincat
|
||||
Inflection = {t : Str; s1,s2 : Str} ;
|
||||
Definition = {s : Str} ;
|
||||
Document = {s : Str} ;
|
||||
Tag = {s : Str} ;
|
||||
|
||||
-- partial, stolen from DocumentationGerFunctor.gf, HL
|
||||
}
|
||||
406
lib/src/ancient_greek/ExtraGrc.gf
Normal file
406
lib/src/ancient_greek/ExtraGrc.gf
Normal file
@@ -0,0 +1,406 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete ExtraGrc of ExtraGrcAbs = CatGrc, NumeralGrc[Sub1000000,tenthousand] **
|
||||
open ResGrc, Coordination, Prelude, (M=MorphoGrc), (Ph=PhonoGrc),
|
||||
(P=ParadigmsGrc), (Rel=RelativeGrc) in {
|
||||
lincat
|
||||
DemPron = { s : Gender => Number => Case => Str } ;
|
||||
|
||||
CNRefl =
|
||||
{ s : Number => Case => Str ; -- noun only
|
||||
s2 : Agr => Number => Case => Str ; -- attributes (pre- or postnominal)
|
||||
isMod : Bool ; -- attribute nonempty?
|
||||
rel : Number => Str ; -- relative clause (dep. on Agr ?)
|
||||
g : Gender } ;
|
||||
|
||||
NPRefl =
|
||||
{s : Agr => Case => Str ; -- reflexive and reflexive possessive use
|
||||
isPron : Bool ;
|
||||
e : Case => Str ; -- emphasized pronoun, or ignored
|
||||
a : Agr } ; -- We need: isPron: PronTon | PronAton | None
|
||||
|
||||
-- not used yet (reflexive possessive, specific participle?):
|
||||
APRefl = { s : Agr => AForm => Str } ;
|
||||
|
||||
lin
|
||||
NumDl = {s = \\_,_ => [] ; n = Dl ; isCard = False} ;
|
||||
|
||||
DetCNpost det cn = { -- o anvrwpos o agavos
|
||||
s = let n = det.n ; g = cn.g in
|
||||
\\c => det.s ! g ! c ++ cn.s ! n ! c ++ det.s ! g ! c ++ cn.s2 ! n ! c ++ cn.rel ! n ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag cn.g det.n P3
|
||||
} ; -- overgenerates since det may not be DefArt !
|
||||
|
||||
DetCNRefl det cn = {
|
||||
s = \\r,c => let n = det.n ; g = cn.g
|
||||
in det.s ! g ! c ++ cn.s2 ! r ! n ! c ++ cn.s ! n ! c ++ cn.rel ! n ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag cn.g det.n P3
|
||||
} ;
|
||||
|
||||
AdvNPRefl np adv = {
|
||||
s = \\r,c => np.s ! r ! c ++ adv.s ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
RelNPRefl np rs = {
|
||||
s = \\r,c => np.s ! r ! c ++ "," ++ rs.s ! np.a ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
ComplN2Refl n2 np = {
|
||||
s = n2.s ;
|
||||
s2 = -- noun + (refl) object + indir obj ; -- attribute
|
||||
\\a,n,c => (appPrep n2.c2 np) ++ n2.obj ! a ;
|
||||
isMod = True ;
|
||||
rel = \\n => [] ;
|
||||
g = n2.g
|
||||
} ;
|
||||
|
||||
-- BR 67 2a (ensure that the unemphasized pronoun follows then n)
|
||||
PossNPRefl cn np = { -- house of mine -- BR 67 2 a (unemphasized pronoun only)
|
||||
s = \\n,c => cn.s ! n ! c ++ case <np.isPron, np.a> of {
|
||||
<True,Ag g na p> => (M.mkPersPron g na p) ! Aton ! Gen ; _ => [] } ;
|
||||
s2= \\a,n,c => case <np.isPron, np.a> of { <True,Ag g na p> => [] ;
|
||||
_ => np.s ! a ! Gen } ++ cn.s2 ! a ! n ! c ;
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
PossCNRefl p cn = { -- BR 67 TODO: distinguish between Emph|UnEmph possessive ?
|
||||
s = cn.s ;
|
||||
s2 = \\a,n,c => case p.a of { Ag g' Sg _ => (cn.s2 ! a ! n ! c) ++ (p.s ! NPCase Ton Gen) ;
|
||||
_ => (p.s ! NPPoss cn.g n c) ++ (cn.s2 ! a ! n ! c) } ;
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
ComplSlashRefl vp np = insertObj (\\a => appPrepRefl vp.c2 np a) vp ;
|
||||
|
||||
-- Memo: AForm = AF Gender Number Case ;
|
||||
-- Agr = Ag Gender Number Person ; -- BR 257: also Case, for AcI, AcP
|
||||
|
||||
-- PartVP = PartPresVP PPos ;
|
||||
|
||||
-- adjectival attributive use of participle : Pol -> VP -> AP
|
||||
-- (nonreflexive: vp.obj ! DefaultAgr)
|
||||
PartPresVP p vp = { s = \\af => (partTmpVP GPres p vp) ! (Ag Masc Sg P3) ! af } ;
|
||||
PartAorVP p vp = { s = \\af => (partTmpVP GAor p vp) ! (Ag Masc Sg P3) ! af } ;
|
||||
PartPerfVP p vp = { s = \\af => (partTmpVP GPerf p vp) ! (Ag Masc Sg P3) ! af } ;
|
||||
PartFutVP p vp = { s = \\af => (partTmpVP GFut p vp) ! (Ag Masc Sg P3) ! af } ;
|
||||
|
||||
-- A more general ParticpleNP depending on Temp and Pol seems inappropriate,
|
||||
-- since the participle leaves the relation to the main verb open; via the aspect of
|
||||
-- the main tenses, one roughly has (BR 220)
|
||||
-- PartPres = TSimul, PartAor = TAnter, PartPerf = TSimul, PartFut = inverse TAnter
|
||||
|
||||
-- adverbial use of participle : NP -> Pol -> VP -> NP (reflexive: vp.obj ! np.a)
|
||||
-- CHECK: position of negation and vp.adv?
|
||||
PartPresNP np p vp = partNP np GPres p vp ;
|
||||
PartAorNP np p vp = partNP np GAor p vp ;
|
||||
PartFutNP np p vp = partNP np GFut p vp ;
|
||||
PartPerfNP np p vp = partNP np GPerf p vp ;
|
||||
|
||||
SlashV2VNPRefl vv np vp =
|
||||
insertObjPre (\\a => vv.c2.s ++ np.s ! a ! vv.c2.c)
|
||||
(insertObjc (\\a => infVP vp a) (predV2 vv)) ** {c2 = vp.c2} ;
|
||||
|
||||
ACP v2 np p vp = -- accusative cum (pres.) participle (if v2.c2 = Acc!)
|
||||
let g = genderAgr np.a ; -- Sketch only !
|
||||
n = numberAgr np.a ;
|
||||
v2p = predV v2 ;
|
||||
in insertObj (\\agr => np.s ! Acc ++ (PartPresVP p vp).s ! (AF g n Acc)) v2p ;
|
||||
|
||||
-- Additional pronouns are needed since ReflPron agrees with the subject in gender.
|
||||
|
||||
iFem_Pron = M.mkPron Fem Sg P1 ;
|
||||
youSgFem_Pron = M.mkPron Fem Sg P2 ;
|
||||
weFem_Pron = M.mkPron Fem Pl P1 ;
|
||||
youPlFem_Pron = M.mkPron Fem Pl P2 ;
|
||||
theyFem_Pron = M.mkPron Fem Pl P3 ;
|
||||
theyNeutr_Pron = M.mkPron Neutr Pl P3 ;
|
||||
|
||||
-- Additional NP-constructions:
|
||||
{-
|
||||
UsePronEmph p =
|
||||
{ s = \\o,c => p.s ! NPCase Ton c ; -- emphasized personal pronoun
|
||||
isPron = True ;
|
||||
a = p.a } ;
|
||||
|
||||
UsePronUnEmph p =
|
||||
{ s = \\o,c => p.s ! NPCase Aton c ; -- unemphasized personal pronoun
|
||||
isPron = True ;
|
||||
a = p.a } ;
|
||||
-}
|
||||
-- DefArt + Inf|Adv|AP ... Nominalizations (TODO: dependencies on Subj.agr)
|
||||
|
||||
InfPres vp = { s= \\c => artDef ! Neutr ! Sg ! c ++ vp.obj ! (Ag Neutr Sg P3)
|
||||
++ vp.s ! VPInf GPres ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag Neutr Sg P3 } ;
|
||||
|
||||
InfAor vp = { s = \\c => artDef ! Neutr ! Sg ! c ++ vp.obj ! (Ag Neutr Sg P3)
|
||||
++ vp.s ! VPInf GAor ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag Neutr Sg P3 } ;
|
||||
|
||||
InfPerf vp = { s = \\c => artDef ! Neutr ! Sg ! c ++ vp.obj ! (Ag Neutr Sg P3)
|
||||
++ vp.s ! VPInf GPerf ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag Neutr Sg P3 } ;
|
||||
|
||||
ApposPN pn cn = let ag = cn.g ; -- cn.g = ag ??
|
||||
an = pn.n ;
|
||||
in {s = \\c => pn.s ! c ++ ho_Quantifier.s ! an ! ag ! c
|
||||
++ cn.s2 ! an ! c
|
||||
++ cn.s ! an ! c
|
||||
++ cn.rel ! an ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag ag an P3 } ;
|
||||
|
||||
ApposPron pr cn = let ag = cn.g ; -- cn.g = pn.g ??
|
||||
an = numberAgr pr.a ;
|
||||
in {s = \\c => pr.s ! NPCase Ton c ++ ho_Quantifier.s ! an ! ag ! c --TODO aytoys??
|
||||
++ cn.s2 ! an ! c
|
||||
++ cn.s ! an ! c ++ cn.rel ! an ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag ag an P3} ;
|
||||
|
||||
-- the greek possessive pronoun is an adjective rather than a determiner
|
||||
PossCN p cn = { -- BR 67 TODO: distinguish between Emph|UnEmph possessive ?
|
||||
s = cn.s ;
|
||||
s2 = \\n,c => case p.a of { Ag g' Sg _ => (cn.s2 ! n ! c) ++ (p.s ! NPCase Ton Gen) ;
|
||||
_ => (p.s ! NPPoss cn.g n c) ++ (cn.s2 ! n ! c) } ;
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
-- the reflexive possessive relation, i.e. CN of one's own = eautoy CN, is implemented by
|
||||
-- the following ReflCN : CN -> CN; note that reflPron is not a Pron or NP.
|
||||
|
||||
ReflCN cn = { -- TODO: ensure that relfPron comes before n ??
|
||||
-- had been: s = \\a,n,c => M.reflPron ! a ! Gen ++ cn.s ! a ! n ! c ;
|
||||
s = cn.s ;
|
||||
s2 = \\a,n,c => cn.s2 ! n ! c ++ M.reflPron ! a ! Gen ;
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
|
||||
DemNumPre dem num cn = let g = cn.g ; n = num.n ; art = M.artDef
|
||||
in { s = \\c => dem.s!g!n!c ++ art!g!n!c ++ num.s!g!c ++ cn.s2!n!c ++ cn.s!n!c ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag g n P3
|
||||
} ;
|
||||
DemNumPost dem num cn = let g = cn.g ; n = num.n ; art = M.artDef
|
||||
in { s = \\c => art!g!n!c ++ cn.s2!n!c ++ cn.s!n!c ++ dem.s!g!n!c ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag g n P3
|
||||
} ;
|
||||
|
||||
-- Relative Clauses
|
||||
-- TODO: preposition stranding and empty relative, if they exist
|
||||
|
||||
-- Additional VP-constructions:
|
||||
|
||||
-- in many languages, combine a V2 (resp.V3) with a reciprocal to get a V (resp.V2)
|
||||
-- with plural subject (resp.object) [TODO: enforce the plural - we use refl for Sg]:
|
||||
|
||||
ReciVP v = insertObj (table { Ag g Pl p => v.c2.s ++ M.reciPron ! g ! v.c2.c ;
|
||||
agr => v.c2.s ++ M.reflPron !agr! v.c2.c } ) v ;
|
||||
|
||||
-- Additional structural words:
|
||||
|
||||
so8big_AP = { s = table { AF g n c => M.tosoytos.s ! g ! n ! c } } ; -- tosoytos BR 68 6
|
||||
such_AP = { s = table { AF g n c => M.toioytos.s ! g ! n ! c } } ; -- toioytos BR 68 6
|
||||
|
||||
-- Demonstrative pronouns: BR 68
|
||||
this_Pron = -- BR 68 1 o'de
|
||||
{ s = \\g,n,c => let ho : Str = (artDef ! g ! n ! c)
|
||||
in case ho of { #Ph.vowel + _ => M.a2 ho + "de" ;
|
||||
toys + "*" => toys + "de" ;
|
||||
_ => ho + "de" }
|
||||
} ;
|
||||
that_Pron = -- BR 68 2 oy~tos
|
||||
{ s = \\g,n,c => case c of {
|
||||
ResGrc.Voc => M.a2 (artDef!g!n!Nom + "te") ; -- HL
|
||||
_ => let ton : Str = M.dA (artDef ! g ! n ! c)
|
||||
in case ton of { "o(" => "oy('tos*" ;
|
||||
"h(" => "ay('th" ;
|
||||
"oi(" => "oy(~toi" ;
|
||||
"ai(" => "ay(~tai" ;
|
||||
t+("a"|"h")+n => M.a2 ("tay" + ton) ;
|
||||
_ => M.a2 ("toy" + ton) }
|
||||
}
|
||||
} ;
|
||||
yonder_Pron = -- BR 68 3 ekei~nos
|
||||
let autos = adjAO "e)kei~nos" ;
|
||||
in {s = \\g,n,c => case <g,n,c> of {<Neutr,Sg,Nom|Acc> => "e)kei~no" ;
|
||||
_ => autos.s ! AF g n c}
|
||||
};
|
||||
tosoytos_Pron = M.tosoytos ; -- { s = M.tosoutos } ; -- that big
|
||||
toioytos_Pron = M.toioytos ; -- { s : M.toioutos } ; -- of that kind
|
||||
|
||||
-- Additional Adverbs:
|
||||
|
||||
immediately_Adv = ss "ey)vy's*" ; -- BR 63 1
|
||||
near_Adv = ss "pe'las*" ; -- BR 63
|
||||
hardly_Adv = ss "mo'lis*" ; -- mo'gis
|
||||
enough_Adv = ss "a('lis*" ;
|
||||
for8free_Adv = ss ("dwrea'n" | "proi~ka") ; -- umsonst
|
||||
in8vain_Adv = ss "ma'thn" ;
|
||||
too8much_Adv = ss ("a)'gan" | "li'an") ;
|
||||
|
||||
nowhere_Adv = ss "oy)damoy~" ;
|
||||
together_Adv = ss "koinh|~" ;
|
||||
|
||||
elsewhere_Adv = ss "a)'llovi" ; -- BR 63 3
|
||||
elsewhere_from_Adv = ss "a)'lloven" ; -- -kis, -vi, -ven, -se
|
||||
elsewhere_to_Adv = ss "a)'llose" ;
|
||||
same_there_Adv = ss "ay)to'vi" ;
|
||||
same_there_from_Adv = ss "ay)to'ven" ;
|
||||
same_there_to_Adv = ss "ay)to'se" ;
|
||||
samePlace_Adv = ss "o(moy~" ;
|
||||
samePlace_from_Adv = ss "o(mo'ven" ;
|
||||
samePlace_to_Adv = ss "o(mo'se" ;
|
||||
home_Adv = ss "oi)'koi" ;
|
||||
home_from_Adv = ss "oi)'koven" ;
|
||||
home_to_Adv = ss "oi)'kade" ;
|
||||
outside_Adv = ss "vy'rasi" ;
|
||||
outside_from_Adv = ss "vy'raven" ;
|
||||
outside_to_Adv = ss "vy'raze" ;
|
||||
ground_at_Adv = ss "camai'" ;
|
||||
ground_from_Adv = ss "cama~ven" ;
|
||||
ground_to_Adv = ss "cama~ze" ;
|
||||
|
||||
how8often_IAdv = ss "posa'kis*" ; -- BR 73 4
|
||||
|
||||
one8times_Adv = ss "a('pax" ;
|
||||
two8times_Adv = ss "di's*" ;
|
||||
three8times_Adv = ss "tri's*" ;
|
||||
four8times_Adv = ss "tetra'kis*" ;
|
||||
five8times_Adv = ss "penta'kis*" ;
|
||||
six8times_Adv = ss "e(xa'kis*" ;
|
||||
seven8times_Adv = ss "e(pta'kis*" ;
|
||||
eight8times_Adv = ss "o)kta'kis*" ;
|
||||
nine8times_Adv = ss "e)na'kis*" ;
|
||||
ten8times_Adv = ss "deka'kis*" ;
|
||||
|
||||
initially_Adv = { s = variants{ "prw~ton" ; "th'n" ++ "prw'thn" } } ; -- BR 174
|
||||
somehow_Adv = ss "ti" ; -- BR 174
|
||||
|
||||
in_order_to_Subj = ss "i('na" ; -- BR 276 : ws, o'pws
|
||||
|
||||
--2 Numeral
|
||||
|
||||
-- number nouns: BR 73.4 dis myriades anvrwpwn
|
||||
|
||||
unit_N2 = P.mkN2 (P.mkN "mona's" "mona'dos" Fem) P.genPrep ;
|
||||
ten_N2 = P.mkN2 (P.mkN "deka's" "deka'dos" Fem) P.genPrep ;
|
||||
hundred_N2 = P.mkN2 (P.mkN "e(katosty's" "e(katosty'os" Fem) P.genPrep ;
|
||||
thousand_N2 = P.mkN2 (P.mkN "cilia's" "cilia'dos" Fem) P.genPrep ;
|
||||
tenthousand_N2 = P.mkN2 (P.mkN "myria's" "myria'dos" Fem) P.genPrep ;
|
||||
|
||||
lincat
|
||||
Sub10000 = {s : CardOrd => Str ; n : Number} ; -- TODO: constructors
|
||||
|
||||
lin -- d * 10000
|
||||
pot4 d = { s = \\f => d.s ! NAdv ++ (tenthousand ! f) ; n = Pl } ;
|
||||
pot4plus d m = {
|
||||
s = \\f => d.s ! NAdv ++ tenthousand ! f ++ "kai`" ++ m.s ! f ; n = Pl} ;
|
||||
|
||||
|
||||
{- Maybe add some transformations to the Lang-fragment, cf abstract/Transfer.gf:
|
||||
In particular, what about Medium voice? Or do we need a verbtype, and
|
||||
- select the form depending on the verbtype?
|
||||
- choose the voice depending on the reflexive pronoun
|
||||
-}
|
||||
MedVP v = predVmed v ;
|
||||
MedV2 v = { act = v.med ;
|
||||
med = v.med ; pass = v.pass ;
|
||||
vadj1 = v.vadj1 ; vadj2 = v.vadj2 ;
|
||||
vtype = DepMed ;
|
||||
c2 = v.c2 } ;
|
||||
|
||||
|
||||
oper
|
||||
predVmed : Verb -> ResGrc.VP = \v ->
|
||||
{
|
||||
s = table { VPFin t n p => v.med ! Fin t n p ;
|
||||
VPInf tmp => v.med ! Inf tmp ;
|
||||
VPPart tmp af => v.med ! (Part tmp af) ;
|
||||
VPImp (M.ImpF IPres n_p) => v.med ! M.Imp IPres n_p ;
|
||||
VPImp (M.ImpF IAor n_p) => v.med ! M.Imp IAor n_p ;
|
||||
VPImp (M.ImpF IPerf n_p) => v.med ! M.Imp IPerf n_p ;
|
||||
VPAdj1 a => v.vadj1.s ! a ;
|
||||
VPAdj2 a => v.vadj2.s ! a
|
||||
} ;
|
||||
neg = Pos ;
|
||||
obj = \\_ => [] ;
|
||||
adj = \\_,_ => [] ;
|
||||
adv = [] ;
|
||||
ext = []
|
||||
} ;
|
||||
|
||||
|
||||
-- TODO: add whoeverSgFem : RP etc. whoever + ClSlash : Cl
|
||||
|
||||
whoever : Number => Gender => Case => Str = -- BR 69 2
|
||||
let uncanonize : Str -> Str = \str -> case str of { s + "*" => s ; _ => str }
|
||||
in
|
||||
\\n,g,c => case <n,g,c> of {
|
||||
<Sg,Neutr,Nom|Acc> =>
|
||||
uncanonize (Rel.relPron ! n ! g ! c) ++ (M.dA (M.indefPron ! n ! g ! c)) ;
|
||||
_ => uncanonize (Rel.relPron ! n ! g ! c) + (M.dA (M.indefPron ! n ! g ! c))
|
||||
} ;
|
||||
|
||||
appPrepRefl : Preposition -> { s : Agr => Case => Str ;
|
||||
e : Case => Str ;
|
||||
isPron : Bool } -> Agr -> Str =
|
||||
\p,np,a -> if_then_Str np.isPron (p.s ++ np.e ! p.c) (p.s ++ np.s ! a ! p.c) ;
|
||||
|
||||
-- TODO: reflexive arguments (and those with a possessive) depend on agreement parameters
|
||||
-- add this to emphasized forms!
|
||||
|
||||
oper -- (nonreflexive) adjectival attributive use of participle
|
||||
partTmpVP : VTmp -> Pol -> CatGrc.VP -> Agr => AForm => Str = \vtmp,pol,vp ->
|
||||
let neg = negation ! pol.p ++ pol.s
|
||||
in \\agr,af => vp.obj ! agr ++ vp.adv ++ neg ++ vp.s ! VPPart vtmp af ;
|
||||
|
||||
-- (reflexive) adverbial use of particple
|
||||
partNP : NP -> VTmp -> Pol -> CatGrc.VP -> NP = \np,vtmp,pol,vp ->
|
||||
let
|
||||
ap : AForm => Str = partTmpVP vtmp pol vp ! np.a ;
|
||||
g = genderAgr np.a ; n = numberAgr np.a ;
|
||||
in lin NP {
|
||||
s = \\c => (if_then_Str np.isPron (np.e ! c) (np.s ! c)) ++ ap ! AF g n c ;
|
||||
isPron = False ;
|
||||
e = \\c => [];
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
-- lincat
|
||||
-- PartP = { s : VTmp => Polarity => Agr => AForm => Str } ;
|
||||
-- lin UsePart : VTmp -> Pol -> Part -> APRefl
|
||||
-- lin PartTmpVP vp =
|
||||
-- { s = \\vtmp,pol,agr,af => vp.obj ! agr ++ negation ! pol ++ vp.s ! VPPart vtmp af } ;
|
||||
|
||||
}
|
||||
162
lib/src/ancient_greek/ExtraGrcAbs.gf
Normal file
162
lib/src/ancient_greek/ExtraGrcAbs.gf
Normal file
@@ -0,0 +1,162 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
abstract ExtraGrcAbs = Extra, Numeral[Sub1000000] ** {
|
||||
|
||||
cat
|
||||
DemPron ;
|
||||
|
||||
CNRefl ; -- CN with reflexive attribute or object
|
||||
NPRefl ; -- NP depending on another NPs agreement: reflexive object, reflexive possessive
|
||||
-- herself ; her own CN ; many CN of her own CN
|
||||
-- o emayths adelfos = her own brother
|
||||
-- o tautys adelfos = her brother
|
||||
APRefl ; -- AP depending on Agr
|
||||
PartP ; -- Participle phrase, AP depending on VTmp (or aspect), Polarity, Agr
|
||||
|
||||
-- fun
|
||||
-- UsePart : VTmp -> Pol -> PartP -> APRefl ;
|
||||
-- PartTmpVP : VP -> PartP ;
|
||||
-- PartAPRefl : VP -> APRefl ;
|
||||
|
||||
fun
|
||||
NumDl : Num ;
|
||||
|
||||
DetCNpost : Det -> CN -> NP ; -- o anvropos o agavos + RelS
|
||||
|
||||
-- Construct NPs depending on another NPs agreement features:
|
||||
DetCNRefl : Det -> CNRefl -> NPRefl ;
|
||||
AdvNPRefl : NPRefl -> Adv -> NPRefl ;
|
||||
RelNPRefl : NPRefl -> RS -> NPRefl ;
|
||||
ComplN2Refl : N2 -> NP -> CNRefl ;
|
||||
PossNPRefl : CNRefl -> NPRefl -> CNRefl ;
|
||||
PossCNRefl : Pron -> CNRefl -> CNRefl ; -- (o) emos filos
|
||||
ComplSlashRefl : VPSlash -> NPRefl -> VP ; -- to V2 (one's own CN)
|
||||
|
||||
-- Participles exist in the main tenses only, leaving the temporal relation to the matrix
|
||||
-- verb undetermined. Roughly, the aspect of the main tense determines the relation (BR 220):
|
||||
-- PartPres = TSimul, PartAor = TAnter, PartPerf = TSimul, PartFut = inverse TAnter
|
||||
|
||||
-- PartVP = PartPresVP : VP -> AP of Extra.gf is implemented here using a default Agr (bad)
|
||||
PartPresVP : Pol -> VP -> AP ; -- for adjectival usage
|
||||
PartAorVP : Pol -> VP -> AP ;
|
||||
PartPerfVP : Pol -> VP -> AP ;
|
||||
PartFutVP : Pol -> VP -> AP ;
|
||||
|
||||
-- NP + active participle in main tense (adverbial usage with NP as implicit subject)
|
||||
PartPresNP : NP -> Pol -> VP -> NP ;
|
||||
PartAorNP : NP -> Pol -> VP -> NP ;
|
||||
PartPerfNP : NP -> Pol -> VP -> NP ;
|
||||
PartFutNP : NP -> Pol -> VP -> NP ;
|
||||
-- TODO: NP + medium or passive participle
|
||||
|
||||
SlashV2VNPRefl : V2V -> NPRefl -> VPSlash -> VPSlash ;
|
||||
|
||||
-- Additional pronouns are needed since ReflPron agrees with the subject in gender.
|
||||
iFem_Pron, youSgFem_Pron, weFem_Pron, youPlFem_Pron, theyFem_Pron, theyNeutr_Pron : Pron ;
|
||||
|
||||
-- Additional NP-constructions:
|
||||
|
||||
-- UsePronEmph : Pron -> NP ; -- emphasized personal pronoun
|
||||
-- UsePronUnEmph : Pron -> NP ; -- unemphasized personal pronoun
|
||||
|
||||
-- DefArtAPNP : AP -> NP ;
|
||||
|
||||
InfPres : VP -> NP ;
|
||||
InfAor : VP -> NP ;
|
||||
InfPerf : VP -> NP ;
|
||||
|
||||
ApposPN : PN -> CN -> NP ; -- Pyvagoras o filosofos
|
||||
ApposPron : Pron -> CN -> NP ; -- hmeis oi strathgoi
|
||||
|
||||
PossCN : Pron -> CN -> CN ; -- (o) emos filos
|
||||
ReflCN : CN -> CNRefl ; -- (ton) emautoy filon, one's own CN
|
||||
|
||||
PartCN : PartP -> CN -> CN ; -- BR 241 (but dont: DefArt + PartP + CN)
|
||||
|
||||
DemNumPre: DemPron -> Num -> CN -> NP ; -- BR 68 5 oytos o anvrwpos
|
||||
DemNumPost: DemPron -> Num -> CN -> NP ; -- BR 68 5 o anvrwpos ekeinos
|
||||
|
||||
ACP : V2 -> NP -> Pol -> VP -> VP ; -- accusative cum participle
|
||||
-- For AcI, NcI, Agr = Ag Gender Number Person also needs Case, BR 257
|
||||
|
||||
-- Additional VP-constructions:
|
||||
ReciVP : VPSlash -> VP ;
|
||||
MedVP : V2 -> VP ;
|
||||
MedV2 : V2 -> V2 ;
|
||||
|
||||
-- Additional AP-constructions:
|
||||
so8big_AP : AP ; -- positive forms { s : AForm => Str } only
|
||||
such_AP : AP ;
|
||||
|
||||
-- Additional Pronouns:
|
||||
this_Pron, that_Pron, yonder_Pron : DemPron ;
|
||||
tosoytos_Pron, toioytos_Pron : DemPron ; -- BR 68 6 better toioytos_A : A
|
||||
|
||||
-- Additional adverbs:
|
||||
|
||||
immediately_Adv : Adv ;
|
||||
near_Adv : Adv ;
|
||||
hardly_Adv : Adv ;
|
||||
enough_Adv : Adv ;
|
||||
for8free_Adv : Adv ;
|
||||
in8vain_Adv : Adv ;
|
||||
too8much_Adv : Adv ;
|
||||
|
||||
nowhere_Adv : Adv ;
|
||||
together_Adv : Adv ;
|
||||
|
||||
elsewhere_Adv : Adv ;
|
||||
elsewhere_to_Adv : Adv ;
|
||||
elsewhere_from_Adv : Adv ;
|
||||
same_there_Adv : Adv ;
|
||||
same_there_to_Adv : Adv ;
|
||||
same_there_from_Adv : Adv ;
|
||||
samePlace_Adv : Adv ;
|
||||
samePlace_from_Adv : Adv ;
|
||||
samePlace_to_Adv : Adv ;
|
||||
home_Adv : Adv ;
|
||||
home_from_Adv : Adv ;
|
||||
home_to_Adv : Adv ;
|
||||
outside_Adv : Adv ;
|
||||
outside_from_Adv : Adv ;
|
||||
outside_to_Adv : Adv ;
|
||||
ground_at_Adv : Adv ;
|
||||
ground_from_Adv : Adv ;
|
||||
ground_to_Adv : Adv ;
|
||||
|
||||
how8often_IAdv : IAdv ;
|
||||
one8times_Adv : Adv ;
|
||||
two8times_Adv : Adv ;
|
||||
three8times_Adv : Adv ;
|
||||
four8times_Adv : Adv ;
|
||||
five8times_Adv : Adv ;
|
||||
six8times_Adv : Adv ;
|
||||
seven8times_Adv : Adv ;
|
||||
eight8times_Adv : Adv ;
|
||||
nine8times_Adv : Adv ;
|
||||
ten8times_Adv : Adv ;
|
||||
|
||||
initially_Adv : Adv ;
|
||||
somehow_Adv : Adv ;
|
||||
|
||||
-- Numerals:
|
||||
|
||||
-- BR 73.4: numeral adjectives a(ploy~s, diploy~s one-fold, two-fold, ...
|
||||
-- numeral nouns: h( mona's, deka's, chilia's, myria's
|
||||
unit_N2 : N2 ;
|
||||
ten_N2 : N2 ;
|
||||
hundred_N2 : N2 ;
|
||||
thousand_N2 : N2 ;
|
||||
tenthousand_N2 : N2 ;
|
||||
|
||||
cat
|
||||
Sub10000 ; -- 1..9999
|
||||
|
||||
data
|
||||
pot4 : Sub10000 -> Sub1000000 ; -- m * 10000
|
||||
pot4plus : Sub10000 -> Sub10000 -> Sub1000000 ; -- m * 10000 + n
|
||||
|
||||
-- Conjunctions:
|
||||
|
||||
in_order_to_Subj : Subj ;
|
||||
}
|
||||
19
lib/src/ancient_greek/GrammarGrc.gf
Normal file
19
lib/src/ancient_greek/GrammarGrc.gf
Normal file
@@ -0,0 +1,19 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
concrete GrammarGrc of Grammar =
|
||||
NounGrc,
|
||||
VerbGrc,
|
||||
AdjectiveGrc,
|
||||
AdverbGrc,
|
||||
NumeralGrc,
|
||||
SentenceGrc,
|
||||
QuestionGrc,
|
||||
RelativeGrc,
|
||||
ConjunctionGrc,
|
||||
PhraseGrc,
|
||||
TextX-[Tense,Temp],
|
||||
TenseGrc,
|
||||
StructuralGrc
|
||||
-- IdiomGrc
|
||||
** {
|
||||
} ;
|
||||
30
lib/src/ancient_greek/IdiomGrc.gf
Normal file
30
lib/src/ancient_greek/IdiomGrc.gf
Normal file
@@ -0,0 +1,30 @@
|
||||
--concrete IdiomGrc of Idiom = CatGrc ** open Prelude, ResGrc in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
-- ImpersCl vp = mkClause "it" (agrP3 Sg) vp ;
|
||||
-- GenericCl vp = mkClause "one" (agrP3 Sg) vp ;
|
||||
--
|
||||
-- CleftNP np rs = mkClause "it" (agrP3 Sg)
|
||||
-- (insertObj (\\_ => rs.s ! np.a)
|
||||
-- (insertObj (\\_ => np.s ! rs.c) (predAux auxBe))) ;
|
||||
--
|
||||
-- CleftAdv ad s = mkClause "it" (agrP3 Sg)
|
||||
-- (insertObj (\\_ => conjThat ++ s.s)
|
||||
-- (insertObj (\\_ => ad.s) (predAux auxBe))) ;
|
||||
--
|
||||
-- ExistNP np =
|
||||
-- mkClause "there" (agrP3 (fromAgr np.a).n)
|
||||
-- (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;
|
||||
--
|
||||
-- ExistIP ip =
|
||||
-- mkQuestion (ss (ip.s ! Nom))
|
||||
-- (mkClause "there" (agrP3 ip.n) (predAux auxBe)) ;
|
||||
--
|
||||
-- ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;
|
||||
--
|
||||
-- ImpPl1 vp = {s = "let's" ++ infVP True vp (AgP1 Pl)} ;
|
||||
--
|
||||
--}
|
||||
--
|
||||
62
lib/src/ancient_greek/IrregGrc.gf
Normal file
62
lib/src/ancient_greek/IrregGrc.gf
Normal file
@@ -0,0 +1,62 @@
|
||||
--# -path=.:prelude:../abstract:../common
|
||||
|
||||
concrete IrregGrc of IrregGrcAbs = CatGrc ** open ParadigmsGrc in {
|
||||
|
||||
-- BR 121 (partial) TODO: uncomment IrregGrc in LexiconGrc.gf
|
||||
|
||||
lin
|
||||
-- verba vocalia, simple ones
|
||||
paideyw_V = mkV "paidey'w" "paidey'sw" "e)pai'deysa" "pepai'deyka" "pepai'deymai" "e)paidey'vhn" "paideyto's" ; -- educate
|
||||
mhnyw_V = mkV "mhny_'w" "mhny_'sw" "e)mh'ny_sa" "memh'ny_ka" "memh'ny_mai" "emhny_'vhn" "mhny_to's" ; -- zeige an
|
||||
payw_V = mkV "pay'w" "pay'sw" "e)'paysa" "pe'payka" "pe'paymai" "e)pay'vhn" "payste'on" ; -- mache aufhoeren
|
||||
vhraw_V = mkV "vhra'w" "vhra_'sw" "e)vh'ra_sa" "tevh'ra_ka" "tevh'ra_mai" "e)vhra_'vhn" "vhra_vo's" ; -- jage
|
||||
timaw_V = mkV "ti_ma'w" "ti_mh'sw" "e)ti_'mhsa" "teti_'mhka" "teti_'mhmai" "e)ti_mh'vhn" "ti_mhto's" ; -- ehre
|
||||
poiew_V = mkV "poie'w" "poih'sw" "e)poi'hsa" "pepoi'hka" "pepoi'hmai" "e)poih'vhn" "poihto's" ; -- tue
|
||||
doylow_V = mkV "doylo'w" "doylw'sw" "e)doy'lwsa" "dedoy'lwka" "dedoy'lwmai" "e)doylw'vhn" "doylwto's" ; -- knechte
|
||||
-- verba vocalia, with exceptions
|
||||
eaw_V = mkV "e)a'w" "ea_'sw" "ei)'a_sa" "ei)'a_ka" "ei)'a_mai" "ei)a_'vhn" "e)a_to's" ; -- lasse zu
|
||||
dew_V = mkV "de'w" "dh'sw" "e)'dhsa" "de'deka" "de'demai" "e)de'vhn" "deto's" ; -- binde
|
||||
lyw_V = mkV "ly_'w" "ly_'sw" "e)'ly_sa" "le'ly.ka" "le'ly.mai" "e)ly.'vhn" "ly.vo's" ; -- loese
|
||||
vyw_V = mkV "vy_'w" "vy_'sw" "e)'vy_sa" "ve'vy.ka" "ve'vy.mai" "e)ty.'vhn" "vy.te'on" ; -- opfere
|
||||
dyw_V = mkV "dy'w" "dy_'sw" "e)'dvy_sa" "de'dy.ka" "de'dy.mai" "e)dy.'vhn" "dy.to's" ; -- versenke
|
||||
-- med. "dy_'somai" "e)'dy_n" "de'dy_ka" -- versinke
|
||||
-- fyw_V = mkV "fy_'w" "fy_'sw" "e)'fy_sa" nonExists nonExists nonExists "fy.to'n" ; -- erzeuge
|
||||
-- med. "fy_'somai" "e)'fy_n" "pe'fy_ka" -- entstehe
|
||||
epainew_V = prefixV "e)p"
|
||||
(mkV "ai)ne'w" "ai)ne'somai" "h|)'nesa" "h|)'neka" "h|)'nhmai" "h|)ne'vhn" "ai)neto's") ; -- lobe
|
||||
-- crhsvai_V = mkV "crh~svai" "crh'somai" "e)crhsa'mhn" nonExists "ke'crhmai" " e)crh'svhn" "crhsto's" ; -- gbrauche
|
||||
spaw_V = mkV "spa'w" "spa'sw" "e)'spasa" "e)'spaka" "e)'spasmai" "e)spa'svhn" "spasvo's" ; -- ziehe
|
||||
-- gelaw_V = mkV "gela'w" "gela'somai" "e)ge'lasa" nonExists "gege'lasmai" "e)gela'svhn" "gelasvo's" ; -- lache aus
|
||||
telew_V = mkV "tele'w" "telw~" "e)te'lesa" "tete'leka" "tete'lesmai" "e)tele'svhn" "telesto's" ; -- vollende
|
||||
-- aideomai_V = mkV "ai)de'omai" "ai)de'somai" nonExists nonExists "h|)'desmai" "h|)de'svhn" nonExists ; -- scheue mich
|
||||
-- arkew_V = mkV "a)rke'w" "a)rke'sw" "h)'rkesa" nonExists nonExists nonExists nonExists ; -- genuege
|
||||
kalew_V = mkV "kale'w" "kalw~" "e)ka'lhsa" "ke'klhka" "ke'klhmai" "e)klh'vhn" "klhto's" ; -- rufe, nenne
|
||||
keleyw_V = mkV "keley'w" "keley'sw" "e)ke'leysa" "keke'leyka" "keke'leysmai" "e)keley'svhn" "keleyso's" ; -- befehle
|
||||
kleiw_V = mkV "klei'w" "klei'sw" "e)'kleisa" "ke'kleika" "ke'kleimai" "e)klei'svhn" "kleisto's" ; -- schliesse
|
||||
criw_V = mkV "cri_'w" "cri_'sw" "e)'cri_sa" "ke'cri_ka" "ke'cri_mai" "e)cri_'svhn" "cri_sto's" ; -- salbe
|
||||
akoyw_V = mkV "a)koy'w" "a)koy'somai" "h)'koysa" "a)kh'koa" "h)'koysmai" "h)koy'svhn" "a)koysto's" ; -- hoere
|
||||
-- kaiw_V = mkV2 "kai'w" "kay'sw" "e)'kaysa" "ke'kayka" "ke'kaymai" "e)kay'vhn"
|
||||
-- (variants {"kaysto's"; "kayto's"}) ; -- brenne
|
||||
-- klaiw_V = mkV "klai'w" "klay'somai" "e)'klaysa" nonExists "ke'klaymai" "e)klay'vn" "klaysto's" ; -- weine
|
||||
-- plew_V = mkV "ple'w" "pley'somai" "e)'pleysa" "pe'pleyka" nonExists nonExists nonExists ; -- fahre zur See
|
||||
-- pnew_V = mkV "pne'w" "pney'somai" "e)'pneysa" "pe'pneyka" nonExists nonExists nonExists ; -- hauche
|
||||
-- rew_V = mkV "re'w" "ryh'somai" "e)rry'hn" "e)rry'hka" nonExists nonExists nonExists ; -- fliesse
|
||||
cew_V = mkV "ce'w" "ce'w" "e)'cea" "ke'cyka" "ke'cymai" "e)cy'vhn" "cyto's" ; -- giesse
|
||||
-- verba muta, labialia 32-42
|
||||
pempw_V = mkV "pe'mpw" "pe'mqw" "e)'pemqa" "pe'pompa" "pepemmai" "e)pemfvhn" "pempto's" ; -- schicke
|
||||
grafw_V = mkV "gra'fw" "gra'qw" "e)'grafa" "ge'grafa" "ge'grammai" "e)gra'fhn" "grapto's" ; -- schreibe
|
||||
-- verba muta, gutturalia 43-55
|
||||
-- verba muta, dentalia 56-65
|
||||
-- verba liquida, 66-80
|
||||
-- BR 123, nasal class, 1-17
|
||||
-- temnw_V = mkV "te'mnw" "temw~" "e)'temon" "te'tmhka" "te'tmhmai" "e)tmh'vhn" "tmhto's" ; -- schneide
|
||||
-- BR 124, -skw -class, 1-9
|
||||
-- BR 125, reduplication class 1-7
|
||||
-- BR 126, E-class, 1-11
|
||||
-- BR 127, mix class 1-17
|
||||
|
||||
oper nonExists : Str = "BUG" ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
37
lib/src/ancient_greek/IrregGrcAbs.gf
Normal file
37
lib/src/ancient_greek/IrregGrcAbs.gf
Normal file
@@ -0,0 +1,37 @@
|
||||
abstract IrregGrcAbs = Cat ** {
|
||||
fun
|
||||
paideyw_V : V ;
|
||||
mhnyw_V : V ;
|
||||
payw_V : V ;
|
||||
vhraw_V : V ;
|
||||
timaw_V : V ;
|
||||
poiew_V : V ;
|
||||
doylow_V : V ;
|
||||
eaw_V : V ;
|
||||
dew_V : V ;
|
||||
lyw_V : V ;
|
||||
vyw_V : V ;
|
||||
dyw_V : V ;
|
||||
fyw_V : V ;
|
||||
epainew_V : V ;
|
||||
crhsvai_V : V ;
|
||||
spaw_V : V ;
|
||||
gelaw_V : V ;
|
||||
telew_V : V ;
|
||||
aideomai_V : V ;
|
||||
arkew_V : V ;
|
||||
kalew_V : V ;
|
||||
keleyw_V : V ;
|
||||
kleiw_V : V ;
|
||||
criw_V : V ;
|
||||
akoyw_V : V ;
|
||||
kaiw_V : V ;
|
||||
klaiw_V : V ;
|
||||
plew_V : V ;
|
||||
pnew_V : V ;
|
||||
rew_V : V ;
|
||||
cew_V : V ;
|
||||
pempw_V : V ;
|
||||
grafw_V : V ;
|
||||
temnw_V : V ;
|
||||
}
|
||||
12
lib/src/ancient_greek/LangExtra.gf
Normal file
12
lib/src/ancient_greek/LangExtra.gf
Normal file
@@ -0,0 +1,12 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
abstract LangExtra =
|
||||
Grammar,
|
||||
Lexicon,
|
||||
Bornemann
|
||||
** {
|
||||
flags startcat=Phr ;
|
||||
oper
|
||||
NumDl : Num ;
|
||||
} ;
|
||||
|
||||
5
lib/src/ancient_greek/LangExtraGrc.gf
Normal file
5
lib/src/ancient_greek/LangExtraGrc.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete LangExtraGrc of LangExtra =
|
||||
LangGrc,
|
||||
ExtraGrc ;
|
||||
14
lib/src/ancient_greek/LangGrc.gf
Normal file
14
lib/src/ancient_greek/LangGrc.gf
Normal file
@@ -0,0 +1,14 @@
|
||||
---# -path=.:../../gf/lib/src/abstract:../common:../prelude
|
||||
--# -path=.:abstract:../common:../prelude
|
||||
|
||||
concrete LangGrc of Lang =
|
||||
GrammarGrc,
|
||||
LexiconGrc -- use AllGrc to have Extra and BornemannGrc-words
|
||||
-- ,ConstructionGrc -- too much to be added ad-hoc HL
|
||||
-- ,DocumentationGrc --# notpresent
|
||||
** {
|
||||
|
||||
flags startcat = Phr ;
|
||||
unlexer = text ; lexer = text ;
|
||||
-- unlexer = unlexgreek ; lexer = lexgreek ; -- effect?
|
||||
} ;
|
||||
419
lib/src/ancient_greek/LexiconGrc.gf
Normal file
419
lib/src/ancient_greek/LexiconGrc.gf
Normal file
@@ -0,0 +1,419 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
-- Entries taken from Bornemann/Risch and Woodhouse
|
||||
-- English to Attic Greek dictionary:
|
||||
-- http://www.lib.uchicago.edu/efts/Woodhouse/
|
||||
|
||||
-- Author: H.Leiss, CIS, LMU Muenchen
|
||||
-- TODO: check the mkN,mkA,mkV on the entries from Woodhouse (Wh)
|
||||
|
||||
concrete LexiconGrc of Lexicon = CatGrc ** open
|
||||
ParadigmsGrc,
|
||||
IrregGrc, -- with additional verbs in IrregGrcAbs.gf
|
||||
ResGrc, -- for mkPrep only,
|
||||
Prelude in {
|
||||
|
||||
flags
|
||||
optimize=values ;
|
||||
|
||||
lin
|
||||
-- add_V3 : V3 ;
|
||||
airplane_N = mkN "h(liko'pthr" "h(liko'pteros" masculine ; -- HL
|
||||
-- alas_Interj : Interj ;
|
||||
-- already_Adv : Adv ;
|
||||
animal_N = mkN "vh'r" "vhro's" masculine ;
|
||||
-- animal_N = mkN "zw|~on" "zw|'oy" neuter ; -- TODO check
|
||||
answer_V2S = mkV2S (mkV "a)pokri'nw") datPrep ; -- medium
|
||||
apartment_N = mkN "oi)~kos" ; -- Woodhouse
|
||||
apple_N = mkN "mh~lon" ;
|
||||
art_N = mkN "te'cnh" ;
|
||||
ashes_N = mkN "te'fra" ; -- Woodhouse
|
||||
ask_V2Q = mkV2Q (mkV "e)rwta'w") accPrep ;
|
||||
baby_N = mkN "tekni'dion" ;
|
||||
back_N = mkN "nw~ton" ; -- Woodhouse
|
||||
bad_A = mkA "kako's" ;
|
||||
bank_N = mkN "tra'peza" ; -- Woodhouse
|
||||
bark_N = mkN "ploi~on" ; -- Woodhouse
|
||||
beautiful_A = mkA "kalo's" ;
|
||||
-- become_VA : VA ;
|
||||
-- beer_N : N ; "o)i~nos kri_'vinos" -- Gerstenwein
|
||||
-- beg_V2V : V2V ; "ai)tei~n" tina ti -- Wh
|
||||
-- belly_N : N ; -- h koili'a, -as -- Bauchhoehle
|
||||
belly_N = mkN "gasth'r" "gastro's" "gaste'ra" feminine ; -- Wh
|
||||
big_A = mkA "makro's" ;
|
||||
bike_N = mkN "dyozy'klon" ; -- HL
|
||||
bird_N = mkN "oi)wno's" ;
|
||||
black_A = mkA "me'la_s" "me'lanos" ; -- TODO: correct to me'las*, me'laina, me'lan
|
||||
blue_A = mkA "kyanoy~s" ; -- Wh
|
||||
boat_N = mkN "ploi~on" ; -- Wh
|
||||
book_N = mkN "bi'blos" "bi'bloy" feminine ;
|
||||
boot_N = mkN "ko'vornos" ; -- Wh
|
||||
boss_N = mkN "o)mfa.lo's" ; -- Wh mkN human (...)
|
||||
boy_N = mkN "pai~s" "paido's" masculine ;
|
||||
bread_N = mkN "a)'rtos" ;
|
||||
break_V2 = mkV2 (prefixV "a)po" (mkV "kla'w")) ;
|
||||
-- broad_A = mkA "ey)ry's" ; -- Wh TODO
|
||||
brother_N2 = mkN2 (mkN "a)delfo's") genPrep ;
|
||||
brown_A = mkA "xanvo's" ; -- Wh
|
||||
-- butter_N = mkN "butter" ;
|
||||
-- buy_V2 = dirV2 (mkV "w)nei~svai") ; -- Aor: pri'asvai, Wh -- TODO Comp.Bug
|
||||
-- camera_N = mkN "camera" ;
|
||||
cap_N = mkN "ky.nh~" ; -- Wh
|
||||
car_N = mkN "zey~gos" "zey'goys" neuter ;
|
||||
-- carpet_N = mkN "da.'pi.s" ; -- Wh BUG mkN does not apply
|
||||
cat_N = mkN feminine (mkN "ai)'loyros") ; -- Wh, Masc|Fem
|
||||
ceiling_N = mkN "o)rofh'" ; -- Wh
|
||||
chair_N = mkN "di'fros" ; -- Wh
|
||||
cheese_N = mkN "ty.ro's" ; -- Wh
|
||||
child_N = mkN2 (mkN "te'knon") genPrep ;
|
||||
-- church_N = mkN "new's" ; -- TODO to i('dry_ma, -atos ??
|
||||
city_N = mkN "po'lis" "po'lews" feminine ; -- polis
|
||||
clean_A = mkA "ka.va.ro's" ; -- Wh
|
||||
clever_A = mkA "fro'nimos" "froni'moy" ; -- TODO: froni'moy
|
||||
close_V2 = dirV2 (mkV "klh|'w") ; -- Wh
|
||||
coat_N = mkN "i(ma'tion" ;
|
||||
cold_A = mkA "qycro's" ; -- Wh TODO: correct forms/accents
|
||||
come_V = mkV "e)'rcomai" ; -- Wh TODO
|
||||
-- computer_N = mkN "computer" ;
|
||||
country_N = mkN "cw'ra" ;
|
||||
-- cousin_N = mkN human (mkN "cousin") ;
|
||||
cow_N = mkN "boy~s" "boo's" feminine ; -- TODO: correct dual from boy~ to bo'e
|
||||
die_V = prefixV "a)po'" (mkV "vnh'skw") ; -- TODO: check forms -- teleyta'w
|
||||
dirty_A = mkA "volero's" ; -- Wh
|
||||
distance_N3 = mkN3 (mkN feminine (mkN "o(do's")) fromP toP ;
|
||||
doctor_N = mkN "i)atro's" ; -- TODO check
|
||||
dog_N = mkNoun "ky'wn" "kyno's*" "kyni'" "ky'na" "ky'on"
|
||||
"ky'nes*" "kynw~n" "kysi'" "ky'nas*" -- BR 55.4
|
||||
"ky'ne" "kynoi~n" masculine ;
|
||||
door_N = mkN "vy'ra" ;
|
||||
drink_V2 = dirV2 (mkV "pi_'nw" "pi'omai" "e('pion" "pe'pwka" "pe'pomai" "e)po'vhn" "poto's") ;
|
||||
-- easy_A2V = mk_A2V (mkA "ra|'dios" "ra|di'oy") ; - Wh TODO
|
||||
eat_V2 = mkV2 (mkV "e)svi'w" "fa'gomai" "e)'fagon" "e)dh'dwka" "e)dh'desmai" "e)de'svhn" "e)desto's") ;
|
||||
-- eat_V2 fut: (variants{"e)'domai" ; "fa'gomai"}) -- TODO: correct Fut-forms
|
||||
empty_A = mkA "keno's" ; -- Wh
|
||||
enemy_N = mkN "pole'mios" "polemi'oi" masculine ; -- ecvro's
|
||||
factory_N = mkN "e)rgasth'rion" ; -- Wh
|
||||
father_N2 = mkN2 (mkN "path'r" "patro's" "pate'ra" masculine) genPrep ;
|
||||
fear_VS = mkVS (mkV "fobe'w") ; -- fear_N = mkN "fo'bos" "fo'boy" masculine
|
||||
find_V2 = dirV2 (mkV "ey(ri'skw") ; -- Wh
|
||||
fish_N = mkN "i)cvy~s" "i)cvy'os" masculine ;
|
||||
floor_N = mkN neuter (mkN "e)'dafos") ; -- Wh
|
||||
forget_V2 = dirV2 (mkV "e)pilanva.'nomai") ; -- Wh TODO
|
||||
-- fridge_N = mkN "fridge" ;
|
||||
friend_N = mkN "fi'los" ;
|
||||
fruit_N = mkN "karpo's" ;
|
||||
-- fun_AV = mkAV (regA "fun") ;
|
||||
-- garden_N = mkN "paradei~son" ;
|
||||
garden_N = mkN "kh~pos" ; -- Wh
|
||||
girl_N = mkN "pai~s" "paido's" feminine ;
|
||||
-- glove_N = mkN "ceiri's" ; -- Wh TODO
|
||||
glove_N = mkN "ceiri's" "ceiri~dos" feminine ; -- HL guessed
|
||||
gold_N = mkN "cry's" "cryso's" neuter ; -- TODO check (accents missing in Pl)
|
||||
good_A = mkA "a)gavo's" ;
|
||||
go_V = mkV "e)'rxomai" ;
|
||||
-- green_A = mkA "di'kaios" "dikai'a_s" ; -- Testword
|
||||
green_A = mkA "clwro's" ; -- Wh
|
||||
harbour_N = mkN "limh'n" "lime'nos" masculine ;
|
||||
hate_V2 = dirV2 (mkV "mise'w") ; -- tina', ti' fut mish'sw
|
||||
hat_N = mkN "ky.nh~" ; -- Wh
|
||||
have_V2 = dirV2 (mkV "e('cw") ; -- Wh TODO
|
||||
hear_V2 = dirV2 (mkV "a)koy'w") ;
|
||||
hill_N = mkN "lo'fos" ; -- Wh
|
||||
hope_VS = mkVS (mkV "e)lpi'zw" "e)lpiw~" "h)'lpisa" "h)'lpika" "h)'lpismai" "h)lpi'svhn" "h)lpisto's") ; -- TODO check aorist
|
||||
horse_N = mkN "i('ppos" ; --hippos
|
||||
hot_A = mkA "vermo's" ;
|
||||
house_N = mkN "oi)~kos" "oi)'koy" masculine ;
|
||||
important_A = mkA "a)xio'logos" ;
|
||||
industry_N = mkN "filoponi'a_" ; -- Wh -- a_ added HL
|
||||
iron_N = mkN "si.'dhros" ; -- Wh
|
||||
king_N = mkN "basiley's" "basile'ws" masculine ;
|
||||
know_V2 = dirV2 (mkV "manva.'nw") ; -- Wh, better: eide'nai
|
||||
lake_N = mkN "li'mnh" ;
|
||||
lamp_N = mkN "lampvh'r" "lampth~ros" masculine ;
|
||||
-- lamp_N = mkN "ly'cnos" ; -- Wh
|
||||
learn_V2 = mkV2 "dida'skw" ; -- medium
|
||||
leather_N = mkN neuter (mkN "sky~tos") ; -- Wh
|
||||
leave_V2 = dirV2 (prefixV "a)po'" (mkV "bai'nw")) ;
|
||||
like_V2 = mkV2 "file'w" ;
|
||||
-- listen_V2 = mkV2 (prefixV "e)p" (mkV "a.koy'w")) genitive ; -- Wh tinos, ti BUGs
|
||||
live_V = mkV "paidey'w" ; -- TESTWORD
|
||||
long_A = mkA "makro's" ; -- Wh
|
||||
lose_V2 = dirV2 (mkV "a.)poly.'nomai") ; -- Wh, BUGs
|
||||
love_N = mkN "a)ga'ph" ;
|
||||
love_V2 = mkV2 "a)gapa'w" ; -- TODO check
|
||||
man_N = let man : N = mkN "a)nh'r" "a)ndro's" "a)'ndra" masculine
|
||||
in { s = table{ Sg => table{ Voc => "a)'ner" ;
|
||||
c => man.s ! Sg ! c };
|
||||
n => man.s ! n } ;
|
||||
g = man.g } ;
|
||||
-- man_N = mkN "a)'nvrwpos" "a)nvrw'poy" masculine ;
|
||||
married_A2 = mkA2 (mkA "gegamhme'nos") datPrep ;
|
||||
meat_N = mkN "e)nai'monon" "e)naimo'noy" neuter ; -- e)aimos_A : having blood
|
||||
milk_N = mkN "ga'la" "ga'laktos" neuter ; -- TODO: correct Sg Nom|Akk
|
||||
moon_N = mkN "seilh~nh" ; -- TODO check
|
||||
mother_N2 = mkN2 (mkN "mh'thr" "mhtro's" "mhte'ra" feminine) genPrep ;
|
||||
mountain_N = mkN "o)'ros" "o)'roys" neuter ;
|
||||
music_N = mkN "moysikh'" ;
|
||||
narrow_A = mkA "steno's" ; -- Wh
|
||||
new_A = mkA "ne'os" "ne'a_s" ;
|
||||
-- newspaper_N = mkN "newspaper" ;
|
||||
oil_N = mkN neuter (mkN "e)'laion") ; -- Wh
|
||||
-- old_A = mkA "presby's" "presbei~a" "presby'" ; -- TODO mkA
|
||||
-- old_A = mkA "presby's" "presby'teros" ; -- fake entry TODO
|
||||
open_V2 = dirV2 (prefixV "a.)n" (mkV "oi'gw")) ; -- Wh
|
||||
paint_V2A = mkV2A (mkV "zwgrafe'w") noPrep ; -- TODO noPrep?
|
||||
paper_N = mkN "pa'py_ros" ;
|
||||
-- paris_PN = mkPN (mkN nonhuman (mkN "Paris")) singular ;
|
||||
peace_N = mkN "ei)rh'nh" ;
|
||||
-- pen_N = mkN "grafi's" ; -- Wh TODO: BUG
|
||||
planet_N = mkN "pla'nhs" "pla'nhtos" masculine ; -- TODO check accents
|
||||
plastic_N = mkN "plastiko'n" ;
|
||||
-- play_V2 = dirV2 (mkV "y(pokri'nomai")) ; -- Wh (as actor) TODO prefixV
|
||||
-- policeman_N = mkN masculine (mkN "policeman" "policemen") ;
|
||||
priest_N = mkN "i(erey's" "i(ere'ws" masculine;
|
||||
-- priest_N = mkN "i(eromnh'mwn" "i(ieromnh'monos" masculine ;
|
||||
probable_AS = (mkA "ey)'logos") ; -- Wh TODO mkAS
|
||||
queen_N = mkN "basi'lea_" ;
|
||||
-- radio_N = mkN "radio" ;
|
||||
rain_V0 = mkV "y('w" ; -- Wh TODO V0?
|
||||
read_V2 = mkV2 "a)nagignw'skw" ;
|
||||
red_A = mkA "a(loyrgo's" ; -- purpur ; mkA "pyrro's" ; mkA "ko'kkinos"
|
||||
-- religion_N = mkN "religion" ;
|
||||
-- restaurant_N = mkN "restaurant" ;
|
||||
river_N = mkN "potamo's" ;
|
||||
rock_N = mkN "li.'vos" ; -- TODO: check
|
||||
roof_N = mkN "o)'rofos" ; -- Wh
|
||||
-- rubber_N = mkN "rubber" ;
|
||||
-- run_V = mkV "tre'cw" "dramoy~mai" "e)'dramon" "dedra'mhka" ; -- BR 127 8
|
||||
-- TODO: why compiler error NonExist
|
||||
say_VS = mkVS (mkV "le'gw") ;
|
||||
school_N = mkN "scolh'" ;
|
||||
science_N = mkN "ma'vhsis" "mate'sews" feminine ; -- TODO check
|
||||
sea_N = mkN "va'latta" "vala'tths" ;
|
||||
-- seek_V2 = dirV2 (irregV "seek" "sought" "sought") ;
|
||||
-- see_V2 = dirV2 (irregV "see" "saw" "seen") ;
|
||||
-- sell_V3 = dirV3 (irregV "sell" "sold" "sold") toP ;
|
||||
-- send_V3 = dirV3 (irregV "send" "sent" "sent") toP ;
|
||||
-- sheep_N = mkN "o)'is" "oi)o's" "oi)i'" "oi)~n" "oi)~es" "oi)w~n" "oi)si'n" "oi)~s" ; -- TODO
|
||||
ship_N = mkN "nay~s" "new's" feminine ;
|
||||
shirt_N = mkN "ci.twni'skos" ; -- Wh
|
||||
shoe_N = mkN "krhpi's" "krhpi~dos" feminine ;
|
||||
-- shop_N = mkN "shop" ;
|
||||
-- short_A = mkA "di'kaios" ; -- TODO accent shift!
|
||||
-- short_A = mkA "bra.cy.'s" ; -- Wh TODO BUG
|
||||
silver_N = mkN "a)'rgyron" ; -- TODO check
|
||||
sister_N = mkN2 (mkN "a)delfh'") genPrep ;
|
||||
sleep_V = mkV "kavey'dw" ;
|
||||
small_A = mkA "mikro's" ;
|
||||
snake_N = mkN "dra_'kwn" "dra'kontos" masculine ; -- mkN "o)'fis" "o)'fews" masculine
|
||||
-- sock_N = mkN "sock" ;
|
||||
speak_V2 = mkV2 (mkV "le'gw" "le'xw" "e)'lexa" "le'lega" "le'legmai" "e)le'kthn" "lekto's*") aboutP ;
|
||||
star_N = mkN "a)sth'r" "a)ste'ros" masculine ; -- TODO a)stra'si
|
||||
steel_N = mkN "si.'dhros" ; -- Wh
|
||||
stone_N = mkN "li'vos" ;
|
||||
stove_N = mkN "kri_'banos" ;
|
||||
student_N = mkN masculine (mkN "mavhth's") ; -- TODO check
|
||||
stupid_A = mkA "a)'frwn" "a)'fronos" ; -- or "mw~ros"
|
||||
sun_N = mkN "h('lios" ; -- TODO check accents?
|
||||
-- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;
|
||||
-- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;
|
||||
table_N = mkN "tra'peza" ; -- Wh (TODO glyph a.' and i.' in Cardo)
|
||||
talk_V3 = mkV3 (mkV "diale'gw") datPrep (mkPrep "pro's" accusative) ;
|
||||
teacher_N = mkN "dida'skalos" ;
|
||||
teach_V2 = mkV2 "paidey'w" ; -- "dida'skw"
|
||||
-- television_N = mkN "television" ;
|
||||
thick_A = mkA "pykno's" ; -- Wh
|
||||
thin_A = mkA "mano's" ; -- Wh
|
||||
-- train_N = mkN "train" ;
|
||||
travel_V = mkV "porey'omai" ; -- Wh TODO Part
|
||||
tree_N = mkN "de'ndron" ;
|
||||
---- trousers_N = mkN "trousers" ;
|
||||
-- trousers_N = TODO mkN "a)naxyri'des" feminine plural -- Wh
|
||||
ugly_A = mkA "ai)scro's" ;
|
||||
understand_V2 = mkV2 "gignw'skw" ;
|
||||
university_N = mkN "a)kademi'a" "a)kademi'as" ;
|
||||
village_N = mkN "xwri'on" ; -- mkN "w'ra"
|
||||
wait_V2 = mkV2 "me'nw" ; -- Wh a)na-me'nw
|
||||
watch_V2 = dirV2 (mkV "fy.lattw") ; -- Wh fy.lassein
|
||||
water_N = mkN "y('dwr" "y('datos" masculine ; -- TODO check
|
||||
white_A = mkA "leyko's" ; -- TODO accent?
|
||||
-- window_N = mkN "vy.ri.'s" ; -- Wh feminine TODO mkN
|
||||
window_N = mkN "vy.ri.'s" "vy.ri~dos" feminine ; -- Wh, HL guessed gen
|
||||
wine_N = mkN "oi)~nos" ;
|
||||
-- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;
|
||||
-- woman_N = mkN "gynai'ka" ; -- "gynh'" "gynaiko's*" ; -- TODO correct BR 55
|
||||
woman_N = mkNoun "gynh'" "gynaiko's*" "gynaiki'" "gynai~ka" "gy'nai"
|
||||
"gynai~kes*" "gynaikw~n" "gynaixi'" "gynai~kas*"
|
||||
"gynai~ke" "gynaikoi~n" feminine ; -- BR 55
|
||||
-- wonder_VQ = mkVQ (mkV "vayma'zw") ; -- Wh
|
||||
wood_N = mkN "xy'lon" ;
|
||||
write_V2 = mkV2 "gra'fw" ;
|
||||
yellow_A = mkA "xanvo's" ; -- Wh
|
||||
young_A = mkA "ne'os" ; -- TODO: vowel lengths neo'tatos => new'tatos etc.
|
||||
-- do_V2 = dirV2 (mkV "dra'w") ;
|
||||
do_V2 = dirV2 (mkV "dra'w" "dra_'sw" "e)'dra_sa" "de'dra_ka" "de'dramai" "e)dra'svhn" "drasto's") ;
|
||||
now_Adv = mkAdv "ny~n" ;
|
||||
already_Adv = mkAdv "h)'dh" ; -- Wh
|
||||
song_N = mkN "w)dh'" ;
|
||||
-- add_V3 = mkV3 (prefixV "syn" (mkV "logi'zw")) accPrep toP ;
|
||||
number_N = mkN "a)rivmo's" ; -- ?? guessed
|
||||
-- put_V2 = TODO Wh ti.ve'nai
|
||||
stop_V = mkV "pay'w" ;
|
||||
-- jump_V = regV "jump" ;
|
||||
--
|
||||
left_Ord = { s = (mkA "a.)ristero's").s ! Posit } ; -- Wh
|
||||
right_Ord = { s = (mkA "dexio's").s ! Posit } ;
|
||||
far_Adv = mkAdv "po'rrw" ; -- BR 63 3
|
||||
correct_A = mkA "o)rto's" ; -- Wh
|
||||
dry_A = mkA "xhro's" ; -- Wh
|
||||
dull_A = mkA "skaio's" ; -- Wh (not intelligent)
|
||||
-- full_A = mkA "ple'ws" ; -- Wh -- TODO mkA
|
||||
-- heavy_A = mkA "a)rgyroy~s*" ; -- TESTWORD (silvern) bary's
|
||||
-- heavy_A = mkA "ba.ry.'s" ; -- Wh -- Bug
|
||||
-- near_A = mkA "crysoy~s*" ; -- TESTWORD (golden)
|
||||
near_A = mkA "pro'scwros" ; -- Wh
|
||||
rotten_A = mkA "savro's" ; -- Wh
|
||||
-- round_A = mkA "kykloterh's" ; -- Wh -- TODO mkA
|
||||
-- sharp_A = mkA "o)xy's" "o)xei~a" "o)xy'" ; -- TODO: improve mkA to accept this
|
||||
smooth_A = mkA "lei~os" ; -- Wh
|
||||
-- straight_A = mkA "ey)vy.'s" ; -- Wh -- TODO mkA
|
||||
wet_A = mkA "y(gro's" ; -- Wh
|
||||
-- wide_A = mkA "ey)ry.'s" ; -- Wh -- TODO mkA
|
||||
|
||||
blood_N = mkN "ai('ma" "ai('matos" neuter ;
|
||||
bone_N = mkN "o)stoy~n" ; -- Ok
|
||||
-- bone_N = mkN "o)ste'on" ;
|
||||
-- breast_N = mkN "breast" ;
|
||||
cloud_N = mkN "nefe'lh" ;
|
||||
day_N = mkN "h(me'ra_" ;
|
||||
dust_N = mkN "koni'a_" ; -- TODO: check forms
|
||||
ear_N = mkN "oy)~s" "w)to's" neuter ; -- TODO correct Sg Nom|Acc
|
||||
earth_N = mkN "gh~" ; -- Pl and DL ???
|
||||
egg_N = mkN "w|)o'n" ; -- Wh
|
||||
eye_N = mkN "o(fvalmo's" ;
|
||||
fat_N = mkN "dhmo's" ; -- Wh
|
||||
feather_N = mkN "ptero'n" ; -- Wh
|
||||
fingernail_N = mkN "o)'nyx" "o)'nycos" masculine ;
|
||||
fire_N = mkN "py~r" "pyro's" neuter ; -- TODO correct Pl, BR 55 6: pyrsi > pyrois
|
||||
flower_N = mkN "a)'nvos" "a)'nvoys" neuter ;
|
||||
fog_N = mkN "nefe'lh" ; -- Wh ; o)mi'clh
|
||||
foot_N = mkN "poy's" "podo's" masculine ; -- BR 44 3
|
||||
forest_N = mkN "dry_mo's" ;
|
||||
grass_N = mkN "clo'h" ; -- Wh -- TODO mkN "po'a" ; -- Wh
|
||||
-- guts_N = mkN "spla'gxna" neuter plural ; -- WH pl -- FIXME: no singular
|
||||
guts_N = mkN "spla'ngxnon" ; -- Wh with pl only
|
||||
hair_N = mkN "tri'x" "trico's" feminine ;
|
||||
hand_N = mkN "cei~r" "ceiro's" feminine ; -- TODO exception PlDat cersi'
|
||||
head_N = mkN "ke'falos" ; -- TODO check
|
||||
-- heart_N = mkN "kardi'a" "kardi'as" feminine ; -- TODO mkN does not recognize -as*
|
||||
heart_N = mkN "kardi'a_" ;
|
||||
horn_N = mkN "ke'ras" "ke'ratos" neuter ; --
|
||||
husband_N = mkN "game'ths" ;
|
||||
-- ice_N = mkN "ice" ;
|
||||
knee_N = mkN "go'ny" "go'natos" neuter ; -- TODO BR 44 3
|
||||
leaf_N = mkN "fy'llon" "fy'lloy" neuter ;
|
||||
leg_N = mkN neuter (mkN "ske'los") ; -- We
|
||||
liver_N = mkN "h(~par" "h('patos" neuter ; -- TODO Sg Nom|Acc
|
||||
louse_N = mkN "fvei'r" "fveiro's" masculine ; -- Wh
|
||||
mouth_N = mkN "sto'ma" "st'omatos" neuter ; -- TODO check
|
||||
name_N = mkN "o)'noma" "o)no'matos" neuter ; -- TODO check
|
||||
neck_N = mkN "tra'chlos" ;
|
||||
night_N = mkN "ny'x" "nykto's" feminine ;
|
||||
-- nose_N = mkN "nose" ; h r(i-s ths r(inos
|
||||
nose_N = mkN "ri~s" "ri_no's" feminine ; -- Wh, HL guessed
|
||||
person_N = mkN "a)'nvrwpos" "a)nvrw'poy" masculine ; -- HL
|
||||
rain_N = mkN "y(eto's" ; -- Wh ; ggf TODO mkN "y('dwr" ;
|
||||
road_N = mkN feminine (mkN "o(do's") ;
|
||||
-- root_N = mkN "ri'za." ; -- Wh TODO mkN fem
|
||||
-- rope_N = mkN "ka.'lws" ; -- Wh masculine TODO mkN
|
||||
salt_N = mkN "a('ls" "a(lo's" masculine ;
|
||||
sand_N = mkN "a)'mmos" "a)'mmoy" feminine ; -- Wh
|
||||
seed_N = mkN "spe'rma" "spe'rmatos" neuter ; -- Wh
|
||||
skin_N = mkN "de'rma" "de'rmatos" neuter ; -- TODO check
|
||||
sky_N = mkN "oy)ra.no's" ; -- Wh
|
||||
smoke_N = mkN "kapno's" ; -- Wh
|
||||
snow_N = mkN "nifa's" "nifa'dos" feminine ;
|
||||
stick_N = mkN "ra'bdos" "ra'bdoy" feminine ;
|
||||
tail_N = mkN "ke'rkos" ; -- Wh ; h( ou)ra'
|
||||
tongue_N = mkN "glw~tta" "glw'tths" ; -- ok
|
||||
tooth_N = mkN "o)doy's" "o)do'ntos" masculine ;
|
||||
wife_N = mkN "gameth'" ;
|
||||
wind_N = mkN "a)'nemos" ; -- TODO check
|
||||
wing_N = mkN "pte'ryx" "pte'rycos" feminine ; -- Wh, HL gen
|
||||
worm_N = mkN "ey)lh'" ; -- Wh
|
||||
year_N = mkN "e)'tos" "e)'toys" neuter ;
|
||||
--
|
||||
blow_V = mkV "pne'w" ; -- TODO check
|
||||
breathe_V = mkV "pne'w" ;
|
||||
-- burn_V = IrregGrc.burn_V ;
|
||||
-- dig_V = IrregGrc.dig_V ;
|
||||
fall_V = mkV "pi'ptw" "pesoy~mai" "e)'peson" "pe'ptwka" ; -- GMOLL
|
||||
-- "pe'ptwmai" "e)pe'pthn" "pepto's" ; -- HL guessed
|
||||
-- float_V = regV "float" ;
|
||||
-- flow_V = regV "flow" ;
|
||||
-- fly_V = IrregGrc.fly_V ;
|
||||
-- freeze_V = IrregGrc.freeze_V ;
|
||||
give_V3 = dirV3 (mkV "di'dwmi" "dw'sw" "e)'dwka" "de'dwka"
|
||||
"de'domai" "e)do'vhn" "doto's") datPrep ; -- didwmi_V
|
||||
laugh_V = mkV "gela'w" ; -- TODO: check
|
||||
-- lie_V = IrregGrc.lie_V ;
|
||||
-- play_V = regV "play" ;
|
||||
-- sew_V = IrregGrc.sew_V ;
|
||||
-- sing_V = IrregGrc.sing_V ;
|
||||
-- sit_V = IrregGrc.sit_V ;
|
||||
-- smell_V = regV "smell" ;
|
||||
-- spit_V = IrregGrc.spit_V ;
|
||||
-- stand_V = IrregGrc.stand_V ;
|
||||
-- swell_V = IrregGrc.swell_V ;
|
||||
-- swim_V = mkV ;
|
||||
think_V = mkV "frone'w" ; -- TODO: check forms
|
||||
-- turn_V = regV "turn" ;
|
||||
-- vomit_V = regV "vomit" ;
|
||||
--
|
||||
-- bite_V2 = dirV2 IrregGrc.bite_V ;
|
||||
-- count_V2 = dirV2 (regV "count") ;
|
||||
cut_V2 = dirV2 (mkV "te'mnw") ; -- TODO: correct forms Fut e.a.
|
||||
-- fear_V2 = dirV2 (regV "fear") ;
|
||||
-- fight_V2 = dirV2 fight_V ;
|
||||
-- hit_V2 = dirV2 hit_V ;
|
||||
-- hold_V2 = dirV2 hold_V ;
|
||||
-- hunt_V2 = dirV2 (regV "hunt") ;
|
||||
kill_V2 = mkV2 (prefixV "a)po" (mkV "ktei'nw")) ; -- TODO: special forms for passive
|
||||
-- pull_V2 = dirV2 (regV "pull") ;
|
||||
-- push_V2 = dirV2 (regV "push") ;
|
||||
-- rub_V2 = dirV2 (regDuplV "rub") ;
|
||||
-- scratch_V2 = dirV2 (regV "scratch") ; -- TODO se'scimai => Bug
|
||||
split_V2 = dirV2 (mkV "sci'zw" "sci'sw" "e)'scisa" "se'scika" "se'scimmai" "e)sci'svhn" "scisto's") ;
|
||||
-- squeeze_V2 = dirV2 (regV "squeeze") ;
|
||||
-- stab_V2 = dirV2 (regDuplV "stab") ;
|
||||
-- suck_V2 = dirV2 (regV "suck") ;
|
||||
throw_V2 = datV2 (mkV "ba'llw") ;
|
||||
-- tie_V2 = dirV2 (regV "tie") ;
|
||||
-- wash_V2 = dirV2 (regV "wash") ;
|
||||
-- wipe_V2 = dirV2 (regV "wipe") ;
|
||||
--
|
||||
---- other_A = regA "other" ;
|
||||
|
||||
grammar_N = mkN "grammatikh'" ;
|
||||
language_N = mkN "glw~ssa" "glw'sshs" ; -- TODO: accents??
|
||||
-- rule_N = mkN "rule" ;
|
||||
--
|
||||
---- added 4/6/2007
|
||||
john_PN = mkPN (mkN masculine (mkN "Ia'nnas")) singular ;
|
||||
question_N = mkN "e)rw'thsis" "e)rwth'sews" feminine ; -- Wh
|
||||
-- gen guessed HL -- Wh TODO mkN "e)rw'thma" neuter;
|
||||
ready_A = mkA "e(toi~mos" ; -- Wh
|
||||
reason_N = mkN "lo'gos" ; -- mkN "ai)ti'a"
|
||||
-- today_Adv = mkAdv "today" ;
|
||||
-- uncertain_A = regA "uncertain" ;
|
||||
|
||||
oper
|
||||
aboutP = mkPrep "peri'" Gen;
|
||||
atP = mkPrep "para'" Dat ;
|
||||
forP = mkPrep "pro'" Gen ;
|
||||
inP = mkPrep "e)n" Dat ;
|
||||
onP = mkPrep "e)pi'" Gen ;
|
||||
toP = mkPrep "e)pi'" Acc ; -- mkPrep "para'" Acc ;
|
||||
fromP = mkPrep "e)x" Gen ;
|
||||
noPrep = mkPrep [] Acc ;
|
||||
}
|
||||
69
lib/src/ancient_greek/Makefile
Normal file
69
lib/src/ancient_greek/Makefile
Normal file
@@ -0,0 +1,69 @@
|
||||
nouns:
|
||||
grep N bornemann > nounsBR
|
||||
gf < nounsBR.gfs > nounsBR.out
|
||||
rm nounsBR
|
||||
|
||||
ediff-nouns:
|
||||
emacs --eval "(ediff-files \"nounsBR.gold\" \"nounsBR.out\" \
|
||||
(set-default-font \"-unknown-New Athena Unicode-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1\"))" &
|
||||
|
||||
adjectives:
|
||||
grep A bornemann > adjectivesBR
|
||||
gf < adjectivesBR.gfs > adjectivesBR.out
|
||||
rm adjectivesBR
|
||||
|
||||
ediff-adjectives:
|
||||
emacs --eval "(ediff-files \"adjectivesBR.gold\" \"adjectivesBR.out\" \
|
||||
(set-default-font \"-unknown-New Athena Unicode-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1\"))" &
|
||||
|
||||
verbs:
|
||||
grep V bornemann > verbsBR
|
||||
gf < verbsBR.gfs > verbsBR.out
|
||||
rm verbsBR
|
||||
|
||||
ediff-verbs:
|
||||
emacs --eval "(ediff-files \"verbsBR.gold\" \"verbsBR.out\" \
|
||||
(set-default-font \"-unknown-New Athena Unicode-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1\"))" &
|
||||
|
||||
|
||||
# Paradigmen fuer alle Woerter aus lexicon.abstract erstellen (Lexicon.gf)
|
||||
paradigms:
|
||||
gf < paradigms.gfs > paradigms.out
|
||||
|
||||
ediff-paradigms:
|
||||
emacs --eval "(ediff-files \"paradigms.gold\" \"paradigms.out\")" &
|
||||
|
||||
examples:
|
||||
gf -run < examples.gfs > examples.out
|
||||
emacs --eval "(ediff-files \"examples.gold\" \"examples.out\")" &
|
||||
|
||||
example-schemata:
|
||||
gf -run < schemata.gfs > schemata.out
|
||||
emacs --eval "(ediff-files \"schemata.gold\" \"schemata.out\" \
|
||||
(set-default-font \"-unknown-New Athena Unicode-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1\"))" &
|
||||
|
||||
examplesLang:
|
||||
gf -run < examplesLang.gfs > examplesLang.out
|
||||
emacs --eval "(ediff-files \"examplesLang.gold\" \"examplesLang.out\")" &
|
||||
|
||||
# school tablet example
|
||||
school-tablet:
|
||||
gf -run < school-tablet.gfs > school-tablet.out
|
||||
emacs --eval "(ediff-files \"school-tablet.gold\" \"school-tablet.out\")" &
|
||||
# emacs --eval "(ediff-files \"school-tablet.gold\" \"school-tablet.out\" (set-font \"-unknown-New Athena Unicode-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1\")" &
|
||||
|
||||
school-tablet-2:
|
||||
gf -run < school-tablet-2.gfs > school-tablet-2.out
|
||||
|
||||
toGrc:
|
||||
gf -run < examples.tr.gfs
|
||||
|
||||
slides:
|
||||
noweave -delay langGrc.slides.thessaloniki-2016.nw > langGrc.slides.thessaloniki-2016.tex
|
||||
latex -output-format=dvi -interaction=nonstopmode langGrc.slides.thessaloniki-2016.tex
|
||||
xdvi -s 6 -expert -offsets 2.5cm -paper a4 -geometry 550x400+1300+0
|
||||
|
||||
clean:
|
||||
rm -i *~
|
||||
rm -i *.aux
|
||||
rm -i *.log
|
||||
1837
lib/src/ancient_greek/MorphoGrc.gf
Normal file
1837
lib/src/ancient_greek/MorphoGrc.gf
Normal file
File diff suppressed because it is too large
Load Diff
237
lib/src/ancient_greek/NounGrc.gf
Normal file
237
lib/src/ancient_greek/NounGrc.gf
Normal file
@@ -0,0 +1,237 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete NounGrc of Noun = CatGrc ** open Prelude, ResGrc, (M = MorphoGrc) in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
DetCN det cn = { -- different attribute order in ExtraGrc.DetCNpost
|
||||
s = \\c => let n = det.n ; g = cn.g
|
||||
in det.s ! g ! c ++ cn.s2 ! n ! c ++ cn.s ! n ! c ++ cn.rel ! n ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag cn.g det.n P3
|
||||
} ;
|
||||
|
||||
UsePN pn = {
|
||||
s = pn.s ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = Ag pn.g pn.n P3
|
||||
} ;
|
||||
|
||||
UsePron pron = {
|
||||
s = table{ c => pron.s ! NPCase Aton c } ; -- for Nom: like ProDrop
|
||||
isPron = True ;
|
||||
e = table{ c => pron.s ! NPCase Ton c } ; -- emphasized form after prep etc.
|
||||
a = pron.a
|
||||
} ;
|
||||
|
||||
-- PredetNP pred np = {
|
||||
-- s = \\c => pred.s ++ np.s ! c ;
|
||||
-- a = np.a
|
||||
-- } ;
|
||||
--
|
||||
-- PPartNP np v2 = { -- the man seen
|
||||
-- s = \\c => np.s ! c ++ v2.s ! VPPart ;
|
||||
-- a = np.a
|
||||
-- } ;
|
||||
--
|
||||
|
||||
AdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
RelNP np rs = {
|
||||
s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
|
||||
isPron = False ;
|
||||
e = \\c => [] ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
-- Mar 2,2012
|
||||
-- The sp field is for determiners used as NP's, which are sometimes different
|
||||
-- from their use as Det's. Omitted for Greek.
|
||||
{-
|
||||
DetNP det = {
|
||||
s = \\o => det.s ! Neutr ;
|
||||
r = \\agr,c => case agr of {Ag g n p => det.s ! g ! c ++ autos.s ! g ! n ! c};
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = Ag Neutr det.n P3
|
||||
} ;
|
||||
-}
|
||||
DetQuant quant num = {
|
||||
s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! g ! c ;
|
||||
n = num.n
|
||||
} ;
|
||||
|
||||
DetQuantOrd quant num ord = {
|
||||
s = \\g,c => quant.s ! num.n ! g ! c ++ num.s !g ! c ++ ord.s ! AF g num.n c ; -- TODO check
|
||||
n = num.n
|
||||
} ;
|
||||
|
||||
NumSg = {s = \\_,_ => [] ; n = Sg ; isCard = False} ;
|
||||
NumPl = {s = \\_,_ => [] ; n = Pl ; isCard = False} ;
|
||||
-- NumDl: in ExtraGrc
|
||||
|
||||
NumCard n = n ** {isCard = True} ;
|
||||
|
||||
-- TODO: check the following two:
|
||||
NumDigits digits = let num : Number = case digits.unit of {one => Sg ; _ => Pl}
|
||||
in {s = \\g,c => digits.s ++ "'"; n = num ; isCard = True} ;
|
||||
NumNumeral 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} ;
|
||||
|
||||
OrdDigits digits = {s = \\af => digits.s } ;
|
||||
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;
|
||||
OrdSuperl a = {s = a.s ! Superl} ;
|
||||
|
||||
-- Greek has a definite article, but no indefinite article.
|
||||
|
||||
DefArt = {
|
||||
s = \\n,g,c => artDef ! g ! n ! c
|
||||
} ;
|
||||
{-
|
||||
-- An empty IndefArt produces empty NPgen-attributes:
|
||||
-- like (PrepNP part_Prep (DetNP (DetQuant InDefArt NumDl)))
|
||||
-}
|
||||
IndefArt = {
|
||||
s = \\n,g,c => [] -- for linearization
|
||||
} ;
|
||||
|
||||
MassNP cn = {
|
||||
s = \\c => cn.s2 ! Sg ! c ++ cn.s ! Sg ! c ++ cn.rel ! Sg ;
|
||||
isPron = False ;
|
||||
e = \\_ => [] ;
|
||||
a = agrP3 Sg
|
||||
} ;
|
||||
|
||||
-- TODO: the possPron is rather an adjective than a det:
|
||||
-- oi emoi agathoi philoi
|
||||
PossPron p = {
|
||||
s = \\n,g,c => artDef ! g ! n ! c ++ p.s ! NPPoss g n c ;
|
||||
} ;
|
||||
|
||||
--2 Common Nouns
|
||||
-- We keep the head noun separate in field s, collect attributes in s2, and
|
||||
-- relative clauses in rel. (Combine the components properly when using the CN!)
|
||||
|
||||
UseN n = {
|
||||
s = n.s ;
|
||||
s2 = \\n,c => [] ;
|
||||
isMod = False ;
|
||||
rel = \\n => [] ;
|
||||
g = n.g
|
||||
} ;
|
||||
|
||||
ComplN2 n2 np = { -- sketch
|
||||
s = n2.s ;
|
||||
s2 = -- noun + (refl) object + indir obj ; -- attribute
|
||||
\\n,c => (appPrep n2.c2 np) ++ n2.obj ! Ag n2.g n P3 ;
|
||||
isMod = True ;
|
||||
rel = \\n => [] ;
|
||||
g = n2.g
|
||||
} ;
|
||||
|
||||
ComplN3 n3 np = {
|
||||
s = n3.s ;
|
||||
obj = \\a => (appPrep n3.c2 np) ; -- TODO NPRefl ?
|
||||
g = n3.g ;
|
||||
c2 = n3.c3
|
||||
} ;
|
||||
|
||||
-- UseN2 = UseN ;
|
||||
UseN2 n2 = {
|
||||
s = \\n,c => n2.s ! n ! c ++ n2.obj ! (Ag n2.g n P3);
|
||||
s2 = \\n,c => [] ;
|
||||
isMod = False ;
|
||||
rel = \\n => [] ;
|
||||
g = n2.g
|
||||
} ;
|
||||
|
||||
Use2N3 n3 = {
|
||||
s = n3.s ;
|
||||
g = n3.g ;
|
||||
obj = \\a => [] ;
|
||||
c2 = n3.c2
|
||||
} ;
|
||||
|
||||
Use3N3 n3 = {
|
||||
s = n3.s ;
|
||||
g = n3.g ;
|
||||
obj = \\a => [] ;
|
||||
c2 = n3.c3
|
||||
} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = cn.s ;
|
||||
s2 = \\n,c => (ap.s ! AF cn.g n c) ++ (cn.s2 ! n ! c) ; -- attributes
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
RelCN cn rs = {
|
||||
s = cn.s ;
|
||||
s2 = cn.s2 ;
|
||||
isMod = True ;
|
||||
rel = \\n => "," ++ rs.s ! Ag cn.g n P3 ; -- TODO: ++ (kai) ++ cn.rs
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
AdvCN cn adv = {
|
||||
s = cn.s ;
|
||||
s2 = \\n,c => cn.s2 ! n ! c ++ adv.s ; -- ???
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
SentCN cn sc = {
|
||||
s = \\n,c => cn.s ! n ! c ;
|
||||
s2 = \\n,c => cn.s2 ! n ! c ++ sc.s ; -- TODO: use the attribute!
|
||||
isMod = cn.isMod ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g } ;
|
||||
|
||||
-- abstract/Noun.gf: city Paris, but possibly overgenerating
|
||||
-- ApposCN cn np = {s = \\n,c => np.s ! Pre ! c ++ cn.s ! n ! c ; -- test: epi ton Psaron potamon
|
||||
-- s2 = \\n,c => [] ; isMod = cn.isMod ; g = cn.g} ; -- Pythagoras philosophos
|
||||
-- Better use ExtraGrc.gf: ApposPN, ApposPron
|
||||
|
||||
-- BR 67 2: The non-reflexive possessive relation, when expressed by a genitive np (including pron):
|
||||
{-
|
||||
PossNP cn np = { -- house of mine -- BR 67 2 a (unemphasized pronoun only)
|
||||
s = \\a,n,c => case np.isPron of {
|
||||
True => cn.s ! a ! n ! c ++ np.s ! a ! Pre ! Gen ; -- unemphasized persPron!Gen
|
||||
False => np.s ! a ! Pre ! Gen ++ cn.s ! a ! n ! c } ;
|
||||
s2= \\a,n,c => case np.isPron of { True => [] ; -- don't count the unemph.pron as attribute
|
||||
False => np.s ! a ! Pre ! Gen } ;
|
||||
isMod = case np.isPron of { True => cn.isMod ; _ => True } ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
-}
|
||||
-- BR 67 2a (ensure that the unemphasized pronoun follows then n)
|
||||
PossNP cn np = { -- house of mine -- BR 67 2 a (unemphasized pronoun only)
|
||||
s = \\n,c => cn.s ! n ! c ++ case <np.isPron, np.a> of {
|
||||
<True,Ag g na p> => (M.mkPersPron g na p) ! Aton ! Gen ; _ => [] } ;
|
||||
s2= \\n,c => case <np.isPron, np.a> of { <True,Ag g na p> => [] ;
|
||||
_ => np.s ! Gen } ++ cn.s2 ! n ! c ;
|
||||
isMod = True ;
|
||||
rel = cn.rel ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
-- The reflexive possessive relation, i.e. CN of one's own = eautoy CN, is treated by
|
||||
-- PossRefl : CN -> CN in ExtraGrc; note that reflPron is not a Pron or NP.
|
||||
|
||||
-- PartNP cn np = :cn -- glass of wine
|
||||
-- CountNP det no = :np -- some of the boys
|
||||
|
||||
}
|
||||
97
lib/src/ancient_greek/NumeralGrc.gf
Normal file
97
lib/src/ancient_greek/NumeralGrc.gf
Normal file
@@ -0,0 +1,97 @@
|
||||
--# -path=.:../abstract:../common:../prelude:
|
||||
|
||||
concrete NumeralGrc of Numeral = CatGrc ** open ResGrc, MorphoGrc in {
|
||||
|
||||
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 ;
|
||||
|
||||
oper -- n1 not in abstract
|
||||
thousand : CardOrd => Str = cardOrd "ci'lioi" "ciliosto's" "cilia'kis" ;
|
||||
tenthousand : CardOrd => Str = cardOrd "my'rioi" "myriosto's" "myria'kis" ;
|
||||
n1 = mkDigit "ei(~s" "e('ndeka" "de'ka" "prw~tos" "a('pax" ;
|
||||
|
||||
lin -- mkDigit d (d+10) (d*10) d-th d-times
|
||||
-- -----------------------------------------------------------------------
|
||||
n2 = mkDigit "dy'o" "dw'deka" "ei)'kosi" "dey'teros" "di's" ;
|
||||
n3 = mkDigit "trei~s" ("trei~s"++"kai`"++"de'ka")
|
||||
"tria'konta" "tri'tos" "tri's" ;
|
||||
n4 = mkDigit "te'ttares" ("te'ttares"++"kai`"++"de'ka")
|
||||
"tettara'konta" "te'tartos" "tetra'kis" ;
|
||||
n5 = mkDigit "pe'nte" "pentekai'deka" "penth'konta" "pe'mptos" "penta'kis" ;
|
||||
n6 = mkDigit "e('x" "e(kkai'deka" "e(xh'konta" "e('ktos" "e(xa'kis" ;
|
||||
n7 = mkDigit "e(pta'" "e(ptakai'deka" "e(bdomh'konta" "e('bdomos" "e(pta'kis" ;
|
||||
n8 = mkDigit "o)ktw'" "o)ktwkai'deka" "o)gdoh'konta" "o)'gdoos" "o)kta'kis" ;
|
||||
n9 = mkDigit "e)nne'a" "e)nneakai'deka" "e)nenh'konta" "e)'natos" "e)na'kis" ;
|
||||
|
||||
pot01 = n1 ** {n = Sg} ; -- 1
|
||||
pot0 d = d ** {n = Pl} ; -- d * 1
|
||||
pot1 d = {s = d.s ! DTen} ** {n = Pl} ; -- d * 10
|
||||
pot110 = pot1 n1 ; -- 10
|
||||
pot1to19 d = {s = d.s ! DTeen} ** {n = Pl} ; -- 10 + d
|
||||
pot111 = pot1to19 n1 ; -- 11
|
||||
pot0as1 n = {s = n.s ! DUnit} ** {n = n.n} ; -- coerce : Sub10 -> Sub100
|
||||
pot1plus d e = -- d * 10 + e
|
||||
-- let kai : Str = ("kai`" | "") in -- too expensive! -- BR 73.2
|
||||
{ s = \\f => d.s ! DTen ! f ++ "kai`" ++ e.s ! DUnit ! f ; n = Pl} ;
|
||||
|
||||
pot1as2 n = n ; -- coerce : Sub100 -> Sub1000
|
||||
|
||||
pot2 d = { s = \\f => d.s ! DHundred ! f ; n = Pl} ; -- d * 100
|
||||
pot2plus d m = { -- d * 100 + m
|
||||
s = \\f => d.s ! DHundred ! f ++ "kai`" ++ m.s ! f ; n = Pl} ; -- BR 73.2
|
||||
pot2as3 n = n ;
|
||||
|
||||
-- d * 1000
|
||||
pot3 d = { s = \\f => d.s ! NAdv ++ (thousand ! f) ; n = Pl} ;
|
||||
pot3plus d m = {
|
||||
s = \\f => d.s ! NAdv ++ thousand ! f ++ "kai`" ++ m.s ! f ; n = Pl} ;
|
||||
|
||||
|
||||
-- numerals as sequences of digits
|
||||
|
||||
lincat
|
||||
Dig = TDigit ;
|
||||
|
||||
lin
|
||||
IDig d = {s = d.s ! one; unit = ten} ;
|
||||
|
||||
IIDig d i = {
|
||||
s = d.s ! i.unit ++ i.s ;
|
||||
unit = inc i.unit
|
||||
} ;
|
||||
|
||||
D_0 = mkDig "-" "-" "-" ; -- avoid empty Dig
|
||||
D_1 = mkDig "a" "i" "r" ;
|
||||
D_2 = mkDig "b" "k" "s" ;
|
||||
D_3 = mkDig "g" "l" "t" ;
|
||||
D_4 = mkDig "d" "m" "y" ;
|
||||
D_5 = mkDig "e" "n" "f" ;
|
||||
D_6 = mkDig "s*" "x" "c" ; -- TODO: replace s* by stigma (not in ut -ancientgreek)
|
||||
D_7 = mkDig "z" "o" "q" ;
|
||||
D_8 = mkDig "h" "p" "w" ;
|
||||
D_9 = mkDig "v" "K" "P" ; -- TODO: replace K by koppa, P by sampi (not in ut -ancientgreek)
|
||||
|
||||
oper
|
||||
TDigit = {
|
||||
s : Unit => Str
|
||||
} ;
|
||||
|
||||
mkDig : Str -> Str -> Str -> TDigit =
|
||||
\one,ten,hundred -> { s = table Unit [one;ten;hundred] } ;
|
||||
|
||||
inc : Unit -> Unit = \u ->
|
||||
case u of {
|
||||
one => ten ;
|
||||
ten => hundred ;
|
||||
-- hundred => thousand ;
|
||||
-- thousand => myriad ;
|
||||
-- myriad => myriad
|
||||
hundred => hundred
|
||||
} ;
|
||||
}
|
||||
1
lib/src/ancient_greek/OverloadGrc.gf
Normal file
1
lib/src/ancient_greek/OverloadGrc.gf
Normal file
@@ -0,0 +1 @@
|
||||
--resource OverloadGrc = Overload with (Grammar = GrammarGrc) ;
|
||||
308
lib/src/ancient_greek/ParadigmsGrc.gf
Normal file
308
lib/src/ancient_greek/ParadigmsGrc.gf
Normal file
@@ -0,0 +1,308 @@
|
||||
--# -path=.:../abstract:../prelude:../common
|
||||
|
||||
--1 Greek Lexical Paradigms
|
||||
--
|
||||
-- Hans Leiß, using Aarne Ranta's files for Latin as starting point 2011, 2012
|
||||
--
|
||||
-- This is an API for the user of the resource grammar
|
||||
-- for adding lexical items. It gives functions for forming
|
||||
-- expressions of open categories: nouns, adjectives, verbs.
|
||||
--
|
||||
-- Closed categories (determiners, pronouns, conjunctions) are
|
||||
-- accessed through the resource syntax API, $Structural.gf$.
|
||||
|
||||
resource ParadigmsGrc = open
|
||||
Prelude,
|
||||
ResGrc, -- TODO: suppress later, when the inflections are moved to Morpho
|
||||
(M = MorphoGrc),
|
||||
(Ph = PhonoGrc),
|
||||
CatGrc
|
||||
in {
|
||||
|
||||
flags
|
||||
optimize=noexpand ;
|
||||
|
||||
--2 Parameters
|
||||
|
||||
oper
|
||||
-- To abstract over gender and number names, we define the following.
|
||||
-- Gender : Type ;
|
||||
|
||||
masculine : Gender ;
|
||||
feminine : Gender ;
|
||||
neuter : Gender ;
|
||||
|
||||
-- Number : Type ;
|
||||
|
||||
singular : Number ;
|
||||
plural : Number ;
|
||||
dual : Number ;
|
||||
|
||||
-- VType : Type
|
||||
depMed : VType ;
|
||||
depPass : VType ;
|
||||
|
||||
--2 Nouns
|
||||
|
||||
mkN = overload {
|
||||
mkN : (logos : Str) -> N
|
||||
= \n -> lin N (noun n) ;
|
||||
|
||||
mkN : Gender -> N -> N = \g,n -> lin N {s = n.s ; g=g } ;
|
||||
|
||||
mkN : (va'latta, vala'tths : Str) -> N
|
||||
= \x,y -> lin N (noun2 x y) ;
|
||||
mkN : (valatta, valatths, valattai : Str) -> N
|
||||
= \x,y,z -> lin N (case x of { _ + ("a"|"h") => noun3A x y z }) ;
|
||||
|
||||
mkN : (a'mpelos, ampe'loy : Str) -> Gender -> N
|
||||
= \x,y,g -> lin N (case x of { _ + ("os" | "os*")
|
||||
=> (case g of {
|
||||
Masc|Fem => noun3O x y g ;
|
||||
_ => noun3 x y g }) ;
|
||||
_ + "on" => noun3O x y g ;
|
||||
_ => noun3 x y g }) ;
|
||||
mkN : (path'r, patro's, pate'ra : Str) -> Gender -> N
|
||||
= \x,y,z,g -> lin N (noun3r3 x y z g) ;
|
||||
} ;
|
||||
|
||||
mkN2 : N -> Prep -> N2 ; -- relational nouns
|
||||
|
||||
--3 Proper names
|
||||
--
|
||||
-- To inherit the inflection from nouns, proper names are built from nouns and a fixed number.
|
||||
|
||||
mkPN = overload {
|
||||
mkPN : Noun -> Number -> PN =
|
||||
\n,num -> lin PN {s = n.s!num ; n=num ; g=n.g } ;
|
||||
mkPN : Str -> Gender -> PN =
|
||||
\diogenhs,g -> lin PN (pn3s diogenhs g) ;
|
||||
mkPN : (_,_,_,_,_5:Str) -> Gender -> PN =
|
||||
\nom,gen,dat,acc,voc,g ->
|
||||
lin PN {s = table Case [nom ; gen ; dat ; acc ; voc] ;
|
||||
n = Sg ; g = g} ;
|
||||
} ;
|
||||
|
||||
--2 Adjectives
|
||||
|
||||
-- Status: preliminary
|
||||
-- - Adjective inflection is done by building three nouns;
|
||||
-- - no special accentuation rules are built in,
|
||||
-- - comparative and superlative: incorrect stems, wrong accents
|
||||
|
||||
mkA = overload {
|
||||
-- for adjectives with accent on the ending, or triple-ended ones without accent shift,
|
||||
-- provide SgNomMasc:
|
||||
mkA : (agavo's : Str) -> A
|
||||
= \x -> lin A (mkAdjective (case x of {
|
||||
y + ("w's*"|"w's") => adj3 x (y + "o'tos*") ;
|
||||
_ => adjAO x })) ;
|
||||
-- for adjectives with accent not on the ending, provide SgNomMasc and SgGenFem:
|
||||
mkA : (di'kaios, dikai'as : Str) -> A
|
||||
= \x,y -> lin A (mkAdjective (case y of { _ + ("os*"|"os") => adj3 x y ;
|
||||
_ + ("nto's*"|"nto's") => adj3 x y ;
|
||||
_ => adj2AO x y })) ;
|
||||
} ;
|
||||
|
||||
mkA2 : A -> Prep -> A2 ; -- relational adjectives
|
||||
|
||||
--2 Adverbs TODO
|
||||
|
||||
-- Many adverbs are derived from adjectives by replacing the Masc.Sg.Gen-ending
|
||||
-- "w~n" | "wn" by "w~s" | "wn". These forms can be found as A.adv.
|
||||
-- Adverbs derived from adjectives inflect for Degree, others don't.
|
||||
|
||||
mkAdV : Str -> AdV = \x -> lin AdV (ss x) ;
|
||||
|
||||
--2 Prepositions
|
||||
|
||||
-- A preposition is formed from a string and a case.
|
||||
|
||||
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s = canonize s ; c = c} ;
|
||||
|
||||
-- Often just a case with the empty string is enough:
|
||||
|
||||
accPrep, datPrep, genPrep : Prep ;
|
||||
|
||||
--2 Verbs
|
||||
|
||||
mkV = overload {
|
||||
-- for regular verbs whose aspect/tempus stems can be derived
|
||||
mkV : (paideyw : Str) -> V =
|
||||
\v -> case v of { _ + "w" => lin V (M.mkVerbW1 v) ;
|
||||
_ + ("mi"|"mi'") => lin V (M.mkVerbMi1 v) ;
|
||||
_ + "omai" => lin V (M.mkVerbDep v DepMed) -- default dep.
|
||||
} ;
|
||||
mkV : (paideyomai : Str) -> (vt : VType) -> V =
|
||||
\v,vt -> case v of { _ + "omai" => lin V (M.mkVerbDep v vt) ;
|
||||
_ => Predef.error ("verb does not end in -omai") } ;
|
||||
|
||||
-- for intransitive verbs having no medium and passiv:
|
||||
mkV : (_,_,_,v4 : Str) -> V = -- TODO
|
||||
\piptw,pesoymai,epeson,peptwka ->
|
||||
lin V { act = M.mkActW piptw pesoymai epeson peptwka ;
|
||||
med, pass = table { vf => Predef.nonExist } ;
|
||||
vadj1, vadj2 = { s = table { af => Predef.nonExist } ;
|
||||
adv = Predef.nonExist } ;
|
||||
vtype = VFull } ;
|
||||
|
||||
-- for verbs whose aspect/tempus stems must be provided by:
|
||||
-- ActPres, ActFut, ActAor, ActPerf, MedPerf, PassAor, VAdj
|
||||
-- paideyw paideysw epaideysa pepaideyka pepaideymai epaideyvhn paideytos
|
||||
-- lei'pw lei'psw le'lipa le'loipa le'leipmai lelei'fvhn leipt'os
|
||||
mkV : (_,_,_,_,_,_,v7 : Str) -> V =
|
||||
\leipw,leipsw,elipsa,leloipa,leleipmai,leleifvhn,leiptos ->
|
||||
case leipw of {
|
||||
_ + "w" => lin V (M.mkVerbW7 leipw leipsw elipsa leloipa
|
||||
leleipmai leleifvhn leiptos) ;
|
||||
_ + "nymi" => lin V (M.mkVerbNyMi7 leipw leipsw elipsa leloipa
|
||||
leleipmai leleifvhn leiptos) ;
|
||||
_ => lin V (M.mkVerbRedupMi leipw leipsw elipsa leloipa
|
||||
leleipmai leleifvhn leiptos)
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- Verbs with prepositional (and other) prefix reduplicate and augment after
|
||||
-- the prefix, and assimilate prefix and main verb:
|
||||
|
||||
-- (It's faster if we do elision by indicating where the prefix ends)
|
||||
prefixV : Str -> V -> V = \sy'n, v -> lin V -- BR 85
|
||||
(let -- TODO: admit u@diphthong; else?
|
||||
syn = M.dA sy'n ;
|
||||
nC : Str -> Str -> Str = Ph.nasalConsonant ;
|
||||
elision : (Str * Str) -> Str = \str -> case str of {
|
||||
<x + "r" + i@("i'"|"i"|"o'"|"o"), u@#Ph.vowel + #Ph.aspirate + y>
|
||||
=> x + "r" + i + u + y ; -- don't elide in peri|pro
|
||||
<x + ("a'"|"a"|"o'"|"o"|"i'"|"i"), u@#Ph.vowel + #Ph.aspirate + y>
|
||||
=> x + u + y ; -- elide vowel of prefix, and aspirate
|
||||
<x + c@#Ph.consonant, u@#Ph.vowel + #Ph.aspirate + y>
|
||||
=> x + c + u + y ;
|
||||
_ => nC str.p1 str.p2
|
||||
} ;
|
||||
assim : Str -> Str -> Str = \str1,str2 -> elision <str1,str2> ;
|
||||
in
|
||||
{ act = table { form => assim syn (v.act!form) } ; -- syn + (part ++ einai) TODO
|
||||
med = table { Fin (VPerf VConj) n p => syn ++ v.med ! (Fin (VPerf VConj) n p) ;
|
||||
Fin (VPerf VOpt) n p => syn ++ v.med ! (Fin (VPerf VOpt ) n p) ;
|
||||
form => assim syn (v.med ! form) } ;
|
||||
pass = table { Fin (VPerf VConj) n p => syn ++ v.pass ! (Fin (VPerf VConj) n p) ;
|
||||
Fin (VPerf VOpt) n p => syn ++ v.pass ! (Fin (VPerf VOpt ) n p) ;
|
||||
form => assim syn (v.pass ! form) } ;
|
||||
imp = table { form => assim syn (v.imp ! form) } ;
|
||||
part = table { Act => \\t => { s = \\aform => assim syn ((v.part ! Act ! t).s ! aform) ;
|
||||
adv = assim syn (v.part ! Act ! t).adv } ;
|
||||
dia => \\t => { s = \\aform => assim syn ((v.part ! dia ! t).s ! aform) ; -- guessed
|
||||
adv = assim syn (v.part ! dia ! t).adv }
|
||||
} ;
|
||||
vadj1 = { s = \\aform => assim syn (v.vadj1.s ! aform) ;
|
||||
adv = assim syn v.vadj1.adv } ;
|
||||
vadj2 = { s = \\aform => assim syn (v.vadj2.s ! aform) ;
|
||||
adv = assim syn v.vadj2.adv } ;
|
||||
vtype = v.vtype ;
|
||||
}) ;
|
||||
|
||||
--3 Two-place verbs
|
||||
|
||||
mkV2 = overload {
|
||||
|
||||
-- Two-place regular verbs with direct object (accusative, transitive verbs).
|
||||
|
||||
mkV2 : Str -> V2 = strV2 ;
|
||||
mkV2 : V -> V2 = dirV2 ; -- add a direct object
|
||||
|
||||
-- Two-place verbs with a prepositional or nominal complement
|
||||
|
||||
mkV2 : V -> Prep -> V2 = prepV2 ; -- preposition for complement
|
||||
mkV2 : V -> Case -> V2 = caseV2 ; -- just case for complement
|
||||
} ;
|
||||
|
||||
--3 Three-place verbs
|
||||
--
|
||||
-- Three-place (ditransitive) verbs need two prepositions, of which
|
||||
-- the first one or both can be just a case.
|
||||
|
||||
mkV3 : V -> Prep -> Prep -> V3 ;
|
||||
|
||||
--3 Other complement patterns
|
||||
--
|
||||
-- Verbs and adjectives can take complements such as sentences,
|
||||
-- questions, verb phrases, and adjectives.
|
||||
|
||||
-- mkV0 : V -> V0 ; --%
|
||||
mkVS : V -> VS ;
|
||||
mkV2S : V -> Prep -> V2S ;
|
||||
mkVV : V -> VV ;
|
||||
mkV2V : V -> Prep -> V2V ;
|
||||
-- mkVA : V -> VA ;
|
||||
mkV2A : V -> Prep -> V2A ;
|
||||
-- mkVQ : V -> VQ ;
|
||||
mkV2Q : V -> Prep -> V2Q ;
|
||||
|
||||
-- mkAS : A -> AS ; --%
|
||||
-- mkA2S : A -> Prep -> A2S ; --%
|
||||
-- mkAV : A -> AV ; --%
|
||||
-- mkA2V : A -> Prep -> A2V ; --%
|
||||
|
||||
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$,
|
||||
-- and the second argument is given as an adverb. Likewise
|
||||
-- $V0$ is just $V$.
|
||||
|
||||
-- V0 : Type ; --%
|
||||
-- AS, A2S, AV, A2V : Type ; --%
|
||||
|
||||
|
||||
--3 Adverbs
|
||||
|
||||
mkAdv = overload {
|
||||
|
||||
mkAdv : Str -> Adv = \str -> lin Adv { s = str } ;
|
||||
mkAdv : Prep -> NP -> Adv = \p,np -> lin Adv { s = p.s ++ np.s ! p.c } ;
|
||||
mkAdv : A -> Adv = \a -> lin Adv { s = a.adv ! Posit } ;
|
||||
} ;
|
||||
|
||||
-- LexiconGrc should not use the short forms below.
|
||||
|
||||
masculine = Masc ;
|
||||
feminine = Fem ;
|
||||
neuter = Neutr ;
|
||||
|
||||
singular = Sg ;
|
||||
plural = Pl ;
|
||||
dual = Dl ;
|
||||
|
||||
genitive = Gen ;
|
||||
dative = Dat ;
|
||||
accusative = Acc ;
|
||||
|
||||
depMed = DepMed ;
|
||||
depPass = DepPass ;
|
||||
|
||||
-- Definitions of the operations: ===================================================
|
||||
|
||||
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p ; obj = \\r => []}) ;
|
||||
mkN3 : N -> Prep -> Prep -> N3 = \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||
|
||||
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
|
||||
|
||||
prepV2 : V -> Prep -> V2 = \v,c -> lin V2 (v ** {c2 = c}) ;
|
||||
dirV2 : V -> V2 = \v -> prepV2 v accPrep ;
|
||||
datV2 : V -> V2 = \v -> prepV2 v datPrep ;
|
||||
strV2 : Str -> V2 = \s -> dirV2 (mkV s) ;
|
||||
|
||||
caseV2 : V -> Case -> V2 = \v,c -> prepV2 v (mkPrep [] c) ;
|
||||
|
||||
mkV3 : V -> Prep -> Prep -> V3 = \v,c,d -> lin V3 (v ** {c2 = c; c3 = d}) ;
|
||||
dirV3 : V -> Prep -> V3 = \v,d -> lin V3 (v ** {c2 = accPrep; c3 = d}) ;
|
||||
|
||||
mkVS : V -> VS = \v -> lin VS (v ** {s = v.act ! (Fin (VPres VConj) Sg P3)}) ; -- prelim, TEST
|
||||
mkV2S = \v,p -> lin V2S (prepV2 v p ** {isAux = False});
|
||||
mkV2V = \v,p -> lin V2V (prepV2 v p ** {isAux = False});
|
||||
mkV2Q = \v,p -> lin V2Q (prepV2 v p ** {isAux = False});
|
||||
mkVV : V -> VV = \v -> lin VV v ; -- ??
|
||||
mkV2A v p = lin V2A (prepV2 v p ** {isAux = False}) ;
|
||||
|
||||
accPrep = mkPrep [] accusative; -- just dative case
|
||||
genPrep = mkPrep [] genitive ; -- just genitive case
|
||||
datPrep = mkPrep [] dative ; -- just dative case
|
||||
|
||||
}
|
||||
528
lib/src/ancient_greek/PhonoGrc.gf
Normal file
528
lib/src/ancient_greek/PhonoGrc.gf
Normal file
@@ -0,0 +1,528 @@
|
||||
resource PhonoGrc = open Prelude in {
|
||||
|
||||
flags coding=utf8 ;
|
||||
optimize=all ;
|
||||
oper
|
||||
-- consonants:
|
||||
labial : pattern Str = #("p" | "b" | "f") ;
|
||||
dental : pattern Str = #("t" | "d" | "v") ;
|
||||
guttural : pattern Str = #("k" | "g" | "c") ;
|
||||
nasal : pattern Str = #("n" | "m") ;
|
||||
liquid : pattern Str = #("l" | "r") ;
|
||||
-- spirans : pattern Str = #("s") ;
|
||||
|
||||
consonant : pattern Str =
|
||||
#("p"|"b"|"f"|"t"|"d"|"v"|"k"|"g"|"c"
|
||||
|"l"|"r"|"m"|"n"|"s"|"x"|"q"|"z") ;
|
||||
|
||||
-- vowels:
|
||||
shortDiphthong : pattern Str = #( "ai" | "ei" | "oi" | "yi" | "ay" | "ey" | "oy" ) ;
|
||||
longDiphthong : pattern Str = #("a_i" | "hi" | "wi" | "a_y" | "hy" | "wy" |
|
||||
"a|" | "h|" | "w|" | -- iota subscriptum
|
||||
"Ai" | "Hi" | "Wi" ) ; -- iota adscriptum
|
||||
|
||||
|
||||
diphthong : pattern Str = #("ai"|"ei"|"oi"|"yi"|"ay"|"ey"|"hy"|"oy" -- rare: "a_y", "wy"
|
||||
|"a|"|"h|"|"w|") ; -- with iota subscriptum
|
||||
longV : pattern Str = #("h"|"w"|"a_"|"i_"|"y_") ; -- i-,y- translit: i=' = i ??
|
||||
shortV : pattern Str = #("e"|"o"|"a."|"i."|"y.") ; -- a,i,y short by default
|
||||
restV : pattern Str = #("a"|"e"|"i"|"o"|"y"|"i-"|"y-"|"i="|"y=") ;
|
||||
|
||||
diphthongCap : pattern Str = #("Ai"|"Ei"|"Oi"|"Yi"|"Ay"|"Ey"|"Hy"|"Oy" -- rare: "a_y", "wy"
|
||||
|"Hi"|"Wi") ; -- with iota adscriptum
|
||||
longVCap : pattern Str = #("H"|"W"|"A_"|"I_"|"Y_") ;
|
||||
shortVCap : pattern Str = #("E"|"O"|"A."|"I."|"Y.") ;
|
||||
restVCap : pattern Str = #("a"|"e"|"i"|"o"|"y"|"i-"|"y-"|"i="|"y=") ;
|
||||
|
||||
vowel : pattern Str =
|
||||
#("h"|"w"|"a_"|"i_"|"y_"| -- long vowels
|
||||
"e"|"o"|"a."|"i."|"y."|"a" |"i" |"y" ) ; -- short vowels +default
|
||||
-- TODO: trema, aspirates
|
||||
consonant : pattern Str =
|
||||
#("p"|"b"|"f"|"t"|"d"|"v"|"k"|"g"|"c"
|
||||
|"l"|"r"|"m"|"n"|"s"|"x"|"q"|"z") ;
|
||||
consonantCap : pattern Str =
|
||||
#("P"|"B"|"F"|"T"|"D"|"V"|"K"|"G"|"C"
|
||||
|"L"|"R"|"M"|"N"|"S"|"X"|"Q"|"Z") ;
|
||||
|
||||
|
||||
aspirate : pattern Str = #(")"|"(") ;
|
||||
accent : pattern Str = #("'"|"~") ;
|
||||
acute : pattern Str = #("'") ;
|
||||
circum : pattern Str = #("~") ;
|
||||
|
||||
nonvowels : pattern Str = -- sequence of nonvowels and accents
|
||||
#(("p"|"b"|"f"|"t"|"d"|"v"|"k"|"g"|"c" -- Does NOT cover aspirate asper/lenis
|
||||
|"l"|"r"|"m"|"n"|"s"|"x"|"q"|"z"|"s*" -- consonants
|
||||
|"'"|"~"|"`")*) ; -- accents
|
||||
-- TODO: iota capitals
|
||||
|
||||
{- see below
|
||||
-- BR 13 -- TODO: add accents
|
||||
shortenVowel : Str -> Str = \str ->
|
||||
let short : Str -> Str = \s -> case s of { "h" => "e" ;
|
||||
"w" => "o" ;
|
||||
"a_" => "a" ;
|
||||
"i_" => "i" ;
|
||||
"y_" => "y" ;
|
||||
"a_i" => "ai" ;
|
||||
"hi" => "ei" ;
|
||||
"wi" => "oi" ;
|
||||
"hy" => "ey" ;
|
||||
"a_y" => "ay" ;
|
||||
"wy" => "oy" ;
|
||||
_ => s } ;
|
||||
in
|
||||
case str of { x + d@#longDiphthong + y@(#consonant + _) => x+(short d)+y ;
|
||||
x + v@#longV + y@(n@#nasal + c@#consonant + _) => x+(short v)+y ;
|
||||
x + v@#longV + y@(#longV + _) => x+(short v)+y ;
|
||||
x + "h~a." + y => x + "e'a_" + y ;
|
||||
x + "h~o" + y => x + "e'w" + y ;
|
||||
x + "ha." + y => x + "ea_" + y ;
|
||||
x + "ho" + y => x + "ew" + y ;
|
||||
_ => str
|
||||
} ;
|
||||
|
||||
-- BR 15
|
||||
contractVowels : Str -> Str = \str ->
|
||||
case str of { x + "aa" + y => x + "a_" + y ; -- a)
|
||||
x + "ee" + y => x + "ei" + y ;
|
||||
x + ("eh"|"he") + y => x + "h" + y ;
|
||||
x + "oo" + y => x + "oy" + y ;
|
||||
x + ("ow"|"wo") + y => x + "w" + y ;
|
||||
x + ("oa"|"ao"|"wa"|"aw") + y => x + "w" + y ; -- b)
|
||||
x + ("oe"|"eo") + y => x + "oy" + y ;
|
||||
x + "a" + ("e"|"h") + y => x + "a_" + y ; -- c)
|
||||
x + ("e"|"h") + "a" + y => x + "h" + y ;
|
||||
x + "e"+"ei" + y => x + "ei" + y ; -- d)
|
||||
x + "o"+"oi" + y => x + "oi" + y ;
|
||||
x + "e"+"h|" + y => x + "h|" + y ;
|
||||
x + "e"+"ai" + y => x + "h|" + y ;
|
||||
x + "a"+"ei" + y => x + "a|" + y ;
|
||||
x + "a"+"oi" + y => x + "w|" + y ;
|
||||
_ => str
|
||||
} ;
|
||||
-- TODO: add accents according to BR 9
|
||||
-- v1+v2 contracted to u resp. last syllable u:
|
||||
-- v1+v2' => u' resp. u'
|
||||
-- v1+v2~ => u' resp. u'
|
||||
-- v1'+v2 => u' resp. u~
|
||||
-- v1~+v2 => u' resp. u~
|
||||
-}
|
||||
|
||||
-- BR 24
|
||||
punctuation : Strs = strs { "." ; ";" } ; -- + greek semicolon?
|
||||
|
||||
vowelLenis : Strs = strs {
|
||||
"h)" ; "w)" ; "a_)" ; "i_)" ; "y_)" ; "e)" ; "o)" ; "a)" ; "i)" ; "y)" ; -- "a.)" ; "i.)" ; "y.)" ;
|
||||
"ai)" ; " ei)" ; "oi)" ; "yi)" ; "ay)" ; "ey)" ; "oy)" } ;
|
||||
|
||||
vowelAsper : Strs = strs {
|
||||
"h(" ; "w(" ; "a_(" ; "i_(" ; "y_(" ; "e(" ; "o(" ; "a(" ; "i(" ; "y(" ; -- "a.(" ; "i.(" ; "y.(" ;
|
||||
"ai(" ; " ei(" ; "oi(" ; "yi(" ; "ay(" ; "ey(" ; "oy(" } ;
|
||||
|
||||
ersatzdehnung1 : Str -> Str = \str -> case str of {
|
||||
("a."|"a") => "a_" ; -- variants{"a_" ; "h"} ; -- BR 12: x@(e|i|r)+a > x+a_ else x+h
|
||||
"e" => "ei" ; ("i."|"i") => "i_" ; -- see mkVerbW1liq: efansa > efhna, but melans > mela_s
|
||||
"o" => "oy" ; ("y."|"y") => "y_" ; _ => str} ; -- BR 14
|
||||
|
||||
ersatzdehnung = overload {
|
||||
ersatzdehnung22 : (Str*Str) -> (Str*Str) =
|
||||
\xy -> case xy of {
|
||||
<x + v@#vowel +a@(#accent|"")
|
||||
+ c@#consonant + n@#nonvowels, y> => -- need: new accent
|
||||
<x + ersatzdehnung1(v) +a + c + n, y> ; -- depending on y
|
||||
_ => xy } ;
|
||||
ersatzdehnung : Str -> Str = ersatzdehnung1
|
||||
} ;
|
||||
|
||||
auslaut : Str -> Str = \str -> case str of { -- BR 23
|
||||
_ + ("n"|"r"|"s*") => str ; -- allowed consonants at word ending
|
||||
_ + ("x"|"q") => str ; --
|
||||
stm + "s" => stm + "s*" ;
|
||||
stm + #consonant => stm ; -- drop consonant (several?)
|
||||
_ => str } ;
|
||||
|
||||
ablaut : Str -> Str =\str -> case str of { -- BR 27b
|
||||
x + ("fh"|"fw") + y => x + "fa" + y ;
|
||||
x + "sth" + y => x + "sta" + y ;
|
||||
x + ("vh"|"vw") + y => x + "ve" + y ;
|
||||
x + "dw" + y => x + "do" + y ;
|
||||
x + "ih" + y => x + "ie" + y ;
|
||||
x + "i('h" + y => x + "i('e" + y ;
|
||||
_ => str } ;
|
||||
|
||||
-- Assume that the vowel lengths in the user provided forms are explicitly
|
||||
-- marked, or unmarked vowels a,i,y which count as short. Then the paradigms
|
||||
-- can be produced correctly with length indications; however:
|
||||
--
|
||||
-- (i) length indications combined with accent have no utf-8 representation,
|
||||
-- so the length indication must be removed in the paradigm;
|
||||
-- (or can we keep the indications and extend the transliteration?)
|
||||
-- (ii) decisions based on pattern matching have to treat the diphthongs
|
||||
-- before the short vowels, since diphthongs contain the unmarked vowels.
|
||||
|
||||
dropLength : Str -> Str = \str -> case str of {
|
||||
"a_" | "a." => "a" ; "i_" | "i." => "i" ; "y_" | "y." => "y" ; x => x } ;
|
||||
dropShortness : Str -> Str = \str -> case str of { -- apply to a stem/form
|
||||
x + v@("a"|"i"|"y") + "." + y => x + v + y ; x => x } ;
|
||||
|
||||
-- BR 15 1.
|
||||
-- For the paradigms, we'd better only contract where stem + ending combine:
|
||||
-- Kleomenes+os > Kleomene+os > Kleomenoys (dropS + contractVowels)
|
||||
-- This would be more accurate and more efficient, but clumsier to use.
|
||||
|
||||
contractVowels = overload {
|
||||
|
||||
-- Version that operates on strings and contracts the first occurrence:
|
||||
contractVowels : Str -> Str = \str ->
|
||||
case str of { -- TODO: check accents according to BR 15 2. + BR 9
|
||||
x + "e'ei" + y => x + "ei~" + y ; -- 2.
|
||||
x + "o'oi" + y => x + "oi~" + y ;
|
||||
x + "o'h|" + y => x + "w|~" + y ;
|
||||
x + "e'h|" + y => x + "h|~" + y ;
|
||||
x + "e'ai" + y => x + "h|~" + y ;
|
||||
x + "e'oy" + y => x + "oy~" + y ; -- HL: poie'oy = poioy~
|
||||
x + "a'ei" + y => x + "a|~" + y ;
|
||||
x + "a'h|" + y => x + "a|~" + y ; -- HL: tima'h|=>tima|~
|
||||
x + "a'oi" + y => x + "w|~" + y ;
|
||||
x + "a'oy" + y => x + "w~" + y ; -- HL: tima'oysi=>timw~si
|
||||
x + "e'oi" + y => x + "oi~" + y ;
|
||||
x + "eei" + y => x + "ei" + y ; -- d) V.+Dipht => Dipht
|
||||
x + "ooi" + y => x + "oi" + y ;
|
||||
x + "eh|" + y => x + "h|" + y ;
|
||||
x + "eai" + y => x + "h|" + y ;
|
||||
x + "aei" + y => x + "a|" + y ;
|
||||
x + "aoi" + y => x + "w|" + y ;
|
||||
x + "eoi" + y => x + "oi" + y ;
|
||||
x + "a'a" + y => x + "a~" + y ; -- a) VV => V_, EE => EI, OO => OY
|
||||
x + "aa" + y => x + "a_" + y ; -- a)
|
||||
x + "e'eo" + y => x + "e'oy" + y ;
|
||||
x + "e'ea" + y => x + "e'a" + y ;
|
||||
x + "e'e" + y => x + "ei~" + y ;
|
||||
x + "ee" + y => x + "ei" + y ;
|
||||
x + "h'h|" + y => x + "h|~" + y ;
|
||||
x + "h'h" + y => x + "h~" + y ;
|
||||
x + "h'w" + y => x + "w~" + y ;
|
||||
x + "h('h|" + y => x + "h|(~" + y ; -- HL e('-
|
||||
x + "h('h" + y => x + "h(~" + y ; -- HL
|
||||
x + "h('w" + y => x + "w(~" + y ; -- HL i('hmi
|
||||
x + "h(o'" + y => x + "w('" + y ; -- HL e(-o'meva
|
||||
x + ("e'h"|"h'e") + y => x + "h~" + y ;
|
||||
x + ("eh"|"he") + y => x + "h" + y ;
|
||||
x + "o'o" + y => x + "oy~" + y ;
|
||||
x + "oo" + y => x + "oy" + y ;
|
||||
x + ("o'w"|"w'o"|"w'w") + y => x + "w~" + y ;
|
||||
x + ("ow"|"wo") + y => x + "w" + y ;
|
||||
x + ("o'a"|"a'o"|"o'h"|"w'a"|"a'w") + y -- b) O+(A|E) => O|OY
|
||||
=> x + "w~" + y ; -- (A|E)+O => O|OY
|
||||
x + ("oa"|"ao"|"wa"|"aw") + y
|
||||
=> x + "w" + y ;
|
||||
x + ("o'e"|"e'o") + y => x + "oy~" + y ;
|
||||
x + ("oe"|"eo") + y => x + "oy" + y ;
|
||||
x + ("w'h|") + y => x + "w|~" + y ;
|
||||
x + ("w'e"|"e'w"|"w'h") + y => x + "w~" + y ;
|
||||
x + ("we"|"ew") + y => x + "w" + y ;
|
||||
x + "a'" + ("e"|"h") + y => x + "a~" + y ;
|
||||
x + "ae'" + y => x + "a'" + y ; -- for: a_'
|
||||
x + "a" + ("e"|"h") + y => x + "a_" + y ; -- c) A+E => A
|
||||
x + ("e"|"h") + "a" + y => x + "h" + y ; -- E+A => E
|
||||
_ => str
|
||||
} ;
|
||||
|
||||
-- 'Positioned' version that operates on a split string, but produces
|
||||
-- a string; hence cannot be followed by another 'positioned' sound law.
|
||||
|
||||
contractVowels2 : Str -> Str -> Str = \s1,s2 ->
|
||||
case <s1,s2> of { -- TODO: check accents according to BR 15 2. + BR 9
|
||||
<x + "e'", "ei" + y> => x + "ei~" + y ; -- 2.
|
||||
<x + "o'", "oi" + y> => x + "oi~" + y ;
|
||||
<x + "o'", "h|" + y> => x + "w|~" + y ;
|
||||
<x + "e'", "h|" + y> => x + "h|~" + y ;
|
||||
<x + "e'", "ai" + y> => x + "h|~" + y ;
|
||||
<x + "e'", "oy" + y> => x + "oy~" + y ; -- HL: poie'oy> = poioy~
|
||||
<x + "a'", "ei" + y> => x + "a|~" + y ;
|
||||
<x + "a'", "h|" + y> => x + "a|~" + y ; -- HL: tima'h|=>tima|~
|
||||
<x + "a'", "oi" + y> => x + "w|~" + y ;
|
||||
<x + "a'", "oy" + y> => x + "w~" + y ; -- HL: tima'oysi=>timw~si
|
||||
<x + "e'", "oi" + y> => x + "oi~" + y ;
|
||||
<x + "e", "ei" + y> => x + "ei" + y ; -- d) V.+Dipht => Dipht
|
||||
<x + "o", "oi" + y> => x + "oi" + y ;
|
||||
<x + "e", "h|" + y> => x + "h|" + y ;
|
||||
<x + "e", "ai" + y> => x + "h|" + y ;
|
||||
<x + "a", "ei" + y> => x + "a|" + y ;
|
||||
<x + "a", "oi" + y> => x + "w|" + y ;
|
||||
<x + "e", "oi" + y> => x + "oi" + y ;
|
||||
<x + "a'", "a" + y> => x + "a~" + y ; -- a) VV => V_, EE => EI, OO => OY
|
||||
<x + "a", "a" + y> => x + "a_" + y ; -- a)
|
||||
<x + "e'", "eo" + y> => x + "e'oy" + y ;
|
||||
<x + "e'", "ea" + y> => x + "e'a" + y ;
|
||||
<x + "e'", "e" + y> => x + "ei~" + y ;
|
||||
<x + "e", "e" + y> => x + "ei" + y ;
|
||||
<x + "h'", "h|" + y> => x + "h|~" + y ;
|
||||
<x + "h'", "h" + y> => x + "h~" + y ;
|
||||
<x + "h'", "w" + y> => x + "w~" + y ;
|
||||
<x + "h('", "h|" + y> => x + "h|(~" + y ; -- HL e('-
|
||||
<x + "h('", "h" + y> => x + "h(~" + y ; -- HL
|
||||
<x + "h('", "w" + y> => x + "w(~" + y ; -- HL i('hmi
|
||||
<x + "h(", "o'" + y> => x + "w('" + y ; -- HL e(-o'meva
|
||||
<x + "e'", "h" + y> => x + "h~" + y ;
|
||||
<x + "h'", "e" + y> => x + "h~" + y ;
|
||||
<x + "e", "h" + y> => x + "h" + y ;
|
||||
<x + "h", "e" + y> => x + "h" + y ;
|
||||
<x + "o'", "o" + y> => x + "oy~" + y ;
|
||||
<x + "o", "o" + y> => x + "oy" + y ;
|
||||
<x + "o'", "w" + y> => x + "w~" + y ;
|
||||
<x + "w'", ("o"|"w") + y> => x + "w~" + y ;
|
||||
<x + "o", "w" + y> => x + "w" + y ;
|
||||
<x + "w", "o" + y> => x + "w" + y ;
|
||||
<x + "o'", ("a"|"h") + y> => x + "w~" + y ; -- b) O+(A|E) => O|OY
|
||||
<x + "w'", "a" + y> => x + "w~" + y ;
|
||||
<x + "a'", ("o"|"w") + y> => x + "w~" + y ; -- (A|E)+O => O|OY
|
||||
<x + ("o"|"w"), "a" + y> => x + "w" + y ;
|
||||
<x + "a", ("o"|"w") + y> => x + "w" + y ;
|
||||
<x + "o'", "e" + y> => x + "oy~" + y ;
|
||||
<x + "e'", "o" + y> => x + "oy~" + y ;
|
||||
<x + "o", "e" + y> => x + "oy" + y ;
|
||||
<x + "e", "o" + y> => x + "oy" + y ;
|
||||
<x + "w'", "h|" + y> => x + "w|~" + y ;
|
||||
<x + "w'", ("e"|"h") + y> => x + "w~" + y ;
|
||||
<x + "e'", "w" + y> => x + "w~" + y ;
|
||||
<x + "w", "e" + y> => x + "w" + y ;
|
||||
<x + "e", "w" + y> => x + "w" + y ;
|
||||
<x + "a'", ("e"|"h") + y> => x + "a~" + y ;
|
||||
<x + "a", "e'" + y> => x + "a'" + y ; -- for: a_'
|
||||
<x + "a", ("e"|"h") + y> => x + "a_" + y ; -- c) A+E => A
|
||||
<x + ("e"|"h"), "a" + y> => x + "h" + y ; -- E+A => E
|
||||
_ => s1 + s2
|
||||
} ; -- Do we need h~e => h~ etc.??
|
||||
|
||||
contractVowels22 : (Str*Str) -> (Str*Str) = \se ->
|
||||
-- for soundlaws, but where to put the contraction in the result: <x+v,y> vs. <x,v+y>
|
||||
-- Treat the accent in the translated Soundlaw: if one of the vowels had an accent,
|
||||
-- the contracted one gets an accent, and then the accent rules may decide which one!
|
||||
|
||||
case se of { -- short vowels followed by a diphthong beginning with the short vowel
|
||||
-- are swallowed:
|
||||
<x + "a", "ai" + y> => <x, "ai" + y> ; -- BR 15 d)
|
||||
<x + "a", "ay" + y> => <x, "ay" + y> ;
|
||||
<x + "e", "ei" + y> => <x, "ei" + y> ;
|
||||
<x + "e", "ey" + y> => <x, "ey" + y> ;
|
||||
<x + "o", "oi" + y> => <x, "oi" + y> ;
|
||||
<x + "o", "oy" + y> => <x, "oy" + y> ;
|
||||
<x + "y", "yi" + y> => <x, "yi" + y> ;
|
||||
|
||||
<x + "e", "h|" + y> => <x, "h|" + y> ; -- <x + h|, y> ??
|
||||
<x + "o", "h|" + y> => <x, "w|" + y> ;
|
||||
<x + "w", "h|" + y> => <x, "w|" + y> ;
|
||||
<x + "a", "h|" + y> => <x, "a|" + y> ;
|
||||
<x + "h", "h|" + y> => <x, "h|" + y> ;
|
||||
|
||||
-- short vowels followed by a diphthong beginning with another vowel
|
||||
-- usually make a long diphthong: -- BR 15 d)
|
||||
<x + "a", "ei" + y> => <x, "a|" + y> ;
|
||||
<x + "a", "oi" + y> => <x, "w|" + y> ;
|
||||
<x + "a", "oy" + y> => <x, "w" + y> ; -- HL?
|
||||
<x + "e", "ai" + y> => <x, "h|" + y> ;
|
||||
<x + "e", "oi" + y> => <x, "oi" + y> ; -- ?
|
||||
<x + "e", "oy" + y> => <x, "oy" + y> ; -- ? w|
|
||||
|
||||
-- Two equal or similar vowels are turned into the long one:
|
||||
<x + "a", "a" + y> => <x + "a_", y> ; -- BR 15 a)
|
||||
<x + "e", "e" + y> => <x + "ei", y> ;
|
||||
<x + "e", "h" + y> => <x, "h" + y> ; -- in verb inflection,
|
||||
<x + "h", "e" + y> => <x + "h", y> ; -- shorten the ending or
|
||||
<x + "o", "o" + y> => <x + "oy", y> ; -- better shorten the stem?
|
||||
<x + "o", "w" + y> => <x, "w" + y> ;
|
||||
<x + "w", "o" + y> => <x + "w", y> ;
|
||||
<x + "w", "w" + y> => <x + "w", y> ; -- TODO: a_a > a_ etc ??
|
||||
<x + "h", "h" + y> => <x, "h" + y> ; -- ??
|
||||
|
||||
-- O+E. or E.+O give OY, else O -- BR 15 b)
|
||||
<x + "o", "e" + y> => <x + "oy", y> ; -- but: E.+O:Y > O:Y
|
||||
<x + "e", "o" + y> => <x, "oy"+ y> ;
|
||||
<x + "w", "e" + y> => <x + "w", y> ;
|
||||
<x + "e", "w" + y> => <x, "w" + y> ;
|
||||
<x + "h", "w" + y> => <x, "w" + y> ;
|
||||
<x + "w", "h" + y> => <x + "w", y> ;
|
||||
|
||||
-- O+A or A+O give O_
|
||||
<x + "o", "a" + y> => <x + "w", y> ;
|
||||
<x + "a", "o" + y> => <x, "w" + y> ;
|
||||
<x + "w", "a" + y> => <x + "w", y> ;
|
||||
<x + "a", "w" + y> => <x, "w" + y> ;
|
||||
|
||||
-- A+E gives A_, E+A gives E_ -- BR 15 c)
|
||||
<x + "a", "e" + y> => <x + "a_", y> ;
|
||||
<x + "a", "h" + y> => <x + "a_", y> ;
|
||||
<x + "e", "a" + y> => <x + "h", y> ;
|
||||
<x + "h", "a" + y> => <x + "h", y> ;
|
||||
|
||||
-- Dubious cases I needed at the beginning of a word
|
||||
<x + "h(", "h|"+ y> => <x + "h|(", y> ; -- HL e('-
|
||||
<x + "h(", "h" + y> => <x + "h(", y> ; -- HL
|
||||
<x + "h(", "w" + y> => <x + "w(", y> ; -- HL i('hmi
|
||||
<x + "h(", "o" + y> => <x + "w(", y> ; -- HL e(-o'meva
|
||||
|
||||
_ => se
|
||||
} ;
|
||||
|
||||
-- Note: contractVowels22 should be the end version, if the accents are
|
||||
-- built into the derived souldlaws SL : Word*Ending -> Word*Ending
|
||||
-- BR 15 2. (see ResGrc.toSL')
|
||||
-- the accentuation follows from: new syllable gets an accent if one had
|
||||
-- <x "v'", "u" + y> => <x, "(v+u)'" + y>
|
||||
-- <x "v", "u'" + y> => <x, "(v+u)'" + y>
|
||||
-- and for end syllables:
|
||||
-- <x "v'", "u" + y> => <x, "(v+u)~" + y>
|
||||
-- <x "v", "u'" + y> => <x, "(v+u)'" + y>
|
||||
--
|
||||
-- Remaining cases with accents that would not follow: (where from?)
|
||||
-- <x + "e'", "eo" + y> => <x + "e'oy" + y> ;
|
||||
-- <x + "e'", "ea" + y> => <x + "e'a" + y> ;
|
||||
|
||||
} ;
|
||||
|
||||
-- contractConsonants
|
||||
|
||||
mutaConsonant = overload {
|
||||
mutaConsonant : Str -> Str = \str -> case str of { -- BR 19 1.
|
||||
x + #labial + "m" + y => x + "mm" + y ;
|
||||
x + #labial + "s" + y => x + "q" + y ;
|
||||
x + #labial + "t" + y => x + "pt" + y ;
|
||||
x + #labial + "v" + y => x + "fv" + y ;
|
||||
x + #guttural + "m" + y => x + "gm" + y ;
|
||||
x + #guttural + "s" + y => x + "x" + y ;
|
||||
x + #guttural + "t" + y => x + "kt" + y ;
|
||||
x + #guttural + "v" + y => x + "cv" + y ;
|
||||
x + #dental + "m" + y => x + "sm" + y ;
|
||||
x + #dental + "s" + y => x + "s" + y ;
|
||||
x + #dental + "t" + y => x + "st" + y ;
|
||||
x + #dental + "v" + y => x + "sv" + y ;
|
||||
_ => str
|
||||
} ; -- BR 19 2. psv => ps => q usw.
|
||||
mutaConsonant2 : (Str*Str) -> (Str*Str) = \str ->
|
||||
case str of { -- BR 19 1.
|
||||
<x + #labial, "m" + y> => <x + "m", "m" + y> ;
|
||||
<x + #labial, "s" + y> => <x + "q", y> ;
|
||||
<x + #labial, "t" + y> => <x + "p", "t" + y> ;
|
||||
<x + #labial, "v" + y> => <x + "f", "v" + y> ;
|
||||
<x + #guttural, "m" + y> => <x + "g", "m" + y> ;
|
||||
<x + #guttural, "s" + y> => <x + "x", y> ;
|
||||
-- <x + #guttural, "s" + y> => <x, "x" + y> ;
|
||||
<x + #guttural, "t" + y> => <x + "k", "t" + y> ;
|
||||
<x + #guttural, "v" + y> => <x + "c", "v" + y> ;
|
||||
<x + #dental, "m" + y> => <x + "s", "m" + y> ;
|
||||
<x + #dental, "s" + y> => <x, "s" + y> ;
|
||||
<x + #dental, "t" + y> => <x + "s", "t" + y> ;
|
||||
<x + #dental, "v" + y> => <x + "s", "v" + y> ;
|
||||
_ => str
|
||||
} ; -- BR 19 2. psv => ps => q usw.
|
||||
} ;
|
||||
|
||||
dropMSC : Str -> Str = \str -> case str of {
|
||||
x + m@(#labial | #guttural | #dental) + "s" + c@#consonant + y => x + m + c + y ;
|
||||
_ => str } ;
|
||||
mutaSConsonant : Str -> Str = \str -> mutaConsonant (dropMSC str) ;
|
||||
|
||||
nasalConsonant = overload {
|
||||
-- operating on a string, deprecated:
|
||||
nasalConsonant1 : Str -> Str = \str -> case str of { -- BR 20.1
|
||||
x + "n" + c@#guttural + y => x + "g" + c + y ; -- n+guttural
|
||||
x + "n" + c@#labial + y => x + "m" + c + y ; -- n+labial
|
||||
x + "n" + c@("l"|"r"|"m") + y => x + c + c + y ; -- n+(liquid | m)
|
||||
_ => str
|
||||
} ;
|
||||
nasalConsonant2 : Str -> Str -> Str = \s1,s2 -> case <s1,s2> of { -- BR 20.1
|
||||
<x + "n", c@#guttural + y> => x + "g" + c + y ;
|
||||
<x + "n", c@#labial + y> => x + "m" + c + y ;
|
||||
<x + "n", c@("l"|"r"|"m") + y> => x + c + c + y ;
|
||||
_ => s1 + s2
|
||||
} ;
|
||||
nasalConsonant22 : (Str * Str) -> (Str * Str) = \str -> case str of { -- BR 20.1
|
||||
<x + "n", c@#guttural + y> => <x + "g", c + y> ;
|
||||
<x + "n", c@#labial + y> => <x + "m", c + y> ;
|
||||
<x + "n", c@("l"|"r"|"m") + y> => <x + c, c + y> ;
|
||||
_ => str
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- short vowel + (n|m|r|l) + s > long vowel + (n|m|r|l)
|
||||
nasalSVowel = overload { -- TODO: and if there is an accent on the short vowel?
|
||||
nasalSVowel22 : (Str*Str) -> (Str*Str) = \str -> case str of { -- BR 20 2.
|
||||
<x + v@("a"|"e"|"i"|"o"|"y") -- BR 20 4.
|
||||
+ "n" + ("t"|""), "s*"> => <x + ersatzdehnung(v), "s"> ; -- logons > logoys
|
||||
<x + v@("a"|"e"|"i"|"o"|"y") -- gigants> gigas
|
||||
+ n@(#nasal|#liquid),
|
||||
"s" + y@vowel + z> => <x + ersatzdehnung(v) + n, y+z> ; -- efansa > efhna
|
||||
_ => str }
|
||||
} ;
|
||||
|
||||
-- instance of mutaConsonant, used in noun3LGL:
|
||||
-- c@(guttural or labial) + si > - + (cs)i where cs is a consonant depending on c,s
|
||||
gutlabS = overload {
|
||||
gutlabS22 : (Str*Str) -> (Str*Str) = \str -> case str of { -- BR 41 6.
|
||||
<x + c@#guttural, "si" + y> => <x, "xi" + y> ;
|
||||
<x + c@#labial, "si" + y> => <x, "qi" + y> ;
|
||||
_ => str }
|
||||
} ;
|
||||
|
||||
dropS = overload {
|
||||
dropS1 : Str -> Str = \str -> case str of { -- BR 16 1.
|
||||
x + v@#vowel + "s" + u@#vowel + y => x + v+u + y ;
|
||||
_ => str
|
||||
} ;
|
||||
dropS22 : (Str*Str) -> (Str*Str) = \str -> case str of { -- BR 16 1.
|
||||
<x + v@#vowel, "s" + u@#vowel + y> => <x + v, u + y> ;
|
||||
<x + v@#vowel + "s", u@#vowel + y> => <x + v, u + y> ;
|
||||
_ => str
|
||||
} ;
|
||||
} ;
|
||||
|
||||
swapLengths = overload {
|
||||
swapLengths1 : Str -> Str = \str -> case str of { -- BR 13 4. Quantitaetentausch
|
||||
x + "ha_" + y => str ;
|
||||
x + "h'a_" + y => str ;
|
||||
x + "h~a_" + y => str ;
|
||||
x + "ha" + y => x + "ea_" + y ;
|
||||
x + "h'a" + y => x + "e'a_" + y ;
|
||||
x + "h~a" + y => x + "e'a_" + y ;
|
||||
x + "ho" + y => x + "ew" + y ;
|
||||
x + "h'o" + y => x + "e'w" + y ;
|
||||
x + "h~o" + y => x + "e'w" + y ;
|
||||
_ => str } ;
|
||||
swapLengths22 : (Str*Str) -> (Str*Str) = \str -> case str of { -- BR 13 4. Quantitaetentausch
|
||||
<x + "h", "a_" + y> => str ;
|
||||
<x + "h'", "a_" + y> => str ;
|
||||
<x + "h~", "a_" + y> => str ;
|
||||
<x + "h", "a" + y> => <x + "e", "a_" + y> ;
|
||||
<x + "h'", "a" + y> => <x + "e'", "a_" + y> ;
|
||||
<x + "h~", "a" + y> => <x + "e'", "a_" + y> ;
|
||||
<x + "h", "oi" + y> => <x + "e", "oi" + y> ;
|
||||
<x + "h'", "oi" + y> => <x + "e'", "oi" + y> ;
|
||||
<x + "h~", "oi" + y> => <x + "e'", "oi" + y> ;
|
||||
<x + "h", "o" + y> => <x + "e", "w" + y> ;
|
||||
<x + "h'", "o" + y> => <x + "e'", "w" + y> ;
|
||||
<x + "h~", "o" + y> => <x + "e'", "w" + y> ;
|
||||
<x + "h", "w" + y> => <x + "e", "w" + y> ; -- BR 13 3.
|
||||
<x + "h'", "w" + y> => <x + "e'", "w" + y> ;
|
||||
<x + "h~", "w" + y> => <x + "e'", "w" + y> ;
|
||||
_ => str } ;
|
||||
} ;
|
||||
|
||||
{-
|
||||
iotaConsonant : Str -> Str = \str -> -- BR 21.1-6
|
||||
case str of { x + v@("e"|"i"|"y") +a@("'"|[]) + c@("n"|"r") + "j" + y =>
|
||||
x + (ersatzdehnung v) + a + c + y ;
|
||||
x + v@("a"|"o") +a@("'"|[]) + c@("n"|"r") + "j" + y =>
|
||||
x + (v + "i") + a + c + y ;
|
||||
x + "l" + "j" + y => x + "ll" + y ;
|
||||
x + ("t"|"v") + "j" + y => x + "s" + y ; -- + Edehnung: pantja > pansa > pa~sa
|
||||
x + ("k"|"c") + "j" + y => x + "ss" + y ;
|
||||
x + ("d"|"g") + "j" + y => x + "x" + y ;
|
||||
x + ("p"|"b"|"f") + "j" + y => x + "pt" + y ;
|
||||
x + v@#vowel +"s" + "j" + y => x + v + "i" + y
|
||||
} ;
|
||||
-}
|
||||
|
||||
}
|
||||
24
lib/src/ancient_greek/PhraseGrc.gf
Normal file
24
lib/src/ancient_greek/PhraseGrc.gf
Normal file
@@ -0,0 +1,24 @@
|
||||
concrete PhraseGrc of Phrase = CatGrc ** open Prelude, ResGrc in {
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
-- UttQS qs = {s = qs.s ! QDir} ;
|
||||
-- UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;
|
||||
-- UttImpPl pol imp = {s = pol.s ++ imp.s ! ... ! ImpF Pl False} ;
|
||||
-- UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ;
|
||||
--
|
||||
-- UttIP ip = {s = ip.s ! Nom} ; --- Acc also
|
||||
-- UttIAdv iadv = iadv ;
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
-- UttVP vp = {s = infVP False vp (agrP3 Sg)} ;
|
||||
UttAdv adv = adv ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = {s = conj.s2} ; ---
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = "," ++ np.s ! ResGrc.Voc} ;
|
||||
|
||||
}
|
||||
56
lib/src/ancient_greek/QuestionGrc.gf
Normal file
56
lib/src/ancient_greek/QuestionGrc.gf
Normal file
@@ -0,0 +1,56 @@
|
||||
concrete QuestionGrc of Question = CatGrc ** open ResGrc, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
QuestCl cl = {
|
||||
s = \\t,pol =>
|
||||
let cls = cl.s ! t ! pol
|
||||
in table {
|
||||
QDir => cls ! VSO ; -- Order ok?
|
||||
QIndir => "ei)" ++ cls ! VSO -- Order ok?
|
||||
}
|
||||
} ;
|
||||
|
||||
QuestVP qp vp =
|
||||
let cl = mkClause (qp.s ! Nom) (agrP3 qp.n) vp
|
||||
in {s = \\t,pol,qf => cl.s ! t ! pol ! SVO } ; -- TODO: ignore qf? Order?
|
||||
|
||||
-- QuestSlash ip slash =
|
||||
-- mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ;
|
||||
-- --- stranding in ExratGrc
|
||||
|
||||
-- QuestIAdv iadv cl = mkQuestion iadv cl ;
|
||||
|
||||
-- QuestIComp icomp np =
|
||||
-- mkQuestion icomp (mkClause (np.s ! Nom) np.a (predAux auxBe)) ;
|
||||
|
||||
|
||||
PrepIP p ip = {s = p.s ++ ip.s ! Acc} ;
|
||||
|
||||
AdvIP ip adv = {
|
||||
s = \\c => ip.s ! c ++ adv.s ;
|
||||
n = ip.n
|
||||
} ;
|
||||
|
||||
IdetCN idet cn = { -- (attributive) ti's as IDet inflects for gender
|
||||
-- s = \\c => idet.s ! cn.g ! c ++ cn.s ! (Ag cn.g idet.n P3) ! idet.n ! c ;
|
||||
s = \\c => idet.s ! cn.g ! c ++ cn.s ! idet.n ! c ;
|
||||
n = idet.n
|
||||
} ;
|
||||
|
||||
IdetIP idet = {
|
||||
s = \\c => idet.s ! Neutr ! c ;
|
||||
n = idet.n
|
||||
} ;
|
||||
|
||||
-- IdetQuant idet num = {
|
||||
-- s = idet.s ! num.n ++ num.s ;
|
||||
-- n = num.n
|
||||
-- } ;
|
||||
|
||||
CompIAdv a = a ;
|
||||
CompIP p = ss (p.s ! Nom) ;
|
||||
|
||||
}
|
||||
56
lib/src/ancient_greek/RelativeGrc.gf
Normal file
56
lib/src/ancient_greek/RelativeGrc.gf
Normal file
@@ -0,0 +1,56 @@
|
||||
concrete RelativeGrc of Relative = CatGrc ** open ResGrc in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
-- RelCl cl = {
|
||||
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir ;
|
||||
-- c = Nom
|
||||
-- } ;
|
||||
|
||||
RelVP rp vp = {
|
||||
-- s = \\t,ant,b,ag =>
|
||||
s = \\t,b,agr => -- TODO: anteriority, tense/vtense
|
||||
let
|
||||
cl = mkClause (rp.s ! (genderAgr agr) ! numberAgr agr ! Nom) agr vp
|
||||
in
|
||||
-- cl.s ! t ! ant ! b ! ODir ;
|
||||
cl.s ! t ! b ! SVO ; --ODir ;
|
||||
c = Nom
|
||||
} ;
|
||||
|
||||
-- Pied piping: "at which we are looking".
|
||||
|
||||
RelSlash rp slash = {
|
||||
-- s = \\t,a,p,agr =>
|
||||
-- slash.c2 ++ rp.s ! RPrep (fromAgr agr).g ++ slash.s ! t ! a ! p ! ODir ;
|
||||
s = \\t,p,agr => -- TODO: anteriority, tense/vtense
|
||||
slash.c2.s
|
||||
++ rp.s ! (genderAgr agr) ! (numberAgr agr) ! (slash.c2.c)
|
||||
++ slash.s ! t ! p ! OSV
|
||||
;
|
||||
c = Acc -- ??
|
||||
} ;
|
||||
|
||||
-- FunRP : Prep -> NP -> RP -> RP ; -- the mother of whom
|
||||
-- FunRP p np rp = {
|
||||
-- s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep (fromAgr np.a).g ;
|
||||
-- a = RAg np.a
|
||||
-- } ;
|
||||
|
||||
IdRP = { s = \\g,n,c => relPron ! n ! g ! c } ;
|
||||
|
||||
oper
|
||||
relPron : Number => Gender => Case => Str = -- BR 69
|
||||
table { Sg => table { Masc => cases "o('s*" "o('n" "oy(~" "w|(~" ;
|
||||
Fem => cases "h('" "h('n" "h(~s*" "h|(~" ;
|
||||
Neutr=> cases "o('" "o('" "oy(~" "w|(~"
|
||||
} ;
|
||||
Pl | Dl => -- are there dual forms ??
|
||||
table { Masc => cases "oi('" "oy('s*" "w(~n" "oi(~s*" ;
|
||||
Fem => cases "ai('" "a('s*" "w(~n" "ai(~s*" ;
|
||||
Neutr=> cases "a('" "a('" "w(~n" "oi(~s*"
|
||||
}
|
||||
} ;
|
||||
}
|
||||
2320
lib/src/ancient_greek/ResGrc.gf
Normal file
2320
lib/src/ancient_greek/ResGrc.gf
Normal file
File diff suppressed because it is too large
Load Diff
78
lib/src/ancient_greek/SentenceGrc.gf
Normal file
78
lib/src/ancient_greek/SentenceGrc.gf
Normal file
@@ -0,0 +1,78 @@
|
||||
concrete SentenceGrc of Sentence = CatGrc ** open Prelude, ResGrc, (T=TenseGrc) in {
|
||||
|
||||
flags
|
||||
optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
PredVP np vp = let agr = np.a in mkClause (np.s ! Nom) agr vp ;
|
||||
|
||||
PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
|
||||
|
||||
ImpVP vp = { -- Sketch only TODO
|
||||
s = \\pol,f =>
|
||||
let
|
||||
imp = vp.s ! (VPImp f) ;
|
||||
dont = case pol of { Pos => [] ; Neg => "mh'" } ;
|
||||
pn = case f of {ImpF IPres SgP2 => <Sg, P2> ;
|
||||
ImpF IPres SgP3 => <Sg, P3> ;
|
||||
ImpF IPres PlP2 => <Pl, P2> ;
|
||||
ImpF IPres PlP3 => <Pl, P3> ;
|
||||
ImpF IAor SgP2 => <Sg, P2> ;
|
||||
ImpF IAor SgP3 => <Sg, P3> ;
|
||||
ImpF IAor PlP2 => <Pl, P2> ;
|
||||
ImpF IAor PlP3 => <Pl, P3> ;
|
||||
ImpF IPerf SgP2 => <Sg, P2> ;
|
||||
ImpF IPerf SgP3 => <Sg, P3> ;
|
||||
ImpF IPerf PlP2 => <Pl, P2> ;
|
||||
ImpF IPerf PlP3 => <Pl, P3> } ;
|
||||
n = pn.p1 ;
|
||||
p = pn.p2
|
||||
in
|
||||
dont ++ imp ++ vp.obj ! (Ag Masc n p) ++ vp.adj ! Masc ! n;
|
||||
} ;
|
||||
|
||||
SlashVP np vp = -- : NP -> VPSlash -> ClSlash ; -- (whom) he sees
|
||||
mkClause (np.s ! Nom) np.a vp ** {c2 = vp.c2} ;
|
||||
|
||||
-- AdvSlash slash adv = {
|
||||
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||
-- c2 = slash.c2
|
||||
-- } ;
|
||||
|
||||
SlashPrep cl prep = cl ** {c2 = prep} ;
|
||||
|
||||
SlashVS np vs slash = -- TODO: Check with Greek grammar
|
||||
mkClause (np.s ! Nom) np.a
|
||||
(insertObj (\\_ => conjThat ++ slash.s) (predV vs)) **
|
||||
{c2 = slash.c2} ;
|
||||
|
||||
EmbedS s = {s = conjThat ++ s.s} ;
|
||||
-- EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
|
||||
|
||||
UseCl t p cl =
|
||||
let ta = antTense t.t t.a
|
||||
in lin S { s = t.s ++ p.s ++ cl.s ! ta ! p.p ! SVO } ; -- TODO: Order
|
||||
|
||||
UseQCl t p cl = {
|
||||
s = \\q => t.s ++ p.s ++ cl.s ! (antTense t.t t.a) ! p.p ! q
|
||||
} ;
|
||||
|
||||
UseRCl temp p cl = let ta = antTense temp.t temp.a in {
|
||||
s = \\agr => temp.s ++ p.s ++ cl.s ! ta ! p.p ! agr ;
|
||||
c = cl.c
|
||||
} ;
|
||||
|
||||
UseSlash t p cl = let ta = antTense t.t t.a in {
|
||||
s = t.s ++ p.s ++ cl.s ! ta ! p.p ! OSV ; -- TODO: Order
|
||||
c2 = cl.c2
|
||||
} ;
|
||||
|
||||
AdvS a s = {s = a.s ++ s.s} ; -- TODO: check with Greek grammar
|
||||
|
||||
RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ; -- TODO: check with Greek grammar
|
||||
|
||||
|
||||
}
|
||||
|
||||
156
lib/src/ancient_greek/StructuralGrc.gf
Normal file
156
lib/src/ancient_greek/StructuralGrc.gf
Normal file
@@ -0,0 +1,156 @@
|
||||
--# -path=.:../abstract:prelude:../common
|
||||
|
||||
concrete StructuralGrc of Structural = CatGrc **
|
||||
open ResGrc, (M = MorphoGrc), (P = ParadigmsGrc), Prelude, (N = NounGrc) in
|
||||
{
|
||||
|
||||
flags optimize=all ;
|
||||
|
||||
lin
|
||||
above_Prep = P.mkPrep "y(pe'r" Acc ;
|
||||
after_Prep = P.mkPrep "meta'" Acc ;
|
||||
-- all_Predet = ss "all" ;
|
||||
-- almost_AdA = ss "almost" ;
|
||||
-- almost_AdN = ss "quasi" ;
|
||||
although_Subj = ss "kai'per" ;
|
||||
always_AdV = P.mkAdV "a)ei'" ; -- Adv or AdV ??
|
||||
and_Conj = sd2 [] "kai'" ** {n = Pl} ;
|
||||
because_Subj = ss "a('te" ; -- ss "w(s*" -- ss "dio'ti"
|
||||
before_Prep = P.mkPrep "pro'" Gen ;
|
||||
behind_Prep = P.mkPrep "o)'pisven" Gen ; -- BR 198
|
||||
between_Prep = P.mkPrep "metaxy'" Gen ; -- BR 198
|
||||
both7and_DConj = sd2 "kai'" "kai'" ** {n = Pl} ; -- resp.: te - kai
|
||||
but_PConj = ss "de'" ;
|
||||
by8agent_Prep = P.mkPrep "y(po'" Gen ; -- TESTWORD
|
||||
by8means_Prep = P.mkPrep "dia'" Acc ;
|
||||
-- can8know_VV, can_VV = {
|
||||
-- s = table {
|
||||
-- VVF VInf => ["be able to"] ;
|
||||
-- VVF VPres => "can" ;
|
||||
-- VVF VPPart => ["been able to"] ;
|
||||
-- VVF VPresPart => ["being able to"] ;
|
||||
-- VVF VPast => "could" ; --# notpresent
|
||||
-- VVPastNeg => "couldn't" ; --# notpresent
|
||||
-- VVPresNeg => "can't"
|
||||
-- } ;
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
during_Prep = P.mkPrep "e)n" Dat ;
|
||||
either7or_DConj = sd2 "h)'" "h)'" ** {n = Sg} ;
|
||||
-- everybody_NP = regNP "everybody" Sg ;
|
||||
every_Det = M.detLikeAdj Sg "pa~s" "panto's" ; -- TODO: Accent in Neutr
|
||||
-- everything_NP = regNP "everything" Sg ;
|
||||
everywhere_Adv = ss "pantacoy~" ;
|
||||
few_Det = M.detLikeAdj Pl "o)li'gos" ; -- TODO: check accents
|
||||
-- first_Ord = ss "first" ; DEPRECATED
|
||||
for_Prep = P.mkPrep "pro'" Gen ;
|
||||
from_Prep = P.mkPrep "e)x" Gen ; -- from_Prep = mkPrep "a)po'" Gen ;
|
||||
he_Pron = M.mkPron Masc Sg P3 ;
|
||||
here_Adv = ss "e)nva'de" ;
|
||||
here7to_Adv = ss "e)nva'de" ;
|
||||
here7from_Adv = ss "e)nve'nde" ;
|
||||
how_IAdv = ss "pw~s*" ;
|
||||
how8many_IDet = M.detLikeAdj Pl "po'sos" ; -- BR 73 1
|
||||
if_Subj = ss "e(i" ; -- "ea'n"
|
||||
-- in8front_Prep = mkPrep "coram" Abl ;
|
||||
i_Pron = M.mkPron Masc Sg P1 ;
|
||||
in_Prep = P.mkPrep "e)n" Dat ;
|
||||
it_Pron = M.mkPron Neutr Sg P3 ;
|
||||
-- less_CAdv = ss "less" ;
|
||||
many_Det = lin Det (M.detLikeAdj Pl "pollo's") ; -- Sg exception Nom|Acc polly'(s|n)
|
||||
-- more_CAdv = ss "more" ;
|
||||
-- most_Predet = ss "most" ;
|
||||
much_Det = let det : Determiner = M.detLikeAdj Sg "pollo's"
|
||||
in { s = \\g,c => case <g,c> of { <Masc,Nom> => "polly's*" ;
|
||||
<Masc,Acc> => "polly'n" ;
|
||||
<Neutr,Nom|Acc> => "polly'" ;
|
||||
_ => det.s ! g ! c } ;
|
||||
n = det.n } ;
|
||||
-- must_VV = {
|
||||
-- s = table {
|
||||
-- VVF VInf => ["have to"] ;
|
||||
-- VVF VPres => "must" ;
|
||||
-- VVF VPPart => ["had to"] ;
|
||||
-- VVF VPresPart => ["having to"] ;
|
||||
-- VVF VPast => ["had to"] ; --# notpresent
|
||||
-- VVPastNeg => ["hadn't to"] ; --# notpresent
|
||||
-- VVPresNeg => "mustn't"
|
||||
-- } ;
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
no_Utt = ss (variants{ "oy)'" ; "pw~s* ga'r ;" ; "oy) dh~ta" }) ;
|
||||
on_Prep = P.mkPrep "e)pi'" Dat;
|
||||
-- one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED
|
||||
-- only_Predet = ss "tantum" ;
|
||||
or_Conj = sd2 [] "h)'" ** {n = Sg} ;
|
||||
-- otherwise_PConj = ss "otherwise" ;
|
||||
part_Prep = P.mkPrep [] Gen ; -- TODO: postnominal
|
||||
-- please_Voc = ss "please" ;
|
||||
possess_Prep = P.mkPrep [] Gen ; -- TODO: prenominal
|
||||
-- quite_Adv = ss "quite" ;
|
||||
she_Pron = M.mkPron Fem Sg P3 ;
|
||||
-- so_AdA = ss "sic" ;
|
||||
somebody_NP = M.indefPronNP Masc Sg ;
|
||||
someSg_Det = M.mkDeterminer2 Sg (cases "tis*" "tina'" "tino's*" "tini'")
|
||||
(cases "ti" "ti" "tino's*" "tini'") ;
|
||||
somePl_Det = M.mkDeterminer2 Pl (cases "tine's*" "tina's*" "tinw~n" "tisi'")
|
||||
(cases "tina'" "tina'" "tinw~n" "tisi'") ;
|
||||
something_NP = M.indefPronNP Neutr Sg ;
|
||||
somewhere_Adv = ss "poy" ;
|
||||
that_Quant = ekeinos_Quantifier ; -- TODO correct accents
|
||||
that_Subj = ss "o('ti" ;
|
||||
there_Adv = ss "ay)toy~" ; -- ss "e)ntay~va" ; ss "e)kei~"
|
||||
there7to_Adv = ss "e)ntay~va" ; -- ss "ay)to'se" ; ss "e)kei~se"
|
||||
there7from_Adv = ss "e)ntey~ven" ; -- ss "ay)t'ven" ; ss "e)kei~ven"
|
||||
therefore_PConj = ss "kai'toi" ; -- BR 253.24
|
||||
they_Pron = M.mkPron Masc Pl P3 ;
|
||||
this_Quant = hode_Quantifier ;
|
||||
through_Prep = P.mkPrep "dia'" Gen;
|
||||
too_AdA = ss "a)'gan" ;
|
||||
to_Prep = P.mkPrep "pro's" Acc ;
|
||||
under_Prep = P.mkPrep "y(po'" Gen ;
|
||||
-- very_AdA = ss "valde" ;
|
||||
want_VV = P.mkVV (P.mkV "boy'lomai") ; -- TODO: fut boylh'somai, e)boylh'vhn -- me'llw
|
||||
we_Pron = M.mkPron Masc Pl P1 ;
|
||||
whatPl_IP = M.mkIP Pl Neutr ;
|
||||
whatSg_IP = M.mkIP Sg Neutr ;
|
||||
when_IAdv = ss "po'te" ;
|
||||
when_Subj = ss "o('te" ; -- "o(po'te" "h(ni'ka" "e)pei'" "e)peidh'" "w(s*" BR 286
|
||||
where_IAdv = ss "poy~" ;
|
||||
which_IQuant = {s = \\n,g,c => M.iPron ! n ! g ! c} ;
|
||||
whoPl_IP = M.mkIP Pl Masc ;
|
||||
whoSg_IP = M.mkIP Sg Masc ;
|
||||
why_IAdv = ss "dio'ti" ;
|
||||
without_Prep = P.mkPrep "a)'ney" Gen ;
|
||||
with_Prep = P.mkPrep "sy'n" Dat ; -- P.mkPrep "meta'" Gen
|
||||
yes_Utt = ss "nai'" ;
|
||||
youSg_Pron = M.mkPron Masc Sg P2 ;
|
||||
youPl_Pron = M.mkPron Masc Pl P2 ;
|
||||
youPol_Pron = M.mkPron Masc Sg P2 ; -- Is there a polite form in ancient greek?
|
||||
|
||||
-- no_Quant : Quant ;
|
||||
-- not_Predet : Predet ;
|
||||
-- if_then_Conj : Conj ;
|
||||
-- at_least_AdN : AdN ;
|
||||
-- at_most_AdN : AdN ;
|
||||
-- nobody_NP : NP ; -- "oy)dei's*" BR 73 1
|
||||
nobody_NP = quantNP oydeis_Quantifier mhdeis_Quantifier Masc Sg ;
|
||||
nothing_NP = quantNP oydeis_Quantifier mhdeis_Quantifier Neutr Sg ; -- "oy)de'n"
|
||||
except_Prep = P.mkPrep "a)'ney" Gen ;
|
||||
|
||||
-- as_CAdv : CAdv ;
|
||||
|
||||
-- have_V2 : V2 ;
|
||||
-- have_V3 : V3 ;
|
||||
-- have_not_V3 : V3;
|
||||
|
||||
lin language_title_Utt = ss "ancientgreek" ;
|
||||
|
||||
oper
|
||||
quantNP : Quantifier -> Quantifier -> Gender -> Number -> NP = \p,q,g,n ->
|
||||
lin NP { s = \\c => p.s ! n ! g ! c ;
|
||||
isPron = False ;
|
||||
e = \\c => q.s ! n ! g ! c ;
|
||||
a = Ag g n P3 } ;
|
||||
}
|
||||
|
||||
39
lib/src/ancient_greek/SymbolGrc.gf
Normal file
39
lib/src/ancient_greek/SymbolGrc.gf
Normal file
@@ -0,0 +1,39 @@
|
||||
--# -path=.:abstract:common
|
||||
|
||||
concrete SymbolGrc of Symbol = CatGrc ** open Prelude, ResGrc in {
|
||||
--
|
||||
--lin
|
||||
-- SymbPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- IntPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- FloatPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- NumPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- CNIntNP cn i = {
|
||||
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
|
||||
-- a = agrgP3 Sg cn.g
|
||||
-- } ;
|
||||
-- CNSymbNP det cn xs = {
|
||||
-- s = \\c => det.s ++ cn.s ! det.n ! c ++ xs.s ;
|
||||
-- a = agrgP3 det.n cn.g
|
||||
-- } ;
|
||||
-- CNNumNP cn i = {
|
||||
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
|
||||
-- a = agrgP3 Sg cn.g
|
||||
-- } ;
|
||||
--
|
||||
-- SymbS sy = sy ;
|
||||
--
|
||||
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;
|
||||
-- SymbOrd sy = {s = sy.s ++ "th"} ;
|
||||
--
|
||||
--lincat
|
||||
--
|
||||
-- Symb, [Symb] = SS ;
|
||||
--
|
||||
--lin
|
||||
--
|
||||
-- MkSymb s = s ;
|
||||
--
|
||||
-- BaseSymb = infixSS "and" ;
|
||||
-- ConsSymb = infixSS "," ;
|
||||
--
|
||||
}
|
||||
5
lib/src/ancient_greek/SymbolicGrc.gf
Normal file
5
lib/src/ancient_greek/SymbolicGrc.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:../german:../common:../abstract:../prelude
|
||||
|
||||
resource SymbolicGrc = Symbolic with
|
||||
(Symbol = SymbolGrc),
|
||||
(Grammar = GrammarGrc) ;
|
||||
4
lib/src/ancient_greek/SyntaxGrc.gf
Normal file
4
lib/src/ancient_greek/SyntaxGrc.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
--# -path=.:alltenses:prelude
|
||||
|
||||
instance SyntaxGrc of Syntax = ConstructorsGrc, CatGrc, StructuralGrc, CombinatorsGrc ;
|
||||
|
||||
12
lib/src/ancient_greek/TenseGrc.gf
Normal file
12
lib/src/ancient_greek/TenseGrc.gf
Normal file
@@ -0,0 +1,12 @@
|
||||
concrete TenseGrc of Tense =
|
||||
CatGrc [Tense,Temp], TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** open ResGrc in {
|
||||
|
||||
lin
|
||||
TTAnt t a = {s = t.s ++ a.s ; t = t.t ; a = a.a } ;
|
||||
|
||||
TPres = {s = [] ; t = VPres VInd } ; -- or: VPerf VInd BR 220
|
||||
TPast = {s = [] ; t = VImpf} ; -- or: VAor VInd, VPlqm
|
||||
TFut = {s = [] ; t = VFut FInd} ; -- and: VFut Opt, Inf, Part
|
||||
TCond = {s = "a)'n" ; t = VPres VInd} ; -- ???
|
||||
|
||||
}
|
||||
22
lib/src/ancient_greek/TerminologyGrc.gf
Normal file
22
lib/src/ancient_greek/TerminologyGrc.gf
Normal file
@@ -0,0 +1,22 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
concrete TerminologyGrc of Terminology = CatGrc ** open
|
||||
ResGrc,
|
||||
ParadigmsGrc,
|
||||
(G = GrammarGrc),
|
||||
(S = SyntaxGrc),
|
||||
(L = LexiconGrc),
|
||||
Prelude
|
||||
in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
|
||||
lincat
|
||||
Category = G.N ;
|
||||
ParameterType = G.N ;
|
||||
Parameter = G.N ;
|
||||
|
||||
Heading = {s : Str} ;
|
||||
|
||||
-- stolen from Ger, incomplete
|
||||
}
|
||||
34
lib/src/ancient_greek/TransferGrcAbs.gf
Normal file
34
lib/src/ancient_greek/TransferGrcAbs.gf
Normal file
@@ -0,0 +1,34 @@
|
||||
abstract TransferGrcAbs = Sentence, Noun, Verb, Structural, ExtraGrcAbs ** {
|
||||
|
||||
fun refl2medium : Cl -> Cl ;
|
||||
def refl2medium (PredVP subj (ReflVP (SlashV2a v))) = PredVP subj (MedVP v) ;
|
||||
|
||||
-- The transformation of a (PossPron pron):Quant to an adjective or Adv is impossible,
|
||||
-- since it would need data DetCN rather than fun DetCN !
|
||||
--
|
||||
-- data DetCN : Cat.Det -> Cat.CN -> Cat.NP ;
|
||||
--
|
||||
-- fun possAdj : NP -> NP ;
|
||||
-- def possAdj (DetCN (DetQuant (PossPron pers) num) cn) =
|
||||
-- (DetCN (DetQuant DefArt num) (AdvCN cn (PrepNP possess_Prep (UsePron pers)))) ;
|
||||
|
||||
-- Likewise, PartVP is not a data constructor!
|
||||
-- fun partAP : AP -> AP ;
|
||||
-- def partAP (PartVP vp) = PartPresVP PPos vp ;
|
||||
|
||||
}
|
||||
|
||||
{-
|
||||
-- Expl. > i AllGrc.gf
|
||||
-- > p "e)gw' le'gw e)mayto'n" | pt -transfer=refl2medium | l
|
||||
-- PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2a read_V2))))) NoVoc
|
||||
|
||||
AllGrcAbs> pt (PredVP (UsePron i_Pron) (ReflVP (SlashV2a read_V2))) | l
|
||||
e)gw' le'gw e)mayto'n
|
||||
|
||||
AllGrcAbs> pt -transfer=refl2medium (PredVP (UsePron i_Pron) (ReflVP (SlashV2a read_V2))) | l
|
||||
e)gw' le'gomai
|
||||
|
||||
-}
|
||||
|
||||
|
||||
70
lib/src/ancient_greek/VerbGrc.gf
Normal file
70
lib/src/ancient_greek/VerbGrc.gf
Normal file
@@ -0,0 +1,70 @@
|
||||
--# -path=.:../abstract:../prelude:../common:
|
||||
|
||||
concrete VerbGrc of Verb = CatGrc ** open Prelude, ResGrc, (M=MorphoGrc) in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
--2 Complementization rules
|
||||
|
||||
lin
|
||||
UseV = predV ;
|
||||
|
||||
SlashV2a v = predV2 v ;
|
||||
Slash2V3 v np = insertObjc (\\a => v.c2.s ++ np.s ! v.c2.c) (predV v ** {c2 = v.c3}) ;
|
||||
Slash3V3 v np = insertObjc (\\a => v.c3.s ++ np.s ! v.c2.c) (predV2 v) ;
|
||||
|
||||
ComplVV v vp = insertObj (\\a => infVP vp a) (predV v) ; -- predVV? Need this for the tablet sent. TODO
|
||||
ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
||||
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap = insertObj (\\a => ap.s ! AF (genderAgr a) (numberAgr a) Nom) (predV v) ; -- TODO check
|
||||
|
||||
SlashV2V v vp = insertObjc (\\a => infVP vp a) (predV2 v) ;
|
||||
SlashV2S v s = insertObjc (\\_ => conjThat ++ s.s) (predV2 v) ;
|
||||
SlashV2Q v q = insertObjc (\\_ => q.s ! QIndir) (predV2 v) ;
|
||||
-- SlashV2A v ap = insertObjc (\\a => ap.s ! AF (genderAgr a) (numberAgr a) Nom) (predV2 v) ; -- TODO
|
||||
|
||||
ComplSlash vp np = insertObj (\\a => appPrep vp.c2 np) vp ;
|
||||
|
||||
-- SlashVV vv vp =
|
||||
-- insertObj (\\a => infVP vv.isAux vp a) (predVV vv) ** {c2 = vp.c2} ;
|
||||
|
||||
-- Need SlashV2V for the Greek school tablet example: advise the students to abstain from meat
|
||||
-- abstract/Verb.gf: SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||
-- SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
||||
|
||||
SlashV2VNP vv np vp =
|
||||
insertObjPre (\\_ => vv.c2.s ++ np.s ! vv.c2.c)
|
||||
(insertObjc (\\a => infVP vp a) (predV2 vv)) ** {c2 = vp.c2} ;
|
||||
|
||||
--2 Other ways of forming verb phrases:
|
||||
|
||||
UseComp comp = insertObj comp.s (predV einai_V) ;
|
||||
|
||||
ReflVP v = insertObjPre (\\a => v.c2.s ++ M.reflPron ! a ! v.c2.c) v ;
|
||||
|
||||
-- experimental: Med/Pass
|
||||
PassV2 v = insertObjPre (\\a => case a of {Ag g n p => v.med ! Part GPres (AF g n Nom)})
|
||||
-- Irrefl => v.med ! Part GPres (AF Masc Sg Nom) }) -- default?? TODO
|
||||
(predV M.eimi_V) ;
|
||||
|
||||
--- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
||||
|
||||
AdvVP vp adv = insertAdv adv.s vp ;
|
||||
|
||||
AdVVP adv vp = insertObj (\\a => adv.s) vp ;
|
||||
|
||||
--2 Complements to copula
|
||||
|
||||
CompAP ap = {s = \\agr => case agr of {Ag g n p => ap.s ! AF g n Nom} } ;
|
||||
CompNP np = {s = \\agr => np.s ! Nom} ; -- TODO: How to drop defArt?
|
||||
CompAdv a = {s = \\agr => a.s} ;
|
||||
CompCN cn = {s = \\agr => let n = numberAgr agr
|
||||
in cn.s ! n ! Nom ++ cn.s2 ! n ! Nom} ;
|
||||
|
||||
-- Copula alone
|
||||
|
||||
UseCopula = predV einai_V ;
|
||||
|
||||
oper
|
||||
einai_V = (lin V M.eimi_V) ;
|
||||
}
|
||||
6
lib/src/ancient_greek/adjectivesBR.gfs
Normal file
6
lib/src/ancient_greek/adjectivesBR.gfs
Normal file
@@ -0,0 +1,6 @@
|
||||
-- For gf-3.2, do everything in the greek directory, without gf*/testsuite and Setup.hs
|
||||
i -path=.:alltenses AllGrc.gfo
|
||||
rf -file=adjectivesBR -lines -tree | l -table -to_ancientgreek
|
||||
|
||||
|
||||
|
||||
1841
lib/src/ancient_greek/adjectivesBR.gold
Normal file
1841
lib/src/ancient_greek/adjectivesBR.gold
Normal file
File diff suppressed because it is too large
Load Diff
155
lib/src/ancient_greek/bornemann
Normal file
155
lib/src/ancient_greek/bornemann
Normal file
@@ -0,0 +1,155 @@
|
||||
-- Note: Comments at the end of the line makes the whole line ignored! 4/11
|
||||
|
||||
-- A-declension
|
||||
|
||||
idea_N
|
||||
chora_N
|
||||
stratia_N
|
||||
doxa_N
|
||||
glotta_N
|
||||
macha_N
|
||||
nika_N
|
||||
tima_N
|
||||
thalatta_N
|
||||
gephyra_N
|
||||
|
||||
neanias_N
|
||||
polita_N
|
||||
dikasta_N
|
||||
atreida_N
|
||||
athena_N
|
||||
gea_N
|
||||
hermea_N
|
||||
|
||||
-- O-declension
|
||||
|
||||
logos_N
|
||||
demos_N
|
||||
anthropos_N
|
||||
hodos_N
|
||||
doron_N
|
||||
-- ergon_N
|
||||
|
||||
agathos_A
|
||||
dikaios_A
|
||||
|
||||
nous_N
|
||||
osteon_N
|
||||
eunous_A
|
||||
|
||||
argyrous_A
|
||||
chrysous_A
|
||||
|
||||
neos_N
|
||||
news_N
|
||||
Meneleos_PN
|
||||
ilews_A
|
||||
|
||||
-- Noun declension III
|
||||
|
||||
krathr_N
|
||||
rhtwr_N
|
||||
als_N
|
||||
vhr_N
|
||||
|
||||
-- gutturals -k, -g, -x
|
||||
fylax_N
|
||||
aix_N
|
||||
gyps_N
|
||||
fleps_N
|
||||
|
||||
-- dentals -t, -d, -v
|
||||
esvhs_N
|
||||
elpis_N
|
||||
caris_N
|
||||
swma_N
|
||||
ellhn_N
|
||||
agwn_N
|
||||
poimhn_N
|
||||
daimwn_N
|
||||
eydaimwn_A
|
||||
-- kakion_A
|
||||
|
||||
-- stems ending in -nt:
|
||||
gigas_N
|
||||
odoys_N
|
||||
gerwn_N
|
||||
|
||||
-- adjectives and participles
|
||||
pas_A
|
||||
ekwn_A
|
||||
lywn_A
|
||||
lysas_A
|
||||
theis_A
|
||||
dys_A
|
||||
carieis_A
|
||||
|
||||
-- stems ending in -r with 3 ablautlevels
|
||||
pathr_N
|
||||
mhthr_N
|
||||
vygathr_N
|
||||
gasthr_N
|
||||
anhr_N
|
||||
|
||||
-- s-stems
|
||||
genos_N
|
||||
eugenhs_A
|
||||
diogenhs_N
|
||||
periklhs_N
|
||||
philosopher_N
|
||||
|
||||
polis_N
|
||||
dynamis_N
|
||||
phcys_N
|
||||
asty_N
|
||||
icvys_N
|
||||
sys_N
|
||||
pitys_N
|
||||
erinys_N
|
||||
basileys_N
|
||||
|
||||
-- verbs
|
||||
paideyw_V
|
||||
timaw_V
|
||||
poiew_V
|
||||
doylow_V
|
||||
leipw_V
|
||||
elleipw_V
|
||||
|
||||
tivhmi_V
|
||||
ihmi_V
|
||||
didwmi_V
|
||||
isthmi_V
|
||||
|
||||
deiknymi_V
|
||||
|
||||
--verbsWmut
|
||||
leipw_V
|
||||
elleipw_V
|
||||
trepw_V
|
||||
grafw_V
|
||||
tribw_V
|
||||
diwkw_V
|
||||
arcw_V
|
||||
legw_V
|
||||
anytw_V
|
||||
peivw_V
|
||||
pseudw_V
|
||||
|
||||
typtw_V
|
||||
kryptw_V
|
||||
blabtw_V
|
||||
fylattw_V
|
||||
|
||||
ktizw_V
|
||||
nomizw_V
|
||||
swzw_V
|
||||
scizw_V
|
||||
evizw_V
|
||||
|
||||
-- verbsWliq
|
||||
derw_V
|
||||
menw_V
|
||||
nemw_V
|
||||
angellw_V
|
||||
fainw_V
|
||||
10
lib/src/ancient_greek/nounsBR.gfs
Normal file
10
lib/src/ancient_greek/nounsBR.gfs
Normal file
@@ -0,0 +1,10 @@
|
||||
-- For gf-3.2, do it in the greek directory, without gf*/testsuite/libraries and Setup.hs
|
||||
-- rf -file=bornemann -lines -tree | l -table -to_ancientgreek | ?grep s
|
||||
|
||||
-- Use Makefile and 'make nouns', then 'make ediff-nouns' to create nounsBR, nounsBR.out
|
||||
|
||||
se utf8
|
||||
i -path=.:alltenses AllGrc.gfo
|
||||
rf -file=nounsBR -lines -tree | l -table -to_ancientgreek
|
||||
|
||||
|
||||
1264
lib/src/ancient_greek/nounsBR.gold
Normal file
1264
lib/src/ancient_greek/nounsBR.gold
Normal file
File diff suppressed because it is too large
Load Diff
6
lib/src/ancient_greek/verbsBR.gfs
Normal file
6
lib/src/ancient_greek/verbsBR.gfs
Normal file
@@ -0,0 +1,6 @@
|
||||
-- For gf-3.2, do everything in the greek directory, without gf*/testsuite and Setup.hs
|
||||
|
||||
i -path=.:alltenses AllGrc.gfo
|
||||
rf -file=verbsBR -lines -tree | l -table -to_ancientgreek
|
||||
|
||||
|
||||
33705
lib/src/ancient_greek/verbsBR.gold
Normal file
33705
lib/src/ancient_greek/verbsBR.gold
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user