copy files over from GF-latin

This commit is contained in:
Herbert Lange
2019-01-14 16:40:07 +01:00
parent 579bdfcca5
commit 58c8cf70ea
492 changed files with 6213807 additions and 809 deletions

View File

@@ -2,45 +2,52 @@ concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
lin
-- PositA : A -> AP ; -- warm
PositA a =
{ s = \\ag => a.s ! Posit ! ag };
PositA a = -- A -> AP
{
s = table { Ag g n c => a.s ! Posit ! Ag g n c } ;
};
{-
-- ComparA : A -> NP -> AP ; -- warmer than I
ComparA a np = {
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
isPre = False
s = \\ag => a.s ! Compar ! ag ++ "quam" ++ np.s ! Nom ;
} ;
-- $SuperlA$ belongs to determiner syntax in $Noun$.
-- ComplA2 : A2 -> NP -> AP ; -- married to her
ComplA2 a np = {
s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
isPre = False
s = \\ag => a.s ! Posit ! ag ++ a.c.s ++ np.s ! a.c.c ;
} ;
-- ReflA2 : A2 -> AP -- married to myself
ReflA2 a = {
s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
isPre = False
s = \\ag => a.s ! Posit ! ag ++ a.c.s ++
table { Acc => "memet" ; _ => "egomet" } ! a.c.c;
} ;
SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ;
isPre = False
} ;
-}
-- UseA2 : A2 -> AP ; -- married
UseA2 = PositA ;
-- UseComparA : A -> AP ; -- warmer
UseComparA a =
{ s = \\ag => a.s ! Compar ! ag };
-- CAdvAP : CAdv -> AP -> NP -> AP ; -- as cool as John
CAdvAP cadv ap np =
{ s = \\ag => cadv.s ++ ap.s ! ag ++ cadv.p ++ np.s ! Nom } ;
-- The superlative use is covered in $Ord$.
-- AdjOrd : Ord -> AP ; -- warmest
AdjOrd a = { s = table { Ag g n c => a.s ! g ! n ! c } } ;
-- SentAP : AP -> SC -> AP ; -- good that she is here
SentAP ap sc =
{ s = \\a => ap.s ! a ++ sc.s } ;
-- AdAP : AdA -> AP -> AP ; -- very warm
AdAP ada ap = {
s = \\agr => ada.s ++ ap.s ! agr ;
} ;
-- UseA2 : A2 -> AP
UseA2 a = -- A2 -> AP
{
s = table { Ag g n c => a.s ! Posit ! Ag g n c } ;
} ;
AdAP ada ap =
{ s = \\agr => ada.s ++ ap.s ! agr } ;
-- AdvAP : AP -> Adv -> AP ; -- warm by nature
AdvAP ap adv =
{ s = \\ag => ap.s ! ag ++ adv.s ! Posit} ;
}

View File

@@ -1,27 +1,38 @@
concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude in
concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude, ParadigmsLat in
{
lin
-- PositAdvAdj a = {s = a.s ! AAdv} ;
-- ComparAdvAdj cadv a np = {
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom
-- } ;
-- ComparAdvAdjS cadv a s = {
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
-- } ;
-- PositAdvAdj : A -> Adv ; -- warmly
PositAdvAdj a = a.adv ;
-- PrepNP : Prep -> NP -> Adv ; -- in the house
PrepNP prep np = {s = prep.s ++ np.s ! prep.c } ;
PrepNP prep np =
mkAdv (prep.s ++ np.adv ++ np.det.s ! np.g ! prep.c ++ np.preap.s ! (Ag np.g np.n prep.c) ++
np.s ! prep.c ++ np.postap.s ! (Ag np.g np.n prep.c ) ++ np.det.sp ! np.g ! prep.c ) ;
-- AdAdv = cc2 ;
-- ComparAdvAdj : CAdv -> A -> NP -> Adv ; -- more warmly than John
ComparAdvAdj cadv a np =
mkAdv (cadv.s ++ a.adv.s ! Compar ++ cadv.p ++ np.s ! Nom) ;
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
ComparAdvAdjS cadv a s =
mkAdv (cadv.s ++ a.adv.s ! Compar ++ cadv.p ++ combineSentence s ! SPreS ! PreV ! SOV ) ;
-- AdAdv : AdA -> Adv -> Adv ; -- very quickly
AdAdv ada adv = mkAdv (ada.s ++ (adv.s ! Posit) ) ;
-- PositAdAAdj : A -> AdA ; -- extremely
PositAdAAdj a =
{ s = a.adv.s ! Posit } ;
-- Subordinate clauses can function as adverbs.
-- SubjS : Subj -> S -> Adv ; -- when she sleeps
SubjS = cc2 ;
SubjS subj s = mkAdv (subj.s ++ combineSentence s ! SPreS ! PreV ! SOV ) ;
-----b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
--
-- AdnCAdv cadv = {s = cadv.s ++ "than"} ;
-- AdnCAdv : CAdv -> AdN ; -- less (than five)
AdnCAdv cadv = {s = cadv.s ++ cadv.p} ;
--
}

View File

@@ -1,4 +1,4 @@
concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
concrete CatLat of Cat = CommonX-[Adv] ** open ResLat, ParamX, Prelude in {
flags optimize=all_subs ;
@@ -6,7 +6,7 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
---- Tensed/Untensed
--
S = {s : Str} ;
S = Sentence ;
QS = {s : QForm => Str} ;
-- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts
-- SSlash = {s : Str ; c2 : Str} ;
@@ -15,11 +15,12 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
--
Cl = Clause ;
ClSlash = Clause ;
Imp = {s : Polarity => ImpForm => Str} ;
Imp = {s : Polarity => VImpForm => Str} ;
--
---- Question
--
QCl = {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ;
--
-- TO FIX
QCl = Clause ; -- {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ;
IP = {s : Case => Str ; n : Number} ;
IComp = {s : Str} ;
IDet = Determiner ; --{s : Str ; n : Number} ;
@@ -36,37 +37,35 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
---- Verb
--
VP = ResLat.VerbPhrase ;
VPSlash = VP ** {c2 : Preposition} ;
VPSlash = ResLat.ObjectVerbPhrase ; -- VP ** {c2 : Preposition} ;
Comp = {s : Agr => Str} ;
--
---- Adjective
--
-- AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
AP =
{
s : Agr => Str ;
-- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns
} ;
AP = AdjectivePhrase ;
--
---- Noun
--
CN = ResLat.ComplexNoun ;
CN = ResLat.CommonNoun ;
NP = ResLat.NounPhrase ;
Pron = ResLat.Pronoun ;
Det = Determiner ;
Predet, Ord = {s : Str} ;
Predet = {s : Str} ;
Ord = Ordinal ;
Num = {s : Gender => Case => Str ; n : Number} ;
-- Card = {s : Str ; n : Number} ;
Card = {s : Gender => Case => Str ; n : Number} ;
Quant = Quantifier ;
--
---- Numeral
--
-- Numeral = {s : CardOrd => Str ; n : Number} ;
Numeral = ResLat.Numeral ;
Digits = {s : Str ; unit : Unit} ;
--
---- Structural
--
Conj = {s1,s2 : Str ; n : Number} ;
Conj = ResLat.Conjunction; --{s1,s2 : Str ; n : Number} ;
Subj = {s : Str} ;
Prep = ResLat.Preposition ;
--
@@ -79,10 +78,15 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
V2V = Verb ** {c2 : Str ; isAux : Bool} ;
A = Adjective ;
Adv = Adverb ;
N = Noun ;
N2 = Noun ** { c : Prep } ;
N3 = Noun ** { c : Prep ; c2 : Prep } ;
PN = Noun ;
A2 = Adjective ** { c : Prep} ;
linref
NP = \np -> np.preap.s ! Ag np.g np.n Nom ++ np.s ! Nom ++ np.postap.s ! Ag np.g np.n Nom ;
VP = \vp -> vp.adv ++ vp.inf ! VInfActPres ++ vp.obj ++ vp.compl ! Ag Masc Sg Nom ;
}

View File

@@ -1,26 +1,41 @@
concrete ConjunctionLat of Conjunction =
CatLat ** open ResLat, StructuralLat, Coordination, Prelude in {
CatLat ** open ResLat, StructuralLat, Coordination, Prelude, ParadigmsLat in {
--
-- flags optimize=all_subs ;
--
--
lin
--
ConjS = conjunctDistrSS ;
--
ConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
--
ConjAP conj ss = conjunctDistrTable Agr conj ss ;
--
--{---b
--
-- ConjS = conjunctSS ;
-- ConjS : Conj -> ListS -> S ; -- he walks and she runs
-- TO FIX
-- ConjS conj ss = { s = \\_ => conjunctDistrX conj (ss.l ! conj.c) ; sadv = lin Adv { s = []} ; neg = ss.neg } ;
-- ConjAdv : Conj -> ListAdv -> Adv ; -- here or there
ConjAdv conj ss = mkAdv (conjunctDistrSS conj (ss.l ! conj.c) ).s ;
-- ConjNP : Conj -> ListNP -> NP ; -- she or we
ConjNP conj nps =
{
s = case conj.c of {
And => case nps.isBase of {
False => (conjunctDistrTable Case conj (nps.l ! And)).s ;
True => \\c => conj.s1 ++ (nps.l ! And).s1 ! c ++ conj.s2 ++ (nps.l ! And).s2 ! c
} ;
c => (conjunctDistrTable Case conj (nps.l ! And)).s
} ;
n = case conj.c of { And => Pl ; _ => nps.n } ;
g = nps.g ;
p = nps.p ;
adv = nps.adv ;
preap = nps.preap ;
postap = nps.postap ;
det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = nps.n };
} ;
-- ConjAP : Conj -> ListAP -> AP ;
ConjAP conj ss = conjunctDistrTable Agr conj (ss.l ! conj.c) ;
--
-- DConjS = conjunctDistrSS ;
--
-- ConjAdv = conjunctSS ;
-- DConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctTable Case conj ss ** {
@@ -29,29 +44,77 @@ concrete ConjunctionLat of Conjunction =
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
--
-- ConjAP conj ss = conjunctTable Agr conj ss ;
--
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
---}
--
---- These fun's are generated from the list cat's.
--
-- BaseS = twoSS ;
-- ConsS = consrSS comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS "et" ;
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
BaseAP x y = lin A ( twoTable Agr x y ) ;
ConsAP xs x = lin A ( consrTable Agr and_Conj.s2 xs x );
--
-- BaseS : S -> S -> ListS
-- TO FIX
-- BaseS x y = { l = \\c => twoStr (x.s ! PreS) (y.s ! PreS) } ;
-- ConsS : S -> ListS -> ListS
-- TO FIX
-- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) };
-- BaseAdv : Adv -> Adv -> ListAdv
BaseAdv x y = { l = \\c => twoSS (ss (x.s ! Posit)) (ss (y.s ! Posit)) } ;
-- ConsAdv : Adv -> ListAdv -> ListAdv
ConsAdv x xs = { l = \\_ => consrSS bindComma (ss (x.s ! Posit)) (xs.l ! Comma) } ;
-- BaseNP : NP -> NP -> ListNP ; -- John, Mary
BaseNP x y = {
l = \\c => twoTable Case x y ;
g = Masc ; -- Just guessing (but maybe sexist bullshit)
n = matchNumber x.n y.n ;
p = P3 ;
adv = x.adv ++ y.adv ;
preap = lin AP { s = \\a => x.preap.s ! a ++ y.preap.s ! a } ;
postap = lin AP { s = \\a => x.postap.s ! a ++ y.postap.s ! a } ;
isBase = True ;
det = { s = \\g,c => x.det.s ! g ! c ++ y.det.s ! g ! c ; sp = \\g,c => x.det.sp ! g ! c ++ y.det.sp ! g ! c ; n = matchNumber x.get.n y.get.n } ;
} ;
-- ConsNP : NP -> ListNP -> ListNP ; -- John, Mary, Bill
ConsNP x xs = {
l = \\_ => consrTable Case bindComma x ( xs.l ! Comma );
n = matchNumber x.n xs.n ;
g = xs.g ;
p = xs.p ;
adv = x.adv ++ xs.adv ;
preap = lin AP { s = \\a => x.preap.s ! a ++ xs.preap.s ! a } ;
postap = lin AP { s = \\a => x.postap.s ! a ++ xs.postap.s ! a } ;
isBase = False
-- TODO det
} ;
-- BaseAP : AP -> AP -> ListAP
BaseAP x y = { l = \\c => twoTable Agr x y };
-- ConsAP : AP -> ListAP -> ListAP
ConsAP x xs =
{ l = \\_ => consrTable Agr and_Conj.s2 x (xs.l ! Comma ) } ;
--
lincat
[S] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
[AP] = {s1,s2 : Agr => Str } ;
-- [S] = { l : Coordinator => {s1,s2 : Str} } ; -- TO FIX
[Adv] = { l: Coordinator => {s1,s2 : Str}} ;
[NP] = {l : Coordinator => {s1,s2 : Case => Str} ; g : Gender ; n : Number ; p : Person ; adv : Str ; preap : AP ; postap : AP ; isBase : Bool } ;
[AP] = {l : Coordinator => {s1,s2 : Agr => Str } } ;
oper
-- Generates a new number value given two number values.
-- Pl if any of the two is Pl
-- Sg otherwise
matchNumber : Number -> Number -> Number = \n1,n2 ->
case <n1,n2> of {
<Pl,_> => Pl ;
<_,Pl> => Pl ;
<_,_> => Sg
} ;
--
}

View File

@@ -0,0 +1,5 @@
--# -path=.:api
concrete ConstructionLat of Construction = CatLat **
open SyntaxLat, SymbolicLat, ParadigmsLat,
(L = LexiconLat), (E = ExtraLat), (G = GrammarLat), (I = IrregLat), (R = ResLat), (N = NounLat), Prelude in {
}

View File

@@ -0,0 +1,2 @@
concrete DocumentationLat of Documentation = {
}

1
src/latin/ExtendLat.gf Normal file
View File

@@ -0,0 +1 @@
concrete ExtendLat of Extend = ExtendFunctor with (Grammar=GrammarLat);

View File

@@ -1,13 +1,54 @@
concrete ExtraLat of ExtraLatAbs =
CatLat,
ExtraLexiconLat **
open ResLat, Coordination, Prelude in {
CatLat, ExtraLexiconLat, ConjunctionLat **
open ResLat, ParadigmsLat, Coordination, Prelude in {
lincat CS = Str ;
lin
useS s = combineSentence s ! SPreO ! PreO ! SOV ;
-- PastPartAP : VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space
-- PastPartAP vp = { s = vp.part ! VPassPerf } ;
UsePronNonDrop p = -- Pron -> NP
{
g = p.g ;
n = p.n ;
g = p.pers.g ;
n = p.pers.n ;
p = p.p ;
s = p.pers ! PronNonDrop ! PronNonRefl ;
s = p.pers.s ! PronNonDrop ! PronNonRefl ;
adv = "" ;
preap, postap = { s = \\_ => "" } ;
det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = p.pers.n } ;
} ;
AdjCNPre ap cn = -- AP -> CN -> CN
addAdjToCN (lin AP ap) (lin CN cn) Post ;
-- ConjNP : Conj -> ListNP -> NP ; -- she or we
ConjNPque conj nps =
{
s = case conj.c of {
And => case nps.isBase of {
False => (conjunctDistrTable Case conj (nps.l ! And)).s ;
True => \\c => (nps.l ! And).s1 ! c ++ (nps.l ! And).s2 ! c ++ BIND ++ "que"
} ;
c => (conjunctDistrTable Case conj (nps.l ! And)).s
} ;
n = case conj.c of { And => Pl ; _ => nps.n } ;
g = nps.g ;
p = nps.p ;
adv = nps.adv ;
preap = nps.preap ;
postap = nps.postap ;
det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = nps.n };
} ;
everybodyFem_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" Fem Sg ;-- regNP "quisquae" Sg ; -- L...
somebodyFem_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" Fem Sg ; -- Bayer-Lindauer 60.1
nobodyFem_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" Fem Sg ; -- Bayer Lindauer 60.4
Nom_Prep = mkPrep "" Nom ;
Gen_Prep = mkPrep "" Gen ;
Acc_Prep = mkPrep "" Acc ;
Dat_Prep = mkPrep "" Dat ;
Abl_Prep = mkPrep "" Abl ;
inAbl_Prep = mkPrep "in" Abl ;
onAbl_Prep = mkPrep "in" Abl ; -- L...
}

View File

@@ -1,8 +1,32 @@
abstract ExtraLatAbs =
Extra,
ExtraLexiconLatAbs **
{
Extra, ExtraLexiconLatAbs, Conjunction
** {
cat CS ;
fun
UsePronNonDrop : Pron -> NP ;
useS : S -> CS ;
-- do not drop pronouns
UsePronNonDrop : Pron -> NP ;
-- add adjective before the noun
AdjCNPre : AP -> CN -> CN ;
-- handle conjunction with suffix
ConjNPque : Conj -> ListNP -> NP ;
-- Alternative form for female noun phrase
everybodyFem_NP : NP ;
somebodyFem_NP : NP ;
nobodyFem_NP : NP ;
-- Some empty prepositions to enforce cases
Nom_Prep : Prep ;
Gen_Prep : Prep ;
Acc_Prep : Prep ;
Dat_Prep : Prep ;
Abl_Prep : Prep ;
-- Preposition with alternate case
inAbl_Prep : Prep ;
onAbl_Prep : Prep ;
}

453
src/latin/ExtraLexCaesar.gf Normal file
View File

@@ -0,0 +1,453 @@
concrete ExtraLexCaesar of ExtraLexCaesarAbs = CatLat ** open Prelude,ParadigmsLat,ResLat, IrregLat, LexiconLat,StructuralLat in {
lin
a_Prep = mkPrep "a" Abl ;
ab_Prep = mkPrep "ab" Abl ;
abdere_V = mkV "abdere" "abdo" "abdidi" "abditum";
abducere_V = mkV "abducere" "abduco" "abduxi" "abductum" ; -- prefixVerb "ab" ducere_V; -- ab + ducere, missing abduci (inf VInfPassPres : abduceri)
abesse_V = prefixVerb "ab" be_V; -- ab + esse, missing absente?
abicere_V = mkV "abicere" "abicio" "abieci" "abiectum"; -- prefixVerb "ab" iacere_V; -- ab + iacere
abscisus_A = mkA "abscisus";
absens_A = mkA "absens" "absentis"; -- missing absente
absimilis_A = mkA "absimilis" "absimile"; -- missing absimili (s Posit (Ag Masc Sg Dat) : absimii)
abstinere_V2 = mkV2 (mkV "abstinere"); -- prefixVerb2 "ab" tenere_V2 ; -- -- ab + tenere
abstrahere_V2 = mkV2 (mkV "abstrahere" "abstraho" "abstraxi" "abstractum");-- prefixVerb2 "ab" trahere_V2 ; -- ab + trahere
-- ac_Conj = mkConj "" "ac" Sg ;
accedere_V = mkV "adcedere" "adcedo" "adcessi" "adcessum"; -- prefixVerb "ad" cedere_V ; -- ad + cedere
accendere_V = mkV "accendere" "accendo" "accendi" "accensum";
accidere_V = mkV "accidere" "accido" "accidi" "accisum"; -- ad + caedere?
accipere_V = mkV "accipere" "accipio" "accepi" "acceptum"; -- prefixVerb "ad" capere_V; -- ad + capere
acclivis_A = mkA "acclivis" "acclive" ;
acclivitas_N = mkN "acclivitas" "acclivitatis" feminine;
accommodare_V = mkV "accommodare" ;
accommodatus_A = mkA "accommodatus" ;
accurrere_V = mkV "accurrere" "accurro" "accucurri" "accursum"; -- prefixVerb "ad" currere_V; -- ad + currere
accusare_V = mkV "accusare";
acervus_N = mkN "acervus" ;
acies_N = mkN "acies" ;
acriter_Adv = ss "acriter"; -- comparison???
ad_Prep = mkPrep "ad" Acc;
adaequare_V = mkV "adaequare"; -- ad + aequare?
adamare_V2 = mkV2 (mkV "adamare"); -- prefixVerb2 "ad" love_V2; -- ad + amare, missing adamassent (act (VAct VAnt (VImpf VConj) Pl P3) : adamavissent)?
adducere_V = mkV "adducere" "adduco" "adduxi" "adductum"; -- prefixVerb "ad" ducere_V; -- ad + ducere, missing adduci
adequitare_V = mkV "adequitare"; -- prefixVerb "ad" equitare_V; -- ad + equitare
adesse_V = prefixVerb "ad" be_V; -- ad + esse
adferre_V = prefixVerb "ad" ferre_V;-- ad + ferre
adfectus_A = mkA "adfectus";
adfectus_N = mkN "adfectus" "adfectus" masculine;
adficere_V = mkV " adficere" "adfico" "adfeci" "adfectum"; -- ad + facere?, missing adficiebantur
adfigere_V = mkV " adfigere" "adfixi" "adfixum"; -- ad + figere?, missing adfixae
adfinitas_N = mkN "adfinitas" "adfinitatis" feminine;
adflictare_V = mkV "adflictare";
adflictus_A = mkA "adflictus";
adgredi_V = mkV "adgredi" "adgredior" "adgressus"; -- ad + gradior?, missing adgressi, adgressus
adgregare_V = mkV "adgregare"; -- ad + gregare?
adhibere_V = mkV "adhibere"; -- ad + habere?
adhuc_Adv = ss "adhuc";
Adiatunnus_PN = mkPN (lin N (singularN (mkN "Adiatunnus")));
adicere_V = mkV "adicere" "adieci" "adiectum"; -- ad + iacere?, missing adiecta
adigere_V = mkV "adigere" "adigo" "adegi" "adactum"; -- ad + agere?, missing adigi
adire_V = mkV "adire" "adeo" "" ""; -- prefixVerb "ad" ire_V; -- ad + ire, missing adiisset, aditus?
aditus_N = mkN "aditus" "aditus" masculine;
adiungere_V = mkV "adiungere" "adiungo" "adiunxi" "adiunctum"; -- ad + iungere?
adiuvare_V = mkV "adiuvare"; -- ad + iuvare?
administrare_V = mkV "administrare"; -- ad + ministrare
admirari_V = mkV "admirari" "admiror" "admiratus"; -- ad + mirari?
admittere_V = mkV "admittere" "admitto" "admisi" "admissum"; -- ad + mittere?
admodum_Adv = ss "admodum";
adoriri_V = mkV "adoriri" "adorior" "adortus"; -- ad + oriri?, missing adorti, adortum, adortus
adpellere_V = mkV "adpellere" "adpello" "adpuli" "adpulsum"; -- ad + pelere?
adpetere_V = mkV "adpetere" "adpeto" "adpetivi" "adpetitum"; -- ad + petere?, missing adpetierit, adpetisse, adpetissent
adpropinquare_V = mkV " adpropinquare"; -- ad + propinquare?
-- adpulsare_V = mkV "adpulsare";
adsciscere_V = mkV "adsciscere" "adscisco" "adscivi" "ascitum"; -- ad + sciscere?
adsuere_V = mkV "adsuere" "adsuo" "adsui" "adsutum"; -- ad + suere?, missing adsue
adsuefacere_V = mkV "adsuefacere" "adsuefacio" "adsuefeci" "adsuefactum"; -- possibly problematic
-- adtectus ???
adulescentia_N = mkN "adulescentia";
adulescentulus_N = mkN "adulescentulus";
advenire_V = mkV "advenire" "advenio" "adveni" "adventum"; -- prefixVerb "ad" venire_V; -- ad + venire
advertere_V = mkV "advertere" "adverto" "adverti" "adversum"; -- ad + vertere?
adventus_N = mkN "adventus" "adventus" masculine;
aedificare_V = mkV "aedificare";
aedificium_N = mkN "aedificium";
aeger_A = mkA "aeger";
aegre_Adv = ss "aegre"; -- comparison?
Aemilius_PN = mkPN (lin N (singularN (mkN "Aemilius")));
aequaliter_Adv = ss "aequaliter";
aequare_V = mkV " aequare";
aequinoctium_N = mkN "aequinoctium";
aequitas_N = mkN "aequitas" "aequitatis" feminine;
aequum_N = mkN "aequum";
aequus_A = mkA "aequus";
aerarius_A = mkA "aerarius";
aerarius_N = mkN "aerarius";
aer_f_N = mkN "aer" "aeris" feminine;
aer_m_N = mkN "aer" "aeris" masculine;
aes_N = mkN "aer" "aeris" neuter;
aestas_N = mkN "aestas" "aestatis" feminine;
aestimare_V = mkV "aestimare";
aestuarium_N = mkN "aestuarium";
aestus_N = mkN "aestus" "aestus" masculine;
aetas_N = mkN "aetas" "aetatis" feminine;
ager_N = mkN "ager";
agere_V = mkV "agere" "ago" "egi" "actum";
agger_N = mkN "agger" "aggeris" masculine;
agmen_N = mkN "agmen" "agminis" neuter;
alacer_A = mkA "alacer" "alacris";
alacritas_N = mkN "alacritas" "alacritatis" feminine;
alarius_A = mkA "alarius";
-- alduas_??? = ???;
alere_1_V = mkV "alere" "alo" "alui" "altum";
alere_2_V = mkV "alere" "alo" "alui" "alitum";
alienus_A = mkA "alienus";
-- alii_Conj = mkConj "alii" "alii" Sg ;
aliquam_Adv = ss "aliquam";
aliquanto_Adv = ss "aliquanto";
--aliqui_Pron = mkPron ???;
-- aliquis_Pron = aliquis;
aliter_Adv = ss "aliter";
alium_N = mkN "alium";
alius_A = mkA (mkN "alius") (mkN "alia") (mkN "aliud" "alius" neuter);
Allobroges_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Allobroges" "Allobroges" "Allobrogum" "Allobrogibus" masculine))); -- missing Allobrogas
Alpes_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Alpes" "Alpes" "Alpium" "Alpibus" feminine)));
alter_A = mkA (mkN "alter") (mkN "altera") (mkN "alterum"); -- missing alterius
alterare_V = mkV "alterare";
altitudo_N = mkN "altitudo" "altitudinis" feminine;
altus_A = mkA "altus";
aluta_N = mkN "aluta";
Ambarri_PN = mkPN (lin N (pluralN (mkN "Ambarrus")));
Ambiani_PN = mkPN (lin N (pluralN (mkN "Ambianus")));
Ambiliati_PN = mkPN (lin N (pluralN (mkN "Ambiliatus")));
Ambivariti_PN = mkPN (lin N (pluralN (mkN "Ambivaritus")));
amentia_N = mkN "amentia";
amicitia_N = mkN "amicitia";
amicus_A = mkA "amicus";
amittere_V = mkV "amittere" "amitto" "amisi" "amissum";
amplificare_V = mkV "amplificare";
amplitudo_N = mkN "amplitudo" "amplitudinis" feminine;
amplus_A = mkA "amplus";
anceps_A = mkA "anceps" "ancipitis";
ancora_N = mkN "ancora";
Andebrogius_PN = mkPN (lin N (singularN (mkN "Andebrogius")));
--Andes_PN = ???
angustia_N = mkN "angustia";
angustiare_V = mkV "angustiare";
-- an_Conj = mkConj "" "an" Sg;
-- an_an_Conj = mkConj "an" "an" Sg;
animadvertere_V = mkV "animadvertere" "animadverto" "animadverti" "animadversum";
animus_N = mkN "animus";
annuus_A = mkA "annuus";
ante_Adv = ss "ante";
ante_Prep = mkPrep "ante" Acc;
antea_Adv = ss "antea";
antecedere_V = mkV "antecedere" "antecedo" "antecessi" "antecessum"; -- ante + cedere?
antemna_N = mkN "antemna";
anteponere_V = mkV "anteponere" "antepono" "anteposui" "antepositum"; -- prefixVerb2 "ante" put_V2; -- ante + ponere
antiquitus_Adv = ss "antiquitus";
antiquus_A = mkA "antiquus"; -- missing antiquissimum
aperire_V = mkV "aperire" "aperio" "aperui" "apertum"; -- missing aperta, apertis, apertissimis, apertissimo, aperto, apertum, apertus
apertare_V = mkV "apertare";
Aprilis_PN = mkPN (lin N (singularN (mkN "Aprilis" "Aprilis" masculine))); -- missing Apr, April
appellare_V = mkV "appellare";
aptus_A = mkA "aptus";
apud_Prep = mkPrep "apud" Acc;
aquatio_N = mkN "aquatio" "aquationis" feminine;
aquila_N = mkN "aquila";
Aquileia_PN = mkPN (lin N (singularN (mkN "Aquileia")));
Aquitania_PN = mkPN (lin N (singularN (mkN "Aquitania")));
Aquitanus_N = mkN "Aquitanus";
Arar_PN = mkPN (lin N (singularN (mkN "Arar" "Araris" masculine))); -- missing Ararim
arbitrari_V = mkV "arbitrari";
arbitrium_N = mkN "arbitrium";
arcessere_V = mkV "arcessere" "arcesso" "arcessivi" "arcessitum";
arduus_A = mkA "arduus";
aries_N = mkN "aries" "arietis" masculine;
Ariovistus_PN = mkPN (lin N (singularN (mkN "Ariovistus")));
armatus_A = mkA "armatus";
arma_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "arma" "arma" "armorum" "armis" neuter));
armamentum_N = mkN "armamentum";
armare_V = mkV "armare";
armatura_N = mkN "armatura";
armus_N = mkN "armus";
arroganter_Adv = ss "arroganter"; -- comparison?
arrogantia_N = mkN "arrogantia";
artus_A = mkA "artus";
Arverni_PN = mkPN (lin N (pluralN (mkN "Arvernus")));
arx_N = mkN "arx" "arcis" feminine;
ascendere_V = mkV "ascendere" "ascendo" "ascendi" "ascensum";
-- at_Conj = mkConj "at" "" Sg ;
-- atque_Conj = mkConj "atque" "" Sg ;
Atrebates_PN = mkPN (mkN "Atrebas" "Atrebatis" masculine);
attingere_V = mkV "attingere" "attingo" "attigi" "attactum"; -- ad + tangere?
attribuere_V = mkV "attribuere" "attribuo" "attribui" "attributum"; -- ad + tribuere?, missing attribuant
-- auctibus ???
auctor_N = mkN "auctor" "auctoris" masculine;
auctorare_V = mkV "auctorare";
auctoritas_N = mkN "auctoritas" "auctoritatis" feminine;
auctus_A = mkA "auctus";
audacter_Adv = ss "audacter"; -- comparison?
audax_A = mkA "audax" "audacis";
audere_V = mkV "audere"; -- semi-deponent?, missing ausos
audire_V = mkV "audire" ; -- missing audierant, audierit
auditio_N = mkN "auditio" "auditionis" feminine;
augere_V = mkV "augere"; -- missing auxisse
Atuatuci_PN = mkPN (lin N (pluralN (mkN "Atuatucus")));
Aulerci_PN = mkPN (lin N (pluralN (mkN "Aulercus")));
Auriga_PN = mkPN (mkN "Auriga");
Aurunculeius_PN = mkPN (lin N (singularN (mkN "Aurunculeius")));
Ausci_PN = mkPN (lin N (pluralN (mkN "Auscus")));
-- aut_Conj = mkConj "aut" "" Sg ;
-- autem_Conj = mkConj "autem" "" Sg ;
auxiliare_V = mkV "auxiliare";
auxilium_N = mkN "auxilium";
avaritia_N = mkN "avaritia";
avertere_V = mkV "avertere" "averto" "averti" "aversum"; -- ab + vertere?, missing aventu (noun sg supine neut dat)
avus_N = mkN "avus";
Axona_PN = mkPN (lin N (singularN (mkN "Axona")));
baculus_N = mkN "baculus";
Baleares_PN = mkPN (lin N (pluralN (mkN "Balear" "Balearis" masculine)));
barbarus_A = mkA "barbarus";
barbarus_N = mkN "barbarus";
batavus_A = mkA "batavus";
Belgae_PN = mkPN (lin N (pluralN (mkN "Belga"))); -- missing Belgos
bellare_V = mkV "bellare";
bellicosus_A = mkA "bellicosus";
Bellovaci_PN = mkPN (lin N (pluralN (mkN "Bellovacus")));
bellum_N = mkN "bellum";
bellus_A = mkA "bellus";
bene_Adv = ss "bene"; -- comparison?
beneficium_N = mkN "beneficium";
Bibrax_PN = mkPN (lin N (singularN (mkN "Bibrax" "Bibractis" masculine)));
biduum_N = mkN "biduum";
biduus_A = mkA "biduus";
biennis_A = mkA "biennis" "bienne"; -- missing biennium
biennium_N = mkN "biennium";
binus_A = mkA "binus";
bipedalis_A = mkA "bipedalis" "bipedale"; -- missing bipedalibus
bipertitus_A = mkA "bipertitus";
bis_Adv = ss "bis";
Biturix_PN = mkPN (lin N (pluralN (mkN "Biturix" "Biturigis" masculine)));
-- boc ???
Boduognatus_PN = mkPN (lin N (singularN (mkN "Boduognatus")));
Boi_PN = mkPN (lin N (pluralN (mkN "Boius"))); -- missing Boi
bonitas_N = mkN "bonitas" "bonitatis" feminine;
bracchium_N = mkN "bracchium";
Bratuspantium_PN = mkPN (lin N (singularN (mkN "Bratuspantium")));
brevi_Adv = ss "brevi";
breviare_V = mkV "breviare";
brevis_A = mkA "brevis" "breve"; -- missing brevi
brevitas_N = mkN "brevitas" "brevitatis" feminine;
Britannia_PN = mkPN (mkN "Britannia");
britannus_A = mkA "britannus";
Brutus_PN = mkPN (lin N (singularN (mkN "Brutus")));
cadaver_N = mkN "cadaver" "cadaveris" neuter;
cadere_V = mkV "cadere" "cado" "cecidi" "casum";
Caesar_PN = mkPN (lin N (singularN (mkN "Caesar" "Caesaris" masculine))); -- missing Caesare
caespes_N = mkN "caespes" "caespitis" masculine;
calamitas_N = mkN "calamitas" "calamitatis" feminine;
calare_V = mkV "calare";
calo_N = mkN "calo" "calonis" masculine;
campus_N = mkN "campus";
capere_V = mkV "capere" "capio" "cepi" "captum"; -- missing capi
captivus_A = mkA "captivus";
captivus_N = mkN "captivus";
captus_N = mkN "captus" "captus" masculine;
carina_N = mkN "carina";
carpere_V = mkV "carpere" "carpio" "carpsi" "carptum";
carrus_N = mkN "carrus";
castellum_N = mkN "castellum";
castra_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "castra" "castra" "castrorum" "castris" neuter));
casus_N = mkN "casus" "casus" masculine;
catena_N = mkN "catena";
causa_N = mkN "causa";
causa_Prep = mkPostp "causa" Gen;
cavare_V = mkV "cavare";
cavere_V = mkV "cavere";
cedere_V = mkV "cedere" "cedo" "cessi" "cessum";
celare_V = mkV "celare";
celer_A = mkA "celer" "celeris"; -- strange?
celeritas_N = mkN "celeritas" "celeritatis" feminine;
celeriter_Adv = ss "celeriter"; -- comparison? missing celerius, celerrime
census_N = mkN "census" "census" masculine;
censere_V = mkV "censere";
centuriare_V = mkV "centuriare";
centurio_N = mkN "centurio" "centurionis" masculine;
cernere_V = mkV "cernere" "cerno" "crevi" "cretum";
certare_V = mkV "certare";
certamen_N = mkN "certamen" "certaminis" neuter;
certus_A = mkA "certus";
ceterus_A = mkA "ceterus";
cibarius_A = mkA "cibarius";
cibus_N = mkN "cibus";
ciere_V = mkV "ciere" "cio" "civi" "citum";
cingere_V = mkV "cingere" "cingo" "cingi" "cinctum";
circinare_V = mkV "circinare";
circinus_N = mkN "circinus";
circiter_Adv = ss "circiter";
circiter_Prep = mkPrep "circiter" Acc;
circuitus_N = mkN "circuitus" "circuitus" masculine;
circum_Adv = ss "circum";
circum_Prep = mkPrep "circum" Acc;
circumdare_V = mkV "circumdare" "circumdo" "circumdedi" "circumdatum"; -- prefixVerb "circum" dare_V; -- circum + dare, missing circumdederant, circumdederunt
circumducere_V = mkV "circumducere" "circumduco" "circumduxi" "circumductum"; -- prefixVerb "circum" ducere_V; circum + ducere
circumiectus_A = mkA "circumiectus";
circumire_V = prefixVerb "circum" ire_V;
circummunire_V = mkV "circummunire";
circumsistere_1_V = mkV "circumsistere" "circumsisto" "circumstiti" "circumstatum" ; -- prefixVerb "circum" sistere_1_V; -- circum + sistere
-- circumsistere_2_V = prefixVerb "circum" sistere_2_V; -- circum + sistere
circumvenire_V = mkV "circumvenire" ; -- prefixVerb "circum" venire_V; -- circum + venire
cis_Prep = mkPrep "cis" Acc;
citare_V = mkV "citare";
citer_A = mkA "citer"; -- missing citeriore, citeriorem, citerioris
citra_Adv = ss "citra";
citus_A = mkA "citus";
civitas_N = mkN "civitas" "civitatis" feminine;
colere_V = mkV "colere" "colo" "colui" "cultum";
cooriri_V = mkV "cooriri" "coorior" "coortus"; -- prefixVerb "con" oriri_V; -- con + oriri, missing coorta
conferre_V = prefixVerb "con" ferre_V; -- con + ferre
---
conspicere_V = mkV "conspicere" "conspicio" "conspexi" "conspectum"; -- prefixVerb "con" specere_V; -- con + specere
conspirare_V = mkV "conspirare"; -- con + spirare?
constanter_Adv = ss "constanter"; -- comparison
constantia_N = mkN "constantia";
constare_V = mkV "constare"; -- prefixVerb "con" stare_V; -- con + stare, missing constiterant, constiterat, constiterunt, constitissent, constitisset, constitit
-- consternare_V = mkV "consternare"; -- con + sternere ?
consternere_V = mkV "consternere" "consterno" "constravi" "constratum"; -- con + sternere?
constituere_V = mkV "constituere" "constituo" "constitui" "constitutum"; -- prefixVerb "con" statuere_V; -- con + statuere
constitutum_N = mkN "constitutum";
consuere_V = mkV "consuere" "consuo" "consui" "consustum";
consuescere_V = mkV "consuescere" "consuesco" "consuevi" "consuetum"; -- con + suescere?, missing consuesse, consuessent?
consuetudo_N = mkN "consuetudo" "consuetudinis" feminine;
consul_N = mkN "consul" "consulis" masculine;
consulatus_N = mkN "consulatus" "consulatus" masculine;
consulere_V = mkV "consulere" "consulo" "consului" "consultum";
consultare_V = mkV "consultare";
consultum_N = mkN "consultum";
contemptio_N = mkN "contemptio" "contemptionis" feminine;
contemptus_A = mkA "contemptus";
contemptus_N = mkN "contemptus" "contemptus" masculine;
contentio_N = mkN "contentio" "contentionis" feminine;
contendere_V = mkV "contendere" "contendo" "contendi" "contentum";
contexere_V = mkV "contexere" "contexo" "contexui" "contextum"; -- prefixVerb "con" texere_V; -- con + texere
continens_N = mkN "continens" "continentis" feminine;
continenter_Adv = ss "continenter";
continere_V2 = mkV2 (mkV "continere"); -- prefixVerb2 "con" tenere_V2; con + tenere
contingere_V = mkV "contingere" "contingo" "contigi" "contectum"; -- con + tangere?
continuatio_N = mkN "continuatio" "continuationis" feminine;
continuus_A = mkA "continuus";
contra_Adv = ss "contra";
-- contrahere_V2 = -- prefixVerb2 "con" trahere_V2; -- con + trahere
contrarius_A = mkA "contrarius";
contumelia_N = mkN "contumelia";
convallis_N = mkN "convallis" "convallis" feminine;
convenire_V = prefixVerb "con" venire_V; -- missing convenerant, convenerat, convenerunt, convenisse, convenissent, convenisset, conventu, conventus
conversare_V = mkV "conversare";
convertere_V = prefixVerb "con" vertere_V; -- con + vertere
convincere_V = prefixVerb "con" vincere_V; -- con + vincere
convocare_V = prefixVerb "con" vocare_V; -- con + vocare
copia_N = mkN "copia";
copiosus_A = mkA "copiosus";
copula_N = mkN "copula";
cora_N = mkN "cora";
corona_N = mkN "corona";
corpus_N = mkN "corpus" "corporis" neuter;
cos_N = mkN "cos" "cotis" feminine;
cotidianus_A = mkA "cotidianus";
cotidie_Adv = ss "cotidie";
Cotta_PN = mkPN (lin N (singularN (mkN "Cotta")));
crassitudo_N = mkN "crassitudo" "crassitudinis" feminine;
Crassus_PN = mkPN (lin N (singularN (mkN "Crassus")));
cratis_N = mkN "cratis" "cratis" feminine;
creare_V = mkV "creare";
creber_A = mkA "creber";
credere_V = mkV "credere" "credo" "credidi" "creditum";
cremare_V = mkV "cremare";
crescere_V = mkV "crescere" "cresco" "crevi" "cretum";
Creta_N = mkN "Creta";
cruciare_V = mkV "cruciare";
cruciatus_N = mkN "cruciatus" "cruciatus" masculine;
crudelitas_N = mkN "crudelitas" "crudelitatis" feminine;
crudeliter_Adv = ss "crudeliter"; -- comparison?
culmen_N = mkN "culmen" "culminis" neuter;
culpa_N = mkN "culpa";
cultura_N = mkN "cultura";
cultus_N = mkN "cultus" "cultus" masculine;
cum_Prep = mkPrep "cum" Abl;
cunctari_V = mkV "cunctari";
cunctatio_N = mkN "cunctatio" "cunctationis" feminine;
cunctus_A = mkA "cunctus";
cuniculus_N = mkN "cuniculus";
cupere_V = mkV "cupere" "cupio" "cupivi" "cupitum";
cupiditas_N = mkN "cupiditas" "cupiditatis" feminine;
cupidus_A = mkA "cupidus";
cur_Adv = ss "cur";
cura_N = mkN "cura";
curare_V = mkV "curare"; -- missing curasset
currere_V = mkV "currere" "curro" "cucurri" "cursum";
currus_N = mkN "currus" "currus" masculine;
custodia_N = mkN "custodia";
damnare_V = mkV "damnare";
damnatus_A = mkA "damnatus";
dare_V = mkV "dare" "do" "dedi" "datum";
datum_N = mkN "datum";
de_Prep = mkPrep "de" Abl;
debere_VV = StructuralLat.must_VV;
ducere_V = mkV "ducere" "duco" "duxi" "ductum" ;
equitare_V = mkV "equitare";
ferre_V = fixFerre (mkVerb "ferre" "fer" "fer" "fera" "fereba" "ferre" "fere" "fer" "tul" "tul" "tuleri" "tulera" "tulisse" "tuleri" "lat");
iacere_V = mkV "iacere" "iacio" "ieci" "iactum";
ire_V = LexiconLat.go_V;
-- ne_an_Conj = mkConj (BIND ++ "ne") "an" Sg;
-- nonne_an_Conj = mkConj "nonne" "an" Sg;
-- num_an_Conj = mkConj "num" "an" Sg;
oriri_V = mkV "oriri" "orior" nonExist "ortus";
qui_IP = StructuralLat.whatSg_IP;
sistere_1_V = mkV "sistere" "sisto" "stiti" "statum";
sistere_2_V = mkV "sistere" "sisto" "steti" "statum";
specere_V = mkV "specere" "speco" "spexi" "spectum";
stare_V = LexiconLat.stand_V;
statuere_V = mkV "statuere" "statuo" "statui" "statutum";
tenere_V2 = LexiconLat.hold_V2;
texere_V = mkV "texere" "texo" "texui" "textum";
trahere_V2 = LexiconLat.pull_V2;
-- utrum_an_Conj = mkConj "utrum" "an" Sg;
venire_V = LexiconLat.come_V;
vertere_V = mkV "vertere" "verto" "verti" "versum";
vincere_V = mkV "vincere" "vinco" "vici" "victum";
vocare_V = mkV "vocare";
oper
fixFerre : Verb -> Verb =
\ferre ->
{
act = table
{
(VAct VSim (VPres VInd) Sg P2) => "fers";
(VAct VSim (VPres VInd) Sg P3) => "fert";
(VAct VSim (VPres VInd) Pl P1) => "ferimus";
(VAct VSim (VPres VInd) Pl P2) => "fertis";
rest => ferre.act ! rest
};
ger = ferre.ger;
geriv = ferre.geriv;
imp = table
{
(VImp1 Sg) => "fer";
(VImp1 Pl) => "ferte";
(VImp2 Sg P2) => "ferto";
(VImp2 Sg P3) => "ferto";
(VImp2 Pl P2) => "fertote";
rest => ferre.imp ! rest
};
inf = ferre.inf;
part = ferre.part;
pass = table
{
VPass (VPres VInd) Sg P2 => "ferris";
VPass (VPres VInd) Sg P3 => "fertur";
rest => ferre.pass ! rest
};
sup = ferre.sup;
} ;
}

View File

@@ -0,0 +1,417 @@
abstract ExtraLexCaesarAbs = Cat ** {
fun
a_Prep : Prep;
ab_Prep : Prep;
abdere_V : V;
abducere_V : V;
abesse_V : V;
abicere_V : V;
abscisus_A : A;
absens_A : A;
absimilis_A : A;
abstinere_V2 : V2;
abstrahere_V2 : V2;
ac_Conj : Conj ;
accedere_V : V;
accendere_V : V;
accidere_V : V;
accipere_V : V;
acclivis_A : A;
acclivitas_N : N;
accommodare_V : V;
accommodatus_A : A;
accurrere_V : V;
accusare_V : V;
acervus_N : N;
acies_N : N;
acriter_Adv : Adv;
ad_Prep : Prep;
adaequare_V : V;
adamare_V2 : V2;
adducere_V : V;
adequitare_V : V;
adesse_V : V;
adferre_V : V;
adfectus_A : A;
adfectus_N : N;
adficere_V : V;
adfigere_V : V;
adfinitas_N : N;
adflictare_V : V;
adflictus_A : A;
adgredi_V : V;
adgregare_V : V;
adhibere_V : V;
adhuc_Adv : Adv;
Adiatunnus_PN : PN;
adicere_V : V;
adigere_V : V;
adire_V : V;
aditus_N : N;
adiungere_V : V;
adiuvare_V : V;
administrare_V : V;
admirari_V : V;
admittere_V : V;
admodum_Adv : Adv;
adoriri_V : V;
adpellere_V : V;
adpetere_V : V;
adpropinquare_V : V;
adpulsare_V : V;
adsciscere_V : V;
adsuere_V : V;
adsuefacere_V : V;
adulescentia_N : N;
adulescentulus_N : N;
advenire_V : V;
adventus_N : N;
advertere_V : V;
aedificare_V : V;
aedificium_N : N;
aeger_A : A;
aegre_Adv : Adv;
Aemilius_PN : PN;
aequaliter_Adv : Adv;
aequare_V : V;
aequinoctium_N : N;
aequitas_N : N;
aequum_N : N;
aequus_A : A;
aerarius_A : A;
aerarius_N : N;
aer_f_N : N;
aer_m_N : N;
aes_N : N;
aestas_N : N;
aestimare_V : V;
aestuarium_N : N;
aestus_N : N;
aetas_N : N;
-- afferre_V : V;
ager_N : N;
agere_V : V;
agger_N : N;
agmen_N : N;
alacer_A : A;
alacritas_N : N;
alarius_A : A;
-- alduas_??? : ???;
alere_1_V : V;
alere_2_V : V;
alienus_A : A;
alii_Conj : Conj;
aliquam_Adv : Adv;
aliquanto_Adv : Adv;
-- aliqui_Pron : Pron;
aliquis_Pron : Pron;
aliter_Adv : Adv;
alium_N : N;
alius_A : A;
Allobroges_PN : PN;
Alpes_PN : PN;
alter_A : A;
alterare_V : V;
altitudo_N : N;
altus_A : A;
aluta_N : N;
Ambarri_PN : PN;
Ambiani_PN : PN;
Ambiliati_PN : PN;
Ambivariti_PN : PN;
amentia_N : N;
amicitia_N : N;
amicus_A : A;
amittere_V : V;
amplificare_V : V;
amplitudo_N : N;
amplus_A : A;
an_Conj : Conj;
an_an_Conj : Conj;
anceps_A : A;
ancora_N : N;
Andebrogius_PN : PN;
Andes_PN : PN;
angustiare_V : V;
angustia_N : N;
animadvertere_V : V;
animus_N : N;
annuus_A : A;
ante_Adv : Adv;
ante_Prep : Prep;
antea_Adv : Adv;
antecedere_V : V;
antemna_N : N;
anteponere_V : V;
antiquitus_Adv : Adv;
antiquus_A : A;
aperire_V : V;
apertare_V : V;
appellare_V : V;
Aprilis_PN : PN;
aptus_A : A;
apud_Prep : Prep;
aquatio_N : N;
aquila_N : N;
Aquileia_PN : PN;
Aquitanus_N : N;
Aquitania_PN : PN;
Arar_PN : PN;
arbitrari_V : V;
arbitrium_N : N;
arcessere_V : V;
arduus_A : A;
aries_N : N;
Ariovistus_PN : PN;
armatus_A : A;
arma_N : N;
armamentum_N : N;
armare_V : V;
armatura_N : N;
armus_N : N;
arroganter_Adv : Adv;
arrogantia_N : N;
artus_A : A;
Arverni_PN : PN;
arx_N : N;
ascendere_V : V;
at_Conj : Conj;
atque_Conj : Conj ;
Atrebates_PN : PN;
attingere_V : V;
attribuere_V : V;
Atuatuci_PN : PN;
auctor_N : N;
auctorare_V : V;
auctoritas_N : N;
auctus_A : A;
audacter_Adv : Adv;
audax_A : A;
audere_V : V;
audire_V : V;
auditio_N : N;
augere_V : V;
Aulerci_PN : PN;
Auriga_PN : PN;
Aurunculeius_PN : PN;
Ausci_PN : PN;
aut_Conj : Conj;
autem_Conj : Conj;
auxiliare_V : V;
auxilium_N : N;
avaritia_N : N;
avertere_V : V;
avus_N : N;
Axona_PN : PN;
baculus_N : N;
Baleares_PN : PN;
barbarus_A : A;
barbarus_N : N;
batavus_A : A;
Belgae_PN : PN;
bellare_V : V;
bellicosus_A : A;
Bellovaci_PN : PN;
bellum_N : N;
bellus_A : A;
bene_Adv : Adv;
beneficium_N : N;
Bibrax_PN : PN;
biduum_N : N;
biduus_A : A;
biennis_A : A;
biennium_N : N;
binus_A : A;
bipedalis_A : A;
bipertitus_A :A;
bis_Adv : Adv;
Biturix_PN : PN;
-- boc ???
Boduognatus_PN : PN;
Boi_PN : PN;
bonitas_N : N;
bracchium_N : N;
Bratuspantium_PN : PN;
brevi_Adv : Adv;
breviare_V : V;
brevis_A : A;
brevitas_N : N;
Britannia_PN : PN;
britannus_A : A;
Brutus_PN : PN;
cadaver_N : N;
cadere_V : V;
Caesar_PN : PN;
caespes_N : N;
calamitas_N : N;
calare_V : V;
calo_N : N;
campus_N : N;
capere_V : V;
captivus_A : A;
captivus_N : N;
captus_N : N;
carina_N : N;
carpere_V : V;
carrus_N : N;
castellum_N : N;
castra_N : N;
casus_N : N;
catena_N : N;
causa_N : N;
causa_Prep : Prep; -- Postposition
cavare_V : V;
cavere_V : V;
cedere_V : V;
celare_V : V;
celer_A : A;
celeritas_N : N;
celeriter_Adv : Adv;
censere_V : V;
census_N : N;
centuriare_V : V;
centurio_N : N;
cernere_V : V;
certare_V : V;
certamen_N : N;
certus_A : A;
ceterus_A : A;
cibarius_A : A;
cibus_N : N;
ciere_V : V;
cingere_V : V;
circinare_V : V;
circinus_N : N;
circiter_Adv : Adv;
circiter_Prep : Prep;
circuitus_N : N;
circum_Adv : Adv;
circum_Prep : Prep;
circumdare_V : V;
circumducere_V : V;
circumiectus_A : A;
circumire_V : V;
circummunire_V : V;
circumsistere_1_V : V;
-- circumsistere_2_V : V;
circumvenire_V : V;
cis_Prep : Prep;
citare_V : V;
citer_A : A;
citra_Adv : Adv;
citus_A : A;
civitas_N : N;
colere_V : V;
conferre_V : V;
---
conspicere_V : V;
conspirare_V : V;
constanter_Adv : Adv;
constantia_N : N;
constare_V : V;
-- consternare_V : V;
consternere_V : V;
constituere_V : V;
constitutum_N : N;
consuere_V : V;
consuescere_V : V;
consuetudo_N : N;
consul_N : N;
consulatus_N : N;
consulere_V : V;
consultare_V : V;
consultum_N : N;
contemptio_N : N;
contemptus_A : A;
contemptus_N : N;
contendere_V : V;
contentio_N : N;
contexere_V : V;
continens_N : N;
continenter_Adv : Adv;
continere_V2 : V2;
contingere_V : V;
continuatio_N : N;
continuus_A : A;
contra_Adv : Adv;
contrahere_V2 : V2;
contrarius_A : A;
contumelia_N : N;
convallis_N : N;
convenire_V : V;
conversare_V : V;
convertere_V : V;
convincere_V : V;
convocare_V : V;
cooriri_V : V;
copia_N : N;
copiosus_A : A;
copula_N : N;
cora_N : N;
corona_N : N;
corpus_N : N;
cos_N : N;
cotidianus_A : A;
cotidie_Adv : Adv;
Cotta_PN : PN;
crassitudo_N : N;
Crassus_PN : PN;
cratis_N : N;
creare_V : V;
creber_A : A;
credere_V : V;
cremare_V : V;
crescere_V : V;
Creta_N : N;
cruciare_V : V;
cruciatus_N : N;
crudelitas_N : N;
crudeliter_Adv : Adv;
culmen_N : N;
culpa_N : N;
cultura_N : N;
cultus_N : N;
cum_Prep : Prep;
cunctari_V : V;
cunctatio_N : N;
cunctus_A : A;
cuniculus_N : N;
cupere_V : V;
cupiditas_N : N;
cupidus_A : A;
cur_Adv : Adv;
cura_N : N;
curare_V : V;
currere_V : V;
currus_N : N;
custodia_N : N;
damnare_V : V;
damnatus_A : A;
dare_V : V;
datum_N : N;
de_Prep : Prep;
debere_VV : VV;
ducere_V : V;
equitare_V : V;
ferre_V : V;
iacere_V : V;
ire_V : V;
ne_an_Conj : Conj;
nonne_an_Conj : Conj;
num_an_Conj : Conj;
oriri_V : V;
qui_IP : IP;
sistere_1_V : V;
sistere_2_V : V;
specere_V : V;
stare_V : V;
statuere_V : V;
tenere_V2 : V2;
texere_V : V;
trahere_V2 : V2;
utrum_an_Conj : Conj;
venire_V : V;
vertere_V : V;
vincere_V : V;
vocare_V : V;
}

View File

@@ -1,2 +1,28 @@
concrete ExtraLexiconLat of ExtraLexiconLatAbs = {
concrete ExtraLexiconLat of ExtraLexiconLatAbs = CatLat ** open ParadigmsLat in {
lin
friend_Fem_N = mkN "amica" ; -- -i/-ae m./f. (Langenscheidts)
baby_Fem_N = mkN "infans" "infantis" feminine ; -- Ranta; -antis m./f. (Langenscheidts)
blue_Var_A = mkA "caeruleus" ; -- 3 (Langenscheidts)
boss_Fem_N = mkN "dux" "ducis" feminine ; -- ducis m./f. (Langenscheidts)
bread_Neutr_N = mkN "pane" "panis" neuter ; -- -is m./n. (Langenscheidts)
cat_Var_N = mkN "felis" "felis" feminine ; -- -is f. (Langenscheidts)
cousin_Fem_N = mkN "consobrina" ; -- -i/-ae m./f. (Langenscheidts)
cow_Fem_N = mkN "bos" "bovis" feminine ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts)
dog_Fem_N = mkN "canis" "canis" feminine ; -- -is m./f. (Langenscheidts)
enemy_Fem_N = mkN "hostis" "hostis" feminine ; -- -is m./f. (Langenscheidts)
policeman_Fem_N = mkN "custos" "custodis" feminine ; -- -odis m./f. (Langenscheidts)
priest_Fem_N = mkN "sacerdos" "sacerdotis" feminine ; -- -dotis m./f. (Langenscheidts)
snake_Fem_N = mkN "serpens" "serpentis" feminine ; -- -entis m./f. (Langenscheidts)
student_Fem_N = mkN "discipula" ; -- -i/-ae m./f. (Langenscheidts)
switch8on_Var_V2 = mkV2 (mkV "exstinguere" ) ; -- -ingo, -inxi, -inctum 3 (Langenscheidts)
bark_Fem_N = mkN "cortex" "corticis" feminine ; -- -icis m./(f.) (Langenscheidts)
blood_Var_N = mkN "sangis" "sanginis" masculine ; -- -inis m. (Langenscheidts)
day_Fem_N = mkN "dies" "diei" feminine ; -- -ei m./f. (Langenscheidts)
horn_Var_N = mkN "cornu" "cornus" neuter ; -- -us n. (Langenscheidts)
liver_Var_N = mkN "iocur" "iocineris" neuter ; -- iecoris/iocineris n. (Langenscheidts)
louse_Fem_N = mkN "pedis" "pedis" feminine ; -- -is m./f. (Langenscheidts)
nose_Neutr_N = mkN "nasum" ; -- -i m./n. (Langenscheidts)
rope_Fem_N = mkN "funis" "funis" feminine ; -- -is m.(/f.) (Langenscheidts)
salt_Neutr_N = mkN "sal" "salis" neuter ; -- salis m./n. (Langenscheidts)
stick_Neutr_N = mkN "baculum" ; -- -i n./m.
};

View File

@@ -1,3 +1,29 @@
abstract ExtraLexiconLatAbs = {
abstract ExtraLexiconLatAbs = Cat, Lexicon, ExtraLexCaesarAbs ** {
fun
-- Ambigous entries from main lexicon
friend_Fem_N : N ;
baby_Fem_N : N ;
blue_Var_A : A ;
boss_Fem_N : N ;
bread_Neutr_N : N ;
cat_Var_N : N ;
cousin_Fem_N : N ;
cow_Fem_N : N ;
dog_Fem_N : N ;
enemy_Fem_N : N ;
policeman_Fem_N : N ;
priest_Fem_N : N ;
snake_Fem_N : N ;
student_Fem_N : N ;
switch8on_Var_V2 : V2 ;
bark_Fem_N : N ;
blood_Var_N : N ;
day_Fem_N : N ;
horn_Var_N : N ;
liver_Var_N : N ;
louse_Fem_N : N ;
nose_Neutr_N : N ;
rope_Fem_N : N ;
salt_Neutr_N : N ;
stick_Neutr_N : N ;
};

View File

@@ -11,8 +11,8 @@ concrete GrammarLat of Grammar =
-- RelativeLat,
ConjunctionLat,
PhraseLat,
TextX,
TenseX,
TextX-[Adv],
TenseX-[Adv],
StructuralLat
-- IdiomLat
** {

View File

@@ -1,4 +1,4 @@
--concrete IdiomLat of Idiom = CatLat ** open Prelude, ResLat in {
concrete IdiomLat of Idiom = CatLat ** open Prelude, ResLat in {
--
-- flags optimize=all_subs ;
--
@@ -26,5 +26,4 @@
--
-- ImpPl1 vp = {s = "let's" ++ infVP True vp (AgP1 Pl)} ;
--
--}
--
}

View File

@@ -6,171 +6,16 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat
--
lin
-- Bayer-Lindauer 93 1
be_V =
let
pres_stem = "s" ;
pres_ind_base = "su" ;
pres_conj_base = "si" ;
impf_ind_base = "era" ;
impf_conj_base = "esse" ;
fut_I_base = "eri" ;
imp_base = "es" ;
perf_stem = "fu" ;
perf_ind_base = "fu" ;
perf_conj_base = "fueri" ;
pqperf_ind_base = "fuera" ;
pqperf_conj_base = "fuisse" ;
fut_II_base = "fueri" ;
part_stem = "fut" ;
verb = mkVerb "esse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "sum" ; "es" ; "est" ] ;
table Person [ "sumus" ; "estis" ; "sunt" ]
] ! n ! p ;
a => verb.act ! a
};
pass =
\\_ => nonExist ; -- no passive forms
inf =
verb.inf ;
imp =
table {
VImp1 Sg => "es" ;
VImp1 Pl => "este" ;
VImp2 Pl P2 => "estote" ;
a => verb.imp ! a
} ;
sup =
\\_ => nonExist ; -- no supin forms
ger =
\\_ => nonExist ; -- no gerund forms
geriv =
\\_ => nonExist ; -- no gerundive forms
part = table {
VActFut =>
verb.part ! VActFut ;
VActPres =>
\\_ => nonExist ; -- no such participle
VPassPerf =>
\\_ => nonExist -- no such participle
}
} ;
be_V = esseAux ;
-- Bayer-Lindauer 93 2.2
can_VV =
let
pres_stem = "pos" ;
pres_ind_base = "pos" ;
pres_conj_base = "possi" ;
impf_ind_base = "potera" ;
impf_conj_base = "posse" ;
fut_I_base = "poteri" ;
imp_base = "" ;
perf_stem = "potu" ;
perf_ind_base = "potu" ;
perf_conj_base = "potueri" ;
pqperf_ind_base = "potuera" ;
pqperf_conj_base = "potuisse" ;
fut_II_base = "potueri" ;
part_stem = "" ;
verb = mkVerb "posse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "possum" ; "potes" ; "potest" ] ;
table Person [ "possumus" ; "potestis" ; "possunt" ]
] ! n ! p ;
a => verb.act ! a
} ;
pass =
\\_ => nonExist ; -- no passive forms
inf =
table {
VInfActFut _ => nonExist ;
a => verb.inf ! a
} ;
imp =
\\_ => nonExist ;
sup =
\\_ => nonExist ;
ger =
\\_ => nonExist ;
geriv =
\\_ => nonExist ;
part = table {
VActFut =>
\\_ => nonExist ; -- no such participle
VActPres =>
\\_ => nonExist ; -- no such participle
VPassPerf =>
\\_ => nonExist -- no such participle
} ;
isAux = False
};
can_V =
posseAux ;
-- Bayer-Lindauer 94
bring_V =
let
pres_stem = "fer" ;
pres_ind_base = "fer" ;
pres_conj_base = "fera" ;
impf_ind_base = "fereba" ;
impf_conj_base = "ferre" ;
fut_I_base = "fere" ;
imp_base = "fer" ;
perf_stem = "tul" ;
perf_ind_base = "tul" ;
perf_conj_base = "tuleri" ;
pqperf_ind_base = "tulera" ;
pqperf_conj_base = "tulisse" ;
fut_II_base = "tuleri" ;
part_stem = "lat" ;
verb = mkVerb "ferre" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "fero" ; "fers" ; "fert" ] ;
table Person [ "ferimus" ; "fertis" ; "ferunt" ]
] ! n ! p ;
a => verb.act ! a
} ;
pass =
table {
VPass (VPres VInd) n p =>
table Number [ table Person [ "feror" ; "ferris" ; "fertur" ] ;
table Person [ "ferimur" ; "ferimini" ; "feruntur" ]
] ! n ! p ;
a => verb.pass ! a
} ;
inf =
verb.inf ;
imp =
table {
VImp1 n => table Number [ "fer" ; "ferte" ] ! n ;
VImp2 Sg ( P2 | P3 ) => "ferto" ;
VImp2 Pl P2 => "fertote" ;
a => verb.imp ! a
} ;
sup =
verb.sup ;
ger =
verb.ger ;
geriv =
verb.geriv ;
part = verb.part ;
};
ferreAux ;
-- Bayer-Lindauer 95
want_V =
@@ -204,9 +49,9 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat
pass =
\\_ => nonExist ;
ger =
verb.ger ;
\\_ => nonExist ;
geriv =
verb.geriv ;
\\_ => nonExist ;
imp =
\\_ => nonExist ;
inf =
@@ -220,7 +65,7 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat
\\_ => nonExist
} ;
sup =
verb.sup ;
\\_ => nonExist ;
} ;
-- Bayer-Lindauer 96 1
@@ -453,4 +298,155 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat
} ;
sup = \\_ => nonExist ; -- no such supine form
} ;
not8want_V =
let
pres_stem = "nol" ;
pres_ind_base = "nol" ;
pres_conj_base = "noli" ;
impf_ind_base = "noleba" ;
impf_conj_base = "nolle" ;
fut_I_base = "nole" ;
imp_base = "nol" ;
perf_stem = "nolu" ;
perf_ind_base = "nolu" ;
perf_conj_base = "nolueri" ;
pqperf_ind_base = "noluera" ;
pqperf_conj_base = "noluisse" ;
fut_II_base = "nolueri" ;
part_stem = "nolet" ;
verb = mkVerb "nolle" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "nolo" ; "non vis" ; "non vult" ] ;
table Person [ "nolumus" ; "non vultis" ; "nolunt" ]
] ! n ! p ;
a => verb.act ! a
} ;
pass =
\\_ => nonExist ;
ger =
\\_ => nonExist ;
geriv =
\\_ => nonExist ;
imp = table {
VImp1 Sg => "noli" ;
i => verb.imp ! i
} ;
inf = table {
VInfActFut _ | VInfPassPres | VInfPassPerf _ | VinfPassFut => nonExist ;
i => verb.inf ! i
} ;
part = table {
VActFut =>
\\_ => nonExist ;
VActPres =>
verb.part ! VActPres ;
VPassPerf =>
\\_ => nonExist
} ;
sup =
\\_ => nonExist ;
} ;
make_V =
let
pres_stem = "faci" ;
pres_ind_base = "faci" ;
pres_conj_base = "facia" ;
impf_ind_base = "facieba" ;
impf_conj_base = "facere" ;
fut_I_base = "facie" ;
imp_base = "faci" ;
perf_stem = "fec" ;
perf_ind_base = "fec" ;
perf_conj_base = "feceri" ;
pqperf_ind_base = "fecera" ;
pqperf_conj_base = "fecisse" ;
fut_II_base = "feceri" ;
part_stem = "fact" ;
verb = mkVerb "facere" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act = verb.act ;
pass =
table {
VPass (VPres VInd) Sg P1 => "fio" ;
VPass (VPres VInd) Pl P3 => "fiunt" ;
VPass (VPres VInd) n p => "fi" + actPresEnding n p ;
VPass (VPres VConj) n p => "fia" + actPresEnding n p ;
VPass (VImpf VInd) n p => "fieba" + actPresEnding n p ;
VPass (VImpf VConj) n p => "fiere" + actPresEnding n p ;
VPass VFut Sg P1 => "fiam" ;
VPass VFut n p => "fie" + actPresEnding n p
} ;
ger =
verb.ger ;
geriv =
verb.geriv ;
imp =
table {
VImp1 Sg => "fac" ;
i => verb.imp ! i
} ;
inf =
table {
VInfActFut Masc => "facturus" ;
VInfActFut Fem => "factura" ;
VInfActFut Neutr => "facturum" ;
VInfPassPres => "fieri" ;
VInfPassPerf Masc => "factus" ;
VInfPassPerf Fem => "facta" ;
i => verb.inf ! i
};
part =
verb.part ;
sup =
table {
VSupAcc => "factum" ;
VSupAbl => "factu"
} ;
} ;
give_V =
let
pres_stem = "da" ;
pres_ind_base = "da" ;
pres_conj_base = "de" ;
impf_ind_base = "daba" ;
impf_conj_base = "dare" ;
fut_I_base = "dabi" ;
imp_base = "da" ;
perf_stem = "ded" ;
perf_ind_base = "ded" ;
perf_conj_base = "dederi" ;
pqperf_ind_base = "dedera" ;
pqperf_conj_base = "dedisse" ;
fut_II_base = "dederi" ;
part_stem = "dat" ;
verb = mkVerb "dare" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act = verb.act ;
pass =
verb.pass ;
ger =
verb.ger ;
geriv =
verb.geriv ;
imp =
verb.imp ;
inf = verb.inf ;
part =
verb.part ;
sup =
verb.sup ;
} ;
}

View File

@@ -1,11 +1,14 @@
abstract IrregLatAbs = Cat ** {
fun
be_V : V ;
can_VV : VV ;
can_V : V ;
bring_V : V ;
want_V : V ;
go_V : V;
become_V : V;
rain_V : V;
hate_V : V;
not8want_V : V ;
make_V : V ;
give_V : V ;
}

View File

@@ -3,8 +3,8 @@
concrete LangLat of Lang =
GrammarLat,
ParadigmsLat,
-- ConjunctionLat,
LexiconLat
-- ConstructionLat
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -19,19 +19,21 @@ concrete LexiconLat of Lexicon = CatLat ** open
NounLat,
AdjectiveLat,
VerbLat,
Prelude in {
Prelude,
ExtraLat
in {
flags
optimize=values ;
coding = utf8;
lin
airplane_N = mkN "aeroplanum" ; -- -i n. (http://la.wikipedia.org/wiki/A%C3%ABroplanum / Pons)
answer_V2S = mkV2S ( mkV "respondere" ) R.Dat_Prep ; -- -spondeo, -spondi, -sponsum 2 (Langenscheidts) alicui; ad, contra, adversus aliquid (Stowasser)
answer_V2S = mkV2S ( mkV "respondere" ) Dat_Prep ; -- -spondeo, -spondi, -sponsum 2 (Langenscheidts) alicui; ad, contra, adversus aliquid (Stowasser)
apartment_N = mkN "domicilium" ; -- -i n. (Langenscheidts)
apple_N = mkN "malum" ; -- -i n. (Langenscheidts)
art_N = mkN "ars" "artis" feminine ; -- Ranta; artis f. (Langenscheidts)
ask_V2Q = mkV2Q ( mkV "rogare" ) R.Acc_Prep ; -- rogo 1 (Langenscheidts) aliquem aliquid (Stowasser)
baby_N = mkN "infans" "infantis" ( variants { feminine ; masculine } ); -- Ranta; -antis m./f. (Langenscheidts)
ask_V2Q = mkV2Q ( mkV "rogare" ) Acc_Prep ; -- rogo 1 (Langenscheidts) aliquem aliquid (Stowasser)
baby_N = mkN "infans" "infantis" masculine ; -- Ranta; -antis m./f. (Langenscheidts)
bad_A = mkA "malus" ; -- Ranta; peior, pessimus 3 (Langenscheidts)
bank_N = mkN "argentaria" ; -- -ae f. (http://la.wikipedia.org/wiki/Argentaria / Pons)
beautiful_A = mkA "pulcher" ; -- -chra, -chrum (Langenscheidts)
@@ -42,16 +44,16 @@ lin
bike_N = mkN "birota" ; -- -ae f. (http://la.wikipedia.org/wiki/Birota / Pons)
bird_N = mkN "avis" "avis" feminine ; -- Ranta; -is f. (Langenscheidts)
black_A = mkA "niger" ; -- Ranta; -gra, -grum (Langenscheidts)
blue_A = mkA ( variants { "caeruleus" ; "caerulus" } ) ; -- 3 (Langenscheidts)
blue_A = mkA "caerulus" ; -- 3 (Langenscheidts)
boat_N = mkN "navicula" ; -- -ae f. (Langenscheidts)
book_N = mkN "liber"; -- Ranta; -bri m. (Langenscheidts)
boot_N = mkN "calceus" ; -- -i m. (Langenscheidts)
boss_N = mkN "dux" "ducis" ( variants { feminine ; masculine } ) ; -- ducis m./f. (Langenscheidts)
boss_N = mkN "dux" "ducis" masculine ; -- ducis m./f. (Langenscheidts)
boy_N = mkN "puer" "pueri" masculine ; -- -eri m. (Langenscheidts)
bread_N = variants { (mkN "panis" "panis" masculine ) ; (mkN "pane" "panis" neuter ) } ; -- -is m./n. (Langenscheidts)
bread_N = mkN "panis" "panis" masculine ; -- -is m./n. (Langenscheidts)
break_V2 = mkV2 ( mkV "rumpere" "rumpo" "rupi" "ruptum" ) ; -- Ranta; 3 (Langenscheidts) aliquem (Bayer-Lindauer 110)
broad_A = mkA "latus" ; -- 3 (Langenscheidts)
brother_N2 = mkN2 ( mkN "frater" "fratris" masculine ) R.Gen_Prep; -- -tris m. (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
brother_N2 = mkN2 ( mkN "frater" "fratris" masculine ) Gen_Prep; -- -tris m. (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
brown_A = mkA "fulvus" ; -- 3 (Langenscheidts)
butter_N = mkN "butyrum" ; -- -i n. (http://la.wikipedia.org/wiki/Butyrum / Pons)
buy_V2 = mkV2 (mkV "emere") ; -- emo, emi, emptum 3 (Langenscheidts) (Stowasser) ab, de aliquo (Stowasser)
@@ -60,7 +62,7 @@ lin
cap_N = mkN "galerus" ; -- -i m. (Langenscheidts)
car_N = mkN "autoreada" ; -- -ae f. (Pons / http://la.wikipedia.org/wiki/Autocinetum)
carpet_N = mkN "stragulum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Teges_pavimenti)
cat_N = mkN ( variants {"feles" ; "felis" } ) "felis" feminine ; -- -is f. (Langenscheidts)
cat_N = mkN "feles" "felis" feminine ; -- -is f. (Langenscheidts)
ceiling_N = mkN "tegimentum" ; -- -i n. (Langenscheidts)
chair_N = mkN "sedes" "sedis" feminine; -- -is f. (Langenscheidts)
cheese_N = mkN "caseus" ; -- -i m. (Langenscheidts)
@@ -75,29 +77,29 @@ lin
come_V = mkV "venire" ; -- veno, veni, ventum 4 (Langenscheidts)
computer_N = mkN "computatrum" ; -- -i n. (http://la.wikipedia.org/wiki/Computatrum / Pons)
country_N = mkN "terra" ; -- -ae f. (Langenscheidts)
cousin_N = mkN ( variants {"consobrinus" ; "consobrina" } ) ; -- -i/-ae m./f. (Langenscheidts)
cow_N = mkN "bos" "bovis" ( variants { feminine ; masculine } ) ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts)
cousin_N = mkN "consobrinus" ; -- -i/-ae m./f. (Langenscheidts)
cow_N = mkN "bos" "bovis" masculine ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts)
die_V = mkV "mori" "mortuus" "morturus"; -- morior, mortuus sum, morturus (Langenscheidts)
dirty_A = mkA "sordidus" ; -- 3 (Langenscheidts)
distance_N3 = mkN3 (mkN "distantia") from_Prep to_Prep ; -- -ae f. (Langenscheidts) ab, ad aliquem; alicuius; aliquem (???)
doctor_N = mkN "medicus" ; -- -i m. (Langenscheidts)
dog_N = mkN "canis" "canis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
dog_N = mkN "canis" "canis" masculine ; -- -is m./f. (Langenscheidts)
door_N = mkN "porta" ; -- -ae f. (Langenscheidts)
drink_V2 = mkV2 (mkV "bibere") ; -- bibo, potum 3 (Langenscheidts) aliquem (Bayer-Lindauer 110)
easy_A2V = mkA2V (mkA "facilis" "facile" ) for_Prep ; -- -e sup -illimus (Langenscheidts)
eat_V2 = mkV2 (mkV "cenare") ; -- ceno 1 (Langenscheidts) aliquem (Bayer-Lindauer 110)
empty_A = mkA "vacuus" ; -- 3 (Langenscheidts)
enemy_N = mkN "hostis" "hostis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
enemy_N = mkN "hostis" "hostis" masculine ; -- -is m./f. (Langenscheidts)
factory_N = mkN "officina" ; -- -ae f. (Langenscheidts)
father_N2 = mkN2 (mkN "pater" "patris" masculine ) R.Gen_Prep ; -- -tris m. gen pl -um (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
father_N2 = mkN2 (mkN "pater" "patris" masculine ) Gen_Prep ; -- -tris m. gen pl -um (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
fear_VS = mkVS (mkV "timere") ; -- timeo, timui, --- 2 (Langenscheidts)
find_V2 = mkV2 (mkV "reperire") ; -- reperio, repperi, repertum 4 (Langenscheidts) aliquem
fish_N = mkN "piscis" "piscis" masculine ; -- -is m. (Langenscheidts)
floor_N = mkN "pavimentum" ; -- -i n. (Langenscheidts)
forget_V2 = mkV2 (mkV "oblivisci" "obliviscor" "oblitus" ) ; -- obliscor, oblitus sum 3 (Langenscheidts)
fridge_N = mkN "frigidarium" ; -- --i n. (Pons / http://la.wikipedia.org/wiki/Armarium_frigidarium)
friend_N = mkN ( variants { "amicus" ; "amica" } ) ; -- -i/-ae m./f. (Langenscheidts)
friend_N = mkN "amicus" ; -- -i/-ae m./f. (Langenscheidts)
fruit_N = mkN "fructus" "fructus" masculine; -- -us m. (Langenscheidts)
fun_AV = mkAV (mkA "iocosus") ; -- 3 (Langenscheidts)
garden_N = mkN "hortus" ; -- -i m. (Langenscheidts)
@@ -108,7 +110,7 @@ lin
go_V = IrregLat.go_V ; -- eo, i(v)i, itum (Langenscheidts)
green_A = mkA "viridis" "viride"; -- -e (Langenscheidts)
harbour_N = mkN "portus" "portus" masculine ; -- -us m. (Langenscheidts)
hate_V2 = mkV2 IrregLat.hate_V R.Acc_Prep ; -- odi, osurus/odivi (Langenscheidts)
hate_V2 = mkV2 IrregLat.hate_V Acc_Prep ; -- odi, osurus/odivi (Langenscheidts)
hat_N = mkN "petasus" ; -- -i m. (Langenscheidts)
hear_V2 = mkV2 (mkV "audire") ; -- 4 (Langenscheidts)
hill_N = mkN "collis" "collis" masculine ; -- -is m. (Langenscheidts)
@@ -141,7 +143,7 @@ lin
meat_N = mkN "carnis" "carnis" feminine ; -- -is f. (Langenscheidts)
milk_N = mkN "lac" "lactis" neuter ; -- -- lactis n. (Langenscheidts)
moon_N = mkN "luna" ; -- -ae f. (Langenscheidts)
mother_N2 = mkN2 ( mkN "mater" "matris" feminine ) R.Gen_Prep ; -- matris f. (Langenscheidts)
mother_N2 = mkN2 ( mkN "mater" "matris" feminine ) Gen_Prep ; -- matris f. (Langenscheidts)
mountain_N = mkN "mons" "montis" masculine ; -- montis m. (Langenscheidts)
music_N = mkN "musica" ; -- -ae f. L..
narrow_A = mkA "angustus" ; -- 3 (Langenscheidts)
@@ -150,7 +152,7 @@ lin
oil_N = mkN "oleum" ; -- -i n. (Langenscheidts)
old_A = mkA "vetus" "veteris"; -- (Langenscheidts)
open_V2 = mkV2 (mkV "aperire") ; -- aperio, aperui, apertum 4 (Langenscheidts)
paint_V2A = mkV2A (mkV "pingere" "pingo" "pinxi" "pictum" ) R.Acc_Prep ; -- pingo, pinxi, pictum 3 (Langenscheidts)
paint_V2A = mkV2A (mkV "pingere" "pingo" "pinxi" "pictum" ) Acc_Prep ; -- pingo, pinxi, pictum 3 (Langenscheidts)
paper_N = mkN "charta" ; -- -ae f. (http://la.wikipedia.org/wiki/Charta / Pons)
paris_PN = mkPN (mkN "Lutetia") ; -- -ae f. (http://la.wikipedia.org/wiki/Lutetia)
peace_N = mkN "pax" "pacis" feminine ; -- pacis f. (Langenscheidts)
@@ -158,8 +160,8 @@ lin
planet_N = mkN "planeta" ; -- -ae m. (http://la.wikipedia.org/wiki/Planeta)
plastic_N = mkN "plastica" "plasticae" feminine ; -- -ae f. (http://la.wikipedia.org/wiki/Plasticum)
play_V2 = mkV2 (mkV "ludere") ; -- ludo, lusi, lusum 3 (Langenscheidts)
policeman_N = mkN "custos" "custodis" ( variants { masculine ; feminine } ) ; -- -odis m./f. (Langenscheidts)
priest_N = mkN "sacerdos" "sacerdotis" ( variants { masculine ; feminine } ) ; -- -dotis m./f. (Langenscheidts)
policeman_N = mkN "custos" "custodis" masculine ; -- -odis m./f. (Langenscheidts)
priest_N = mkN "sacerdos" "sacerdotis" masculine ; -- -dotis m./f. (Langenscheidts)
probable_AS = mkAS (mkA "verisimilis" "verisimile") ; -- -e (Langenscheidts)
queen_N = mkN "regina" ; -- -ae f. (Langenscheidts)
radio_N = mkN "radiophonum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Radiophonia)
@@ -180,8 +182,8 @@ lin
sea_N = mkN "mare" "maris" neuter ; -- -is n. (Langenscheidts)
seek_V2 = mkV2 (mkV "quaerere" "quaero" "quaesivi" "quaesitum" ) ; -- quaero, quaesivi, quaesitum 3 (Langenscheidts)
see_V2 = mkV2 (mkV "videre") ; -- video, vidi, visum 2 (Langenscheidts)
sell_V3 = mkV3 ( mkV "vendere" "vendo" "vendidi" "venditum" ) R.Acc_Prep R.Dat_Prep ; -- vendo, vendidi, venditum 3 (Langenscheidts)
send_V3 = mkV3 ( mkV "mittere" "mitto" "misi" "missum" ) R.Acc_Prep R.Dat_Prep ; -- mitto, misi, missum 3 (Langenscheidts)
sell_V3 = mkV3 ( mkV "vendere" "vendo" "vendidi" "venditum" ) Acc_Prep Dat_Prep ; -- vendo, vendidi, venditum 3 (Langenscheidts)
send_V3 = mkV3 ( mkV "mittere" "mitto" "misi" "missum" ) Acc_Prep Dat_Prep ; -- mitto, misi, missum 3 (Langenscheidts)
sheep_N = mkN "ovis" "ovis" feminine ; -- -is f. (Langenscheidts)
ship_N = mkN "navis" "navis" feminine ; -- -is f. acc. -em (-im) abl meist -i (Langenscheidts)
shirt_N = mkN "tunica" ; -- -ae f. (Langenscheidts)
@@ -193,20 +195,20 @@ lin
-- sleep_V = mkV "dormio" "dormivi" "dormitus" "dormire" ; -- Ranta;
sleep_V = mkV "dormire" ; -- 4 (Langenscheidts)
small_A = mkA "parvus" ; -- 3 (Langenscheidts)
snake_N = mkN "serpens" "serpentis" ( variants { masculine ; feminine } ) ; -- -entis m./f. (Langenscheidts)
snake_N = mkN "serpens" "serpentis" masculine ; -- -entis m./f. (Langenscheidts)
sock_N = mkN "impile" "impilis" masculine ; -- -is n. (Pons)
speak_V2 = mkV2 (mkV "loqui" "loquor" "locutus" ) ; -- loquor, locutus sum 3 (Langenscheidts)
star_N = mkN "stella" ; -- -ae f. (Langenscheidts)
steel_N = mkN "chalybs" "chalybis" masculine ; -- chalybis m. (Langenscheidts)
stone_N = mkN "lapis" "lapidis" masculine ; -- -idis m. (Langenscheidts)
stove_N = mkN "fornax" "formacis" feminine ; -- -acis f. (Langenscheidts)
student_N = mkN ( variants { "discipulus"; "discipula" } ) ; -- -i/-ae m./f. (Langenscheidts)
student_N = mkN "discipulus"; -- -i/-ae m./f. (Langenscheidts)
stupid_A = mkA "stultus" ; -- 3 (Langenscheidts)
sun_N = mkN "sol" "solis" masculine ; -- solis m. (Langenscheidts)
switch8off_V2 = mkV2 (mkV "accendere") ; -- -cendo, -cendi, -censum 3 (Langenscheidts)
switch8on_V2 = mkV2 (mkV ( variants { "exstinguere" ; "extinguere" } ) ); -- -ingo, -inxi, -inctum 3 (Langenscheidts)
switch8on_V2 = mkV2 (mkV "extinguere" ); -- -ingo, -inxi, -inctum 3 (Langenscheidts)
table_N = mkN "mensa" ; -- -ae f. (Langenscheidts)
talk_V3 = mkV3 ( lin V speak_V2 ) R.Dat_Prep R.Acc_Prep ;
talk_V3 = mkV3 ( lin V speak_V2 ) Dat_Prep Acc_Prep ;
teacher_N = mkN "magister" "magistri" masculine ; -- -tri m. (Langenscheidts)
teach_V2 = mkV2 (mkV "docere") ; -- doceo, docui, doctum 2 (Langenscheidts)
television_N = mkN "televisio" "televisionis" feminine ; -- -onis f. (Pons)
@@ -230,7 +232,7 @@ lin
white_A = mkA "albus" ; -- 3 (Langenscheidts)
window_N = mkN "fenestra" ; -- -ae f. (Langenscheidts)
wine_N = mkN "vinum" ; -- -i n. (Langenscheidts)
win_V2 = mkV2 (mkV "vincere") ; -- vinco, vici, victum 3 (Langenscheidts)
win_V2 = mkV2 (mkV "vincere" "vinco" "vinxi" "victum") ; -- vinco, vici, victum 3 (Langenscheidts)
woman_N = mkN "femina" ; -- -ae f. (Langenscheidts)
wonder_VQ = mkVQ (mkV "mirari") ; -- 1 (Langenscheidts)
wood_N = mkN "lignum" ; -- -i n. (Langenscheidts)
@@ -242,14 +244,14 @@ lin
now_Adv = mkAdv "nunc" ; -- (Langenscheidts)
already_Adv = mkAdv "iam" ; -- (Langenscheidts)
song_N = mkN "carmen" "carminis" neuter ; -- -inis n. (Langenscheidts)
add_V3 = mkV3 ( mkV "addere" "addo" "addidi" "additum" ) R.Acc_Prep R.to_P ; -- addo, addidi, additum 3 (Langenscheidts)
add_V3 = mkV3 ( mkV "addere" "addo" "addidi" "additum" ) Acc_Prep to_Prep ; -- addo, addidi, additum 3 (Langenscheidts)
number_N = mkN "numerus" ; -- -i m.
put_V2 = mkV2 (mkV "ponere" "pono" "posui" "positum" ) ; -- pono, posui, positum 3 (Langenscheidts)
stop_V = mkV "sistere" "sisto" "steti" "statum" ; -- sisto, stiti/steti, statum 3 (Langenscheidts)
jump_V = mkV "saltare" ; -- 1 (Langenscheidts)
left_Ord = ss "sinister" ; -- -tra, -trum (Langenscheidts)
right_Ord = ss "dexter" ; -- -t(e)ra, -t(e)rum (Langenscheidts)
left_Ord = lin Ord { s = \\g,n,c => (mkA "sinister").s ! R.Posit ! R.Ag g n c } ; -- -tra, -trum (Langenscheidts)
right_Ord = lin Ord { s = \\g,n,c => (mkA "dexter").s ! R.Posit ! R.Ag g n c } ; -- -t(e)ra, -t(e)rum (Langenscheidts)
far_Adv = mkAdv "longe" ; -- (Langenscheidts)
correct_A = mkA "rectus" ; -- 3 (Langenscheidts)
dry_A = mkA "aridus" ; -- 3 (Langenscheidts)
@@ -267,13 +269,13 @@ lin
animal_N = mkN "animal" "animalis" neuter ; -- -alis n. (Langenscheidts)
ashes_N = mkN "cinis" "cineris" masculine ; -- -eris m. (Langenscheidts) & Bayer-Lindauer 33 1.2
back_N = mkN "tergum" ; -- -i n. (Langenscheidts)
bark_N = mkN "cortex" "corticis" ( variants { masculine ; feminine } ) ; -- -icis m./(f.) (Langenscheidts)
bark_N = mkN "cortex" "corticis" masculine ; -- -icis m./(f.) (Langenscheidts)
belly_N = mkN "venter" "ventris" masculine ; -- -tris m. (Langenscheidts)
blood_N = variants { mkN "sanguis" "sanguinis" masculine ; mkN "sangis" "sanginis" masculine} ; -- -inis m. (Langenscheidts)
blood_N = mkN "sanguis" "sanguinis" masculine ; -- -inis m. (Langenscheidts)
bone_N = mkN "os" "ossis" neuter ; -- ossis n. (Langenscheidts)
breast_N = mkN "pectus""pectoris" neuter ; -- pectoris n. (Langenscheidts)
cloud_N = mkN "nubes" "nubis" feminine ; -- -is f. (Langenscheidts)
day_N = mkN "dies" "diei" ( variants { masculine ; feminine } ) ; -- -ei m./f. (Langenscheidts)
day_N = mkN "dies" "diei" masculine ; -- -ei m./f. (Langenscheidts)
dust_N = mkN "pulvis" "pulveris" masculine; -- -veris m. (Langenscheidts)
ear_N = mkN "auris" "auris" feminine; -- -is f. (Langenscheidts)
earth_N = mkN "terra" ; -- -ae f. (Langenscheidts)
@@ -293,32 +295,32 @@ lin
hand_N = mkN "manus" "manus" feminine ; -- -us f. (Langenscheidts)
head_N = mkN "caput" "capitis" neuter ; -- -itis n. (Langenscheidts)
heart_N = mkN "cor" "cordis" neuter; -- cordis n. (Langenscheidts)
horn_N = mkN ( variants { "cornu" ; "cornus" } ) "cornus" neuter ; -- -us n. (Langenscheidts)
horn_N = mkN "cornus" "cornus" neuter ; -- -us n. (Langenscheidts)
husband_N = mkN "maritus" ; -- -i m. (Langenscheidts)
ice_N = mkN "glacies" "glaciei" feminine ; -- -ei f. (Langenscheidts)
knee_N = mkN "genu" "genus" neuter ; -- -us n. (Langenscheidts)
leaf_N = mkN "folium" ; -- -i n. (Langenscheidts)
leg_N = bone_N ;
liver_N = variants { ( mkN "iecur" "iecoris" neuter ) ; ( mkN "iocur" "iocineris" neuter ) } ; -- iecoris/iocineris n. (Langenscheidts)
louse_N = mkN "pedis" "pedis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
liver_N = mkN "iecur" "iecoris" neuter ; -- iecoris/iocineris n. (Langenscheidts)
louse_N = mkN "pedis" "pedis" masculine ; -- -is m./f. (Langenscheidts)
mouth_N = mkN "os" "oris" neuter ; -- oris n. (Langenscheidts)
name_N = mkN "nomen" "nominis" neuter ; -- -inis n. (Langenscheidts)
neck_N = mkN "cervix" "cervicis" feminine ; -- -icis f. (meist pl.) (Langenscheidts)
night_N = mkN "nox" "noctis" feminine ; -- noctis f. (Langenscheidts)
nose_N = mkN ( variants { "nasus" ; "nasum" } ) ; -- -i m./n. (Langenscheidts)
nose_N = mkN "nasus" ; -- -i m./n. (Langenscheidts)
person_N = mkN "persona" ; -- -ae f. (Langenscheidts)
rain_N = mkN "pluvia" ; -- -ae f. (Langenscheidts)
road_N = mkN "via" ; -- -ae f. (Langenscheidts)
root_N = mkN "radix" "radicis" feminine ; -- -icis f. (Langenscheidts)
rope_N = mkN "funis" "funis" ( variants { masculine ; feminine } ) ; -- -is m.(/f.) (Langenscheidts)
salt_N = mkN "sal" "salis" ( variants { masculine ; neuter } ) ; -- salis m./n. (Langenscheidts)
rope_N = mkN "funis" "funis" masculine ; -- -is m.(/f.) (Langenscheidts)
salt_N = mkN "sal" "salis" masculine ; -- salis m./n. (Langenscheidts)
sand_N = mkN "arena" ; -- -ae f. (Langenscheidts)
seed_N = mkN "semen" "seminis" neuter ; -- -inis n. (Langenscheidts)
skin_N = mkN "cutis" "cutis" feminine ; -- -is f. (Langenscheidts)
sky_N = mkN "caelum" ; -- -i n. (Langenscheidts)
smoke_N = mkN "fumus" ; -- -i m. (Langenscheidts)
snow_N = mkN "nix" "nivis" feminine ; -- nivis (gen. pl. -ium) f. (Langenscheidts)
stick_N = mkN ( variants { "baculum" ; "baculus" } ) ; -- -i n./m.
stick_N = mkN "baculus" ; -- -i n./m.
tail_N = mkN "cauda" ; -- -ae f. (Langenscheidts)
tongue_N = mkN "lingua" ; -- -ae f. (Langenscheidts)
tooth_N = mkN "dens" "dentis" masculine; -- dentis m. (Langenscheidts)

196
src/latin/MissingAPILat.gf Normal file
View File

@@ -0,0 +1,196 @@
resource MissingAPILat = open GrammarLat, Prelude in {
-- temporary definitions to enable the compilation of RGL API
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper IdRP : RP = notYet "IdRP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PassV2 : V2 -> VP = notYet "PassV2" ;
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper UseComparA : A -> AP = notYet "UseComparA" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdvAP : AP -> Adv -> AP = notYet "AdvAP" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper AdvVPSlash : VPSlash -> Adv -> VPSlash = notYet "AdvVPSlash" ;
oper AdVVPSlash : AdV -> VPSlash -> VPSlash = notYet "AdVVPSlash" ;
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
oper BaseDAP : DAP -> DAP -> ListDAP = notYet "BaseDAP" ;
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
oper ConsDAP : DAP -> ListDAP -> ListDAP = notYet "ConsDAP" ;
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
oper DetDAP : Det -> DAP = notYet "DetDAP" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExtAdvNP : NP -> Adv -> NP = notYet "ExtAdvNP" ;
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
oper PassV2 : V2 -> VP = notYet "PassV2" ;
oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelS : S -> RS -> S = notYet "RelS" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
oper UseComparA : A -> AP = notYet "UseComparA" ;
oper UseCopula : VP = notYet "UseCopula" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
}

View File

@@ -1,142 +1 @@
resource MissingLat = open GrammarLat, Prelude in {
-- temporary definitions to enable the compilation of RGL API
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper CompNP : NP -> Comp = notYet "CompNP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper DetNP : Det -> NP = notYet "DetNP" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdRP : RP = notYet "IdRP" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper MassNP : CN -> NP = notYet "MassNP" ;
oper NumCard : Card -> Num = notYet "NumCard" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PassV2 : V2 -> VP = notYet "PassV2" ;
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper UseComparA : A -> AP = notYet "UseComparA" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper UttAP : AP -> Utt = notYet "UttAP" ;
oper UttAdv : Adv -> Utt = notYet "UttAdv" ;
oper UttCN : CN -> Utt = notYet "UttCN" ;
oper UttCard : Card -> Utt = notYet "UttCard" ;
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
oper UttIP : IP -> Utt = notYet "UttIP" ;
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
oper UttNP : NP -> Utt = notYet "UttNP" ;
oper UttVP : VP -> Utt = notYet "UttVP" ;
oper n2 : Digit = notYet "n2" ;
oper n3 : Digit = notYet "n3" ;
oper n4 : Digit = notYet "n4" ;
oper n5 : Digit = notYet "n5" ;
oper n6 : Digit = notYet "n6" ;
oper n7 : Digit = notYet "n7" ;
oper n8 : Digit = notYet "n8" ;
oper n9 : Digit = notYet "n9" ;
oper num : Sub1000000 -> Numeral = notYet "num" ;
oper pot0 : Digit -> Sub10 = notYet "pot0" ;
oper pot01 : Sub10 = notYet "pot01" ;
oper pot0as1 : Sub10 -> Sub100 = notYet "pot0as1" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1as2 : Sub100 -> Sub1000 = notYet "pot1as2" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2as3 : Sub1000 -> Sub1000000 = notYet "pot2as3" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
}
{-
AR 28/3/2017
To build:
$ gf api/TryLat.gf | grep constant | sort -u >missLat.tmp
$ ghci
Prelude> pgf <- PGF.readPGF "Lang.pgf"
Prelude> ms <- readFile "missLat.tmp" >>= return . map (last . words) . lines
Prelude> let ts = [PGF.showType [] t | m <- ms, Just t <- [PGF.functionType pgf (PGF.mkCId m)]]
Prelude> putStrLn $ unlines ["oper " ++ f ++ " : " ++ t ++ " = notYet \"" ++ f ++ "\" ;" | (f,t) <- zip ms ts]
To use:
--# -path=.:alltenses:prelude:../latin
resource ConstructorsLat = Constructors with (Grammar = GrammarLat) **
open MissingLat in {}
-}

View File

@@ -0,0 +1,5 @@
resource MissingTranslateLat = open GrammarLat, Prelude in {
-- temporary definitions to enable the compilation of RGL Translate
}

View File

@@ -8,7 +8,7 @@
-- syntax. To build a lexicon, it is better to use $ParadigmsLat$, which
-- gives a higher-level access to this module.
resource MorphoLat = ParamX, ResLat ** open Prelude in {
resource MorphoLat = ParamX, ResLat ** open Prelude, Predef in {
--
-- flags optimize=all ;
--
@@ -149,18 +149,18 @@ oper
noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g ->
let s : Noun = case <verbum,verbi> of {
<_ + "a", _ + "ae"> => noun1 verbum ;
<_ + "us", _ + "i"> => noun2us verbum ;
<_ + "um", _ + "i"> => noun2um verbum ;
<_ + ( "er" | "ir" ) , _ + "i"> => noun2er verbum verbi ;
<_ + "us", _ + "us"> => noun4us verbum ;
<_ + "u", _ + "us"> => noun4u verbum ;
<_ + "es", _ + "ei"> => noun5 verbum ;
<_ + "a" , _ + "ae"> => noun1 verbum ;
<_ + "us" , _ + "i" > => noun2us verbum ;
<_ + "um" , _ + "i" > => noun2um verbum ;
<_ + ( "er" | "ir" ) , _ + "i" > => noun2er verbum verbi ;
<_ + "us" , _ + "us"> => noun4us verbum ;
<_ + "u" , _ + "us"> => noun4u verbum ;
<_ + "es" , _ + "ei"> => noun5 verbum ;
<semi + "bos" , _ > => prefixNoun semi (noun3 "bos" "bovis" Masc) ;
_ => noun3 verbum verbi g
}
in
nounWithGen g s ;
nounWithGender g s ;
noun : Str -> Noun = \verbum ->
case verbum of {
@@ -170,6 +170,7 @@ oper
_ + ( "er" | "ir" ) => noun2er verbum ( (Predef.tk 2 verbum) + "ri" ) ;
_ + "u" => noun4u verbum ;
_ + "es" => noun5 verbum ;
semi + "bos" => prefixNoun semi (noun_ngg "bos" "bovis" Masc) ;
_ => Predef.error ("3rd declinsion cannot be applied to just one noun form " ++ verbum)
} ;
@@ -179,7 +180,7 @@ oper
_ + "a" => noun1 verbum ;
_ + "us" => noun2us verbum ;
_ + "um" => noun2um verbum ;
_ + ( "er" | "ir" ) =>
_ + ( "er" | "ir" | "ur" | "tr") =>
let
puer = verbum ;
pue = Predef.tk 1 puer ;
@@ -189,6 +190,7 @@ oper
-- Exception of adjectives where e is part of the word stem 31 3.2
("asper" | "miser" | "tener" | "frugifer") + _ => "e";
-- "liber" => ( "e" | "" ) ; conflicting with noun liber
_ + "tr" => "t";
_ => ""
} ;
pu = Predef.tk 1 pue ;
@@ -310,6 +312,8 @@ oper
-- Usual cases
pulch + "er" => pulch + "r" ;
bon + "us" => bon ;
cam + "ur" => cam ;
dime + "tr" => bonus ;
_ => Predef.error ("adj12 does not apply to" ++ bonus)
} ;
nbonus = (noun12 bonus) ;
@@ -334,9 +338,10 @@ oper
(noun1 (bon + "a"))
(noun2um (bon + "um"))
< compsup.p1 , advs.p1 >
< compsup.p2 , advs.p2 > ;
< compsup.p2 , advs.p2 >
(bon + "o") (bon + "ius") (bon + "issimo") ;
adj3x : (_,_ : Str) -> Adjective = \acer,acris ->
adj3x : (_,_ : Str) -> Adjective = \acer,acris -> -- FISHY??
let
ac = Predef.tk 2 acer ;
acrise : Str * Str = case acer of {
@@ -353,16 +358,104 @@ oper
(noun3adj acrise.p2 acris Neutr)
< compsuper.p1 , "" >
< compsuper.p2 , "" >
;
(ac + "riter") (ac + "rius") (ac + "rissimo") ;
adjgre : Str -> Str -> Str -> Adjective = \bonus,bona,bonum ->
let
first : Str -> Agr => Str =
\stem ->
table { Ag Masc Sg Nom => stem + "os" ;
Ag (Masc | Neutr) Sg Gen => stem + "ou" ;
Ag (Masc | Neutr) Sg Dat => stem + "oi" ;
Ag (Masc | Neutr) Sg Acc => stem + "on" ;
Ag Masc Sg Voc => stem + "e" ;
Ag Fem Sg (Nom | Voc) => stem + "a" ;
Ag Fem Sg Gen => stem + "as" ;
Ag Fem Sg Dat => stem + "ai" ;
Ag Fem Sg Acc => stem + "an" ;
Ag Neutr Sg (Nom | Voc) => stem + "on" ;
Ag Masc Pl (Nom | Voc) => stem + "oi" ;
Ag (Masc | Fem | Neutr) Pl Gen => stem + "on" ;
Ag (Masc | Neutr) Pl Dat => stem + "ois" ;
Ag Masc Pl Acc => stem + "ous" ;
Ag Fem Pl (Nom | Voc) => stem + "ai" ;
Ag Fem Pl Dat => stem + "ais" ;
Ag Fem Pl Acc => stem + "as" ;
Ag Neutr Pl (Nom | Acc | Voc) => stem + "a" ;
Ag _ _ Abl => nonExist
} ;
second : Str -> Agr => Str =
\stem ->
table { Ag (Masc | Fem) Sg Nom => stem + "os" ;
Ag (Masc | Fem | Neutr) Sg Gen => stem + "ou" ;
Ag (Masc | Fem | Neutr) Sg Dat => stem + "oi" ;
Ag (Masc | Fem | Neutr) Sg Acc => stem + "on" ;
Ag (Masc | Fem) Sg Voc => stem + "e" ;
Ag Neutr Sg (Nom | Voc) => stem + "on" ;
Ag (Masc | Fem) Pl (Nom | Voc) => stem + "oi";
Ag (Masc | Fem | Neutr) Pl Gen => stem + "on" ;
Ag (Masc | Fem | Neutr) Pl Dat => stem + "ois" ;
Ag (Masc | Fem) Pl Acc => stem + "ous" ;
Ag Neutr Pl (Nom | Acc | Voc) => stem + "a" ;
Ag _ _ Abl => nonExist
} ;
third : Str -> Agr => Str =
\stem ->
table { Ag (Masc | Fem | Neutr) Sg (Nom | Voc) => stem + "es" ;
Ag (Masc | Fem | Neutr) Sg Gen => stem + "ous" ;
Ag (Masc | Fem | Neutr) Sg Dat => stem + "ei" ;
Ag (Masc | Fem) Sg Acc => stem + "e" ;
Ag Neutr Sg Acc => stem + "es" ;
Ag (Masc | Fem) Pl (Nom | Acc | Voc) => "eis" ;
Ag (Masc | Fem | Neutr) Pl Gen => "on" ;
Ag (Masc | Fem | Neutr) Pl Dat => "esi" ;
Ag Neutr Pl (Nom | Acc | Voc ) => "e" ;
Ag _ _ Abl => nonExist
} ;
in
{ s = case <bonus,bona,bonum> of {
<agi + "os" , _ + "a" , _ + "on"> =>
table { Posit => first agi ;
Compar => first (agi + "oter") ;
Super => first (agi + "otat")
} ;
<arctic + "os" , _ + "e" , _ + "on"> =>
table { Posit => second arctic ;
Compar => second (arctic + "oter") ;
Super => second (arctic + "otat")
} ;
<akapn + "os" , _ + "os", _ + "on"> =>
table { Posit => second akapn ;
Compar => second (akapn + "oter") ;
Super => second (akapn + "otat")
} ;
<isoscel + "es", _ + "es", _ + "es"> =>
table { Posit => third isoscel ;
Compar => first (isoscel + "oter") ;
Super => first (isoscel + "otat")
} ;
<amethystiz + "on", _ + "ousa", _ + "on"> =>
table { Posit => table { Ag g Sg c => first amethystiz ! Ag g Sg c ;
Ag g Pl c => third amethystiz ! Ag g Sg c
} ;
Compar => \\_ => nonExist ;
Super => \\_ => nonExist
};
_ => error ("Greek adjective " ++ bonus ++ bona ++ bonum ) -- { s = \\_,_ => "" ; adv = \\_ => ""} ;
} ;
adv = mkAdverb bonus
} ;
-- smart paradigms
adj123 : Str -> Str -> Adjective = \bonus,boni ->
adj123 : Str -> Str -> Adjective = \bonus,boni ->
case <bonus,boni> of {
<_ + ("us" | "er"), _ + "i" > => adj12 bonus ;
<_ + ("us" | "er"), _ + "is"> => adj3x bonus boni ;
<_ , _ + "is"> => adj3x bonus boni ;
<_ + "is" , _ + "e" > => adj3x bonus boni ;
<_ + "is" , _ + "os"> => adj3x bonus boni ;
-- <_ + "os" , _ + "on"> => adjgre bonus boni boni ;
<bon + "on" , _ + "os"> => adjgre bonus (bon + "ousa") bonus ;
_ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni)
} ;
@@ -372,8 +465,18 @@ oper
facil + "is" => adj3x bonus bonus ;
feli + "x" => adj3x bonus (feli + "cis") ;
_ => adj3x bonus (bonus + "is") ---- any example?
} ;
} ;
adjfull : (bonus,bona,bonum : Str) -> Adjective = \bonus,bona,bonum ->
case <bonus,bona,bonum> of {
<_ + ("er"|"us"|"ur"|"tr"), _ + "a" , _ + "um"> => adj12 bonus ;
<_ + ("er"|"is"), _ + "is" , _ + "e" > => adj3x bonus bonum ; -- FISHY?
<_ + "ior" , _ + "ior", _ + "ius"> => adj3x bonus bonum ; -- FISHY?
<_ + "os" , _ + "os" , _ + "on"> => adjgre bonus bona bonum ;
<_ + "es" , _ + "es" , _ + "es"> => adjgre bonus bona bonum ;
<_ + "os" , _ + ("e"|"a") , _ + "on"> => adjgre bonus bona bonum ;
_ => Predef.error ("Not supported" ++ bonus ++ bona ++ bonum)
} ;
----3 Verbs
@@ -605,6 +708,8 @@ oper
_ + ( "i" | "u" ) + "o" => verb3i iacere ieci iactus ; -- Bayer-Linduaer 74 1
_ => verb3c iacere ieci iactus
} ;
ab + "esse" => prefixVerb ab esseAux ;
circum + "ferre" => prefixVerb circum ferreAux ;
_ => Predef.error ("verb_ippp: illegal infinitive form" ++ iacere)
} ;
@@ -618,6 +723,9 @@ oper
_ + "ire" => let iaci = Predef.tk 2 iacere
in verb4 iacere ; -- (iaci + "vi") (iaci + "tus") ;
_ + "ere" => verb2 iacere ;
circum + "ferre" => prefixVerb circum ferreAux ;
ab + "esse" => prefixVerb ab esseAux ;
prae + "posse" => prefixVerb prae posseAux ;
_ => Predef.error ("verb: illegal infinitive form" ++ iacere)
} ;
}

View File

@@ -3,43 +3,85 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
flags optimize=all_subs ;
lin
DetCN det cn = -- Det -> CN -> NP
-- DetCN : Det -> CN -> NP ; -- the man
DetCN det cn =
{
s = \\c => det.s ! cn.g ! c ++ cn.preap.s ! (Ag cn.g det.n c) ++ cn.s ! det.n ! c ++ cn.postap.s ! (Ag cn.g det.n c) ;
s = \\c => cn.s ! det.n ! c ;
n = det.n ; g = cn.g ; p = P3 ;
adv = cn.adv ;
preap = cn.preap ;
postap = cn.postap ;
det = det
} ;
UsePN pn = lin NP { s = pn.s ! Sg ; g = pn.g ; n = Sg ; p = P3 } ;
UsePron p = -- Pron -> Np
-- UsePN : PN -> NP ; -- John
UsePN pn =
lin NP
{
s = pn.s ! Sg ;
g = pn.g ;
n = Sg ;
p = P3 ;
adv = "" ;
preap, postap = { s = \\_ => "" } ;
det = { s,sp = \\_,_ => "" ; n = Sg }
} ;
-- UsePron : Pron -> NP ; -- he
UsePron p =
{
g = p.g ;
n = p.n ;
g = p.pers.g ;
n = p.pers.n ;
p = p.p ;
s = \\c => case c of {
Nom => p.pers ! PronDrop ! PronRefl ; -- Drop pronoun in nominative case
_ => p.pers ! PronNonDrop ! PronRefl -- but don't drop it otherwise
Nom => p.pers.s ! PronDrop ! PronNonRefl ; -- Drop pronoun in nominative case
_ => p.pers.s ! PronNonDrop ! PronNonRefl -- but don't drop it otherwise
} ! c ;
adv = "" ;
preap, postap = { s = \\_ => "" } ;
det = { s,sp = \\_,_ => "" ; n = p.pers.n } ;
} ;
-- PredetNP pred np = {
-- s = \\c => pred.s ++ np.s ! c ;
-- a = np.a
-- } ;
--
-- PredetNP : Predet -> NP -> NP ; -- only the man
PredetNP predet np =
np ** {
det = np.det ** { s = \\g,c => predet.s ++ np.det.s ! g ! c }
} ;
-- PPartNP : NP -> V2 -> NP ; -- the man seen
-- PPartNP np v2 = {
-- s = \\c => np.s ! c ++ v2.s ! VPPart ;
-- a = np.a
-- } ;
--
-- RelNP np rs = {
-- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
-- a = np.a
-- } ;
--
-- AdvNP : NP -> Adv -> NP ; -- Paris today
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
g = np.g ; n = np.n; p = np.p
} ;
-- AdvNP : NP -> Adv -> NP ; -- Paris today
AdvNP np adv = np ** { adv = np.adv ++ (adv.s ! Posit) } ;
-- {
-- s = \\c => np.s ! c ;
-- g = np.g ; n = np.n; p = np.p ;
-- adv = cc2 np.adv adv ;
-- preap = np.preap ;
-- postap = np.postap ;
-- det = np.det;
-- } ;
-- ExtAdvNP: NP -> Adv -> NP ; -- boys, such as ..
ExtAdvNP = AdvNP ;
-- RelNP : NP -> RS -> NP ; -- Paris, which is here
RelNP np rs = np ** { adv = rs.s ++ np.adv } ;
-- DetNP : Det -> NP ; -- these five
DetNP det = {
s = det.s ! Neutr ;
g = Neutr ;
n = det.n ;
p = P3 ;
adv = "" ;
preap, postap = { s = \\_ => "" } ;
det = { s,sp = \\_,_ => "" ; n = det.n } ;
} ;
--
-- DetQuantOrd quant num ord = {
-- s = quant.s ! num.hasCard ! num.n ++ num.s ++ ord.s ;
@@ -53,10 +95,7 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
n = num.n
} ;
-- DetNP det = {
-- s = det.sp ! Neutr ;
-- g = Neutr ; n = det.n ; p = P3
-- } ;
-- PossPron p = {
-- s = \\_,_ => p.s ! Gen ;
@@ -66,13 +105,14 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
NumSg = {s = \\_,_ => [] ; n = Sg} ;
NumPl = {s = \\_,_ => [] ; n = Pl} ;
-- NumCard n = n ** {hasCard = True} ;
NumCard n = n ;
--
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
-- OrdDigits n = {s = n.s ! NOrd} ;
--
-- NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
-- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
-- OrdDigits n = {s = n.s ! NOrd} ;
--
lin
NumNumeral numeral = numeral.card ;
OrdNumeral numeral = numeral.ord ;
--
-- AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
--
@@ -88,16 +128,24 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
sp = \\_ => [] ;
} ;
-- MassNP cn = {
-- s = cn.s ! Sg ;
-- a = Ag cn.g Sg
-- } ;
MassNP cn =
{
s = cn.s ! Sg ;
-- s = case cn.massable of { True => cn.s ! Sg ; False => \\_ => nonExist } ;
g = cn.g ;
n = Sg ;
p = P3 ;
adv = cn.adv ;
preap = cn.preap ;
postap = cn.postap ;
det = { s,sp = \\_,_ => "" ; n = Sg } ;
};
UseN n = -- N -> CN
lin CN ( n ** {preap, postap = {s = \\_ => "" } } ) ;
lin CN ( n ** {preap, postap = {s = \\_ => "" } ; adv = "" }) ; -- massable = n.massable } ) ;
UseN2 n2 = -- N2 -> CN
lin CN ( n2 ** {preap, postap = {s = \\_ => "" } } ) ;
lin CN ( n2 ** {preap, postap = {s = \\_ => "" } ; adv = "" }) ; -- massable = n2.massable } ) ;
-----b UseN3 n = n ;
--
-- Use2N3 f = {
@@ -119,21 +167,10 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
-- c2 = f.c3
-- } ;
param
AdjPos = Pre | Post ;
lin
-- by default add adjective after the noun, otherwise use AdjCNPre
AdjCN ap cn = -- AP -> CN -> CN
let pos = variants { Post ; Pre }
in
{
-- s = \\n,c => preOrPost ap.isPre (ap.s ! cn.g ! n ! c) (cn.s ! n ! c) ;
-- s = \\n,c => ( cn.s ! n ! c ) ++ ( ap.s ! AdjPhr cn.g n c) ; -- always add adjectives after noun?
s = cn.s ;
postap = case pos of { Pre => cn.postap ; Post => { s = \\a => ap.s ! a ++ cn.postap.s ! a } } ;
preap = case pos of { Pre => { s = \\a => ap.s ! a ++ cn.preap.s ! a } ; Post => cn.preap } ;
-- variants { postap = ConsAP postap ap ; preap = ConsAP preap ap } ; -- Nice if that would work
g = cn.g
} ;
addAdjToCN (lin AP ap) (lin CN cn) Post ;
-- RelCN cn rs = {
-- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ;
@@ -143,7 +180,14 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
-- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
-- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;
--
-- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c ; g = cn.g} ;
--
--
-- ApposCN : CN -> NP -> CN
ApposCN cn np =
{
s = \\n,c => cn.s ! n ! c ++ np.det.s ! np.g ! c ++ np.preap.s ! (Ag np.g n c) ++ np.s ! c ++ np.postap .s ! (Ag np.g n c) ++ np.det.sp ! np.g ! c ;
g = cn.g ;
preap = cn.preap ;
postap = cn.postap ;
adv = cn.adv
} ; -- massable = cn.massable } ;
}

View File

@@ -1,42 +1,36 @@
concrete NumeralLat of Numeral = CatLat ** open ResLat 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 ;
--lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in
-- {s = \\f,c => case <f,c> of {
-- <teen,NOrd> => "twelfth" ;
-- _ => two.s ! f ! c
-- }
-- } ;
--
--lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
--lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;
--lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
--lin n6 = regNum "six" ;
--lin n7 = regNum "seven" ;
--lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;
--lin n9 = mkNum "nine" "nineteen" "ninety" "ninth" ;
--
--lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;
--lin pot0 d = d ** {n = Pl} ;
concrete NumeralLat of Numeral = CatLat ** open ResLat,ParadigmsLat in {
lincat
Digit = Numeral ;
Sub10 = Numeral ;
Sub100 = Numeral ;
Sub1000 = Numeral ;
Sub1000000 = Numeral ;
lin
num x = x ;
n2 = lin Numeral ( mkNum "duo" "secundus" ) ;
n3 = lin Numeral ( mkNum "tres" "tertius" ) ;
n4 = lin Numeral ( mkNum "quattuor" "quartus" ) ;
n5 = lin Numeral ( mkNum "quinque" "quintus" ) ;
n6 = lin Numeral ( mkNum "sex" "sextus" ) ;
n7 = lin Numeral ( mkNum "septem" "septimus" ) ;
n8 = lin Numeral ( mkNum "octo" "ocatvus" ) ;
n9 = lin Numeral ( mkNum "novem" "nonus" ) ;
lin pot01 = lin Numeral ( mkNum "unus" "primus" ) ;
lin pot0 d = d ;
--lin pot110 = regCardOrd "ten" ** {n = Pl} ;
--lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
--lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
--lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
lin pot0as1 n = n ;
--lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
--lin pot1plus d e = {
-- s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ;
--lin pot1as2 n = n ;
pot1as2 n = n ;
--lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ;
--lin pot2plus d e = {
-- s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ;
--lin pot2as3 n = n ;
pot2as3 n = n ;
--lin pot3 n = {
-- s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
--lin pot3plus n m = {

View File

@@ -24,9 +24,15 @@ resource ParadigmsLat = open
-- To abstract over gender names, we define the following identifiers.
oper
masculine : Gender ;
feminine : Gender ;
neuter : Gender ;
masculine : Gender = Masc ;
feminine : Gender = Fem ;
neuter : Gender = Neutr ;
nom : Case = Nom ;
acc : Case = Acc ;
gen : Case = Gen ;
dat : Case = Dat ;
abl : Case = Abl ;
voc : Case = ResLat.Voc ;
mkN = overload {
mkN : (verbum : Str) -> N
@@ -36,21 +42,28 @@ oper
} ;
mkA = overload {
mkA : (verbum : Str) -> A
mkA : (verbum : Str) -> A -- Nominative masculine
= \n -> lin A ( adj n ** {isPre = False } ) ;
mkA : (verbum, verbi : Str) -> A
mkA : (verbum, verbi : Str) -> A -- Nominative and Genitive masculine
= \x,y -> lin A ( adj123 x y ** {isPre = False } ) ;
mkA : (bonus,bona,bonum : N) -> A
= \x,y,z ->
let compsup = comp_super x ;
advs : Str * Str =
case x.s!Sg!Nom of {
-- Bayer-Lindauer 50 4
idon + #vowel + "us" => < "magis" , "maxime" > ;
_ => < "" , "" >
};
in
lin A ( mkAdjective x y z < compsup.p1 , advs.p2 > < compsup.p2 , advs.p2> ** {isPre = False } ) ;
-- mkA : (bonus,bona,bonum : N) -> A
-- = \x,y,z ->
-- let compsup = comp_super x ;
-- advs : Str * Str =
-- case x.s!Sg!Nom of {
-- -- Bayer-Lindauer 50 4
-- idon + #vowel + "us" => < "magis" , "maxime" > ;
-- _ => < "" , "" >
-- };
-- in
-- lin A ( mkAdjective x y z < compsup.p1 , advs.p2 > < compsup.p2 , advs.p2> ** {isPre = False } ) ;
mkA : (bonus,bona,bonum : Str) -> A -- Nominative masculine, feminine and neuter
= \x,y,z -> lin A (adjfull x y z ) ;
mkA : (verbum : Str) -> (comparable : Bool) -> A
= \n,b -> lin A ( case b of {
True => adj n ;
False => let a = adj n in { s = table { Posit => a.s ! Posit ; _ => \\_ => nonExist } ; adv = a.adv }
} ** { isPre = False } )
} ;
@@ -63,9 +76,12 @@ oper
= \v,x,y -> lin V ( verb_ippp v x y nonExist ) ;
} ;
V0 : Type = V ;
mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working
V0 : Type = V;
mkV0 = overload {
mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working
mkV0 : Str -> V0 = \v -> lin V0 (mkImpersonal v) ;
} ;
mkV2 = overload {
mkV2 : (amare : Str) -> V2
= \v -> lin V2 ( verb v ** { c = lin Prep ( mkPrep "" Acc ) } ) ;
@@ -75,13 +91,26 @@ oper
= \v,p -> lin V2 ( v ** { c = p } ) ;
} ;
masculine = Masc ;
feminine = Fem ;
neuter = Neutr ;
mkAdv : Str -> Adv
= \s -> lin Adv {s = s} ;
mkAdv = overload {
mkAdv : Str -> Adv
= \s -> lin Adv (mkAdverb s) ;
mkAdv : (pos,comp,super : Str) -> Adv
= \p,c,s -> lin Adv (mkFullAdverb p c s);
mkAdv : (pos,comp : Str) -> Adv
= \p,c -> lin Adv (mkFullAdverb p c nonExist);
};
pluralN = ResLat.pluralN ;
singularN = ResLat.singularN ;
mkConj : Str -> Str -> Number -> Coordinator -> Conjunction = mkConjunction ;
mkPrep : Str -> Case -> Preposition = mkPreposition ;
mkPron = mkPronoun ;
mkNum = mkNumeral ;
-- To be implemented, just place holders
mkPN : N -> PN = \n -> lin PN n ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 ( n ** { c = p } );

View File

@@ -1,24 +1,37 @@
concrete PhraseLat of Phrase = CatLat ** open Prelude, ResLat in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
--
-- UttS : S -> Utt
UttS s = { s = s.s };
UttS s = { s = combineSentence s ! SPreS ! PreS ! SOV };
-- UttQS : QS -> Utt
UttQS qs = {s = qs.s ! QDir } ;
-- UttImpSg : Pol -> Imp -> Utt
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! VImp1 Sg } ;
-- UttImpPl : Pol -> Imp -> Utt
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! VImp1 Pl } ;
-- UttImpPol : Pol -> Imp -> Utt
UttImpPol pol imp = UttImpSg pol imp ;
-- UttIP : IP -> Utt
UttIP ip = {s = ip.s ! Nom} ; --- Acc also
-- UttIAdv : IAdv -> Utt
UttIAdv iadv = iadv ;
-- UttNP : NP -> Utt
UttNP np = {s = np.adv ++ np.det.s ! np.g ! Nom ++ np.preap.s ! (Ag np.g np.n Nom) ++ np.s ! Nom ++ np.postap.s ! (Ag np.g np.n Nom) ++ np.det.sp ! np.g ! Nom} ;
-- UttVP : VP -> Utt
UttVP vp = ss (vp.inf ! VInfActPres) ;
-- UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;
-- UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! 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 ;
--
-- UttAdv : Adv -> Utt
UttAdv adv = ss (adv.s ! Posit) ;
-- UttAP : AP -> Utt
UttAP ap = ss (ap.s ! Ag Masc Sg Nom );
-- UttCard : Card -> Utt
UttCard card = ss (card.s ! Masc ! Nom);
-- UttCN : CN -> Utt
UttCN cn = ss (cn.s ! Sg ! Nom) ;
-- UttInterj : Interj -> Utt
UttInterj interj = interj ;
NoPConj = {s = []} ;
PConjConj conj = {s = conj.s2} ; ---
--

View File

@@ -3,29 +3,35 @@ concrete QuestionLat of Question = CatLat ** open ResLat, IrregLat, Prelude in {
-- flags optimize=all_subs ;
--`
lin
-- QuestCl : Cl -> QCl ; -- does John walk
QuestCl cl = {
s = \\t,a,p =>
let cls = cl.s ! t ! a ! p
in table {
QDir => cls ! VQTrue ! VSO ; -- cls ! OQuest ;
QIndir => "" -- "if" ++ cls ! ODir -- TODO
}
} ;
-- QuestCl : Cl -> QCl ; -- does John walk
-- TO FIX
-- QuestCl cl = {
-- s = \\t,a,p =>
-- let cls = (combineClause cl PreS).s ! t ! a ! p
-- in table {
-- QDir => cls ! VQTrue ! VSO ! PreV ; -- cls ! OQuest ;
-- QIndir => "" -- "if" ++ cls ! ODir -- TODO
-- }
-- } ;
-- QuestVP : IP -> VP -> QCl ; -- who walks
QuestVP ip vp =
let qcl = mkQuestion { s = ip.s ! Nom } ( mkClause emptyNP vp )
in {s = \\t,a,b,qd => qcl.s ! t ! a ! b ! qd} ;
-- QuestVP : IP -> VP -> QCl ; -- who walks
-- TO FIX
-- QuestVP ip vp =
-- let qcl = mkQuestion { s = ip.s ! Nom } ( mkClause emptyNP vp )
-- in {s = \\t,a,b,qd => qcl.s ! t ! a ! b ! qd} ;
-- QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love
QuestSlash ip slash =
mkQuestion (ss ( ip.s ! Acc) ) slash ;
-- QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love
-- TO FIX
-- QuestSlash ip slash =
-- mkQuestion (ss ( ip.s ! Acc) ) slash ;
QuestIAdv iadv cl = mkQuestion iadv cl ;
-- TO FIX
-- QuestIAdv iadv cl = mkQuestion iadv cl ;
--
QuestIComp icomp np =
mkQuestion icomp (mkClause np (predV be_V) ) ;
-- TO FIX
-- QuestIComp icomp np =
-- mkQuestion icomp (mkClause np (predV be_V) ) ;
--
--
-- PrepIP p ip = {s = p.s ++ ip.s ! Acc} ;

View File

@@ -1,4 +1,4 @@
--concrete RelativeLat of Relative = CatLat ** open ResLat in {
concrete RelativeLat of Relative = CatLat ** open ResLat in {
--
-- flags optimize=all_subs ;
--
@@ -51,4 +51,4 @@
-- a = RNoAg
-- } ;
--
--}
}

View File

@@ -2,7 +2,7 @@
--1 Latin auxiliary operations.
resource ResLat = ParamX ** open Prelude,TenseX in {
resource ResLat = ParamX ** open Prelude, Predef, (C=CommonX) in {
param
Case = Nom | Acc | Gen | Dat | Abl | Voc ;
@@ -12,36 +12,47 @@ param
oper
consonant : pattern Str = #( "p" | "b" | "f" | "v" | "m" | "t" | "d" | "s" | "z" | "n" | "r" | "c" | "g" | "l" | "q" | "qu" | "h" );
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
Noun : Type = {s : Number => Case => Str ; g : Gender } ; -- massable : Bool } ;
NounPhrase : Type =
{
s : Case => Str ;
g : Gender ;
n : Number ;
p : Person ;
adv : Str ;
preap : {s : Agr => Str } ;
postap : {s : Agr => Str } ;
det : Determiner
} ;
param
Order = SVO | VSO | VOS | OSV | OVS | SOV ;
Order = SVO | VSO | VOS | OSV | OVS | SOV ;
AdvPos = PreS | PreV | PreO | PreNeg | InV | InS ; -- | InO
SAdvPos = SPreS | SPreV | SPreO | SPreNeg ;
param
Agr = Ag Gender Number Case ; -- Agreement for NP et al.
oper
Adjective : Type = {
s : Degree => Agr => Str ;
-- comp_adv : Str ;
-- super_adv : Str
-- super_adv : Str
adv : Adverb ;
} ;
ComplexNoun : Type =
CommonNoun : Type =
{
s : Number => Case => Str ;
g : Gender ;
adv : Str ;
preap : {s : Agr => Str } ;
postap : {s : Agr => Str } ;
} ;
postap : {s : Agr => Str }
-- massable : Bool
} ;
-- nouns
useCNasN : ComplexNoun -> Noun = \cn ->
useCNasN : CommonNoun -> Noun = \cn ->
{
s = cn.s ;
g = cn.g ;
g = cn.g
-- massable = cn.massable;
} ;
pluralN : Noun -> Noun = \n ->
@@ -52,11 +63,39 @@ param
};
g = n.g ;
preap = n.preap ;
postap = n.postap ;
postap = n.postap
-- massable = n.massable ;
};
mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun =
singularN : Noun -> Noun = \n ->
lin N {
s = table {
Sg => n.s ! Sg ;
Pl => \\_ => nonExist -- no plural forms
};
g = n.g ;
preap = n.preap ;
postap = n.postap
-- massable = n.massable ;
};
param
AdjPos = Pre | Post ;
oper
addAdjToCN : AdjectivePhrase -> CommonNoun -> AdjPos -> CommonNoun = \ap,cn,pos ->
{
s = cn.s ;
postap = case pos of { Pre => cn.postap ; Post => { s = \\a => ap.s ! a ++ cn.postap.s ! a } } ;
preap = case pos of { Pre => { s = \\a => ap.s ! a ++ cn.preap.s ! a } ; Post => cn.preap } ;
g = cn.g ;
adv = cn.adv
-- massable = cn.massable
} ;
mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun =
\sn,sa,sg,sd,sab,sv,pn,pa,pg,pd,g -> {
-- mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Bool -> Noun =
--\sn,sa,sg,sd,sab,sv,pn,pa,pg,pd,g,m -> {
s = table {
Sg => table {
Nom => sn ;
@@ -74,31 +113,51 @@ param
}
} ;
g = g
-- massable = m
} ;
-- to change the default gender
nounWithGen : Gender -> Noun -> Noun = \g,n ->
{s = n.s ; g = g} ;
nounWithGender : Gender -> Noun -> Noun = \g,n ->
{s = n.s ; g = g } ; -- massable = n.massable ;} ;
-- nounMassable : Bool -> Noun -> Noun = \m,n ->
-- {s = n.s ; g = n.g ; massable = m } ;
prefixNoun : Str -> Noun -> Noun =
\p,n ->
{ s = \\num,cas => addPrefix p (n.s ! num ! cas) ; g = n.g };
regNP : (_,_,_,_,_,_ : Str) -> Gender -> Number -> NounPhrase =
\nom,acc,gen,dat,abl,voc,g,n ->
{
s = table Case [ nom ; acc ; gen ; dat ; abl ; voc ] ;
g = g ;
n = n ;
p = P3
p = P3;
adv = "" ;
preap, postap = { s = \\_ => "" } ;
det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = n} ;
} ;
emptyNP : NounPhrase = { s = \\_ => ""; g = Masc; n = Sg; p = P1 };
dummyNP : Str -> NounPhrase = \s -> regNP s s s s s s Masc Sg ;
emptyNP : NounPhrase = { s = \\_ => ""; g = Masc; n = Sg; p = P1 ; adv = "" ; preap, postap = { s = \\_ => "" } ; det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = Sg } ;};
-- also used for adjectives and so on
-- adjectives
mkAdjective : (_,_,_ : Noun) ->
AdjectivePhrase : Type = {
s : Agr => Str ;
-- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns
} ;
mkAdjective : (bonus,bona,bonum : Noun) ->
( (Agr => Str) * Str ) ->
( (Agr => Str) * Str ) -> Adjective =
\bonus,bona,bonum,melior,optimus ->
( (Agr => Str) * Str ) ->
(bono,bonius,bonissimo : Str) ->
Adjective =
\bonus,bona,bonum,melior,optimus,bono,bonius,bonissimo ->
{
s = table {
Posit => table {
@@ -110,7 +169,8 @@ param
Superl => optimus.p1
} ;
comp_adv = melior.p2 ;
super_adv = optimus.p2
super_adv = optimus.p2 ;
adv = { s = table { Posit => bono ; Compar => bonius ; Superl => bonissimo } };
} ;
@@ -128,7 +188,7 @@ param
emptyAdj : Adjective =
{ s = \\_,_ => "" ; comp_adv = "" ; super_adv = "" } ;
{ s = \\_,_ => "" ; comp_adv = "" ; super_adv = "" ; adv = { s = \\_ => "" } } ;
-- verbs
@@ -149,11 +209,16 @@ param
oper
VerbPhrase : Type = {
fin : VActForm => VQForm => Str ;
s : VActForm => VQForm => Str ;
part : VPartForm =>Agr => Str ;
inf : VInfForm => Str ;
imp : VImpForm => Str ;
obj : Str ;
adj : Agr => Str
} ;
compl : Agr => Str ; -- general complement. Agr might be ignored except for adjectives
adv : Str
} ;
ObjectVerbPhrase : Type = VerbPhrase ** {c : Preposition} ;
Verb : Type = {
act : VActForm => Str ;
@@ -203,10 +268,11 @@ param
useVPasV : VerbPhrase -> Verb = \vp ->
{
act = \\a => vp.obj ++ vp.fin ! a ! VQFalse;
act = \\a => vp.obj ++ vp.s ! a ! VQFalse;
pass = \\_ => nonExist ;
inf = \\a => vp.obj ++ vp.inf ! a ;
imp = \\_ => nonExist ;
-- inf = \\a => vp.obj ++ vp.inf ! a ;
inf = vp.inf ;
imp = vp.imp ;
ger = \\_ => nonExist ;
geriv = \\_ => nonExist ;
sup = \\_ => nonExist ;
@@ -378,25 +444,26 @@ param
pres_stem + fill.p1 + "ndo"
} ;
geriv =
( mkAdjective
( mkNoun ( pres_stem + fill.p1 + "ndus" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" )
( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "nde" )
( pres_stem + fill.p1 + "ndi" ) ( pres_stem + fill.p1 + "ndos" ) ( pres_stem + fill.p1 + "ndorum" )
( pres_stem + fill.p1 + "ndis" )
Masc )
( mkNoun ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndam" ) ( pres_stem + fill.p1 + "ndae" )
( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" )
( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "ndas" ) (pres_stem + fill.p1 +"ndarum" )
( pres_stem + fill.p1 + "ndis" )
Fem )
( mkNoun ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" )
( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndum" )
( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndorum" )
( pres_stem + fill.p1 + "ndis" )
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
).s!Posit ;
( mkAdjective
( mkNoun ( pres_stem + fill.p1 + "ndus" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" )
( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "nde" )
( pres_stem + fill.p1 + "ndi" ) ( pres_stem + fill.p1 + "ndos" ) ( pres_stem + fill.p1 + "ndorum" )
( pres_stem + fill.p1 + "ndis" )
Masc )
( mkNoun ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndam" ) ( pres_stem + fill.p1 + "ndae" )
( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" )
( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "ndas" ) (pres_stem + fill.p1 +"ndarum" )
( pres_stem + fill.p1 + "ndis" )
Fem )
( mkNoun ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" )
( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndum" )
( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndorum" )
( pres_stem + fill.p1 + "ndis" )
Neutr )
< \\_ => "" , "" > -- Comparative
< \\_ => "" , "" > -- Superlative
"" "" "" -- Adverb part
).s!Posit ;
sup =
table {
VSupAcc => -- Supin
@@ -436,6 +503,7 @@ param
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
"" "" ""
).s!Posit ;
VPassPerf =>
( mkAdjective
@@ -453,6 +521,7 @@ param
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
"" "" ""
).s!Posit
}
} ;
@@ -607,6 +676,7 @@ param
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
"" "" ""
).s!Posit ;
sup =
table {
@@ -648,6 +718,7 @@ param
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
"" "" ""
).s!Posit ;
VPassPerf =>
( mkAdjective
@@ -668,10 +739,27 @@ param
Neutr )
< \\_ => "" , "" >
< \\_ => "" , "" >
"" "" ""
).s!Posit
}
} ;
-- at the moment only fills present tense
mkImpersonal : Str -> Verb = \s ->
{
act = table {
VAct VSim (VPres VInd) Sg P1 => s ;
_ => nonExist
} ;
pass = \\_ => nonExist ;
imp = \\_ => nonExist ;
inf = \\_ => nonExist ;
ger = \\_ => nonExist ;
geriv = \\_ => nonExist ;
part = \\_,_ => nonExist ;
sup = \\_ => nonExist ;
} ;
actPresEnding : Number -> Person -> Str =
useEndingTable <"m", "s", "t", "mus", "tis", "nt"> ;
@@ -690,7 +778,7 @@ param
}
in
(useEndingTable endings n p) + passPresEnding n p ;
useEndingTable : (Str*Str*Str*Str*Str*Str) -> Number -> Person -> Str =
\es,n,p -> case n of {
Sg => case p of {
@@ -705,6 +793,210 @@ param
}
} ;
addPrefix : Str -> Str -> Str =
\prefix,verb ->
case <prefix,verb> of {
<p + "b","f" + _ > => p + verb ;
<p + "b", "te" + r > => prefix + "sti" + r;
<p + "b", "t" + r > => prefix + "s" + verb;
<p + "b", "iact" + r > => prefix + "iect" + r;
<p + "b", "iac" + r > => prefix + "ic" + r;
<p + "d","capt" + r > => p + "ccept" + r ;
<p + "d","ca" + r > => p + "cci" + r ;
<p ,"spe" + r > => p + "spi" + r ;
<p ,"spex" + r > => prefix + verb;
<p ,"stat" + r > => p + "stit" + r ;
<p ,"tex" + r > => p + verb ;
<p ,"te" + r > => p + "ti" + r ;
<p + "d","c" + _ > => p + "c" + verb ;
<p + "d","t" + _ > => p + "t" + verb ;
<p + "d","l" + _ > => p + "l" + verb ;
_ => prefix + verb
} ;-- TODO too simple e.g. ab+fuit = afuit
prefixVerb2 : Str -> Verb2 -> Verb2 =
\prefix,verb ->
let v = { act = verb.act ; pass = verb.pass ; inf = verb.inf ; imp = verb.imp ; ger = verb.ger ; geriv = verb.geriv ; sup = verb.sup ; part = verb.part }
in
(prefixVerb prefix v) ** { c = verb.c };
prefixVerb : Str -> Verb -> Verb =
\prefix,verb ->
{
act = \\form => addPrefix prefix (verb.act ! form) ;
pass = \\form => addPrefix prefix (verb.pass ! form) ;
inf = \\form => addPrefix prefix (verb.inf ! form) ;
imp = \\form => addPrefix prefix (verb.imp ! form) ;
ger = \\form => addPrefix prefix (verb.ger ! form) ;
geriv = \\agr => addPrefix prefix (verb.geriv ! agr) ;
sup = \\form => addPrefix prefix (verb.sup ! form) ;
part = \\form,agr => addPrefix prefix (verb.part ! form ! agr) ;
} ;
esseAux : Verb = -- Bayer-Lindauer 93 1
let
pres_stem = "s" ;
pres_ind_base = "su" ;
pres_conj_base = "si" ;
impf_ind_base = "era" ;
impf_conj_base = "esse" ;
fut_I_base = "eri" ;
imp_base = "es" ;
perf_stem = "fu" ;
perf_ind_base = "fu" ;
perf_conj_base = "fueri" ;
pqperf_ind_base = "fuera" ;
pqperf_conj_base = "fuisse" ;
fut_II_base = "fueri" ;
part_stem = "fut" ;
verb = mkVerb "esse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "sum" ; "es" ; "est" ] ;
table Person [ "sumus" ; "estis" ; "sunt" ]
] ! n ! p ;
a => verb.act ! a
};
pass =
\\_ => nonExist ; -- no passive forms
inf =
verb.inf ;
imp =
table {
VImp1 Sg => "es" ;
VImp1 Pl => "este" ;
VImp2 Pl P2 => "estote" ;
a => verb.imp ! a
} ;
sup =
\\_ => nonExist ; -- no supin forms
ger =
\\_ => nonExist ; -- no gerund forms
geriv =
\\_ => nonExist ; -- no gerundive forms
part = table {
VActFut =>
verb.part ! VActFut ;
VActPres =>
\\_ => nonExist ; -- no such participle
VPassPerf =>
\\_ => nonExist -- no such participle
}
} ;
ferreAux : Verb =
let
pres_stem = "fer" ;
pres_ind_base = "fer" ;
pres_conj_base = "fera" ;
impf_ind_base = "fereba" ;
impf_conj_base = "ferre" ;
fut_I_base = "fere" ;
imp_base = "fer" ;
perf_stem = "tul" ;
perf_ind_base = "tul" ;
perf_conj_base = "tuleri" ;
pqperf_ind_base = "tulera" ;
pqperf_conj_base = "tulisse" ;
fut_II_base = "tuleri" ;
part_stem = "lat" ;
verb = mkVerb "ferre" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "fero" ; "fers" ; "fert" ] ;
table Person [ "ferimus" ; "fertis" ; "ferunt" ]
] ! n ! p ;
a => verb.act ! a
} ;
pass =
table {
VPass (VPres VInd) n p =>
table Number [ table Person [ "feror" ; "ferris" ; "fertur" ] ;
table Person [ "ferimur" ; "ferimini" ; "feruntur" ]
] ! n ! p ;
a => verb.pass ! a
} ;
inf =
verb.inf ;
imp =
table {
VImp1 n => table Number [ "fer" ; "ferte" ] ! n ;
VImp2 Sg ( P2 | P3 ) => "ferto" ;
VImp2 Pl P2 => "fertote" ;
a => verb.imp ! a
} ;
sup =
verb.sup ;
ger =
verb.ger ;
geriv =
verb.geriv ;
part = verb.part ;
};
posseAux : Verb =
let
pres_stem = "pos" ;
pres_ind_base = "pos" ;
pres_conj_base = "possi" ;
impf_ind_base = "potera" ;
impf_conj_base = "posse" ;
fut_I_base = "poteri" ;
imp_base = "" ;
perf_stem = "potu" ;
perf_ind_base = "potu" ;
perf_conj_base = "potueri" ;
pqperf_ind_base = "potuera" ;
pqperf_conj_base = "potuisse" ;
fut_II_base = "potueri" ;
part_stem = "" ;
verb = mkVerb "posse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
in
{
act =
table {
VAct VSim (VPres VInd) n p =>
table Number [ table Person [ "possum" ; "potes" ; "potest" ] ;
table Person [ "possumus" ; "potestis" ; "possunt" ]
] ! n ! p ;
a => verb.act ! a
} ;
pass =
\\_ => nonExist ; -- no passive forms
inf =
table {
VInfActFut _ => nonExist ;
a => verb.inf ! a
} ;
imp =
\\_ => nonExist ;
sup =
\\_ => nonExist ;
ger =
\\_ => nonExist ;
geriv =
\\_ => nonExist ;
part = table {
VActFut =>
\\_ => nonExist ; -- no such participle
VActPres =>
\\_ => nonExist ; -- no such participle
VPassPerf =>
\\_ => nonExist -- no such participle
} ;
};
-- pronouns
param
@@ -717,15 +1009,31 @@ param
-- PronIndef PronIndefUsage PronIndefPol PronIndefMeaning ;
oper
Pronoun : Type = {
pers : PronDropForm => PronReflForm => Case => Str ;
poss : PronReflForm => Agr => Str ;
PersonalPronoun = {
s : PronDropForm => PronReflForm => Case => Str ;
g : Gender ;
n : Number ;
p : Person ;
n : Number
} ;
PossessivePronoun = {
s : PronReflForm => Agr => Str ;
} ;
-- Pronoun : Type = {
-- pers : PronDropForm => PronReflForm => Case => Str ;
-- poss : PronReflForm => Agr => Str ;
-- g : Gender ;
-- n : Number ;
-- p : Person ;
-- } ;
Pronoun : Type = {
pers : PersonalPronoun ;
poss : PossessivePronoun ;
p : Person
} ;
pronForms = overload {
pronForms : (_,_,_,_,_ : Str) -> Case => Str =
\ego,me,mei,mihi,mee -> table Case [ego ; me ; mei ; mihi ; mee ; ego] ;
@@ -839,90 +1147,170 @@ oper
createPronouns g n p ;
in
{
pers = prons.p1 ;
poss = prons.p2 ;
g = g ;
n = n ;
pers = { s = prons.p1 ; g = g ; n = n } ;
poss = { s = prons.p2 } ;
p = p
} ;
-- prepositions
Preposition : Type = {s : Str ; c : Case} ;
Preposition : Type = {s : Str ; c : Case ; isPost : Bool } ;
-- Bayer-Lindauer $149ff.
about_P = lin Prep (mkPrep "de" Gen ) ; -- L...
at_P = lin Prep (mkPrep "ad" Acc ) ; -- L...
on_P = lin Prep ( mkPrep "ad" Gen ) ; -- L...
to_P = lin Prep ( mkPrep "ad" Acc ) ; -- L...
Gen_Prep = lin Prep ( mkPrep "" Gen ) ;
Acc_Prep = lin Prep ( mkPrep "" Acc ) ;
Dat_Prep = lin Prep ( mkPrep "" Dat ) ;
Abl_Prep = lin Prep ( mkPrep "" Abl ) ;
VPSlash = VerbPhrase ** {c2 : Preposition} ;
-- conjunctions
param Coordinator = And | Or | If | Neither | Because | Comma | Colon | Empty ;
oper
Conjunction : Type = { s1 : Str ; s2 : Str ; n : Number ; c : Coordinator };
mkConjunction : Str -> Str -> Number -> Coordinator -> Conjunction = \s1,s2,num,coord -> { s1 = s1; s2 = s2 ; n = num ; c = coord } ;
VPSlash = VerbPhrase ** {c : Preposition} ;
predV : Verb -> VerbPhrase = \v -> {
fin = \\a,q => v.act ! a ++ case q of { VQTrue => Prelude.BIND ++ "ne"; VQFalse => "" };
s = \\a,q => v.act ! a ++ case q of { VQTrue => Prelude.BIND ++ "ne"; VQFalse => "" };
part = v.part;
imp = v.imp ;
inf = v.inf ;
obj = [] ;
adj = \\a => []
compl = \\a => [] ;
adv = ""
} ;
predV2 : Verb2 -> VPSlash = \v ->
predV v ** {c2 = v.c} ;
predV v ** {c = v.c} ;
predV3 : Verb3 -> VPSlash = \v
-> predV v ** {c2 = v.c2; c3 = v.c3 } ;
-> predV v ** {c = v.c; c2 = v.c2 } ;
appPrep : Preposition -> (Case => Str) -> Str = \c,s -> c.s ++ s ! c.c ;
insertObj : Str -> VerbPhrase -> VerbPhrase = \obj,vp -> {
fin = vp.fin ;
insertObj : NounPhrase -> Preposition -> VerbPhrase -> VerbPhrase = \np,prep,vp -> {
s = vp.s ;
part = vp.part ;
imp = vp.imp ;
inf = vp.inf ;
obj = obj ++ vp.obj ;
adj = vp.adj
obj = np.det.s ! np.g ! prep.c ++ np.preap.s ! (Ag np.g np.n prep.c) ++ (appPrep prep np.s) ++ np.postap.s ! (Ag np.g np.n prep.c) ++ np.det.sp ! np.g ! prep.c ++ vp.obj ;
compl = vp.compl ;
adv = vp.adv ++ np.adv
} ;
insertObjc: Str -> VPSlash -> VPSlash = \obj,vp -> {
fin = vp.fin ;
insertObjc: NounPhrase -> VPSlash -> VPSlash = \np,vp -> {
s = vp.s ;
part = vp.part ;
imp = vp.imp ;
inf = vp.inf ;
obj = obj ++ vp.obj ;
adj = vp.adj ;
c2 = vp.c2
obj = np.det.s ! np.g ! vp.c.c ++ np.preap.s ! (Ag np.g np.n vp.c.c) ++ (appPrep vp.c np.s) ++ np.postap.s ! (Ag np.g np.n vp.c.c) ++ np.det.sp ! np.g ! vp.c.c ++ vp.obj ;
compl = vp.compl ;
c = vp.c ;
adv = vp.adv ++ np.adv
} ;
insertAdj : (Agr => Str) -> VerbPhrase -> VerbPhrase = \adj,vp -> {
fin = vp.fin ;
s = vp.s ;
part = vp.part ;
imp = vp.imp ;
inf = vp.inf ;
obj = vp.obj ;
adj = \\a => adj ! a ++ vp.adj ! a
compl = \\a => adj ! a ++ vp.compl ! a ;
adv = vp.adv
} ;
insertAdv : Adverb -> VerbPhrase -> VerbPhrase = \a,vp -> {
s = vp.s ;
part = vp.part ;
imp = vp.imp ;
inf = vp.inf ;
obj = vp.obj ;
compl = vp.compl ;
adv = vp.adv ++ (a.s ! Posit)
} ;
-- clauses
Clause = {s : Tense => Anteriority => Polarity => VQForm => Order => Str} ;
QClause = {s : Tense => Anteriority => Polarity => QForm => Str} ;
Sentence =
{
s,o,v,neg : AdvPos => Str ; -- Subject, verbphrase, object and negation particle plus potential adverb
t : C.Tense ; -- tense marker
p : C.Pol ; -- polarity marker
sadv : Str -- sentence adverb¡
} ;
Clause = {s,o : AdvPos => Str ; v : Tense => Anteriority => VQForm => AdvPos => Str ; neg : Polarity => AdvPos => Str ; adv : Str } ;
QClause = {s : C.Tense => Anteriority => C.Pol => QForm => Str} ;
-- The VQForm parameter defines if the ordinary verbform or the quistion form with suffix "-ne" will be used
mkClause : NounPhrase -> VerbPhrase -> Clause = \np,vp -> {
s = \\tense,anter,pol,vqf,order => case order of {
SVO => np.s ! Nom ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.inf ! VInfActPres ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ;
VSO => negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ++ vp.obj ;
VOS => negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ++ np.s ! Nom ;
OSV => vp.obj ++ np.s ! Nom ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ;
OVS => vp.obj ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ;
SOV => np.s ! Nom ++ vp.obj ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf
}
-- np.s ! Nom ++ vp.obj ++ vp.adj ! np.g ! np.n ++ negation p ++ vp.fin ! VAct a t np.n np.p
mkClause : NounPhrase -> VerbPhrase -> Clause = \np,vp ->
let
-- combines adverbs from noun phrase and verb phrase
adv = np.adv ++ vp.adv ;
-- helper functions to either place the adverb in the designated position
-- or an empty string instead
pres : AdvPos -> Str = \ap -> case ap of { PreS => adv ; _ => [] } ;
prev : AdvPos -> Str = \ap -> case ap of { PreV => adv ; _ => [] } ;
preo : AdvPos -> Str = \ap -> case ap of { PreO => adv ; _ => [] } ;
preneg : AdvPos -> Str = \ap -> case ap of { PreNeg => adv ; _ => [] } ;
ins : AdvPos -> Str = \ap -> case ap of { InS => adv ; _ => [] } ;
inv : AdvPos -> Str = \ap -> case ap of { InV => adv ; _ => [] }
in
{
-- subject part of the clause:
-- ap is the adverb position in the clause
s = \\ap =>
pres ap ++ -- adverbs can be placed in the beginning of the clause
np.det.s ! np.g ! Nom ++ -- the determiner, if any
np.preap.s ! (Ag np.g np.n Nom) ++ -- adjectives which come before the subject noun, agreeing with it
ins ap ++ -- adverbs can be placed within the subject noun phrase
np.s ! Nom ++ -- the noun of the subject noun phrase in nominative
np.postap .s ! (Ag np.g np.n Nom) ++ -- adjectives which come after the subject noun, agreeing with it
np.det.sp ! np.g ! Nom ; -- second part of split determiners
-- verb part of the clause:
-- tense and anter(ority) for the verb tense
-- vqf is the VQForm parameter which defines if the ordinary verbform or the quistion form with suffix "-ne" will be used
-- ap is the adverb position in the clause
v = \\tense,anter,vqf,ap =>
prev ap ++ -- adverbs can be placed in the before the verb phrase
vp.compl ! Ag np.g np.n Nom ++ -- verb phrase complement, e.g. predicative expression, agreeing with the subject
inv ap ++ -- adverbs can be placed within the verb phrase
-- verb form with conversion between different forms of tense and aspect
vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ;
-- object part of the clause
o = \\ap => preo ap ++ vp.obj ;
-- optional negation particle, adverbs can be placed before the negation
neg = \\pol,ap => preneg ap ++ negation pol ;
adv = ""
} ;
combineClause : Clause -> C.Tense -> Anteriority -> C.Pol -> VQForm -> Sentence = \cl,tense,anter,pol,vqf ->
{ s = cl.s ;
o = cl.o ;
v = cl.v ! tense.t ! anter ! vqf ;
neg = cl.neg ! pol.p ;
sadv = "" ;
t = tense ;
p = pol
} ;
combineSentence : Sentence -> ( SAdvPos => AdvPos => Order => Str ) = \s ->
let
pres : SAdvPos -> Str = \ap -> case ap of { SPreS => s.sadv ; _ => [] } ;
prev : SAdvPos -> Str = \ap -> case ap of { SPreV => s.sadv ; _ => [] } ;
preo : SAdvPos -> Str = \ap -> case ap of { SPreO => s.sadv ; _ => [] } ;
preneg : SAdvPos -> Str = \ap -> case ap of { SPreNeg => s.sadv ; _ => [] }
in
\\sap,ap,order => case order of {
SVO => s.t.s ++ s.p.s ++ pres sap ++ s.s ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ preo sap ++ s.o ! ap;
VSO => s.t.s ++ s.p.s ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ pres sap ++ s.s ! ap ++ preo sap ++ s.o ! ap;
VOS => s.t.s ++ s.p.s ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ preo sap ++ s.o ! ap ++ pres sap ++ s.s ! ap ;
OSV => s.t.s ++ s.p.s ++ preo sap ++ s.o ! ap ++ pres sap ++ s.s ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap;
OVS => s.t.s ++ s.p.s ++ preo sap ++ s.o ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ pres sap ++ s.s ! ap ;
SOV => s.t.s ++ s.p.s ++ pres sap ++ s.s ! ap ++ preo sap ++ s.o ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap
} ;
-- questions
mkQuestion : SS -> Clause -> QClause = \ss,cl -> {
s = \\tense,anter,pol,form => case form of {
QDir => ss.s ++ cl.s ! tense ! anter ! pol ! VQFalse ! OVS;
QIndir => ss.s ++ cl.s ! tense ! anter ! pol ! VQFalse ! OSV
}
} ;
s = \\tense,anter,pol,form => case form of {
QDir => ss.s ++ (combineSentence (combineClause cl tense anter pol VQFalse)) ! SPreS ! PreS ! OVS ;
QIndir => ss.s ++ (combineSentence (combineClause cl tense anter pol VQFalse)) ! SPreO ! PreO ! OSV
}
};
negation : Polarity -> Str = \p -> case p of {
Pos => [] ;
@@ -932,7 +1320,7 @@ oper
-- determiners
Determiner : Type = {
s : Gender => Case => Str ; -- s,sp : Gender => Case => Str ; Don't know what sp is for
s,sp : Gender => Case => Str ; -- sp for split determiners (not clear if really needed)
n : Number
} ;
@@ -940,6 +1328,7 @@ oper
{
n = n ;
s = \\g,c => a.s ! Posit ! Ag g n c ;
sp = \\_,_ => ""
} ;
Quantifier : Type = {
@@ -985,11 +1374,62 @@ oper
"illa" "illorum" "illis")
;
mkPrep : Str -> Case -> Preposition = \s,c -> lin Preposition {s = s ; c = c} ;
mkPreposition : Str -> Case -> Preposition = \s,c -> {s = s ; c = c; isPost = False} ;
mkAdv : Str -> { s: Str } = \adv -> { s = adv } ;
mkPostposition : Str -> Case -> Preposition = \s,c -> {s = s ; c = c ; isPost = True } ;
param
Unit = one | ten | hundred | thousand | ten_thousand | hundred_thousand ;
-- adverbs
Adverb : Type = { s : Degree => Str} ;
mkAdverb : Str -> Adverb = \adv ->
{ s = table { Posit => adv ; _ => nonExist } } ;
mkFullAdverb : (pos,comp,sup : Str) -> Adverb = \p,c,s ->
{ s = table { Posit => p ; Compar => c ; Super => s } };
-- numerals
param
CardOrd = NCard | NOrd ;
Unit = one | ten | hundred | thousand | ten_thousand | hundred_thousand ;
oper
Cardinal : Type = {s : Gender => Case => Str ; n : Number};
Ordinal : Type = { s : Gender => Number => Case => Str } ;
Numeral : Type = { card : Cardinal ; ord : Ordinal } ;
mkNumeral : Str -> Str -> Numeral = \c,o -> -- cardinal and ordinal form
let
cardFlex : Gender => Case => Str = case c of { "unus" => \\gen,cas => case <gen,cas> of {
<Masc, Nom | Voc> => "unus" ; <Masc, Acc> => "unum" ; <Masc, Abl> => "uno" ;
<Fem, Nom | Abl | Voc> => "una" ; <Fem, Acc> => "unam" ;
<Neutr, Nom | Acc | Voc> => "unum" ; <Neutr, Abl> => "uno" ;
<_, Gen> => "unius" ; <_, Dat> => "uni"
} ;
"duo" => table {
Masc | Neutr => table Case [ "duo" ; "duo" ; "duorum" ; "duobus" ; "duobus" ; "duo" ] ;
Fem => table Case [ "duae" ; "duas" ; "duarum" ; "duabus" ; "duabus" ; "duae" ] } ;
"tres" => \\gen,cas => case <gen,cas> of {
<Neutr, Nom | Acc | Voc > => "tria" ; <_, Nom | Acc | Voc > => "tres" ;
<_, Gen> => "trium" ; <_, Dat | Abl > => "tribus"
} ;
"milia" => table {
Neutr => table Case [ "milia" ; "milia" ; "milium" ; "milibus" ; "milibus" ; "milia" ] ;
_ => \\_ => nonExist
} ;
_ => \\_,_ => c
} ;
ordFlex : Gender => Number => Case => Str =
case o of {
stem + "us" => table {
Masc => table Number [ table Case [ stem + "us" ; stem + "um" ; stem + "i" ; stem + "o" ; stem + "o" ; stem + "e" ] ;
table Case [ stem + "i" ; stem + "os" ; stem + "orum" ; stem + "is" ; stem + "is" ; stem + "i" ] ;
];
Fem => table Number [ table Case [ stem + "a" ; stem + "am" ; stem + "ae" ; stem + "ae" ; stem + "a" ; stem + "a" ] ;
table Case [ stem + "ae" ; stem + "as" ; stem + "arum" ; stem + "is" ; stem + "is" ; stem + "ae" ] ;
] ;
Neutr => table Number [ table Case [ stem + "um" ; stem + "um" ; stem + "i" ; stem + "o" ; stem + "o" ; stem + "um" ] ;
table Case [ stem + "a" ; stem + "a" ; stem + "orum" ; stem + "is" ; stem + "is" ; stem + "a" ] ;
]
} ;
_ => error "unsupported ordinal form"
}
in
{ card = { s = cardFlex ; n = case c of { "unus" => Sg ; _ => Pl } } ; ord = { s = ordFlex } } ;
}

View File

@@ -45,12 +45,13 @@ concrete SentenceLat of Sentence = CatLat ** open Prelude, ResLat in {
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
--
UseCl t p cl = -- Temp -> Pol-> Cl -> S
{
s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! VQFalse ! SOV
} ;
UseQCl t p cl = {
s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q
} ;
(combineClause cl (lin Tense t) t.a (lin Pol p) VQFalse) ;
-- TO FIX
--UseQCl t p cl =
-- s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p ! q
-- { s = \\q => combineSentence (combineClause cl t t.a p VQFalse) ! PreV ! VSO } ;
-- UseRCl t p cl = {
-- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! r ;
-- c = cl.c
@@ -60,11 +61,13 @@ concrete SentenceLat of Sentence = CatLat ** open Prelude, ResLat in {
-- c2 = cl.c2
-- } ;
--
-- AdvS a s = {s = a.s ++ "," ++ s.s} ;
-- AdvS : Adv -> S -> S
AdvS adv s = { s = s.s ; o = s.o ; v = s.v ; neg = s.neg ; t = s.t ; p = s.p ; sadv = adv.s ! Posit ++ s.sadv } ;
-- This covers subjunctive clauses, but they can also be added to the end.
-- SSubjS : S -> Subj -> S -> S ; -- I go home if she comes
SSubjS s1 subj s2 = ss ( subj.s ++ s2.s ++ s1.s );
-- SSubjS : S -> Subj -> S -> S ; -- I go home if she comes
-- TO FIX
-- SSubjS s1 subj s2 = { s = \\_ => subj.s ++ s2.s ! PreS ++ s1.s ! PreS ; sadv = lin Adv (mkAdverb []) } ;
-- RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ;
--

View File

@@ -1,5 +1,5 @@
concrete StructuralLat of Structural = CatLat **
open ResLat, ParadigmsLat, Prelude, IrregLat, ConstructX in
concrete StructuralLat of Structural = CatLat **
open ResLat, ParadigmsLat, Prelude, IrregLat, (C=ConstructX) in
{
flags optimize=all ;
@@ -11,68 +11,68 @@ concrete StructuralLat of Structural = CatLat **
almost_AdA, almost_AdN = ss "quasi" ; -- L...
although_Subj = ss "quamquam" ; -- L...
always_AdV = ss "semper" ; -- L...
and_Conj = sd2 [] "et" ** {n = Pl} ; -- L...
and_Conj = mkConj [] "et" Pl And ; -- L...
-----b and_Conj = ss "and" ** {n = Pl} ;
because_Subj = ss "cum" ; -- L...
before_Prep = mkPrep "ante" Acc ; -- acc. L...
behind_Prep = mkPrep "a tergo" Acc ; -- acc. L...
between_Prep = mkPrep "inter" Acc ; -- acc. L...
both7and_DConj = sd2 "et" "et" ** {n = Pl} ; --L...
both7and_DConj = mkConj "et" "et" Pl And; --L...
but_PConj = ss "sed" ; -- L...
by8agent_Prep = mkPrep "per" Abl ; -- L...
by8means_Prep = Abl_Prep ; -- L...
can8know_VV, can_VV = IrregLat.can_VV ; --L...
by8means_Prep = mkPrep "" Abl ; -- L...
can8know_VV, can_VV = mkVV IrregLat.can_V True ; --L...
during_Prep = mkPrep "inter" Acc ; -- L...
either7or_DConj = sd2 "aut" "aut" ** {n = Sg} ; -- L...
everybody_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" ( Masc | Fem ) Sg ;-- regNP "quisquae" Sg ; -- L...
either7or_DConj = mkConj "aut" "aut" Sg Or ; -- L...
everybody_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" Masc Sg ;-- regNP "quisquae" Sg ; -- L...
every_Det = mkDeterminer ( mkA "omnis" ) Pl ; -- Pons
everything_NP = regNP "omnia" "omnia" "omnium" "omnis" "omnis" "omnia" Neutr Pl ; --regNP "omnia" Pl ; -- L...
everywhere_Adv = ss "ubique" ; -- L...
everywhere_Adv = mkAdv "ubique" ; -- L...
few_Det = mkDeterminer ( mkA "paulus" ) Pl ; -- L...
----- first_Ord = ss "first" ; DEPRECATED
for_Prep = mkPrep "pro" Abl ; -- abl. L...
from_Prep = mkPrep "de" Abl ; -- abl. L...
he_Pron = mkPronoun Masc Sg P3 ;
here_Adv = ss "hic" ; -- L...
here7to_Adv = ss "huc" ; -- L...
here7from_Adv = ss "hinc" ; -- L...
here_Adv = mkAdv "hic" ; -- L...
here7to_Adv = mkAdv "huc" ; -- L...
here7from_Adv = mkAdv "hinc" ; -- L...
how_IAdv = ss "qui" ; -- L...
how8many_IDet = mkDeterminer (mkA "quantus" ) Pl ; -- Pons
how8much_IAdv = ss "quantum" ; -- L...
if_Subj = ss "si" ; -- L...
in8front_Prep = mkPrep "ante" Acc ; -- acc. L...
i_Pron = mkPronoun Masc Sg P1 ;
in_Prep = mkPrep "in" ( variants { Abl ; Acc } ) ; -- L...
in_Prep = mkPrep "in" Acc ; -- L..., abl. in extra
it_Pron = mkPronoun Neutr Sg P3 ;
less_CAdv = mkCAdv "minus" "quam" ; -- L...
less_CAdv = C.mkCAdv "minus" "quam" ; -- L...
many_Det = mkDeterminer ( mkA "multus" ) Pl ; -- L...
more_CAdv = mkCAdv "magis" "quam" ; -- L...
more_CAdv = C.mkCAdv "magis" "quam" ; -- L...
most_Predet = ss "plurimi" ; -- L...
much_Det = mkDeterminer ( mkA "multus" ) Sg ; -- L...
must_VV = mkVV ( mkV "debere" ) True ; -- L...
-----b no_Phr = ss "immo" ;
no_Utt = ss "non est" ; -- should be expressed by a short negated sentence L...
on_Prep = mkPrep "in" ( Acc | Abl ) ; -- L...
on_Prep = mkPrep "in" Acc ; -- L...
------ one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED
only_Predet = ss "solum" ; -- L...
or_Conj = sd2 [] "aut" ** {n = Sg} ; -- L...
or_Conj = mkConj [] "aut" Sg Or ; -- L...
otherwise_PConj = ss "praeterea" ; -- Pons
part_Prep = mkPrep [] Gen ; -- Bayer-Lindauer 127
please_Voc = ss "queso" ; -- L...
possess_Prep = mkPrep [] Gen ; -- Bayer-Lindauer 125.2
quite_Adv = ss "admodum" ; -- or by comparation L...
quite_Adv = ss "admodum" ; -- actually AdA, can be expressed by comparation L...
she_Pron = mkPronoun Fem Sg P3 ;
so_AdA = ss "sic" ; -- L...
somebody_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" ( Masc | Fem ) Sg ; -- Bayer-Lindauer 60.1
somebody_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" Masc Sg ; -- Bayer-Lindauer 60.1
someSg_Det = mkDeterminer ( mkA "aliquis" ) Sg ; -- L...
somePl_Det = mkDeterminer ( mkA "nonnullus" ) Pl ; --L ...
something_NP = regNP "aliquid" "aliquid" "alicuius rei" "alicui rei" "aliqua re" "aliquid" Masc Sg ; -- Bayer-Lindauer 60.1
somewhere_Adv = ss "usquam" ; -- L...
somewhere_Adv = mkAdv "usquam" ; -- L...
that_Quant = ille_Quantifier ;
that_Subj = ss "ut" ; -- L...
there_Adv = ss "ibi" ; -- loc. L...
there7to_Adv = ss "eo" ; -- Pons
there7from_Adv = ss "inde" ; -- Pons
there_Adv = mkAdv "ibi" ; -- loc. L...
there7to_Adv = mkAdv "eo" ; -- Pons
there7from_Adv = mkAdv "inde" ; -- Pons
therefore_PConj = ss "ergo" ; -- L...
they_Pron = mkPronoun Masc Pl P3 ;
this_Quant = hic_Quantifier ;
@@ -109,18 +109,18 @@ concrete StructuralLat of Structural = CatLat **
yes_Utt = ss "sane" ; -- L...
youSg_Pron = mkPronoun Masc Sg P2 ;
youPl_Pron = mkPronoun Masc Pl P2 ;
youPol_Pron = youSg_Pron | youPl_Pron ;
youPol_Pron = youSg_Pron ; -- only use singular
no_Quant = { s , sp = ( mkA "nullus" ).s ! Posit } ; -- nullus L...
not_Predet = ss "non" ; -- L...
if_then_Conj = {s1 = "si" ; s2 = "" ; n = Sg } ; -- no word in s2 field L...
if_then_Conj = mkConj "si" [] Sg If ; -- no word in s2 field L...
at_least_AdN = ss "saltem" ; -- L...
at_most_AdN = ss "summum" ; -- Pons
nobody_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" ( Masc | Fem ) Sg ; -- Bayer Lindauer 60.4
nobody_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" Masc Sg ; -- Bayer Lindauer 60.4
nothing_NP = regNP "nihil" "nihil" "nullius rei" "nulli rei" "nulla re" "nihil" Neutr Sg ; -- Bayer-Lindauer 60.4
except_Prep = mkPrep "praeter" Acc ; -- L...
as_CAdv = mkCAdv "ita" "ut" ; -- L ...
as_CAdv = C.mkCAdv "ita" "ut" ; -- L ...
have_V2 = mkV2 (mkV "habere") ; -- habeo, -ui, -itum 2 (Langenscheidts)

View File

@@ -1,12 +1,12 @@
--# -path=.:../abstract:../common
concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat 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
concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat, ParadigmsLat, TenseX in {
lin
SymbPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
IntPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
FloatPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
NumPN i = {s = \\n,c => i.s ! Neutr ! c; g = Neutr} ; --- c
-- CNIntNP cn i = {
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
-- a = agrgP3 Sg cn.g
@@ -20,20 +20,17 @@ concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat in {
-- 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 ;
SymbS sy = { s = \\_ => sy.s ; neg = \\_ => "" ; o = \\_ => "" ; p = PPos ; sadv = ss "" ; t = TPres ; v = \\_ => "" } ;
--
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;
SymbOrd sy = { s = \\g,n,c => sy.s } ; -- does not inflect properly
lincat
Symb, [Symb] = SS ;
lin
MkSymb s = s ;
-- BaseSymb = infixSS "and" ;
-- ConsSymb = infixSS "," ;
--
}

View File

@@ -1,5 +1,5 @@
--1 Construction rules for latin verb phrases
concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat in {
concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat,ExtraLat,Predef,Prelude in {
flags optimize=all_subs ;
@@ -11,88 +11,107 @@ concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat in {
-- ComplVV : VV -> VP -> VP ; -- want to run
ComplVV v vp =
{
fin = vp.fin ;
inf = v.inf ;
obj = vp.obj ;
adj = vp.adj
};
vp ** {
s = \\af,qf => v.act ! af ;
compl = \\ag => vp.compl ! ag ++ vp.inf ! VInfActPres
} ;
-- ComplVS : VS -> S -> VP ; -- say that she runs
ComplVS v s = insertObj (S.that_Subj.s ++ s.s) (predV v) ;
ComplVS v s = insertObj ( dummyNP (S.that_Subj.s ++ s.s ! PreS)) Nom_Prep (predV v) ;
-- ComplVQ : VQ -> QS -> VP ; -- wonder who runs
ComplVQ v q = insertObj ( q.s ! QIndir) (predV v) ;
ComplVQ v q = insertObj (dummyNP (q.s ! QIndir)) Nom_Prep (predV v) ;
-- ComplVA : VA -> AP -> VP ; -- they become red
ComplVA v ap = (predV v) ** { adj = ap.s } ;
ComplVA v ap = (predV v) ** { compl = ap.s } ;
-- SlashV2a : V2 -> VPSlash ; -- love (it)
SlashV2a v = lin VP (predV2 v) ;
-- Slash2V3 v np =
-- insertObjc (\\_ => v.c2 ++ np.s ! Acc) (predV v ** {c2 = v.c3}) ;
-- Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v np = lin VP (insertObjc np (predV3 v ** { c = v.c2 } ) );
-- Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her
Slash3V3 v np =
lin VP ( insertObjc ( v.c2.s ++ np.s ! v.c2.c ) ( predV3 v ) ) ;
Slash3V3 v np = lin VP ( insertObjc np ( predV3 v ** { c = v.c} ) ) ;
-- SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go
-- SlashV2V v vp = insertObjc (\\a => infVP v.isAux vp a) (predVc v) ;
-- SlashV2S : V2S -> S -> VPSlash ; -- answer (to him) that it is good
-- SlashV2S v s = insertObjc (\\_ => conjThat ++ s.s) (predVc v) ;
-- SlashV2Q : V2Q -> QS -> VPSlash ; -- ask (him) who came
SlashV2Q v q = lin VP (insertObjc (q.s ! QIndir) (predV2 v) ) ;
SlashV2Q v q = lin VP (insertObjc (dummyNP (q.s ! QIndir)) (predV2 v) ) ;
-- SlashV2A : V2A -> AP -> VPSlash ; -- paint (it) red
SlashV2A v ap = lin VP ( (predV2 v) ** { adj = ap.s } ) ;
-- ComplSlash : VPSlash -> NP -> VP ; -- love it
ComplSlash vp np = -- VPSlash -> NP -> VP
insertObj (appPrep vp.c2 np.s) vp ;
insertObj np vp.c vp ;
-- SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy
-- SlashVV vv vp =
-- insertObj (\\a => infVP vv.isAux vp a) (predVV vv) **
-- {c2 = vp.c2} ;
-- SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
-- SlashV2VNP vv np vp =
-- insertObjPre (\\_ => vv.c2 ++ np.s ! Acc)
-- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **
-- {c2 = vp.c2} ;
--2 Other ways of forming verb phrases
-- ReflVP : VPSlash -> VP ; -- love himself
-- ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ;
-- UseComp : Comp -> VP
-- UseComp : Comp -> VP ; -- be warm
UseComp comp =
insertAdj comp.s (predV be_V) ;
-- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
-- PassV2 : V2 -> VP ; -- be loved
PassV2 v = predV (
v ** {
act = table { VAct anter tense number person =>
case anter of {
VSim => v.pass ! VPass tense number person ;
VAnt => "" --error "using participles is not implemented yet"
}
}
} );
-- AdvVP : VP -> Adv -> VP ; -- sleep here
AdvVP vp adv = insertObj adv.s vp ;
AdvVP vp adv = insertAdv adv vp ;
-- ExtAdvVP vp adv = vp
-- AdVVP adv vp = insertObj adv.s vp ;
-- AdVVP : AdV -> VP -> VP ; -- always sleep
AdVVP adv vp = vp ** { adv = vp.adv ++ adv.s } ;
-- AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here
-- AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it)
-- AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here
AdvVPSlash vp adv = vp ** { adv = (adv.s ! Posit) ++ vp.adv } ;
-- AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it)
AdVVPSlash adv vp = vp ** { adv = vp.adv ++ adv.s } ;
-- VPSlashPrep : VP -> Prep -> VPSlash ; -- live in (it)
--2 Complements to copula
-- CompAP : AP -> Comp
-- CompAP : AP -> Comp ; -- (be) small
CompAP ap = ap ;
-- CompNP : NP -> Comp ; -- (be) the man
CompNP np = {s = \\_ => let a = Ag np.g np.n Nom in np.preap.s ! a ++ np.s ! Nom ++ np.postap.s ! a } ;
-- CompNP np = {s = \\_ => np.s ! Acc} ;
-- CompAdv : Adv -> Comp ; -- (be) here
CompAdv a = {s = \\_ => a.s ! Posit } ;
-- CompAdv a = {s = \\_ => a.s} ;
-- CompCN : CN -> Comp ; -- (be) a man/men
CompCN cn = {s = table { Ag g n c => cn.preap.s ! Ag cn.g n Nom ++ cn.s ! n ! Nom ++ cn.postap.s ! Ag cn.g n Nom} };
-- CompCN
-- UseCopula v = v
-- UseCopula : VP ; -- be
UseCopula = predV be_V ;
}

View File

@@ -0,0 +1,8 @@
--# -path=.:alltenses:prelude:..
resource CombinatorsLat = Combinators - [ appCN, appCNc ] with
(Cat = CatLat),
(Structural = StructuralLat),
(Noun = NounLat),
(Constructors = ConstructorsLat) **
{}

View File

@@ -0,0 +1,4 @@
--# -path=.:alltenses:prelude:..
resource ConstructorsLat = Constructors with (Grammar = GrammarLat) **
open MissingAPILat in {}

View File

@@ -0,0 +1,4 @@
--# -path=.:alltenses:prelude:..
resource ConstructorsLat = Constructors with (Grammar = GrammarLat) **
open MissingLat in {}

91
src/latin/api/Symbolic.gf Normal file
View File

@@ -0,0 +1,91 @@
--1 Symbolic: Noun Phrases with mathematical symbols
incomplete resource Symbolic = open Symbol, Grammar, PredefCnc in {
oper
symb : overload {
symb : Symb -> NP ; -- x
symb : Str -> NP ; -- x
symb : Int -> NP ; -- 23
symb : Float -> NP ; -- 0.99
symb : N -> Digits -> NP ; -- level 4
symb : N -> Card -> NP ; -- level at least four
symb : CN -> Card -> NP ; -- advanced level at least four
symb : Det -> N -> Card -> NP ; -- the number at least four
symb : Det -> CN -> Card -> NP ; -- the even number at least four
symb : N -> Numeral -> NP ; -- level four
symb : CN -> Numeral -> NP ; -- advanced level four
symb : Det -> N -> Numeral -> NP ; -- the largest number four
symb : Det -> CN -> Numeral -> NP ; -- the largest even number four
symb : Det -> N -> Str -> Str -> NP ; -- the largest levels i and j
symb : Det -> CN -> [Symb] -> NP ; -- the largest basic levels i, j, and k
symb : Quant -> N -> Numeral -> NP ; -- the number four
symb : Quant -> CN -> Numeral -> NP ; -- the even number four
symb : Quant -> N -> Str -> Str -> NP ; -- the levels i and j
symb : Quant -> CN -> [Symb] -> NP ; -- the basic levels i, j, and k
symb : Symb -> S ; -- A
symb : Symb -> Card ; -- n
symb : Symb -> Ord -- n'th
} ;
mkSymb : Str -> Symb ;
mkInteger : Predef.Int -> Integer ;
mkFloating : Predef.Float -> Floating ;
Symb : Type
= Symbol.Symb ;
--.
symb = overload {
symb : Symb -> NP
= \s -> UsePN (SymbPN s) ;
symb : Str -> NP
= \s -> UsePN (SymbPN (mkSymb s)) ;
symb : Int -> NP
= \i -> UsePN (IntPN i) ;
symb : Float -> NP
= \i -> UsePN (FloatPN i) ;
symb : N -> Digits -> NP
= \c,i -> CNNumNP (UseN c) (NumDigits i) ;
symb : N -> Card -> NP
= \c,n -> CNNumNP (UseN c) n ;
symb : CN -> Card -> NP
= \c,n -> CNNumNP c n ;
symb : Det -> N -> Card -> NP
= \d,n,x -> DetCN d (ApposCN (UseN n) (UsePN (NumPN x))) ;
symb : Det -> CN -> Card -> NP
= \d,n,x -> DetCN d (ApposCN n (UsePN (NumPN x))) ;
symb : N -> Numeral -> NP
= \c,n -> CNNumNP (UseN c) (NumNumeral n) ;
symb : CN -> Numeral -> NP
= \c,n -> CNNumNP c (NumNumeral n) ;
symb : Det -> N -> Numeral -> NP
= \d,n,x -> DetCN d (ApposCN (UseN n) (UsePN (NumPN (NumNumeral x)))) ;
symb : Det -> CN -> Numeral -> NP
= \d,n,x -> DetCN d (ApposCN n (UsePN (NumPN (NumNumeral x)))) ;
symb : Det -> N -> Str -> Str -> NP
= \c,n,x,y -> CNSymbNP c (UseN n) (BaseSymb (mkSymb x) (mkSymb y)) ;
symb : Det -> CN -> [Symb] -> NP
= CNSymbNP ;
symb : Quant -> N -> Numeral -> NP
= \d,n,x -> DetCN (DetQuant d NumSg) (ApposCN (UseN n) (UsePN (NumPN (NumNumeral x)))) ;
symb : Quant -> CN -> Numeral -> NP
= \d,n,x -> DetCN (DetQuant d NumSg) (ApposCN n (UsePN (NumPN (NumNumeral x)))) ;
symb : Quant -> N -> Str -> Str -> NP
= \d,n,x,y -> CNSymbNP (DetQuant d NumSg) (UseN n) (BaseSymb (mkSymb x) (mkSymb y)) ;
symb : Quant -> CN -> [Symb] -> NP
= \d -> CNSymbNP (DetQuant d NumSg);
symb : Symb -> S = SymbS ;
symb : Symb -> Card = SymbNum ;
symb : Symb -> Ord = SymbOrd
} ;
mkSymb : Str -> Symb = \s -> {s = s ; lock_Symb = <>} ;
mkInteger i = {s = Predef.show Predef.Int i ; lock_Int = <>} ;
mkFloating f = {s = Predef.show Predef.Float f ; lock_Float = <>} ;
Integer : Type = {s : Str ; lock_Int : {}} ;
Floating : Type = {s : Str ; lock_Float : {}} ;
}

View File

@@ -0,0 +1,5 @@
--# -path=.:../icelandic:../common:../abstract:../prelude
resource SymbolicLat = Symbolic with
(Symbol = SymbolLat),
(Grammar = GrammarLat) ;

View File

@@ -0,0 +1,5 @@
--# -path=.:alltenses:prelude:..
instance SyntaxLat of Syntax =
ConstructorsLat, CatLat, StructuralLat, CombinatorsLat ;

4
src/latin/api/TryLat.gf Normal file
View File

@@ -0,0 +1,4 @@
--# -path=.:..:prelude
resource TryLat = SyntaxLat, ExtraLat, LexiconLat, ParadigmsLat -
[mkAdv,mkAdN,mkOrd,mkNum];

View File

@@ -0,0 +1,10 @@
import PGF
import System.Environment
main =
do
args <- getArgs -- first one should be pgf file and second one should be the file containing the errors/warnings about missing things
pgf <- PGF.readPGF (args !! 0) -- "tmp/Lang.pgf"
ms <- readFile (args !! 1) {- "tmp/MissingLat.tmp" -} >>= return . map (last . words) . lines
let ts = [PGF.showType [] t | m <- ms, Just t <- [PGF.functionType pgf (PGF.mkCId m)]]
putStrLn $ unlines ["oper " ++ f ++ " : " ++ t ++ " = notYet \"" ++ f ++ "\" ;" | (f,t) <- zip ms ts]

18
src/latin/api/mkMissing.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
echo "Create tmp dir"
mkdir tmp/
echo "Remove old file"
echo "resource MissingAPILat = {} " > ../MissingAPILat.gf
echo "Look for missing functions"
# gf -src -i .. -batch TryLat.gf 2>&1 | grep "Warning: no linearization of" | sort -u > tmp/MissingLat.tmp
gf -src -i .. -batch TryLat.gf 2>&1 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" | grep -E "constant not found|no linearization of" | sort -u > tmp/MissingLat.tmp
echo "Compile grammar"
gf -src -make -i .. -D tmp ../LangLat.gf &> /dev/null
echo "Create placeholders for missing functions"
echo "resource MissingAPILat = open GrammarLat, Prelude in {" > ../MissingAPILat.gf
echo "" >> ../MissingAPILat.gf
echo "-- temporary definitions to enable the compilation of RGL API" >> ../MissingAPILat.gf
runghc mkMissing.hs "tmp/Lang.pgf" "tmp/MissingLat.tmp">> ../MissingAPILat.gf
echo "}" >> ../MissingAPILat.gf
echo "Cleanup"
rm -Rf tmp

39225
src/latin/dict/DICTPAGE.RAW Normal file

File diff suppressed because it is too large Load Diff

39225
src/latin/dict/DICTPAGE.RAW.2 Normal file

File diff suppressed because it is too large Load Diff

39225
src/latin/dict/DICTPAGE.RAW~ Normal file

File diff suppressed because it is too large Load Diff

34819
src/latin/dict/DictLat.gf Normal file

File diff suppressed because it is too large Load Diff

37214
src/latin/dict/DictLatAbs.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
concrete FullLex of FullLexAbs = LexiconLat, DictLat-[do_V2];

View File

@@ -0,0 +1 @@
concrete FullLex of FullLexAbs = LexiconLat, DictLat-do_V2;

View File

@@ -0,0 +1 @@
abstract FullLexAbs = Lexicon, DictLatAbs-[do_V2,leg_N,man_N] ;

View File

@@ -0,0 +1 @@
abstract FullLexAbs = Lexicon, DictLatAbs-[do_V2,leg_N] ;

342
src/latin/dict/Parsetest.hs Normal file
View File

@@ -0,0 +1,342 @@
{-# LANGUAGE FlexibleContexts #-}
import Text.Parsec
import Text.Parsec.Error
import Data.Char
import Data.Maybe
import System.IO
import Data.List
import Debug.Trace
data Case = Nom | Gen | Dat | Acc | Abl deriving Show
data Gender = Masc | Fem | Neuter | Common | Unknown
data Cat = N | V | A | Adv | Interj | Prep | Num | Conj | Pron deriving Show;
data VerbKind = Trans | Intrans | Deponens | SemiDeponens | Impersonal deriving Show
data Comparison = Positive | Comparative | Superlative | PosComp | CompSuper | PosCompSuper | Undeclined deriving Show;
data DictEntry = Entry { cat :: Cat , forms :: [String] , other :: OtherInfos , comment :: String } | EmptyEntry deriving Show;
data OtherInfos = Noun { iclass :: Maybe Int , gen :: Gender } | Adjective { iclass :: Maybe Int , comp :: Comparison } | Verb { iclass :: Maybe Int , kind :: VerbKind } | Preposition { c :: Case } | NoInfos deriving Show;
instance Show Gender where
show Masc = "masculine"
show Fem = "feminine"
show Neuter = "neuter"
show Common = "(feminine | masculine)"
show Unknown = ""
hash :: Stream s m Char => ParsecT s u m Char
hash = char '#'
wordForm :: Stream s m Char => ParsecT s u m String
wordForm =
let
esse :: Stream s m Char => ParsecT s u m String
esse =
string "sum" <|> string "est"
suffix :: Stream s m Char => ParsecT s u m String
suffix =
do
d <- char '-'
sfx <- many letter
spcs <- many space
return $ d : sfx ++ spcs
genitive :: Stream s m Char => ParsecT s u m String
genitive =
do
p1 <- string "(gen"
p2 <- many (noneOf ")")
p3 <- string ")"
return $ p1 ++ p2 ++ p3
in
do
w0 <- optionMaybe (char '-' <|> letter)
ws <- if isJust w0 then many (letter <|> oneOf "()/") else return ""
s1 <- many space
s <- option [] $ try $ esse
s2 <- many space
g <- option [] $ try genitive
s3 <- many space
sfs <- option [] $ try (many suffix)
return $ maybe ws (:ws) w0 ++ s1 ++ s ++ s2 ++ g ++ s3 ++ concat sfs
wordForms :: Stream s m Char => ParsecT s u m [String]
wordForms =
do
wf <- wordForm;
wfs <- many (do
_ <- char ','
skipMany space
wordForm
)
return (wf:wfs)
gender :: Stream s m Char => ParsecT s u m Gender
gender =
do
skipMany space
c <- upper
case c of {
'N' -> return Neuter ;
'M' -> return Masc ;
'F' -> return Fem ;
'C' -> return Common; -- Feminine and/or masculine
'X' -> return Unknown;
_ -> unexpected ("unhandled gender " ++ [c])
}
inflection :: Stream s m Char => ParsecT s u m (Maybe Int)
inflection =
do
_ <- char '(';
i <- digit ;
_ <- string "st" <|> string "nd" <|> string "rd" <|> string "th" ;
_ <- char ')';
return $ Just $ digitToInt i
verbkind :: Stream s m Char => ParsecT s u m VerbKind
verbkind =
do
s <- many upper
case s of {
"INTRANS" -> return Intrans;
"TRANS" -> return Trans;
"DEP" -> return Deponens;
"SEMIDEP" -> return SemiDeponens;
"IMPERS" -> return Impersonal;
_ -> unexpected s -- Probably just return intrans?
}
cases :: Stream s m Char => ParsecT s u m Case
cases =
do
s <- many upper
case s of {
"ACC" -> return Acc;
"ABL" -> return Abl;
_ -> unexpected s
}
rest :: Stream s m Char => ParsecT s u m String
rest =
do
c0 <- char '['
cs <- many anyChar
return (c0:cs)
noun :: Stream s m Char => ParsecT s u m DictEntry
noun =
do
wfs <- wordForms
_ <- char 'N'
skipMany space
i <- option Nothing inflection
g <- gender
skipMany space
c <- rest
return $ Entry N wfs (Noun i g) c
verb :: Stream s m Char => ParsecT s u m DictEntry
verb =
do
wfs <- wordForms
_ <- string "V"
skipMany space
i <- option Nothing inflection
skipMany space
k <- option Intrans verbkind
skipMany space
c <- rest
return $ Entry V wfs (Verb i k) c
adjective :: Stream s m Char => ParsecT s u m DictEntry
adjective =
let
dropLast :: Int -> String -> String
dropLast i s = take (length s - i) s
fixStuff :: [String] -> ([String],OtherInfos)
fixStuff wfs@[f1,f2]
| isSuffixOf "or -or -us" f1 && isSuffixOf "us -a -um" f2 =
let
stem1 = dropLast 10 f1
stem2 = dropLast 9 f2
in
([stem1 ++ "or", stem1 ++ "or", stem1 ++ "us", stem2 ++ "us", stem2 ++ "a", stem2 ++ "um"],
Adjective (Just 3) CompSuper)
| f2 == "undeclined" = (wfs, Adjective (Just (-1)) Undeclined)
fixStuff wfs@[f1,f2,f3]
| isSuffixOf "us" f1 && isSuffixOf "a" f2 && isSuffixOf "um" f3 = (wfs, Adjective (Just 1) Positive)
| isSuffixOf "r" f1 && isSuffixOf "ra" f2 && isSuffixOf "rum" f3 = (wfs, Adjective (Just 1) Positive)
| isSuffixOf "is" f1 && isSuffixOf "is" f2 && isSuffixOf "e" f3 = ([f1,f3], Adjective (Just 3) Positive)
| isSuffixOf "er" f1 && isSuffixOf "is" f2 && isSuffixOf "e" f3 = (wfs, Adjective (Just 3) Positive)
| isSuffixOf "os" f1 && isSuffixOf "os" f2 && isSuffixOf "on" f3 = (wfs, Adjective (Just (-1)) Positive) -- Greek stuff
| isSuffixOf "os" f1 && isSuffixOf "a" f2 && isSuffixOf "on" f3 = (wfs, Adjective (Just (-1)) Positive) -- Green stuff
| f2 == "(gen.)" = ([f1,f3], Adjective (Just 3) Positive)
-- acer, acris -e, acrior -or -us, acerrimus -a -um ADJ
-- abjectus, abjecta -um, abjectior -or -us, abjectissimus -a -um
fixStuff wfs@[f1,f2,f3,f4]
| isSuffixOf "us" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -um" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 2 f1
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "um",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "us" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 2 f1
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "ns" f1 && isSuffixOf "ntis (gen.)" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 11 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "ntis",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 3) PosCompSuper)
| isSuffixOf "er" f1 && isSuffixOf "is -e" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 5 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "is", stem1 ++ "e",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 3) PosCompSuper)
| isSuffixOf "er" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 5 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "is" f1 && isSuffixOf "e" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, f2,
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
fixStuff wfs = trace ("ERROR: " ++ show wfs) (wfs,NoInfos)
in
do
wfs <- wordForms
_ <- string "ADJ"
-- Set additional infos/normalize foobar
-- i <- return Nothing
skipMany space
c <- rest
let (nwfs,ninfos) = fixStuff $ map skipSpaces wfs -- (Adjective i)
return $ Entry A nwfs ninfos c
adverb :: Stream s m Char => ParsecT s u m DictEntry
adverb =
do
wfs <- wordForms
_ <- string "ADV"
skipMany space
c <- rest
return $ Entry Adv wfs NoInfos c
interjection :: Stream s m Char => ParsecT s u m DictEntry
interjection =
do
wfs <- wordForms
_ <- string "INTERJ"
skipMany space
c <- rest
return $ Entry Interj wfs NoInfos c
preposition :: Stream s m Char => ParsecT s u m DictEntry
preposition =
do
wfs <- wordForms
_ <- string "PREP"
skipMany space
c <- cases
skipMany space
cc <- rest
return $ Entry Prep wfs (Preposition c) cc
wrongLine :: Stream s m Char => ParsecT s u m DictEntry
wrongLine =
do
line <- many1 $ noneOf "["
unexpected $ "Unexpected line " ++ line
lineParser :: Stream s m Char => ParsecT s u m DictEntry
lineParser =
do
_ <- hash
(try noun <|> try verb <|> try adjective <|> try adverb <|> try interjection <|> try preposition) <|> wrongLine
skipSpaces :: String -> String
skipSpaces = dropWhileEnd isSpace --filter (/= ' ')
write :: FilePath -> FilePath -> [(Int,DictEntry)] -> IO ()
write abs conc es =
let
join :: String -> [String] -> String
join g l = foldl (\f s -> f ++ g ++ s ) (head l) (tail l)
writeEntry :: Handle -> Handle -> [(Int,DictEntry)] -> IO ()
writeEntry habs hconc [] =
do
hPutStrLn habs "}"
hClose habs
hPutStrLn hconc "}"
hClose hconc
writeEntry habs hconc (e@(i,Entry cat forms _ _):es) =
do
let lemma = skipSpaces $ head forms
hPutStrLn habs $ " " ++ lemma ++ "_" ++ show i ++ "_" ++ show cat ++ " : " ++ show cat ++ ";";
case e of {
(i,Entry N wfs (Noun (Just 1) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ head wfs ++ "\"; -- 1st " ++ show gender ++ " " ++ c;
(i,Entry N wfs (Noun (Just 2) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ head wfs ++ "\"; -- 2nd " ++ show gender ++ " " ++ c;
(i,Entry N wfs (Noun (Just 3) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ (join "\" \"" $ map skipSpaces wfs) ++ "\" " ++ show gender ++ "; -- 3rd " ++ show gender ++ " " ++ c;
(i,Entry A wfs (Adjective (Just 1) comp@Positive) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkA \"" ++ head wfs ++ "\"; -- 1st " ++ show comp ++ " " ++ c;
_ -> return () -- print e
}
writeEntry habs hconc es
in
do
habs <- openFile abs WriteMode
hconc <- openFile conc WriteMode
hPutStrLn habs "abstract DictLatAbs = Cat ** {"
hPutStrLn habs "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm"
hPutStrLn habs "fun"
hPutStrLn hconc "concrete DictLat of DictLatAbs = CatLat ** open ParadigmsLat in {"
hPutStrLn hconc "-- extracted from http://archives.nd.edu/whitaker/dictpage.htm"
hPutStrLn hconc "lin"
writeEntry habs hconc es
main =
let
p :: String -> IO (Maybe DictEntry)
p l =
case parse lineParser "dict" l of {
Left err -> do
{ putStrLn $ drop 1 (showErrorMessages "or" "unknown parse error" "expecting" "unexpected" "end of input" $ errorMessages err) ;
return Nothing
} ;
Right e -> return $ Just e
}
in
do
ws <- fmap lines (readFile "DICTPAGE.RAW")
es <- zip [1..] . catMaybes <$> mapM p ws
write "DictLatAbs.gf" "DictLat.gf" es

View File

@@ -0,0 +1,342 @@
{-# LANGUAGE FlexibleContexts #-}
import Text.Parsec
import Text.Parsec.Error
import Data.Char
import Data.Maybe
import System.IO
import Data.List
import Debug.Trace
data Case = Nom | Gen | Dat | Acc | Abl deriving Show
data Gender = Masc | Fem | Neuter | Common | Unknown
data Cat = N | V | A | Adv | Interj | Prep | Num | Conj | Pron deriving Show;
data VerbKind = Trans | Intrans | Deponens | SemiDeponens | Impersonal deriving Show
data Comparison = Positive | Comparative | Superlative | PosComp | CompSuper | PosCompSuper | Undeclined deriving Show;
data DictEntry = Entry { cat :: Cat , forms :: [String] , other :: OtherInfos , comment :: String } | EmptyEntry deriving Show;
data OtherInfos = Noun { iclass :: Maybe Int , gen :: Gender } | Adjective { iclass :: Maybe Int , comp :: Comparison } | Verb { iclass :: Maybe Int , kind :: VerbKind } | Preposition { c :: Case } | NoInfos deriving Show;
instance Show Gender where
show Masc = "masculine"
show Fem = "feminine"
show Neuter = "neuter"
show Common = "(feminine | masculine)"
show Unknown = ""
hash :: Stream s m Char => ParsecT s u m Char
hash = char '#'
wordForm :: Stream s m Char => ParsecT s u m String
wordForm =
let
esse :: Stream s m Char => ParsecT s u m String
esse =
string "sum" <|> string "est"
suffix :: Stream s m Char => ParsecT s u m String
suffix =
do
d <- char '-'
sfx <- many letter
spcs <- many space
return $ d : sfx ++ spcs
genitive :: Stream s m Char => ParsecT s u m String
genitive =
do
p1 <- string "(gen"
p2 <- many (noneOf ")")
p3 <- string ")"
return $ p1 ++ p2 ++ p3
in
do
w0 <- optionMaybe (char '-' <|> letter)
ws <- if isJust w0 then many (letter <|> oneOf "()/") else return ""
s1 <- many space
s <- option [] $ try $ esse
s2 <- many space
g <- option [] $ try genitive
s3 <- many space
sfs <- option [] $ try (many suffix)
return $ maybe ws (:ws) w0 ++ s1 ++ s ++ s2 ++ g ++ s3 ++ concat sfs
wordForms :: Stream s m Char => ParsecT s u m [String]
wordForms =
do
wf <- wordForm;
wfs <- many (do
_ <- char ','
skipMany space
wordForm
)
return (wf:wfs)
gender :: Stream s m Char => ParsecT s u m Gender
gender =
do
skipMany space
c <- upper
case c of {
'N' -> return Neuter ;
'M' -> return Masc ;
'F' -> return Fem ;
'C' -> return Common; -- Feminine and/or masculine
'X' -> return Unknown;
_ -> unexpected ("unhandled gender " ++ [c])
}
inflection :: Stream s m Char => ParsecT s u m (Maybe Int)
inflection =
do
_ <- char '(';
i <- digit ;
_ <- string "st" <|> string "nd" <|> string "rd" <|> string "th" ;
_ <- char ')';
return $ Just $ digitToInt i
verbkind :: Stream s m Char => ParsecT s u m VerbKind
verbkind =
do
s <- many upper
case s of {
"INTRANS" -> return Intrans;
"TRANS" -> return Trans;
"DEP" -> return Deponens;
"SEMIDEP" -> return SemiDeponens;
"IMPERS" -> return Impersonal;
_ -> unexpected s -- Probably just return intrans?
}
cases :: Stream s m Char => ParsecT s u m Case
cases =
do
s <- many upper
case s of {
"ACC" -> return Acc;
"ABL" -> return Abl;
_ -> unexpected s
}
rest :: Stream s m Char => ParsecT s u m String
rest =
do
c0 <- char '['
cs <- many anyChar
return (c0:cs)
noun :: Stream s m Char => ParsecT s u m DictEntry
noun =
do
wfs <- wordForms
_ <- char 'N'
skipMany space
i <- option Nothing inflection
g <- gender
skipMany space
c <- rest
return $ Entry N wfs (Noun i g) c
verb :: Stream s m Char => ParsecT s u m DictEntry
verb =
do
wfs <- wordForms
_ <- string "V"
skipMany space
i <- option Nothing inflection
skipMany space
k <- option Intrans verbkind
skipMany space
c <- rest
return $ Entry V wfs (Verb i k) c
adjective :: Stream s m Char => ParsecT s u m DictEntry
adjective =
let
dropLast :: Int -> String -> String
dropLast i s = take (length s - i) s
fixStuff :: [String] -> ([String],OtherInfos)
fixStuff wfs@[f1,f2]
| isSuffixOf "or -or -us" f1 && isSuffixOf "us -a -um" f2 =
let
stem1 = dropLast 10 f1
stem2 = dropLast 9 f2
in
([stem1 ++ "or", stem1 ++ "or", stem1 ++ "us", stem2 ++ "us", stem2 ++ "a", stem2 ++ "um"],
Adjective (Just 3) CompSuper)
| f2 == "undeclined" = (wfs, Adjective (Just (-1)) Undeclined)
fixStuff wfs@[f1,f2,f3]
| isSuffixOf "us" f1 && isSuffixOf "a" f2 && isSuffixOf "um" f3 = (wfs, Adjective (Just 1) Positive)
| isSuffixOf "r" f1 && isSuffixOf "ra" f2 && isSuffixOf "rum" f3 = (wfs, Adjective (Just 1) Positive)
| isSuffixOf "is" f1 && isSuffixOf "is" f2 && isSuffixOf "e" f3 = ([f1,f3], Adjective (Just 3) Positive)
| isSuffixOf "er" f1 && isSuffixOf "is" f2 && isSuffixOf "e" f3 = (wfs, Adjective (Just 3) Positive)
| isSuffixOf "os" f1 && isSuffixOf "os" f2 && isSuffixOf "on" f3 = (wfs, Adjective (Just (-1)) Positive) -- Greek stuff
| isSuffixOf "os" f1 && isSuffixOf "a" f2 && isSuffixOf "on" f3 = (wfs, Adjective (Just (-1)) Positive) -- Green stuff
| f2 == "(gen.)" = ([f1,f3], Adjective (Just 3) Positive)
-- acer, acris -e, acrior -or -us, acerrimus -a -um ADJ
-- abjectus, abjecta -um, abjectior -or -us, abjectissimus -a -um
fixStuff wfs@[f1,f2,f3,f4]
| isSuffixOf "us" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -um" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 2 f1
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "um",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "us" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 2 f1
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "ns" f1 && isSuffixOf "ntis (gen.)" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 11 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "ntis",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 3) PosCompSuper)
| isSuffixOf "er" f1 && isSuffixOf "is -e" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 5 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "is", stem1 ++ "e",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 3) PosCompSuper)
| isSuffixOf "er" f1 && isSuffixOf "a -um" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem1 = dropLast 5 f2
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, stem1 ++ "a", stem1 ++ "um",
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
| isSuffixOf "is" f1 && isSuffixOf "e" f2 && isSuffixOf "or -or -us" f3 && isSuffixOf "us -a -um" f4 =
let
stem2 = dropLast 10 f3
stem3 = dropLast 9 f4
in
([f1, f2,
stem2 ++ "or", stem2 ++ "or", stem2 ++ "us",
stem3 ++ "us", stem3 ++ "a", stem3 ++ "um"],
Adjective (Just 1) PosCompSuper)
fixStuff wfs = trace ("ERROR: " ++ show wfs) (wfs,NoInfos)
in
do
wfs <- wordForms
_ <- string "ADJ"
-- Set additional infos/normalize foobar
-- i <- return Nothing
skipMany space
c <- rest
let (nwfs,ninfos) = fixStuff $ map skipSpaces wfs -- (Adjective i)
return $ Entry A nwfs ninfos c
adverb :: Stream s m Char => ParsecT s u m DictEntry
adverb =
do
wfs <- wordForms
_ <- string "ADV"
skipMany space
c <- rest
return $ Entry Adv wfs NoInfos c
interjection :: Stream s m Char => ParsecT s u m DictEntry
interjection =
do
wfs <- wordForms
_ <- string "INTERJ"
skipMany space
c <- rest
return $ Entry Interj wfs NoInfos c
preposition :: Stream s m Char => ParsecT s u m DictEntry
preposition =
do
wfs <- wordForms
_ <- string "PREP"
skipMany space
c <- cases
skipMany space
cc <- rest
return $ Entry Interj wfs (Preposition c) cc
wrongLine :: Stream s m Char => ParsecT s u m DictEntry
wrongLine =
do
line <- many1 $ noneOf "["
unexpected $ "Unexpected line " ++ line
lineParser :: Stream s m Char => ParsecT s u m DictEntry
lineParser =
do
_ <- hash
(try noun <|> try verb <|> try adjective <|> try adverb <|> try interjection <|> try preposition) <|> wrongLine
skipSpaces :: String -> String
skipSpaces = dropWhileEnd isSpace --filter (/= ' ')
write :: FilePath -> FilePath -> [(Int,DictEntry)] -> IO ()
write abs conc es =
let
join :: String -> [String] -> String
join g l = foldl (\f s -> f ++ g ++ s ) (head l) (tail l)
writeEntry :: Handle -> Handle -> [(Int,DictEntry)] -> IO ()
writeEntry habs hconc [] =
do
hPutStrLn habs "}"
hClose habs
hPutStrLn hconc "}"
hClose hconc
writeEntry habs hconc (e@(i,Entry cat forms _ _):es) =
do
let lemma = skipSpaces $ head forms
hPutStrLn habs $ " " ++ lemma ++ "_" ++ show i ++ "_" ++ show cat ++ " : " ++ show cat ++ ";";
case e of {
(i,Entry N wfs (Noun (Just 1) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ head wfs ++ "\"; -- 1st " ++ show gender ++ " " ++ c;
(i,Entry N wfs (Noun (Just 2) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ head wfs ++ "\"; -- 2nd " ++ show gender ++ " " ++ c;
(i,Entry N wfs (Noun (Just 3) gender) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkN \"" ++ (join "\" \"" $ map skipSpaces wfs) ++ "\" " ++ show gender ++ "; -- 3rd " ++ show gender ++ " " ++ c;
(i,Entry A wfs (Adjective (Just 1) comp@Positive) c) -> hPutStrLn hconc $ " " ++ lemma ++ "_" ++ show i ++ "_N = mkA \"" ++ head wfs ++ "\"; -- 1st " ++ show comp ++ " " ++ c;
_ -> return () -- print e
}
writeEntry habs hconc es
in
do
habs <- openFile abs WriteMode
hconc <- openFile conc WriteMode
hPutStrLn habs "abstract DictLatAbs = Cat ** {"
hPutStrLn habs "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm"
hPutStrLn habs "fun"
hPutStrLn hconc "concrete DictLat of DictLatAbs = CatLat ** open ParadigmsLat in {"
hPutStrLn hconc "-- extracted from http://archives.nd.edu/whitaker/dictpage.htm"
hPutStrLn hconc "lin"
writeEntry habs hconc es
main =
let
p :: String -> IO (Maybe DictEntry)
p l =
case parse lineParser "dict" l of {
Left err -> do
{ putStrLn $ drop 1 (showErrorMessages "or" "unknown parse error" "expecting" "unexpected" "end of input" $ errorMessages err) ;
return Nothing
} ;
Right e -> return $ Just e
}
in
do
ws <- fmap lines (readFile "DICTPAGE.RAW")
es <- zip [1..] . catMaybes <$> mapM p ws
write "DictLatAbs.gf" "DictLat.gf" es

38985
src/latin/dict/TEST.RAW Normal file

File diff suppressed because it is too large Load Diff

39225
src/latin/dict/TEST.RAW~ Normal file

File diff suppressed because it is too large Load Diff

BIN
src/latin/dict/dictpage.zip Normal file

Binary file not shown.

530
src/latin/dict/parse.pl Normal file
View File

@@ -0,0 +1,530 @@
use strict;
use warnings;
use Data::Dumper;
use feature ":5.10";
my %genders = (F => "feminine" , M => "masculine" , N => "neuter" , C => "COMMON" , X => "UNKNOWN" ) ;
my %cases = (ABL => "Abl" , ACC => "Acc", DAT => "Dat", GEN => "Gen", NOM => "Nom" ) ;
my $wordform = "[\\w()/.\\s-]+" ;
my $comment = "(\\[.*)" ;
my $gender = "(F|M|N|C|X)";
my $vtype = "(TRANS|INTRANS|DEP|SEMIDEP|IMPERS)";
my $case = "(ABL|ACC|DAT|GEN|NOM|VOC|LOC)" ;
my $number = "(S|P)" ;
my $declension = "\\((1st|2nd|3rd|4th|5th)\\)";
my $interjection = "#($wordform)\\s+INTERJ\\s+$comment";
my $adverb = "#(($wordform,\\s+)*$wordform)\\s+ADV\\s+$comment";
my $adjective = "#(($wordform,\\s+)*$wordform)\\s+$gender\\s+ADJ\\s+$comment";
my $adjective2 = "#(($wordform,\\s+)*$wordform)\\s+ADJ\\s+$comment";
my $adjective3 = "#(($wordform,\\s+)*$wordform)\\s+ADJ\\s+[1-3]\\s+[1-3]\\s+$case\\s+$number\\s+$gender\\s+POS\\s+$comment";
my $conjunction = "#($wordform)\\s+CONJ\\s+$comment";
my $noun = "#(($wordform,\\s+)*$wordform)\\s+N\\s+$gender\\s+$comment";
my $noun2 = "#(($wordform,\\s+)*$wordform)\\s+N\\s+$declension\\s+$gender\\s+$comment";
my $noun3 = "#(($wordform,\\s+)*$wordform)\\s+N\\s+[0-9]\\s+[0-9]\\s+$case\\s+$number\\s+$gender\\s+$comment";
my $prep = "#($wordform)\\s+PREP\\s+$case\\s+$comment";
my $verb = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$comment";
my $verb2 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$comment";
my $verb3 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$vtype\\s+$comment";
my $verb4 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$vtype\\s+$comment";
my $verb5 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$case\\s+$comment";
my $absheader = "--# -path=.:..\n" .
"abstract DictLatAbs = Cat,Structural-[here_Adv],Lexicon-[leg_N,man_N,do_V2] ** {\n" .
"-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n" .
" fun";
my $concheader = "--# -path=.:..\n" .
"concrete DictLat of DictLatAbs = CatLat,StructuralLat-[here_Adv],LexiconLat-[leg_N,man_N,do_V2] ** open Prelude, ParadigmsLat, ResLat, ExtraLat in {\n" .
"-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n" .
" lin";
my $footer = "}";
open(my $absfh, ">", "DictLatAbs.gf") or die "Can't open > DictLatAbs.gf: $!";
open(my $concfh, ">", "DictLat.gf") or die "Can't open > DictLatAbs.gf: $!";
my %conclines ;
my %abslines ;
my @blacklist = ["multi_N","multae_N","alisalius_A","alius_A","semibos_A","semivir_A"];
print $absfh "$absheader\n";
print $concfh "$concheader\n";
while (my $l = <>) {
chomp($l);
my @wfs;
my $cat;
my $absname;
if ($l =~ /$interjection/)
{
# print "INTERJ Word: $1 -- Comment: $2\n";
my $wf = $1 ;
my $comment = $2 ;
$wf =~ s/\s$//g;
$cat = "Interj" ;
$absname = $wf."_Interj" ;
push @wfs, $wf;
$conclines{$absname} = " $absname = ss \"$wf\" ; -- $comment \n" ;
}
elsif ($l =~ /$adverb/)
{
# print "ADV Word: $1 -- Comment: $3\n";
my $wf = $1 ; # all word forms in one string
my $comment = $3;
@wfs = split /\s*,\s+/, $1; # word forms split into a list
map { s/\s$// } @wfs;
$cat = "Adv" ;
$absname = $wfs[0]."_Adv" ;
if (@wfs == 1)
{
$conclines{$absname} = " $absname = mkAdv \"".$wfs[0]."\" ; -- $comment\n" ;
}
elsif (@wfs == 2)
{
$conclines{$absname} = " $absname =mkAdv \"".$wfs[0]."\" \"".$wfs[1]."\" ; -- $comment\n" ;
}
elsif (@wfs == 3)
{
$conclines{$absname} = " $absname =mkAdv \"".$wfs[0]."\" \"".$wfs[1]."\" \"".$wfs[2]."\" ; -- $comment\n" ;
}
}
elsif ($l =~ /$adjective/)
{
my $wf = $1 ; # all word forms in one string
my $comment = $3;
@wfs = split /\s*,\s+/, $1; # word forms split into a list
map { s/[\s.]$// } @wfs;
$cat = "A" ;
$absname = $wfs[0]."_A" ;
$conclines{$absname} = " $absname = mkA \"".$wfs[0]."\" ; -- $comment\n" ;
# print "A1 Word: $1 -- Comment: $3\n"; # these adjectives should always work
}
elsif ($l =~ /$adjective2/)
{
# print "A2 Word: $1 -- Comment: $3\n";
my $wf = $1 ; # all word forms in one string
my $comment = $3;
@wfs = split /\s*[,-]\s*/, $1; # word forms split into a list
map { s/[\s.]$// } @wfs;
# Word forms contain variations -> Ignore
#print $absfh " ".$wfs[0]."_A : A ;\n" ;
$cat = "A" ;
$absname = $wfs[0]."_A" ;
if ($absname ~~ @blacklist) {
$conclines{$absname} = "-- BLACKLISTED $absname : A2 $wf -- blacklisted -- $comment\n" ;
}
# Wordform contains variants -> to be fixed
elsif ($wf =~ /[(\/\(\))]|(\s-)/ )
{
if ($wfs[1] eq "(gen.)")
{
if (@wfs == 3)
{
$conclines{$absname} = " $absname = mkA \"".$wfs[0]."\" \"".$wfs[2]."\"; -- $comment\n" ;
}
else
{
$conclines{$absname} = "-- TODO $absname : A2 $wf -- $comment\n" ;
}
}
elsif ($wfs[1] =~ /\(gen\.\)/)
{
$wfs[1] =~ s/ \(gen\.\)//g;
$conclines{$absname} = " $absname = mkA \"".$wfs[0]."\" \"".$wfs[1]."\"; -- $comment\n" ;
}
else
{
$conclines{$absname} = "-- SLASHSTUFF $absname : A2 $wf -- $comment\n" ;
}
}
# Abbreviations -> Ignore
elsif ($wf =~ /abbr?\./) {
$conclines{$absname} = "-- IGNORED $absname : A2 $wf -- $comment\n" ;
}
# Undefined -> Ignore
elsif ($wf =~ /undecl/) {
$conclines{$absname} = "-- IGNORED $absname : A2 $wf -- $comment\n" ;
}
# Two word forms, just use both
elsif (@wfs == 2)
{
$conclines{$absname} = " $absname = mkA \"".$wfs[0]."\" \"".$wfs[1]."\"; -- $comment\n" ;
}
# Three word forms -> regular adjective?!?
elsif (@wfs == 3)
{
$conclines{$absname} = " $absname = mkA \"".$wfs[0]."\" \"".$wfs[1]."\" \"".$wfs[2]."\" ; -- $comment\n" ;
}
# Too many word forms
else
{
$conclines{$absname} = "-- TOOMUCH $absname : A2 $wf -- $comment\n" ;
# print "A2 Word: ".$wfs[0]." -- $wf -- Comment: $comment\n" ;
}
}
elsif ($l =~ /$adjective3/)
{
# Overly specific forms to be ignored
$cat = "" ;
}
elsif ($l =~ /$conjunction/)
{
# print "CONJ Word: $1 -- Comment: $2\n";
my $wf = $1 ;
my $comment = $2;
$wf =~ s/\s$//g;
$cat = "Conj" ;
$absname = $wf."_Conj" ;
push @wfs, $wf;
# We don't get enough information for our grammar from the lexicon
$conclines{$absname} = "-- $absname : Conj $wf -- $comment\n" ;
}
elsif ($l =~ /$noun/)
{
my $wf = $1 ;
my $gender = $3;
my $comment = $4;
@wfs = split /\s*,\s+/, $1; # word forms split into a list
$wfs[0] =~ s/[\.\s]//g; # remove punctuation from word form
$cat = "N" ;
$absname = $wfs[0]."_N" ;
# Blacklisted, not handled yet
if ($absname ~~ @blacklist) {
$conclines{$absname} = "-- BLACKLISTED $absname : N1 $wf -- Gender: $gender -- Comment: $comment\n" ;
}
# strange special characters -> ingnored
elsif ($wf =~ /[\/\(\)]/ )
{
$conclines{$absname} = "-- TODO $absname : N1 $wf -- $gender -- $comment\n" ;
}
# Wordforms contain "undecl" -> Ignored
elsif ($wf =~ /undecl/ )
{
$conclines{$absname} = "-- IGNORED $absname : N1 $wf -- $gender -- $comment\n" ;
}
# Wordforms contains abbreviation -> Ignored
elsif ($wf =~ /abb(r?)\./)
{
$conclines{$absname} = "-- IGNORED $absname : N1 $wf -- $gender -- $comment\n" ;
}
elsif(scalar(@wfs) == 1)
{
$absname = $wfs[0]."_".$gender."_N" ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" ; -- $comment\n" ;
}
elsif(scalar(@wfs) == 2)
{
my $g = $genders{$gender};
if ($gender eq "C")
{
$absname = $wfs[0]."_F_N" ;
$abslines{$absname} = $cat ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" feminine ; -- $comment\n" ;
$absname = $wfs[0]."_M_N" ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" masculine ; -- $comment\n" ;
}
# Unknown gender
elsif ($gender eq "X")
{
$conclines{$absname} = "-- $absname : N1 $wf -- Gender: $gender -- Comment: $comment\n" ;
}
else
{
$absname = $wfs[0]."_".$gender."_N" ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" $g ; -- $comment\n" ;
}
}
else
{
$absname = $wfs[0]."_N";
$conclines{$absname} = "-- $absname : N1 $wf -- Gender: $gender -- Comment: $comment\n" ;
# print "N1 Word: ".$wfs[0]." -- ".scalar(@wfs)." -- Gender: $gender -- Comment: $comment\n" ;
}
}
elsif ($l =~ /$noun2/)
{
my $wf = $1 ;
my $gender = $4;
my $declension = $3;
my $comment = $5;
$cat = "N" ;
@wfs = split /\s*,\s+/, $1; # word forms split into a list
$absname = $wfs[0]."_".$gender."_N" ;
# Blacklisted
if ($absname ~~ @blacklist) {
$conclines{$absname} = "-- BLACKLISTED $absname : N1 $wf -- Gender: $gender -- Comment: $comment\n" ;
}
elsif ($declension eq "1st" || $declension eq "2nd")
{
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" ; -- $comment\n" ;
}
elsif (scalar(@wfs) == 2)
{
my $g = $genders{$gender};
if ($gender eq "C")
{
$absname = $wfs[0]."_F_N" ;
$abslines{$absname} = $cat ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" feminine ; -- $comment\n" ;
$absname = $wfs[0]."_M_N" ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" masculine ; -- $comment\n" ;
}
# Unknown gender
elsif ($gender eq "X")
{
$conclines{$absname} = "-- $absname : N1 $wf -- Gender: $gender -- Comment: $comment\n" ;
}
else
{
$absname = $wfs[0]."_".$gender."_N" ;
$conclines{$absname} = " $absname = mkN \"".$wfs[0]."\" \"".$wfs[1]."\" $g ; -- $comment\n" ;
}
}
else
{
$conclines{$absname} = "-- $absname : N2 $wf -- Gender: $gender -- Declension: $declension -- Comment: $comment\n";
# print "N2 Word: ".$wfs[0]." -- Gender: $gender -- Declension: $declension -- Comment: $comment\n";
}
}
elsif ($l =~ /$noun3/)
{
# Overly specific
$cat = "" ;
}
# Has to be after nouns to avoid problems with N ADJ
elsif ($l =~ /$prep/)
{
my $wf = $1 ;
my $case = $2 ;
my $comment = $3 ;
$wf =~ s/\s//g;
push @wfs, $wf;
# print "PREP Word: $wf -- Case: $case -- Comment: $comment\n";
my $c = $cases{$case};
$cat = "Prep" ;
$absname = $wfs[0]."_".$c."_Prep" ;
$conclines{$absname} = " $absname = mkPrep \"".$wfs[0]."\" $c ; -- $comment\n" ;
}
elsif ($l =~ /$verb/)
{
my $wf = $1 ;
my $comment = $3 ;
$cat = "V" ;
@wfs = split /\s*,\s+/, $wf ;
$absname = $wfs[0]."_V";
# Undefined -> Ignore
if ($absname ~~ @blacklist) {
$conclines{$absname} = "-- BLACKLISTED $absname : V1 $wf -- Comment: $comment\n" ;
}
# strange special characters -> ingnored
elsif ($wf =~ /[(\/\(\))]|(\s-)/ )
{
$conclines{$absname} = "-- TODO $absname : V1 $wf -- $comment\n" ;
}
elsif ($wf =~ /undecl/) {
$conclines{$absname} = "-- IGNORED $absname : V1 $wf -- $comment\n" ;
}
elsif ($wf =~ /additional/ && $wf =~ /forms/) {
$conclines{$absname} = "-- IGNORED $absname : V1 $wf -- $comment\n" ;
}
elsif (@wfs == 4)
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" \"".$wfs[0]."\" \"".$wfs[2]."\" \"".$wfs[3]."\" ; -- Comment: $comment\n" ;
}
else
{
print "V1 Word: ".$wfs[0]." -- Comment: $comment\n";
}
}
elsif ($l =~ /$verb2/)
{
my $wf = $1 ;
my $declension = $3 ;
my $comment = $4 ;
$cat = "V" ;
@wfs = split /\s*,\s+/, $1;
$absname = $wfs[0]."_V";
if ($absname ~~ @blacklist) {
$conclines{$absname} = "-- BLACKLISTED $absname : V2 $wf -- Declension: $declension -- Comment: $comment\n" ;
}
# strange special characters -> ingnored
elsif ($wf =~ /[(\/\(\))]|(\s-)/ )
{
$conclines{$absname} = "-- TODO $absname : V2 $wf -- Declension: $declension -- Comment: $comment\n" ;
}
elsif ($wf =~ /undecl/) {
$conclines{$absname} = "-- IGNORED $absname : V2 $wf -- Declension: $declension -- Comment: $comment\n" ;
}
if ($declension eq "1st" || $declension eq "2nd")
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" ; -- $comment\n" ;
}
elsif (scalar(@wfs) == 4)
{
if (!$wf =~ /-/)
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\" \"".$wfs[0]."\" \"".$wfs[2]."\" \"".$wfs[3]."\") ; -- $comment\n" ;
}
elsif ($wfs[2] eq "-" && $wfs[3] eq "-")
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" \"".$wfs[0]."\" nonExist nonExist ; -- $comment\n" ;
}
elsif ($wfs[3] eq "-")
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\" \"".$wfs[0]."\" \"".$wfs[2]."\" nonExist ; -- $comment\n" ;
}
}
# print "V2 Word: ".$wfs[0]." -- Declension: $declension -- Comment: $comment\n";
}
elsif ($l =~ /$verb3/)
{
my $wf = $1 ;
my $type = $3 ;
my $comment = $4 ;
$cat = "V" ;
@wfs = split /\s*,\s+/, $1 ;
if ($type eq "TRANS")
{
$cat = "V2" ;
}
elsif ($type eq "IMPERS")
{
$cat= "V0" ;
}
else
{
$cat= "V" ;
}
@wfs = split /\s*,\s+/, $1;
$absname = $wfs[0]."_".$cat ;
if ($wf =~ /undecl/)
{
$conclines{$absname} = "-- IGNORED $absname : V3 $wf -- Type: $type -- Comment: $comment\n" ;
}
else
{
if ($cat eq "V")
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" ; -- $comment\n" ;
}
elsif ($cat eq "V0")
{
$conclines{$absname} = " $absname = mkV0 \"".$wfs[0]."\" ; -- $comment\n" ;
}
else
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\") ; -- $comment\n" ;
}
# print "V3 Word: ".$wfs[0]." -- VType: $type -- Comment: $comment\n";
}
$cat = "V" if $cat eq "V0";
}
elsif ($l =~ /$verb4/)
{
my $wf = $1 ;
my $declension = $3 ;
my $type = $4 ;
my $comment = $5 ;
if ($type eq "TRANS")
{
$cat = "V2" ;
}
elsif ($type eq "IMPERS")
{
$cat= "V0" ;
}
else
{
$cat= "V" ;
}
@wfs = split /\s*,\s+/, $1;
$absname = $wfs[0]."_".$cat ;
if ($declension eq "1st" || $declension eq "2nd")
{
if ($cat eq "V")
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" ; -- $comment\n" ;
}
elsif ($cat eq "V0")
{
$conclines{$absname} = " $absname = mkV0 \"".$wfs[0]."\" ; -- $comment\n" ;
}
else
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\") ; -- $comment\n" ;
}
}
elsif (scalar(@wfs) == 4)
{
if (!$wf =~ /-/)
{
if ($cat eq "V")
{
$conclines{$absname} = " $absname = mkV \"".$wfs[1]."\" \"".$wfs[0]."\" \"".$wfs[2]."\" \"".$wfs[3]."\"; -- $comment\n" ;
}
elsif ($cat eq "V0")
{
$conclines{$absname} = " $absname = mkV0 \"".$wfs[0]."\"; -- $comment\n" ;
}
else
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\" \"".$wfs[0]."\" \"".$wfs[2]."\" \"".$wfs[3]."\") ; -- $comment\n" ;
}
}
}
$cat = "V" if $cat eq "V0";
}
elsif ($l =~ /$verb5/)
{
my $wf = $1 ;
my $declension = $3 ;
my $case = $4 ;
my $comment = $5 ;
$cat = "V2" ;
@wfs = split /\s*,\s+/, $1;
$absname = $wfs[0]."_".$cat ;
my $c = $cases{$case};
if ($declension eq "1st" || $declension eq "2nd")
{
$conclines{$absname} = " $absname = mkV2 (mkV \"".$wfs[1]."\") ".$c."_Prep ; -- $comment\n" ;
}
else
{
$conclines{$absname} = "-- $absname : V4 $wf -- Declension: $declension -- Case: $case -- Comment: $comment\n" ;
}
#print "V5 Word: ".$wfs[0]." -- Declension: $declension -- Case: $case -- Comment: $comment\n";
}
else
{
$cat = "" ;
print "MISSING: $l\n";
}
if ($cat ne "") {
# print $absfh " ".$wfs[0]."_".$cat." : $cat ;\n" ;
$abslines{$absname} = $cat;
}
}
foreach my $k (sort (keys %abslines))
{
print $absfh " $k : ".$abslines{$k}." ;\n" ;
}
foreach my $k (sort (keys %conclines))
{
given ($k) {
# when (@blacklist) {
# print $concfh "-- ".$conclines{$k};
# }
# default {
print $concfh $conclines{$k};
# }
}
}
print $absfh "$footer\n";
print $concfh "$footer\n";
close($absfh);
close($concfh);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,102 @@
#ac CONJ [XXXAO] :: and, and also, and besides;
#acsi CONJ [XXXCW] :: as if; (ac si);
#adque CONJ [XXXCO] :: and, as well as, as soon as; together with; and even; and too/also/now; yet;
#adqui CONJ [XXXES] :: but, yet, notwithstanding, however, rather, well/but now; and yet, still;
#adquin CONJ [XXXEO] :: but, yet, notwithstanding, however, rather, well/but now; and yet, still;
#alii CONJ [XXXCC] :: some ... others (alii ... alii);
#alius CONJ [XXXCO] :: the_one ... the_other (alius ... alius);
#alter CONJ [XXXCO] :: the_one ... the_other (alter ... alter); otherwise;
#an CONJ [XXXCO] :: can it be that (introduces question expecting negative answer/further question);
#an CONJ [XXXAO] :: |whether; (utrum ... an = whether ... or); or; either;
#anne CONJ [XXXCO] :: can it be that (introducing a question expecting a negative answer);
#anne CONJ [XXXEO] :: |whether (or not) (an-ne);
#annon CONJ [XXXCO] :: can it be that (introducing a question expecting a positive answer);
#antequam CONJ [XXXAO] :: before, sooner than; until;
#ast CONJ [XXXBO] :: but, on the other hand/contrary; but yet; at least; in that event; if further;
#at CONJ [XXXAO] :: but, but on the other hand; on the contrary; while, whereas; but yet; at least;
#atenim CONJ [XXXEO] :: but/yet in spite of what has been said; but/yet nevertheless/all the same;
#atque CONJ [XXXAO] :: and, as well/soon as; together with; and moreover/even; and too/also/now; yet;
#atqui CONJ [XXXBO] :: but, yet, notwithstanding, however, rather, well/but now; and yet, still;
#atquin CONJ [XXXBO] :: but, yet, notwithstanding, however, rather, well/but now; and yet, still;
#audem CONJ [XXXEO] :: but (postpositive), on the other hand/contrary; while, however; moreover, also;
#aut CONJ [XXXAO] :: or, or rather/else; either...or (aut...aut) (emphasizing one);
#autem CONJ [XXXAO] :: but (postpositive), on the other hand/contrary; while, however; moreover, also;
#bat CONJ [XXXEO] :: but, while, however; (contemptuous parity of "at" - b-b-but);
#batenim CONJ [XXXEO] :: but, yet, nevertheless, however; (contemptuous parity of "atenim" - b-b-but);
#cumquam CONJ [XXXFO] :: ever; [in combination sicumquam => if ever];
#cuncumque CONJ [XXXFO] :: whenever;
#donec CONJ [XXXAX] :: while, as long as, until;
#dum CONJ [XXXAX] :: while, as long as, until; provided that;
#dummodo CONJ [XXXDX] :: provided (that) (+ subj);
#enim CONJ [XXXAX] :: namely (postpos.); indeed; in fact; for; I mean, for instance, that is to say;
#enimvero CONJ [XXXBO] :: to be sure, certainly; well, upon by word; but, on the other hand; what is more;
#et CONJ [XXXAX] :: and, and even; also, even; (et ... et = both ... and);
#etenim CONJ [XXXBX] :: and indeed, because, since, as a matter of fact (independent reason, emphasis);
#etiam CONJ [XXXAO] :: and also, besides/furthermore, in addition/as well; even, actually; yes/indeed;
#etiam CONJ [XXXAO] :: |now too, as yet, still, even now; yet again; likewise; (particle); (et-iam);
#etiamsi CONJ [XXXDX] :: even if, although;
#etiamtum CONJ [XXXDX] :: even then; yet;
#etsi CONJ [XXXBX] :: although, though, even if; albeit; I know that but;
#igitur CONJ [XXXAO] :: therefore (postpositive), so/then; consequently; accordingly; well/in that case;
#itaque CONJ [XXXAX] :: and so, therefore;
#licet CONJ [XXXCO] :: although, granted that; (with subjunctive);
#modo CONJ [XXXDX] :: but, if only; but only;
#nam CONJ [XXXAX] :: for, on the other hand; for instance;
#namque CONJ [XXXAX] :: for and in fact, on the other hand; insomuch as (strengthened nam);
#ne CONJ [XXXAX] :: that not, lest; (for negative of IMP);
#nec CONJ [XXXAX] :: nor, and..not; not..either, not even;
#necdum CONJ [XXXBX] :: and/but not yet;
#necne CONJ [XXXDX] :: or not;
#nedum CONJ [XXXDX] :: still less; not to speak of; much more;
#nempe CONJ [XXXDX] :: truly, certainly, of course;
#neque CONJ [XXXAX] :: nor [neque..neque=>neither..nor; neque solum..sed etiam=>not only..but also];
#nequedum CONJ [XXXDX] :: and/but not yet;
#neu CONJ [XXXBX] :: or not, and not; (for negative of IMP); [neve ... neve => neither ... nor ];
#neve CONJ [XXXDX] :: or not, and not; (for negative of IMP); [neve ... neve => neither ... nor ];
#ni CONJ [XXXDX] :: if ... not; unless;
#nisi CONJ [XXXAX] :: if not; except, unless;
#nonnisi CONJ [XXXDO] :: not unless; not except; only (on specific terms);
#posteaquam CONJ [XXXDX] :: after;
#postquam CONJ [XXXAX] :: after;
#priusquam CONJ [XXXBX] :: before; until; sooner than;
#prout CONJ [XXXBX] :: as, just as; exactly as;
#quam CONJ [XXXDX] :: how, than;
#quamobrem CONJ [XXXDX] :: why, for what reason, on what account; on account of which, where/there-fore;
#quamquam CONJ [XXXDX] :: though, although; yet; nevertheless;
#quamvis CONJ [XXXDX] :: however much; although;
#quando CONJ [XXXDX] :: when, since, because; [si quando => if ever];
#quandoquidem CONJ [XXXDX] :: since, seeing that;
#quanquam CONJ [XXXDX] :: though, although; yet; nevertheless;
#quasi CONJ [XXXDX] :: as if, just as if, as though; as it were; about;
#que CONJ [FXXET] :: and; (while properly attached as enclitic sometimes copyists make mistakes);
#quia CONJ [XXXAX] :: because;
#quin CONJ [XXXDX] :: so that not, without; that not; but that; that; [quin etiam => moreover];
#quo CONJ [XXXDX] :: whither, in what place, where;
#quoad CONJ [XXXDX] :: as long as, until;
#quocirca CONJ [XXXDX] :: on account of which; wherefore;
#quod CONJ [XXXDX] :: because, as far as, insofar as; [quod si => but if];
#quodnisi CONJ [XXXDX] :: but if not; and if not; (introduces conditional); (quodnisi = quod nisi);
#quodsi CONJ [XXXDX] :: but if; and if; (introduces conditional); (quodsi = quod si)
#quominus CONJ [XXXDX] :: that not, from (quo minus);
#quoniam CONJ [XXXAX] :: because, since, seeing that;
#quum CONJ [DXXCS] :: when, while, as, since, although; as soon;
#sed CONJ [XXXAX] :: but, but also; yet; however, but in fact/truth; not to mention; yes but;
#set CONJ [XXXBX] :: but, but also; yet; however, but in fact/truth; not to mention; yes but;
#seu CONJ [XXXAX] :: or if; or; [sive ... sive => whether ... or, either ... or];
#si CONJ [XXXAX] :: if, if only; whether; [quod si/si quis or quid => but if/if anyone or anything];
#sicumquam CONJ [XXXFO] :: if ever; [si cumquam => if ever];
#sicut CONJ [XXXDX] :: as, just as; like; in same way; as if; as it certainly is; as it were;
#sin CONJ [XXXBX] :: but if; if on the contrary;
#siquidem CONJ [XXXBX] :: accordingly; if indeed/in fact/it is possible, even supposing; since/in that;
#sive CONJ [XXXAX] :: or if; or; [sive ... sive => whether ... or];
#tametsi CONJ [XXXDX] :: even if, although, though;
#tamquam CONJ [XXXAX] :: as, just as, just as if; as it were, so to speak; as much as; so as;
#tanquam CONJ [XXXDX] :: as, just as, just as if; as it were, so to speak; as much as; so as;
#tum CONJ [XXXDS] :: moreover; (frequent in Cicero and before; rare after);
#ubi CONJ [XXXAX] :: where, whereby;
#ut CONJ [XXXAX] :: to (+ subjunctive), in order that/to; how, as, when, while; even if;
#uti CONJ [XXXAX] :: in order that; that, so that; as, when; [ut primum => as soon as];
#utrumnam CONJ [EXXFP] :: whether; (Vulgate 1 Samuel 10:22);
#utut CONJ [XXXCO] :: however; in whatever way;
#vel CONJ [XXXAX] :: or; [vel ... vel => either ... or];
#verumtamen CONJ [XXXDX] :: but yet, nevertheless, but even so, still (resuming after digression);

View File

@@ -0,0 +1,106 @@
#a INTERJ [XXXBO] :: Ah!; (distress/regret/pity, appeal/entreaty, surprise/joy, objection/contempt);
#absit INTERJ [EEXCE] :: "god forbid", "let it be far from the hearts of the faithful";
#aelinon INTERJ [XXXFO] :: exclamation of sorrow; "alas for Linus";
#age INTERJ [XXXCS] :: come!, go to!, well!, all right!; let come;
#agedum INTERJ [XXXCO] :: come!, go to!, well!, all right!;
#agite INTERJ [XXXCQ] :: come!, go to!, well!, all right!;
#ah INTERJ [XXXCO] :: exclamation expressing surprise/irony;
#aha INTERJ [XXXEO] :: exclamation expressing surprise/irony;
#ai INTERJ [XXXFS] :: alas; exclamation expressing grief;
#aisne INTERJ [XXXES] :: indeed? really? is it possible? do you really mean it? (surprise/wonder);
#Alleluia INTERJ [EEQCE] :: Halleluia, cry of joy and praise to God; (praise ye Jehovah);
#apage INTERJ [XXXCO] :: be off!; nonsense!, get away with you!;
#apsit INTERJ [EEXCE] :: "god forbid", "let it be far from the hearts of the faithful";
#atat INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atatae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atatatae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atate INTERJ [XXXFS] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atattae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attat INTERJ [XXXCO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attatae INTERJ [XXXEO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attate INTERJ [XXXCS] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attattatae INTERJ [XXXEO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#au INTERJ [XXXFS] :: oh! ow! oh dear! goodness gracious! (used by women to express consternation);
#ave INTERJ [XXXCO] :: hail!, formal expression of greetings;
#babae INTERJ [CXXEO] :: wow!; exclamation of surprise or amazement;
#be INTERJ [XAXFO] :: baa (sound made by sheep);
#bee INTERJ [DAXFS] :: baa; sound made by a sheep;
#beia INTERJ [XXXFO] :: see!; (comic word as contemptuous echo of "heia");
#bombax INTERJ [XXXFO] :: Splendid! Marvelous!;
#buttuti INTERJ [XEIFS] :: Buttuti!; (exclamation used by Hernici of Latinum at religious festivals);
#buttutti INTERJ [XEIFO] :: Buttuti!; (exclamation used by Hernici of Latinum at religious festivals);
#chaere INTERJ [XXXEO] :: welcome; hail (L+S);
#chere INTERJ [XXXDO] :: welcome; hail (L+S);
#coco INTERJ [XXXFO] :: crow of cock; cock-a-doodle-doo; hen-clucking (L+S);
#cuccuru INTERJ [XXXFO] :: cock-a-doodle-doo!
#cucurru INTERJ [XXXFS] :: cock-a-doodle-doo!
#deurode INTERJ [XXXFO] :: come hither!; (deuro de); (applied to a catamite);
#ecastor INTERJ [XXXDX] :: by Castor (interjection used by women);
#ecca INTERJ [XXXFO] :: Here they (neuter) are!; Behold!, Observe!, Lo!;
#eccam INTERJ [XXXDO] :: Here she/it is!; Behold!, Observe!, Lo!;
#eccas INTERJ [XXXEO] :: Here they (feminine) are!; Behold!, Observe!, Lo!;
#ecce INTERJ [XXXAX] :: behold! see! look! there! here! [ecce eum => here he is];
#eccere INTERJ [XXXDO] :: Here she/it is!; Behold!, Observe!, Lo!; There you are!;
#eccillam INTERJ [XXXEO] :: There she/it is!; Behold!, Observe!, Lo!;
#eccillud INTERJ [XXXFO] :: There it is!; Behold!, Observe!, Lo!;
#eccillum INTERJ [XXXEO] :: There he/it is!; Behold!, Observe!, Lo!;
#eccistam INTERJ [XXXFO] :: There she is!; Behold!, Observe!, Lo!;
#eccum INTERJ [XXXFO] :: Here he/it is!; Behold!, Observe!, Lo!;
#edepol INTERJ [XXXDX] :: by Pollux!;
#ehem INTERJ [XXXEC] :: oho! well well!;
#eheu INTERJ [XXXDX] :: alas! (exclamation of grief/pain/fear);
#ehoi INTERJ [XXXEZ] :: hurrah! (exclamation of happiness);
#ei INTERJ [XXXDX] :: Ah! Woe!, oh dear, alas; (of grief or fear);
#eia INTERJ [XXXBX] :: how now!, Ha, Good, see! (of joy); see!, Quick! (of urgency/astonishment);
#Eli INTERJ [EEQFE] :: My God; [Eli Eli lama sabacthani => My God, my God why hast thou forsaken me];
#Eloi INTERJ [EEQFE] :: My God; (Aramaic);
#em INTERJ [XXXDX] :: there! (of wonder); here!;
#en INTERJ [XXXBX] :: behold! see! lo! here! hey! look at this!;
#eu INTERJ [XXXDX] :: well done! bravo!; splendid! (sometimes ironic);
#eugae INTERJ [XXXDX] :: oh, good! fine! well done! (delight/pleasure/surprise, sometimes ironic);
#euge INTERJ [XXXDX] :: oh, good! fine! well done! (delight/pleasure/surprise, sometimes ironic);
#eugepae INTERJ [XXXEC] :: well done!; (sometimes ironic);
#euhoe INTERJ [XXXDX] :: cry of joy used by the votaries of Bacchus;
#euoeeuhoe INTERJ [XXXEC] :: shout of the Bacchantes;
#ha INTERJ [EXXBT] :: Ah!; (distress/regret/pity, appeal/entreaty, surprise/joy, objection/contempt);
#hahahae INTERJ [EXXES] :: Ha ha!; (laughter, derision);
#hahahe INTERJ [EXXES] :: Ha ha!; (laughter, derision);
#Hallelujah INTERJ [EEQCE] :: Halleluia, cry of joy and praise to God; (praise ye Jehovah);
#hau INTERJ [XXXFS] :: oh! ow! oh dear! goodness gracious! (used by women to express consternation);
#have INTERJ [XXXDX] :: hail!, formal expression of greetings;
#hei INTERJ [XXXDX] :: Ah! Woe!, oh dear, alas; (exclamation expressing anguish, grief or fear);
#heia INTERJ [XXXBX] :: how now!, Ha, Good, see! (of joy); see!, Quick! (of urgency/astonishment);
#Heli INTERJ [EEQFW] :: My God; [~ ~ lemma sabacthani => My God, my God why hast thou forsaken me];
#hem INTERJ [XXXCO] :: what ' s that? (surprise/concern); Ah!/alas! (unhappiness); there/here! (wonder);
#hercle INTERJ [XXXDX] :: By Hercules!; assuredly, indeed;
#hercule INTERJ [XXXDX] :: by Hercules!; assuredly, indeed;
#heu INTERJ [XXXAX] :: oh! ah! alas! (an expression of dismay or pain);
#heus INTERJ [XXXDX] :: hey!, ho!, ho there!, listen!;
#Hosanna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#Hosianna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#hui INTERJ [XXXDX] :: whee!, wow!; sound of surprise or approbation not unlike "whee";
#ilicet INTERJ [XXXCO] :: you may go/off with you; it ' s over; at once; [~ malam crucem => to Hell with];
#Io INTERJ [XXXAO] :: Yo!; Hurrah! (ritual exclamation of strong emotion/joy); Ho!; Look!; Quick!;
#lema INTERJ [EEQFW] :: Eli Eli lama sabacthani/My God, my God why hast thou forsaken me Matthew 27:46;
#lo INTERJ [EXXFP] :: Lo!; (magic word to cure bite of mad dog);
#maranatha INTERJ [DEXEP] :: our Lord cometh; (Aramaic through Greek);
#mecastor INTERJ [XXXDO] :: by Castor!; (oath used by women);
#mehercle INTERJ [XXXDX] :: By Hercules! assuredly, indeed;
#mehercule INTERJ [XXXDX] :: by Hercules! assuredly, indeed;
#mehercules INTERJ [XXXDX] :: by Hercules! assuredly, indeed;
#o INTERJ [XXXAX] :: Oh!;
#oh INTERJ [XXXDX] :: oh! ah!;
#ohe INTERJ [XXXDX] :: hey! hey there!;
#oi INTERJ [XXXEC] :: oh! ah!;
#oiei INTERJ [XXXDS] :: oh dear; (lamentation);
#Osanna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#phy INTERJ [XXXFO] :: pish! tush!; (expression of disgust);
#Pol INTERJ [XXXDX] :: by Pollux; truly; really;
#ridiculum INTERJ [XXXEO] :: the idea/question is absurd/ridiculous!;
#st INTERJ [XXXDX] :: hush! hist!;
#tat INTERJ [BXXFS] :: what! (Plautus);
#triumphe INTERJ [XXXFS] :: triumphant!;
#va INTERJ [DXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);
#vae INTERJ [XXXBX] :: alas, woe, ah; oh dear; (Vae, puto deus fio. - Vespasian); Bah!, Curses!;
#vah INTERJ [XXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);
#vaha INTERJ [BXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);

View File

@@ -0,0 +1,107 @@
#a INTERJ [XXXBO] :: Ah!; (distress/regret/pity, appeal/entreaty, surprise/joy, objection/contempt);
#absit INTERJ [EEXCE] :: "god forbid", "let it be far from the hearts of the faithful";
#aelinon INTERJ [XXXFO] :: exclamation of sorrow; "alas for Linus";
#age INTERJ [XXXCS] :: come!, go to!, well!, all right!; let come;
#agedum INTERJ [XXXCO] :: come!, go to!, well!, all right!;
#agite INTERJ [XXXCQ] :: come!, go to!, well!, all right!;
#ah INTERJ [XXXCO] :: exclamation expressing surprise/irony;
#aha INTERJ [XXXEO] :: exclamation expressing surprise/irony;
#ai INTERJ [XXXFS] :: alas; exclamation expressing grief;
#aisne INTERJ [XXXES] :: indeed? really? is it possible? do you really mean it? (surprise/wonder);
#Alleluia INTERJ [EEQCE] :: Halleluia, cry of joy and praise to God; (praise ye Jehovah);
#apage INTERJ [XXXCO] :: be off!; nonsense!, get away with you!;
#apsit INTERJ [EEXCE] :: "god forbid", "let it be far from the hearts of the faithful";
#atat INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atatae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atatatae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atate INTERJ [XXXFS] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#atattae INTERJ [XXXFO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attat INTERJ [XXXCO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attatae INTERJ [XXXEO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attate INTERJ [XXXCS] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#attattatae INTERJ [XXXEO] :: ah! oh! alas! (expression of sudden enlightenment/surprise/fear/warning);
#au INTERJ [XXXFS] :: oh! ow! oh dear! goodness gracious! (used by women to express consternation);
#ave INTERJ [XXXCO] :: hail!, formal expression of greetings;
#babae INTERJ [CXXEO] :: wow!; exclamation of surprise or amazement;
#be INTERJ [XAXFO] :: baa (sound made by sheep);
#bee INTERJ [DAXFS] :: baa; sound made by a sheep;
#beia INTERJ [XXXFO] :: see!; (comic word as contemptuous echo of "heia");
#bombax INTERJ [XXXFO] :: Splendid! Marvelous!;
#buttuti INTERJ [XEIFS] :: Buttuti!; (exclamation used by Hernici of Latinum at religious festivals);
#buttutti INTERJ [XEIFO] :: Buttuti!; (exclamation used by Hernici of Latinum at religious festivals);
#chaere INTERJ [XXXEO] :: welcome; hail (L+S);
#chere INTERJ [XXXDO] :: welcome; hail (L+S);
#coco INTERJ [XXXFO] :: crow of cock; cock-a-doodle-doo; hen-clucking (L+S);
#cuccuru INTERJ [XXXFO] :: cock-a-doodle-doo!
#cucurru INTERJ [XXXFS] :: cock-a-doodle-doo!
#deurode INTERJ [XXXFO] :: come hither!; (deuro de); (applied to a catamite);
#ecastor INTERJ [XXXDX] :: by Castor (interjection used by women);
#ecca INTERJ [XXXFO] :: Here they (neuter) are!; Behold!, Observe!, Lo!;
#eccam INTERJ [XXXDO] :: Here she/it is!; Behold!, Observe!, Lo!;
#eccas INTERJ [XXXEO] :: Here they (feminine) are!; Behold!, Observe!, Lo!;
#ecce INTERJ [XXXAX] :: behold! see! look! there! here! [ecce eum => here he is];
#eccere INTERJ [XXXDO] :: Here she/it is!; Behold!, Observe!, Lo!; There you are!;
#eccillam INTERJ [XXXEO] :: There she/it is!; Behold!, Observe!, Lo!;
#eccillud INTERJ [XXXFO] :: There it is!; Behold!, Observe!, Lo!;
#eccillum INTERJ [XXXEO] :: There he/it is!; Behold!, Observe!, Lo!;
#eccistam INTERJ [XXXFO] :: There she is!; Behold!, Observe!, Lo!;
#eccum INTERJ [XXXFO] :: Here he/it is!; Behold!, Observe!, Lo!;
#edepol INTERJ [XXXDX] :: by Pollux!;
#ehem INTERJ [XXXEC] :: oho! well well!;
#eheu INTERJ [XXXDX] :: alas! (exclamation of grief/pain/fear);
#ehoi INTERJ [XXXEZ] :: hurrah! (exclamation of happiness);
#ei INTERJ [XXXDX] :: Ah! Woe!, oh dear, alas; (of grief or fear);
#eia INTERJ [XXXBX] :: how now!, Ha, Good, see! (of joy); see!, Quick! (of urgency/astonishment);
#Eli INTERJ [EEQFE] :: My God; [Eli Eli lama sabacthani => My God, my God why hast thou forsaken me];
#Eloi INTERJ [EEQFE] :: My God; (Aramaic);
#em INTERJ [XXXDX] :: there! (of wonder); here!;
#en INTERJ [XXXBX] :: behold! see! lo! here! hey! look at this!;
#eu INTERJ [XXXDX] :: well done! bravo!; splendid! (sometimes ironic);
#eugae INTERJ [XXXDX] :: oh, good! fine! well done! (delight/pleasure/surprise, sometimes ironic);
#euge INTERJ [XXXDX] :: oh, good! fine! well done! (delight/pleasure/surprise, sometimes ironic);
#eugepae INTERJ [XXXEC] :: well done!; (sometimes ironic);
#euhoe INTERJ [XXXDX] :: cry of joy used by the votaries of Bacchus;
#euoeeuhoe INTERJ [XXXEC] :: shout of the Bacchantes;
#ha INTERJ [EXXBT] :: Ah!; (distress/regret/pity, appeal/entreaty, surprise/joy, objection/contempt);
#hahahae INTERJ [EXXES] :: Ha ha!; (laughter, derision);
#hahahe INTERJ [EXXES] :: Ha ha!; (laughter, derision);
#Hallelujah INTERJ [EEQCE] :: Halleluia, cry of joy and praise to God; (praise ye Jehovah);
#hau INTERJ [XXXFS] :: oh! ow! oh dear! goodness gracious! (used by women to express consternation);
#have INTERJ [XXXDX] :: hail!, formal expression of greetings;
#hei INTERJ [XXXDX] :: Ah! Woe!, oh dear, alas; (exclamation expressing anguish, grief or fear);
#heia INTERJ [XXXBX] :: how now!, Ha, Good, see! (of joy); see!, Quick! (of urgency/astonishment);
#Heli INTERJ [EEQFW] :: My God; [~ ~ lemma sabacthani => My God, my God why hast thou forsaken me];
#hem INTERJ [XXXCO] :: what ' s that? (surprise/concern); Ah!/alas! (unhappiness); there/here! (wonder);
#hercle INTERJ [XXXDX] :: By Hercules!; assuredly, indeed;
#hercule INTERJ [XXXDX] :: by Hercules!; assuredly, indeed;
#heu INTERJ [XXXAX] :: oh! ah! alas! (an expression of dismay or pain);
#heus INTERJ [XXXDX] :: hey!, ho!, ho there!, listen!;
#Hosanna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#Hosianna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#hui INTERJ [XXXDX] :: whee!, wow!; sound of surprise or approbation not unlike "whee";
#ilicet INTERJ [XXXCO] :: you may go/off with you; it ' s over; at once; [~ malam crucem => to Hell with];
#Io INTERJ [XXXAO] :: Yo!; Hurrah! (ritual exclamation of strong emotion/joy); Ho!; Look!; Quick!;
#lema INTERJ [EEQFW] :: Eli Eli lama sabacthani/My God, my God why hast thou forsaken me Matthew 27:46;
#lo INTERJ [EXXFP] :: Lo!; (magic word to cure bite of mad dog);
#maranatha INTERJ [DEXEP] :: our Lord cometh; (Aramaic through Greek);
#mecastor INTERJ [XXXDO] :: by Castor!; (oath used by women);
#mehercle INTERJ [XXXDX] :: By Hercules! assuredly, indeed;
#mehercule INTERJ [XXXDX] :: by Hercules! assuredly, indeed;
#mehercules INTERJ [XXXDX] :: by Hercules! assuredly, indeed;
#o INTERJ [XXXAX] :: Oh!;
#oh INTERJ [XXXDX] :: oh! ah!;
#ohe INTERJ [XXXDX] :: hey! hey there!;
#oi INTERJ [XXXEC] :: oh! ah!;
#oiei INTERJ [XXXDS] :: oh dear; (lamentation);
#Osanna INTERJ [DEQEE] :: Hosanna, "God save", a cry of praise (Hebrew);
#phy INTERJ [XXXFO] :: pish! tush!; (expression of disgust);
#Pol INTERJ [XXXDX] :: by Pollux; truly; really;
#qualiter ADV [XXXDX] :: as, just as; in what/which way/state/manner (INTERJ), how;
#ridiculum INTERJ [XXXEO] :: the idea/question is absurd/ridiculous!;
#st INTERJ [XXXDX] :: hush! hist!;
#tat INTERJ [BXXFS] :: what! (Plautus);
#triumphe INTERJ [XXXFS] :: triumphant!;
#va INTERJ [DXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);
#vae INTERJ [XXXBX] :: alas, woe, ah; oh dear; (Vae, puto deus fio. - Vespasian); Bah!, Curses!;
#vah INTERJ [XXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);
#vaha INTERJ [BXXCO] :: Ha!/oh!/ah!; (exclamation of pain/dismay, of contempt/anger, of surprise/joy);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,129 @@
#amb NUM [XXXBO] :: both; two of pair; two considered together, both parties; each of two;
#bes NUM [XXXCO] :: two thirds; [bes alter => one and two thirds];
#biscentum, biscentesimus -a -um, biscenteni -ae -a, biscentie(n)s NUM [XXXCE] :: two hundred;
#bisen NUM [XXXFW] :: twelve each/apiece/times/at a time; by twelves; (twice six);
#centensim NUM [XXXCO] :: one hundredth; (part/in series);
#centensum NUM [BXXEG] :: one hundredth; (part/in series);
#centum, centesimus -a -um, centeni -ae -a, centie(n)s NUM [XXXAO] :: one hundred;
#decem, decimus -a -um, deni -ae -a, decie(n)s NUM [XXXBO] :: ten; (ten men);
#decum NUM [XXXCO] :: tenth; (~ unda/fluctus => 10th wave, of great size); [cum decumo => tenfold];
#des NUM [AXXEO] :: two thirds; [bes alter => one and two thirds];
#ducentensim NUM [BXXEG] :: two hundredth;
#ducentensum NUM [BXXEG] :: two hundredth;
#ducenti -ae -a, ducentesimus -a -um, duceni -ae -a, ducentie(n)s NUM [XXXBX] :: two hundred;
#duo -ae o, secundus -a -um, bini -ae -a, bis NUM [XXXAX] :: two (pl.);
#duodecim, duodecimus -a -um, duodeni -ae -a, duodecie(n)s NUM [XXXAX] :: twelve;
#duodecum NUM [BXXCG] :: twelve;
#duodetriginta, duodetricesimus -a -um, duodetriceni -ae -a, duodetricie(n)s NUM [XXXEX] :: twenty eight;
#duodevicensim NUM [BXXCG] :: eighteen;
#duodevicensum NUM [BXXCG] :: eighteen;
#duodevigensim NUM [BXXFG] :: eighteenth;
#duodevigensum NUM [BXXFG] :: eighteenth;
#duodeviginti, duodevicesimus -a -um, duodeviceni -ae -a, duodevicie(n)s NUM [XXXDX] :: eighteen;
#is, ea, id PRON [XXXAX] :: he/she/it/they (by GENDER/NUMBER); DEMONST: that, he/she/it, they/them;
#mill NUM [XXXAX] :: thousand; a thousand; [mille passuum => thousand paces = a mile];
#mille, millesimus -a -um, milleni -ae -a, milie(n)s NUM [XXXAX] :: thousand; a thousand; [mille passuum => thousand paces = a mile];
#millensim NUM [BXXEG] :: thousandth;
#millensum NUM [BXXEG] :: thousandth;
#multot NUM [XXXCZ] :: many times;
#nonagensim NUM [BXXEG] :: ninetieth;
#nonagensum NUM [BXXEG] :: ninetieth;
#nonaginta, nonagesimus -a -um, nonageni -ae -a, nonagie(n)s NUM [XXXBX] :: ninety;
#nongentensim NUM [BXXEG] :: nine hundredth;
#nongentensum NUM [BXXEG] :: nine hundredth;
#nongenti -ae -a, nongentesimus -a -um, nongeni -ae -a, noningentie(n)s NUM [XXXBX] :: nine hundred;
#novem, nonus -a -um, noveni -ae -a, novie(n)s NUM [XXXBX] :: nine;
#novendecim NUM [XXXDX] :: nineteen;
#octavodecem, octavodecimus -a -um, octavodeni -ae -a, octavidecie(n)s NUM [EXXET] :: eighteen;
#octingentensim NUM [BXXEG] :: eight hundredth;
#octingentensum NUM [BXXEG] :: eight hundredth;
#octingenti -ae -a, octingentesimus -a -um, octingeni -ae -a, octingentie(n)s NUM [XXXBX] :: eight hundred;
#octo, octavus -a -um, octoni -ae -a, octie(n)s NUM [XXXAX] :: eight;
#octodecim NUM [XXXDX] :: eighteen;
#octogensim NUM [BXXEG] :: eightieth;
#octogensum NUM [BXXEG] :: eightieth;
#octoginta, octogesimus -a -um, octogeni -ae -a, octogie(n)s NUM [XXXBX] :: eighty;
#plur NUM [DXXES] :: often, frequently; sometimes; several/many times (Bee);
#plus, pluris N (3rd) N [XXXDX] :: more, too much, more than enough; more than (w/NUM); higher price/value (GEN);
#quadragensim NUM [BXXEG] :: fortieth;
#quadragensum NUM [BXXEG] :: fortieth;
#quadraginta, quadragesimus -a -um, quadrageni -ae -a, quadragie(n)s NUM [XXXBX] :: forty;
#quadrin NUM [BXXEG] :: four each/apiece/times/fold (how many each);
#quadringentensim NUM [BXXEG] :: four hundredth;
#quadringentensum NUM [BXXEG] :: four hundredth;
#quadringenti -ae -a, quadringentesimus -a -um, quadringeni -ae -a, quadringentie(n)s NUM [XXXBX] :: four hundred;
#quartadecem, quartadecimus -a -um, quartadeni -ae -a, quartadecie(n)s NUM [XXXEX] :: fourteen;
#quattor NUM [XXXES] :: four;
#quattuor, quartus -a -um, quaterni -ae -a, - NUM [XXXAO] :: four;
#quattuordecim, -, -, quatterdecie(n)s NUM [XXXCO] :: fourteen; (the 14 front theater rows reserved for equestrian order);
#quatuor NUM [XXXDO] :: four;
#quatuordecim, -, -, quaterdecie(n)s NUM [XXXDS] :: fourteen;
#quinct NUM [BXXAG] :: five;
#quindecim, quindecimus -a -um, quindeci -ae -a, quindecie(n)s NUM [XXXCO] :: fifteen;
#quingentensim NUM [BXXEG] :: five hundredth;
#quingentensum NUM [BXXEG] :: five hundredth;
#quingenti -ae -a, quingentesimus -a -um, quingeni -ae -a, quingentie(n)s NUM [XXXBX] :: five hundred;
#quinquagensim NUM [BXXEG] :: fiftieth;
#quinquagensum NUM [BXXEG] :: fiftieth;
#quinquaginta, quinquagesimus -a -um, quinquageni -ae -a, quinquagie(n)s NUM [XXXBX] :: fifty;
#quinque, quintus -a -um, quini -ae -a, quinquie(n)s NUM [XXXAX] :: five;
#quintadecem, quintadecimus -a -um, quintadeni -ae -a, quintadecie(n)s NUM [FXXET] :: fifteen;
#quotquot NUM [XXXDX] :: however many;
#sedecim, -, -, sedecie(n)s NUM [XXXDX] :: sixteen;
#septem, septimus -a -um, septeni -ae -a, septie(n)s NUM [XXXAX] :: seven;
#septemdecim NUM [XXXEC] :: seventeen;
#septendecim NUM [XXXDX] :: seventeen;
#septim NUM [BXXEG] :: seven;
#septingentensim NUM [BXXEG] :: seven hundredth;
#septingentensum NUM [BXXEG] :: seven hundredth;
#septingenti -ae -a, septingentesimus -a -um, septingeni -ae -a, septingentie(n)s NUM [XXXBX] :: seven hundred;
#septuagensim NUM [BXXEG] :: seventieth;
#septuagensum NUM [BXXEG] :: seventieth;
#septuaginta, septuagesimus -a -um, septuageni -ae -a, septuagie(n)s NUM [XXXBX] :: seventy;
#septum NUM [XXXEG] :: seven; (primarily used in compound words);
#sescentensim NUM [BXXEG] :: six hundredth;
#sescentensum NUM [BXXEG] :: six hundredth;
#sescenti -ae -a, sescentesimus -a -um, sesceni -ae -a, sexcentie(n)s NUM [XXXBX] :: six hundred;
#sesterti NUM [XXXDX] :: two and a half (2 1/2);
#sex, sextus -a -um, seni -ae -a, sexie(n)s NUM [XXXAX] :: six;
#sexagensim NUM [BXXEG] :: sixtieth;
#sexagensum NUM [BXXEG] :: sixtieth;
#sexaginta, sexagesimus -a -um, sexageni -ae -a, sexagie(n)s NUM [XXXBX] :: sixty;
#terci NUM [FXXAM] :: three;
#toc NUM [EXXDX] :: so often, so many times;
#tot NUM [XXXAO] :: as/so often, so many times, such a great number of times; that number of times;
#tot NUM [XXXDX] :: so many, such a number of; as many, so many; such a great number of;
#trecentensim NUM [BXXEG] :: three hundredth;
#trecentensum NUM [BXXEG] :: three hundredth;
#trecenti -ae -a, trecentesimus -a -um, treceni -ae -a, trecentie(n)s NUM [XXXBQ] :: three hundred; (used to denote a large number);
#tredecim, -, -, terdecie(n)s NUM [XXXDX] :: thirteen;
#tres -es -ia, tertius -a -um, terni -ae -a, ter NUM [XXXAX] :: three;
#tricensim NUM [BXXEG] :: thirtieth;
#tricensum NUM [BXXEG] :: thirtieth;
#trigen NUM [DXXEO] :: thirtieth;
#trigensim NUM [DXXEO] :: thirtieth;
#trigesim NUM [XXXES] :: thirty;
#triginta, tricesimus -a -um, triceni -ae -a, tricie(n)s NUM [XXXBX] :: thirty;
#trin NUM [XXXEX] :: three each/apiece/times/fold; triple; three in any case; three at a time;
#tripl NUM [XXXDX] :: threefold, triple; three;
#undecim, undecimus -a -um, undeni -ae -a, undecie(n)s NUM [XXXAX] :: eleven;
#undecum NUM [BXXCG] :: eleven;
#undenonaginta, undenonagesimus -a -um, undenonageni -ae -a, undenonagie(n)s NUM [XXXFS] :: eighty-nine;
#undeoctoginta, undeoctogesimus -a -um, undeoctogeni -ae -a, undeoctogie(n)s NUM [XXXFS] :: seventy-nine;
#undequadraginta, undequadragesimus -a -um, undequadrageni -ae -a, undequadragie(n)s NUM [XXXFS] :: thirty-nine;
#undequinquaginta, undequinquagesimus -a -u, undequinquageni -ae -a, undequinquagie(n)s NUM [XXXFS] :: forty-nine;
#undesexaginta, undesexagesimus -a -um, undesexageni -ae -a, undesexagie(n)s NUM [XXXFS] :: fifty-nine;
#undetricensim NUM [BXXEG] :: twenty ninth;
#undetricensum NUM [BXXEG] :: twenty ninth;
#undetriginta, undetricesimus -a -um, undetriceni -ae -a, undetricie(n)s NUM [XXXEX] :: twenty nine;
#undevicensim NUM [BXXEG] :: nineteenth;
#undevicensum NUM [BXXEG] :: nineteenth;
#undevigensim NUM [BXXFG] :: nineteenth;
#undevigensum NUM [BXXFG] :: nineteenth;
#undeviginti, undevicesimus -a -um, undeviceni -ae -a, undevicie(n)s NUM [XXXDX] :: nineteen;
#unus -a -um, primus -a -um, singuli -ae -a, semel NUM [XXXAX] :: one;
#vicensim NUM [BXXEG] :: twentieth;
#vicensum NUM [BXXEG] :: twentieth;
#vigensim NUM [BXXCG] :: twenty;
#vigensum NUM [BXXBG] :: twenty;
#viginti, vicesimus -a -um, viceni -ae -a, vicie(n)s NUM [XXXAX] :: twenty;

View File

@@ -0,0 +1,12 @@
#quicum PACK [XXXCX] :: (w/-cum) only ABL with whom?, with which?;
#quicumque, quaecumque, quodcumque PACK [XXXCX] :: (w/-cumque) who/whatever, no matter who/what, in any time/way, however small;
#quicunque, quaecunque, quodcunque PACK [XXXCX] :: (w/-cunque) who/whatever, no matter who/what, in any time/way, however small;
#quidam, quaedam, quoddam PACK [XXXCX] :: (w/-dam) certain; as INDEF a certain thing; somebody, one, something;
#quilibet, quaelibet, quodlibet PACK [XXXCX] :: (w/-libet) whatever, whichever, no matter, what you please; any whatever;
#quilibet, quaelibet, quodlibet PACK [XXXCX] :: (w/-libet) whoever/whatever you please; anyone/anything whatever;
#quilubet, quaelubet, quodlubet PACK [XXXCX] :: (w/-lubet) whatever, whichever, no matter, what you please; any whatever;
#quilubet, quaelubet, quodlubet PACK [XXXCX] :: (w/-lubet) whoever/whatever you please; anyone/anything whatever;
#quinam, quaenam, quodnam PACK [XXXCX] :: (w/-nam) who then; who in the world; which, I insist;
#quisnam, quaenam, quidnam PACK INTERR [XXXCX] :: (w/-nam) who?; what?; who then?; who in the world?;
#quisque, quaeque, quodque PACK [XXXCX] :: (w/-que) each, each one; every, everybody, everything (more than 2); whatever;
#quivis, quaevis, quodvis PACK [XXXCX] :: (w/-vis) any whatever; anyone/anything you wish;

View File

@@ -0,0 +1,93 @@
#a PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin/time); after (reference);
#a PREP ACC [XXXCO] :: ante, abb. a.; [in calendar expression a. d. = ante diem => before the day];
#ab PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin/time); after (reference);
#abante PREP ABL [XXXES] :: from before/in front of;
#abs PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin (time); after (reference);
#absque PREP ABL [XXXCO] :: without, apart from, away from; but for; except for; were it not for; (early);
#abusque PREP ABL [XXXCL] :: all the way from; from/since the time of;
#ad PREP ACC [XXXAO] :: to, up to, towards; near, at; until, on, by; almost; according to; about w/NUM;
#adusque PREP ACC [XXXCO] :: all the way/right up to, as far as, to the point of (space/time/number/degree);
#adversum PREP ACC [XXXAO] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#adversus PREP ACC [XXXAO] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#advorsum PREP ACC [BXXAX] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#advorsus PREP ACC [BXXAX] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#ante PREP ACC [XXXAO] :: in front/presence of, in view; before (space/time/degree); over against, facing;
#apsque PREP ABL [XXXCO] :: without, apart from, away from; but for; except for; were it not for; (early);
#apud PREP ACC [XXXAO] :: at, by, near, among; at the house of; before, in the presence/writings/view of;
#aput PREP ACC [XXXAO] :: at, by, near, among; at the house of; before, in presence/writings/view/eyes of;
#callim PREP ACC [AXXBO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#cata PREP ABL [DXXFS] :: by; (in distributed sense); [cata mane mane => morning by morning];
#causa PREP GEN [XXXAO] :: for sake/purpose of (preceded by GEN.), on account/behalf of, with a view to;
#caussa PREP GEN [XXXAO] :: for the sake/purpose of (preceded by GEN), on account/behalf of, with view to;
#circa PREP ACC [XXXAO] :: around, on bounds of; about/near (space/time/numeral); concerning; with;
#circiter PREP ACC [XXXDO] :: about, around, near (space/time/numeral); towards;
#circum PREP ACC [XXXBO] :: around, about, among, near (space/time), in neighborhood of; in circle around;
#cis PREP ACC [XXXCO] :: on/to this/near side of, short of; before, within (time);
#citra PREP ACC [XXXAO] :: on this/near side of, short of; before; below, less than; without regard to;
#clam PREP ABL [XXXEO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#clam PREP ACC [XXXCO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#clanculum PREP ACC [XXXFO] :: without knowledge of, secret from;
#com PREP ABL [AXXAC] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#com PREP ABL [AXXAC] :: |under command/at the head of; having/containing/including; using/by means of;
#contra PREP ACC [XXXAO] :: against, facing, opposite; weighed against; as against; in resistance/reply to;
#contra PREP ACC [XXXAO] :: |contrary to, not in conformance with; the reverse of; otherwise than;
#contra PREP ACC [XXXAO] :: ||towards/up to, in direction of; directly over/level with; to detriment of;
#coram PREP ABL [XXXCO] :: in the presence of, before; (may precede or follow object); personally (L+S);
#cum PREP ABL [XXXAO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#cum PREP ABL [XXXAO] :: |under command/at the head of; having/containing/including; using/by means of;
#de PREP ABL [XXXAO] :: down/away from, from, off; about, of, concerning; according to; with regard to;
#desub PREP ABL [XXXFO] :: below, under; beneath;
#desuper PREP ACC [XXXEO] :: over, above;
#dextra PREP ACC [DXXES] :: on the right of; on the right-hand side of;
#e PREP ABL [XXXAX] :: out of, from; by reason of; according to; because of, as a result of;
#erga PREP ACC [XXXBX] :: towards, opposite (friendly);
#ex PREP ABL [XXXAX] :: out of, from; by reason of; according to; because of, as a result of;
#extra PREP ACC [XXXAX] :: outside of, beyond, without, beside; except;
#fine PREP ABL [XXXDX] :: up to;
#fini PREP ABL [XXXDX] :: up to;
#in PREP ABL [XXXAX] :: in, on, at (space); in accordance with/regard to/the case of; within (time);
#in PREP ACC [XXXAX] :: into; about, in the mist of; according to, after (manner); for; to, among;
#infra PREP ACC [XXXAX] :: below, lower than; later than;
#insuper PREP ACC [XXXBX] :: above, on top; in addition (to); over;
#inter PREP ACC [XXXAX] :: between, among; during; [inter se => to each other, mutually];
#intra PREP ACC [XXXAX] :: within, inside; during; under;
#juxta PREP ACC [XXXBX] :: near, (very) close to, next to; hard by, adjoining; on a par with; like;
#juxtim PREP ACC [XXXDX] :: next to, beside;
#ob PREP ACC [XXXAX] :: on account of, for the sake of, for; instead of; right before;
#palam PREP ABL [XXXDS] :: in presence of;
#penes PREP ACC [XXXDX] :: in the power of, in the hands of (person); belonging to;
#per PREP ACC [XXXAX] :: through (space); during (time); by, by means of;
#pone PREP ACC [XXXDX] :: behind (in local relations) (rare);
#post PREP ACC [XXXAX] :: behind (space), after (time); subordinate to (rank);
#prae PREP ABL [XXXAX] :: before, in front; in view of, because of;
#praeter PREP ACC [XXXAX] :: besides, except, contrary to; beyond (rank), in front of, before; more than;
#praeterquam PREP ACC [XXXDX] :: except, besides, beyond, contrary to;
#pro PREP ABL [XXXAX] :: on behalf of; before; in front/instead of; for; about; according to; as, like;
#prope PREP ACC [XXXAX] :: near;
#propter PREP ACC [XXXAX] :: near; on account of; by means of; because of;
#qum PREP ABL [BXXEO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#qum PREP ABL [BXXEO] :: |under command/at the head of; having/containing/including; using/by means of;
#quom PREP ABL [BXXDO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#quom PREP ABL [BXXDO] :: |under command/at the head of; having/containing/including; using/by means of;
#quum PREP ABL [DXXCS] :: with, together with, at the same time with; under; at; along with, amid;
#secundum PREP ACC [XXXBS] :: after; according to; along/next to, following/immediately after, close behind;
#secus PREP ACC [XXXCO] :: by, beside, alongside; in accordance with;
#sine PREP ABL [XXXAX] :: without; (sometimes after object); lack; [Johannis sine Terra => John Lackland];
#sub PREP ABL [XXXAX] :: under, beneath, behind, at the foot of (rest); within; during, about (time);
#sub PREP ACC [XXXAX] :: under; up to, up under, close to (of motion); until, before, up to, about;
#subter PREP ABL [XXXEO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff); (usu. ACC);
#subter PREP ACC [XXXCO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff);
#super PREP ABL [XXXAX] :: over (space), above, upon, in addition to; during (time); concerning; beyond;
#super PREP ACC [XXXBX] :: upon/on; over, above, about; besides (space); during (time); beyond (degree);
#supra PREP ACC [XXXAX] :: above, beyond; over; more than; in charge of, in authority over;
#supter PREP ABL [XXXEO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff); (usu. ACC);
#supter PREP ACC [XXXCO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff);
#tenus PREP ABL [XXXDX] :: as far as, to the extent of, up to, down to;
#trans PREP ACC [XXXDX] :: across, over; beyond; on the other side; (only local relations);
#uls PREP ACC [XXXDX] :: beyond, on the other side, on that side; more than, besides;
#ultra PREP ACC [XXXDX] :: beyond, on the other side, on that side; more than, besides;
#usque PREP ACC [XXXDX] :: up to (name of town or locality);
#versum PREP ACC [XXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#versus PREP ACC [XXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#vorsum PREP ACC [BXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#vorsus PREP ACC [BXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);

View File

@@ -0,0 +1,94 @@
#a PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin/time); after (reference);
#a PREP ACC [XXXCO] :: ante, abb. a.; [in calendar expression a. d. = ante diem => before the day];
#ab PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin/time); after (reference);
#abante PREP ABL [XXXES] :: from before/in front of;
#abs PREP ABL [XXXAO] :: by (agent), from (departure, cause, remote origin (time); after (reference);
#absque PREP ABL [XXXCO] :: without, apart from, away from; but for; except for; were it not for; (early);
#abusque PREP ABL [XXXCL] :: all the way from; from/since the time of;
#ad PREP ACC [XXXAO] :: to, up to, towards; near, at; until, on, by; almost; according to; about w/NUM;
#adusque PREP ACC [XXXCO] :: all the way/right up to, as far as, to the point of (space/time/number/degree);
#adversum PREP ACC [XXXAO] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#adversus PREP ACC [XXXAO] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#advorsum PREP ACC [BXXAX] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#advorsus PREP ACC [BXXAX] :: facing, opposite, against, towards; contrary to; face to face, in presence of;
#ante PREP ACC [XXXAO] :: in front/presence of, in view; before (space/time/degree); over against, facing;
#apsque PREP ABL [XXXCO] :: without, apart from, away from; but for; except for; were it not for; (early);
#apud PREP ACC [XXXAO] :: at, by, near, among; at the house of; before, in the presence/writings/view of;
#aput PREP ACC [XXXAO] :: at, by, near, among; at the house of; before, in presence/writings/view/eyes of;
#callim PREP ACC [AXXBO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#cata PREP ABL [DXXFS] :: by; (in distributed sense); [cata mane mane => morning by morning];
#causa PREP GEN [XXXAO] :: for sake/purpose of (preceded by GEN.), on account/behalf of, with a view to;
#caussa PREP GEN [XXXAO] :: for the sake/purpose of (preceded by GEN), on account/behalf of, with view to;
#circa PREP ACC [XXXAO] :: around, on bounds of; about/near (space/time/numeral); concerning; with;
#circiter PREP ACC [XXXDO] :: about, around, near (space/time/numeral); towards;
#circum PREP ACC [XXXBO] :: around, about, among, near (space/time), in neighborhood of; in circle around;
#cis PREP ACC [XXXCO] :: on/to this/near side of, short of; before, within (time);
#citra PREP ACC [XXXAO] :: on this/near side of, short of; before; below, less than; without regard to;
#clam PREP ABL [XXXEO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#clam PREP ACC [XXXCO] :: without knowledge of, unknown to; concealed/secret from; (rarely w/ABL);
#clanculum PREP ACC [XXXFO] :: without knowledge of, secret from;
#com PREP ABL [AXXAC] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#com PREP ABL [AXXAC] :: |under command/at the head of; having/containing/including; using/by means of;
#contra PREP ACC [XXXAO] :: against, facing, opposite; weighed against; as against; in resistance/reply to;
#contra PREP ACC [XXXAO] :: |contrary to, not in conformance with; the reverse of; otherwise than;
#contra PREP ACC [XXXAO] :: ||towards/up to, in direction of; directly over/level with; to detriment of;
#coram PREP ABL [XXXCO] :: in the presence of, before; (may precede or follow object); personally (L+S);
#cum PREP ABL [XXXAO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#cum PREP ABL [XXXAO] :: |under command/at the head of; having/containing/including; using/by means of;
#de PREP ABL [XXXAO] :: down/away from, from, off; about, of, concerning; according to; with regard to;
#desub PREP ABL [XXXFO] :: below, under; beneath;
#desuper PREP ACC [XXXEO] :: over, above;
#dextra PREP ACC [DXXES] :: on the right of; on the right-hand side of;
#e PREP ABL [XXXAX] :: out of, from; by reason of; according to; because of, as a result of;
#erga PREP ACC [XXXBX] :: towards, opposite (friendly);
#ex PREP ABL [XXXAX] :: out of, from; by reason of; according to; because of, as a result of;
#extra PREP ACC [XXXAX] :: outside of, beyond, without, beside; except;
#fine PREP ABL [XXXDX] :: up to;
#fini PREP ABL [XXXDX] :: up to;
#in PREP ABL [XXXAX] :: in, on, at (space); in accordance with/regard to/the case of; within (time);
#in PREP ACC [XXXAX] :: into; about, in the mist of; according to, after (manner); for; to, among;
#incircum ADV [XXXFS] :: round about; (L+S calls it PREP);
#infra PREP ACC [XXXAX] :: below, lower than; later than;
#insuper PREP ACC [XXXBX] :: above, on top; in addition (to); over;
#inter PREP ACC [XXXAX] :: between, among; during; [inter se => to each other, mutually];
#intra PREP ACC [XXXAX] :: within, inside; during; under;
#juxta PREP ACC [XXXBX] :: near, (very) close to, next to; hard by, adjoining; on a par with; like;
#juxtim PREP ACC [XXXDX] :: next to, beside;
#ob PREP ACC [XXXAX] :: on account of, for the sake of, for; instead of; right before;
#palam PREP ABL [XXXDS] :: in presence of;
#penes PREP ACC [XXXDX] :: in the power of, in the hands of (person); belonging to;
#per PREP ACC [XXXAX] :: through (space); during (time); by, by means of;
#pone PREP ACC [XXXDX] :: behind (in local relations) (rare);
#post PREP ACC [XXXAX] :: behind (space), after (time); subordinate to (rank);
#prae PREP ABL [XXXAX] :: before, in front; in view of, because of;
#praeter PREP ACC [XXXAX] :: besides, except, contrary to; beyond (rank), in front of, before; more than;
#praeterquam PREP ACC [XXXDX] :: except, besides, beyond, contrary to;
#pro PREP ABL [XXXAX] :: on behalf of; before; in front/instead of; for; about; according to; as, like;
#prope PREP ACC [XXXAX] :: near;
#propter PREP ACC [XXXAX] :: near; on account of; by means of; because of;
#qum PREP ABL [BXXEO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#qum PREP ABL [BXXEO] :: |under command/at the head of; having/containing/including; using/by means of;
#quom PREP ABL [BXXDO] :: with, together/jointly/along/simultaneous with, amid; supporting; attached;
#quom PREP ABL [BXXDO] :: |under command/at the head of; having/containing/including; using/by means of;
#quum PREP ABL [DXXCS] :: with, together with, at the same time with; under; at; along with, amid;
#secundum PREP ACC [XXXBS] :: after; according to; along/next to, following/immediately after, close behind;
#secus PREP ACC [XXXCO] :: by, beside, alongside; in accordance with;
#sine PREP ABL [XXXAX] :: without; (sometimes after object); lack; [Johannis sine Terra => John Lackland];
#sub PREP ABL [XXXAX] :: under, beneath, behind, at the foot of (rest); within; during, about (time);
#sub PREP ACC [XXXAX] :: under; up to, up under, close to (of motion); until, before, up to, about;
#subter PREP ABL [XXXEO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff); (usu. ACC);
#subter PREP ACC [XXXCO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff);
#super PREP ABL [XXXAX] :: over (space), above, upon, in addition to; during (time); concerning; beyond;
#super PREP ACC [XXXBX] :: upon/on; over, above, about; besides (space); during (time); beyond (degree);
#supra PREP ACC [XXXAX] :: above, beyond; over; more than; in charge of, in authority over;
#supter PREP ABL [XXXEO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff); (usu. ACC);
#supter PREP ACC [XXXCO] :: beneath, under (cover/shelter); towards/at base (of wall/cliff);
#tenus PREP ABL [XXXDX] :: as far as, to the extent of, up to, down to;
#trans PREP ACC [XXXDX] :: across, over; beyond; on the other side; (only local relations);
#uls PREP ACC [XXXDX] :: beyond, on the other side, on that side; more than, besides;
#ultra PREP ACC [XXXDX] :: beyond, on the other side, on that side; more than, besides;
#usque PREP ACC [XXXDX] :: up to (name of town or locality);
#versum PREP ACC [XXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#versus PREP ACC [XXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#vorsum PREP ACC [BXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);
#vorsus PREP ACC [BXXCO] :: toward, in the direction of; (placed after ACC); -ward (after name of town);

View File

@@ -0,0 +1,52 @@
#aliqui, aliqua, aliquod PRON [XXXAX] :: any; some;
#aliquis, aliquis, aliquid PRON [XXXAX] :: anyone, anybody, anything; someone, something; one or another;
#chodchod PRON 1 7 ACC S N [EXXFW] :: whatever; everything/anything (which); valuable merchandise (Souter);
#eadem PRON 4 2 ACC P N [XXXBX] :: same, the same, the very same; also; (idem, eadem, idem);
#eadem PRON 4 2 NOM P N [XXXBX] :: same, the same, the very same; also; (idem, eadem, idem);
#eadem PRON 4 2 NOM S F [XXXBX] :: same, the same, the very same; also; (idem, eadem, idem);
#ec PRON 3 1 ACC P N [EXXEW] :: these (pl.); persons/things/conditions present/here/just mentioned; +DEMONS;
#ec PRON 3 1 NOM P N [EXXEW] :: these (pl.); persons/things/conditions present/here/just mentioned; +DEMONS;
#ec PRON 3 1 NOM S F [EXXEW] :: this; person/thing present/just mentioned/in this place; ((h)(a)ec); +DEMONS;
#eccille, eccilla, eccillud PRON [XXXFO] :: that over there;
#ego, mei PRON PERS [XXXAX] :: I, me;
#eodem PRON 4 2 ABL S X [XXXBX] :: same, the same, the very same; also; (idem, eadem, idem);
#eundem PRON 4 2 ACC S M [XXXBX] :: same, the same, the very same; also; (idem, eadem, idem);
#hic, haec, hoc PRON [XXXAX] :: this; these (pl.); (also DEMONST);
#idem, eadem, idem PRON [XXXAX] :: (w/-dem ONLY, idem, eadem, idem) same, the same, the very same, also;
#ille, illa, illud PRON [XXXAX] :: that; those (pl.); also DEMONST; that person/thing; the well known; the former;
#ipse, ipsa, ipsum PRON [XXXAO] :: himself/herself/itself; the very/real/actual one; in person; themselves (pl.);
#isse, issa, issum PRON [XXXDO] :: himself/herself/itself; the very/actual one; (endearment/colloquial of ipse);
#iste, ista, istud PRON [XXXAX] :: that, that of yours, that which you refer to; such;
#istic, istaec, istoc PRON [XXXDX] :: that of yours/mentioned by you/at hand;
#mei (GEN) PRON REFLEX [XXXCX] :: myself;
#nos, nostrum/nostri PRON PERS [XXXAX] :: we (pl.), us;
#olle, olla, ollud PRON [BXXDO] :: that; that person/thing; the well known; the former; those (pl.); (ille);
#quemquem PRON 1 0 ACC S M [XXXCX] :: whomever; every one who; whomever it be; everyone; each;
#qui, quae, qua PRON [XXXAX] :: any; some; someone (preceded by si, nisi, numquid, ne), something, anyone;
#qui, quae, quod PRON [XXXAX] :: which?, what?; what kind of?;
#qui, quae, quod PRON [XXXAX] :: who, which; (relative pronoun);
#quicquam PRON 1 6 ACC S N [XXXCX] :: any; anything; anything whatsoever;
#quicquam PRON 1 6 NOM S N [XXXCX] :: any; anything; anything whatsoever;
#quicquid PRON 1 6 ACC S N [XXXCX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quicquid PRON 1 6 NOM S N [XXXBX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quidquid PRON 1 6 ACC S N [XXXCX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quidquid PRON 1 6 NOM S N [XXXBX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quippiam PRON 1 0 ACC S N [XXXBO] :: some/any one/thing; unspecified thing/person; certain quanity, a bit; at all;
#quippiam PRON 1 0 NOM S N [XXXBO] :: some/any one/thing; unspecified thing/person; certain quanity, a bit; at all;
#quis, quis, quid PRON [XXXAX] :: anyone, anybody, anything; someone, something; one or another;
#quis, quis, quid PRON [XXXAX] :: who?, which one?, what man?, what thing? (type/nature); what kind of; what?;
#quisquis PRON 1 2 NOM S C [XXXBX] :: whoever; every one who; whoever it be; everyone; each;
#quodquod PRON 1 7 ACC S N [XXXCX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quodquod PRON 1 7 NOM S N [XXXBX] :: whatever, whatsoever; everything which; each one; each; everything; anything;
#quoquo PRON 1 0 ABL S X [XXXCX] :: whoever; whatever, whatsoever; every one who; everything which; each one; each;
#seipse, seipsa, seipsum PRON [EXXCE] :: he himself, she herself, it itself; they themselves (pl.);
#semetipse, semetipsa, semetipsum PRON [EXXCE] :: he himself, she herself, it itself; they themselves (pl.); (intensive);
#sui (GEN) PRON REFLEX [XXXCX] :: him/her/it/ones-self; him/her/it; them (selves) (pl.); each other, one another;
#tu, tui PRON PERS [XXXAX] :: you, thee;
#tui (GEN) PRON REFLEX [XXXCX] :: yourself, thyself;
#unicuique PRON 1 0 DAT S X [XXXDW] :: each one;
#uniuscuiusque PRON 1 0 GEN S X [XXXDW] :: each one;
#unumquodque PRON 1 0 ACC S M [XXXDW] :: each one;
#unusquisque PRON 1 0 NOM S M [XXXDW] :: each one;
#vos, vetrum/vetri PRON PERS [XXXCX] :: you (pl.), ye;
#vos, votrum/votri PRON PERS [XXXCX] :: you (pl.), ye;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,164 @@
use strict;
use warnings;
my $wordform = "[\\w()/.\\s-]+" ;
my $comment = "(\\[.*)" ;
my $gender = "(F|M|N|C|X)";
my $vtype = "(TRANS|INTRANS|DEP|SEMIDEP)";
my $case = "(ABL|ACC|GEN|DAT)" ;
my $declension = "\\((1st|2nd|3rd|4th|5th)\\)";
my $interjection = "#($wordform)\\s+INTERJ\\s+$comment";
my $adverb = "#(($wordform,\\s+)*$wordform)\\s+ADV\\s+$comment";
my $adjective = "#(($wordform,\\s+)*$wordform)\\s+ADJ\\s+$comment";
my $conjunction = "#($wordform)\\s+CONJ\\s+$comment";
my $noun = "#(($wordform,\\s+)*$wordform)\\s+N\\s+$gender\\s+$comment";
my $noun2 = "#(($wordform,\\s+)*$wordform)\\s+N\\s+$declension\\s+$gender\\s+$comment";
my $noun3 = "#(($wordform,\\s+)*$wordform)\\s+N\\s+ADJ\\s+$comment";
my $prep = "#($wordform)\\s+PREP\\s+$case\\s+$comment";
my $verb = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$comment";
my $verb2 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$comment";
my $verb3 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$vtype\\s+$comment";
my $verb4 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$vtype\\s+$comment";
my $verb5 = "#(($wordform,\\s+)*$wordform)\\s+V\\s+$declension\\s+$case\\s+$comment";
my $absheader = "abstract DictLatAbs = Cat ** {\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n\tfun";
my $concheader = "concrete DictLat of DictLatAbs = CatLat ** open Prelude,ParadigmsLat in {\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n lin";
my $footer = "}";
open(my $absfh, ">", "DictLatAbs.gf") or die "Can't open > DictLatAbs.gf: $!";
open(my $concfh, ">", "DictLat.gf") or die "Can't open > DictLatAbs.gf: $!";
print $absfh "$absheader\n";
print $concfh "$concheader\n";
while (my $l = <>) {
if ($l =~ /$interjection/)
{
# print "INTERJ Word: $1 -- Comment: $2\n";
my $wf = $1 ;
$wf =~ s/\s$//g;
print $absfh " ".$wf."_Interj : Interj ;\n" ;
print $concfh " ".$wf."_Interj = ss \"$wf\" ; \n";
}
elsif ($l =~ /$adverb/)
{
# print "ADV Word: $1 -- Comment: $3\n";
my $wf = $1 ; # all word forms in one string
my $comment = $3;
my @wfs = split /\s*,\s+/, $1; # word forms split into a list
map { s/\s$// } @wfs;
print $absfh " ".$wfs[0]."_Adv : Adv ;\n" ;
if (@wfs == 1)
{
print $concfh " ".$wfs[0]."_Adv = ss \"".$wfs[0]."\" ;\n";
}
else
{
# Comparison levels are missing so far
print $concfh "-- ".$wfs[0]."_Adv : $wf -- $comment\n";
}
}
elsif ($l =~ /$adjective/)
{
print "ADJ Word: $1 -- Comment: $3\n";
my $wf = $1 ; # all word forms in one string
my $comment = $3;
my @wfs = split /\s*,\s+/, $1; # word forms split into a list
map { s/[\s.]$// } @wfs;
# Word forms contain variations -> Ignore
print $absfh " ".$wfs[0]."_Adj : Adj ;\n" ;
if ($wf =~ /\/\(\)/ )
print $concfh "-- ".$wfs[0]."_Adj : $wf -- $comment\n";
{
}
# Abbreviations -> Ignore
elsif ($wf =~ /abbr\./) {
print $concfh "-- ".$wfs[0]."_Adj : $wf -- $comment\n";
}
# Three word forms -> regular adjective?!?
elsif (@wfs == 3)
{
print $concfh " ".$wfs[0]."_Adj = mkA \"".$wfs[0]."\" ;\n";
}
# Too many word forms
else
{
print $concfh "-- ".$wfs[0]."_Adj : $wf -- $comment\n";
}
}
elsif ($l =~ /$conjunction/)
{
# print "CONJ Word: $1 -- Comment: $2\n";
my $wf = $1 ;
my $comment = $2;
$wf =~ s/\s$//g;
print $absfh " ".$wf."_Conj : Conj ;\n" ;
# We don't get enough information for our grammar from the lexicon
# print $concfh " ".$wf."_Conj = ss \"$wf\" ; \n";
print $concfh "-- ".$wf."_Conj -- $comment\n";
}
elsif ($l =~ /$noun/)
{
my $wf = $1 ;
my $gender = $3;
my $comment = $4;
my @wfs = split /\s*,\s+/, $1; # word forms split into a list
print $absfh " ".$wfs[0]."_N : N ;\n" ;
if ($wf =~ /\/\(\)/ )
{
print $concfh "-- ".$wfs[0]."_N : $wf -- $gender -- $comment\n";
}
elsif ($wf =~ /abb(r?)\./)
{
print $concfh "-- ".$wfs[0]."_N : $wf -- $gender -- $comment\n";
}
else
{
print "N1 Word: $1 -- Gender: $3 -- Comment: $4\n";
}
}
elsif ($l =~ /$noun2/)
{
print "N Word: $1 -- Gender: $4 -- Declension: $3 -- Comment: $5\n";
}
elsif ($l =~ /$noun3/)
{
print "N Word: $1 -- Comment: $3\n";
}
elsif ($l =~ /$prep/)
{
print "PREP Word: $1 -- Case: $2 -- Comment: $3\n";
}
elsif ($l =~ /$verb/)
{
print "V Word: $1 -- Comment: $3\n";
}
elsif ($l =~ /$verb2/)
{
print "V Word: $1 -- Declension: $3 -- Comment: $4\n";
}
elsif ($l =~ /$verb3/)
{
print "V Word: $1 -- VType: $3 -- Comment: $4\n";
}
elsif ($l =~ /$verb4/)
{
print "V Word: $1 -- Declension: $3 -- VType: $4 -- Comment: $5\n";
}
elsif ($l =~ /$verb5/)
{
print "V Word: $1 -- Declension: $3 -- Case: $4 -- Comment: $5\n";
}
else
{
print "MISSING: $l\n";
}
}
print $absfh "$footer\n";
print $concfh "$footer\n";
close($absfh);
close($concfh);

BIN
src/latin/doc/LO_CH-GU.eps Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,362 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Beamer Presentation
% LaTeX Template
% Version 1.0 (10/11/12)
%
% This template has been downloaded from:
% http://www.LaTeXTemplates.com
%
% License:
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----------------------------------------------------------------------------------------
% PACKAGES AND THEMES
%----------------------------------------------------------------------------------------
%\documentclass[12pt]{beamer}
%\documentclass{beamer}
\documentclass[compress,table]{beamer} % compresses the navigation bar on top
\mode<presentation> {
% The Beamer class comes with a number of default slide themes
% which change the colors and layouts of slides. Below this is a list
% of all the themes, uncomment each in turn to see what they look like.
% best themes (ordered by preference)
\usetheme{Madrid} % has no navigation overview per slide
%\usetheme{Boadilla}% has no navigation overview per slide
%\usetheme{Warsaw} % navigation on top, title and author below
%\usetheme{PaloAlto} % nav at side, title and author also at side
%\usetheme{Berkeley}
%\usetheme{Szeged}
%\usetheme{Copenhagen}
%\usetheme{Luebeck}
%\usetheme{Malmoe}
%\usetheme{Bergen}
%\usetheme{CambridgeUS}
%\usetheme{AnnArbor}
%\usetheme{Marburg}
% not so nice themes
%\usetheme{default}
%\usetheme{Antibes}
%\usetheme{Berlin}
%\usetheme{Darmstadt}
%\usetheme{Dresden}
%\usetheme{Frankfurt}
%\usetheme{Goettingen}
%\usetheme{Hannover}
%\usetheme{Ilmenau}
%\usetheme{JuanLesPins}
%\usetheme{Montpellier}
%\usetheme{Pittsburgh}
%\usetheme{Rochester}
%\usetheme{Singapore}
% As well as themes, the Beamer class has a number of color themes
% for any slide theme. Uncomment each of these in turn to see how it
% changes the colors of your current slide theme.
\usecolortheme{dolphin}
%\usecolortheme{beaver}
%\usecolortheme{whale}
%\usecolortheme{lily}
%\usecolortheme{orchid}
%\usecolortheme{rose}
%\usecolortheme{seahorse}
%\usecolortheme{albatross}
%\usecolortheme{beetle}
%\usecolortheme{crane}
%\usecolortheme{dove}
%\usecolortheme{fly}
%\usecolortheme{seagull}
%\usecolortheme{wolverine}
}
%\setbeamertemplate{footline} % To remove the footer line in all slides uncomment this line
%\setbeamertemplate{footline}[page number] % To replace the footer line in all slides with a simple slide count uncomment this line
%\setbeamertemplate{navigation symbols}{} % To remove the navigation symbols from the bottom of all slides uncomment this line
\setbeamertemplate{headline}{} % removes the top bar
%\setbeamertemplate{enumerate items}[circle]
%\setbeamertemplate{enumerate items}[square]
\setbeamertemplate{enumerate items}[default]
\newcommand{\nologo}{\setbeamertemplate{logo}{}}
\usepackage{graphicx} % Allows including images
\usepackage{booktabs} % Allows the use of \toprule, \midrule and \bottomrule in tables
\usepackage{ulem} % needed for \sout (strike-out text)
\usepackage{hyperref} % can be used to create links to labels
\usepackage{appendixnumberbeamer} % use appendix, to avoid counting backup slides
\usepackage{multirow} % needed for \multirow{}{}{}
\usepackage{listings}
\lstdefinelanguage{gf}
{
morekeywords={abstract, flags, cat, fun, incomplete, concrete, of, open, in, lincat, lin, resource, param, oper, variants, table, interface, instance, def, data, lindef, printname,},
sensitive=false,
morecomment=[l]{-{}-},
morestring=[b]",
stringstyle={\textit}
}
\lstset{language=gf,captionpos=b,numbers=none, numberstyle=\tiny, numbersep=5pt, basicstyle=\footnotesize\ttfamily, escapeinside={\%*}{*)},}
%----------------------------------------------------------------------------------------
% TITLE PAGE
%----------------------------------------------------------------------------------------
% The short title appears at the bottom of every slide, the full title is only on the title page
\title[Latin grammar]{Implementation of a Latin Grammar in Grammatical Framework}
\author[Herbert Lange]{Herbert Lange\inst{1}}
\institute[University of Gothenburg]{
\begin{columns}
\begin{column}{5.5cm}
\centering
\inst{1} Computer Science and Engineering\\University of Gothenburg and Chalmers University of Technology\\Gothenburg, Sweden
\textit{herbert.lange@cse.gu.se}
\end{column}
\end{columns}
}
\date[DATeCH 2017]{DATeCH 2017, Göttingen, June 1st-2nd} % CPSS
\logo{\includegraphics[width=0.5\textwidth]{LO_CH-GU.eps}}
\begin{document}
\begin{frame}
\titlepage % Print the title page as the first slide
\end{frame}
\begin{frame}{Overview} % Table of contents slide, comment this block out to remove it
%% Throughout your presentation, if you choose to use \section{} and \subsection{} commands, these will automatically be printed on this slide as an overview of your presentation
\tableofcontents%[hideallsubsections]%[pausesections]
\end{frame}
\section{Background}
\subsection{Latin}
\begin{frame}{Latin}
\begin{itemize}
\item Indo-European language
\item development almost from 240 b.c. to the beginning
of the 20th century (and in some fields still continues)
\item Usual focus on classic period (from the first public speeches of M. Tullius Cicero (ca.
80 b.c. to ca. 117 a.d.)
\item Strong inflectional and synthetic language
\item Rather free word order (but strong tendencies within certain text domains and time periods, also not all combinations seem to be acceptable)
\end{itemize}
\end{frame}
%% {\nologo
%% \begin{frame}
%% \includegraphics[width=\textwidth]{Life-of-Brian-Latin-2}
%% \end{frame}
%% }
\subsection{Grammatical Framework}
\begin{frame}{Grammatical Framework}
\begin{itemize}
\item Modern grammar formalism based on type theory and inspired by functional programming languages (especially Haskell)
\item Variant of context-free grammars extended by so called tables and records
\item Expressivity equivalent to Parallel Multiple Context-Free Grammars (PMCFG) (mildly context-sensitive)
\item Separation in Abstract and Concrete Syntax
\item Open Source
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Example}
\begin{lstlisting}
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Abl | Voc ;
param Gen = Masc | Fem | Neutr ;
lincat N = { s : Number => Case => Str ; g : Gender } ;
lin
man_N = {
s = table {
Sg => table {
Nom => "vir" ; Acc => "virum " ; Gen => "viri" ;
Dat => "viro" ; Abl => "viro" ; Voc => "vir" } ;
Pl => table {
Nom => "viri" ; Acc => "viros" ; Gen => "virorum" ;
Dat => "viris" ; Abl => "viris" ; Voc => "viri" ; }
} ;
g = Masc
}
\end{lstlisting}
% Here I should come up with a minimal example of a grammar with tables and records
\end{frame}
\subsection{Resource Grammar Library}
\begin{frame}{Resource Grammar Library}
\begin{itemize}
\item Grammarians equivalent to a Programming Languages standard library
\item Common basis for multilingual applications (and machine translation)
\item Also Open Source, and this grammar is part of it
\end{itemize}
\end{frame}
\section{Grammar}
\begin{frame}{General Concept}
\begin{itemize}
\item Originally: Translate information from a standard (school) grammar book into a computerized form
\item Implement the RGL abstract syntax
\item Now: Application-specific resources especially for language learning
\item Constituent grammar not dependency grammar (not as cool but conversion between GF trees and UD is possible)
\end{itemize}
\end{frame}
\subsection{Lexicon}
\begin{frame}{Lexicon}
\begin{itemize}
\item Basic Lexicon with ca 350 entries
\item Contains mostly base forms, uses morphological rules to generate the whole paradigms
\item Main problem: modern concepts (e.g. refrigerator) and homonyms (e.g. bank)
\item Use of web-based and collaborative resources (e.g. Latin Wikipedia, Wiktionary)
\item Work in progress: Adopt other lexical resources
\end{itemize}
\end{frame}
\subsection{Morphology}
\begin{frame}{Morphology}
\begin{itemize}
\item Strongly inflectional but quite regular morphology
\item Use as little information as possible to generate the whole paradigm (smart paradigms)
\item Several inflection classes for different lexical categories
\item Use tables for word forms depending on grammatical features
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\begin{table}
\resizebox{\textwidth}{!}{
\begin{tabular}{l|l|l|l}
Word class & Inherent & Parametric & No. of Inflection classes\\
\hline
Noun & Gender & Number, Case & 5\\
Adjective & & Degree, Gender, Number, Case & 3\\
Verb (active) & & Anteriority, Tense, Number, Person & 4 regular, 4 deponent \\
Determiner & Number & Gender, Case \\
\end{tabular}}
\end{table}
\begin{table}[h]
{\small
\begin{tabular}{l|l}
Feature & Values \\
\hline
Gender & Feminine, Masculine, Neuter \\
Number & Singular, Plural \\
Case & Nominative, Genitive, Dative, Accusative, Ablative, Vocative\\
Degree & Positive, Comparative, Superlative \\
Anteriority & Anterior, Simultaneous \\
Tense & Present Indicative, Present Subjunctive, Imperfect Indicative, \\
& Imperfect Subjunctive, Future Indicative, Future Subjunctive\\
Person & 1, 2, 3 \\
\end{tabular}}
\end{table}
\end{frame}
\subsection{Syntax}
\begin{frame}{Syntax}
\begin{itemize}
\item Syntax rules use basic and smaller parts to assemble larger parts up to the sentence level
\item Challenge: Free word order
\item Decision what parts can be completely assembled at what point (and what has to be kept apart)
\item Use records to keep parts of a phrase separate
\item Postpone decision on word order as long as possible
\end{itemize}
\end{frame}
\section{Results}
\begin{frame}{Results}
\begin{itemize}
\item Comprehensive Latin morphology
\item Implemented about 1/3 of the RGL syntactic functions (but some of them are rather obscure)
\item Already usable in applications
\item Future: Adding rules as they are needed and large-scale evaluation
\end{itemize}
\end{frame}
\section{Applications}
\begin{frame}{Applications}
\begin{itemize}
\item Our main focus: Language learning\\
Grammar-based and gamified computer-aided language learning application for beginner's level
\item Other possible applications in Digital Humanities\\
Giving access to cultural heritage e.g. with a translation app for epigraphs
\end{itemize}
\end{frame}
\begin{frame}
{\huge
Thanks for your attention \\[3em]
\pause
Questions? \\[2em]
}
Source:\\ \url{wwww.grammaticalframework.org} and \url{https://github.com/daherb/GF-latin}
\end{frame}
% backup slides
\appendix
%% {\nologo
%% \begin{frame}
%% \begin{center} \includegraphics[scale=0.5]{delirant-isti-romani} \end{center}
%% \end{frame}
%% }
{\nologo
\begin{frame}[fragile]
\begin{lstlisting}[basicstyle=\tiny\ttfamily]
noun : Str -> Noun = \lexform ->
case lexform of {
- - noun1, noun2us/um/er, noun4 and noun5 are the functions for the different
- - declension classes. The 2nd class is split in three subclasses
_ + "a" => noun1 lexform ;
_ + "us" => noun2us lexform ;
_ + "um" => noun2um lexform ;
- - "Predef.tk n word" removes a suffix of length n from word
_ + ( "er" | "ir" ) => noun2er lexform ( (Predef.tk 2 lexform) + "ri" ) ;
_ + "u" => noun4u lexform ;
_ + "es" => noun5 lexform ;
- - Predef.error stops with a given error message
_ => Predef.error ("3rd declinsion cannot be applied " ++
"to just one noun form " ++ lexform)
} ;
\end{lstlisting}
\end{frame}
}
{\nologo
\begin{frame}[fragile]
\begin{lstlisting}[basicstyle=\tiny\ttfamily]
mkClause : NounPhrase -> VerbPhrase -> Clause = \np,vp -> {
s = \\tense,anter,pol,vqf,order => case order of {
SVO => np.s ! Nom ++ negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ;
VSO => negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ++ vp.obj ;
VOS => negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ++ np.s ! Nom ;
OSV => vp.obj ++ np.s ! Nom ++ negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ;
OVS => vp.obj ++ negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ;
SOV => np.s ! Nom ++ vp.obj ++ negation pol ++ vp.compl ! Ag np.g np.n Nom ++ vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf
}
} ;
\end{lstlisting}
\end{frame}
}
\end{document}

BIN
src/latin/doc/folien.pdf Normal file

Binary file not shown.

227
src/latin/doc/folien.tex Normal file
View File

@@ -0,0 +1,227 @@
%\documentclass[handout]{beamer}
\documentclass{beamer}
%\usetheme{Singapore} % anderes Layout
%\usetheme{Antibes} % anderes Layout
%\usecolortheme{lily}
\usetheme{Antibes}
\usecolortheme{beaver}
\setbeamertemplate{footline}[frame number]
\usepackage{color}
\usepackage{german}
\usepackage{latexsym,amssymb}
\usepackage{amsmath} % für begin{cases} ... \end{cases}
%\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage{algorithm}
%\usepackage{algorithmicx}
%\usepackage{algpseudocode}
\usepackage{multicol}
\usepackage{graphicx}
\usepackage{fontspec}
\setbeamertemplate{footline}[frame number]
\parindent0pt
\parskip1.2ex
\def\nat{{\mathbb N}}
\def\bool{{\mathbb B}}
\def\real{{\mathbb R}}
\title[Implementierung einer Lateingrammatik]{Implementierung einer Lateingrammatik im Grammatical Framework \\ \quad \\ \large Kolloquium Computerlinguistisches Arbeiten SS 2013 }
\author{Herbert Lange}
\date{\today}
\begin{document}
\frame{\titlepage}
\section*{Überblick}
\subsection*{Inhalt}
\begin{frame}{Inhalt}
%\begin{multicols}{2}
\tableofcontents
%\end{multicols}
\end{frame}
\section{Einführung}
\subsection{Das Grammatical Framework}
\begin{frame}[fragile]{Das Grammatical Framework}
\begin{itemize}
\item Mächtigkeit äquivalent zu PMCFG (Parallel Multiple Context-Free Grammars)
$\rightarrow$ zwischen mild und voll kontextsensitiv
\item Trennung von abstrakter und konkreter Syntax
\item Verschiedene API-Ebenen und Einbindungsmöglichkeiten (u.a. Java, JavaScript)
\end{itemize}
\end{frame}
\subsection{Die Ressource Grammar Library}
\begin{frame}{Die Ressource Grammar Library}
\begin{itemize}
\item Minimaler Satz gemeinsamer Bestandteile verschiedener Sprachen (Beispielvokabular, Wort-/Satzarten, Syntaxregeln)
\item ca. 38 Sprachen voll oder teilweise umgesetzt
\item ca. 43 geschlossene Kategorien (Determiner, ...) und Phrasentypen
\item ca. 22 offene Kategorien (Nomen, Verben, Adjektive, ...)
\end{itemize}
\end{frame}
\begin{frame}
\begin{block}{}
{\scriptsize\ttfamily
%> i alltenses/LangGer.gfo \\
% linking ... OK \\
% Languages: LangGer \\
% 47884 msec \\
Lang> p ''der Mann sieht die Frau'' \\
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN man\_N)) (ComplSlash (SlashV2a see\_V2) (DetCN (DetQuant DefArt NumSg) (UseN woman\_N)))))) NoVoc
}
\end{block}
{\tiny
\begin{center}
\begin{tabular}{|l|l|l|l|}
\hline
Funktion & Typ & Argumente & Übersetzung\\
\hline
PhrUtt & Phr & (PConj) Utt (Voc) & der Mann sieht die Frau \\
NoPConj & PConj & & (Keine Konjunktion) \\
UttS & Utt & S & der Mann sieht die Frau \\
UseCl & S & (Temp) (Pol) Cl & der Mann sieht die Frau \\
TTAnt & Temp & Tense Ant & (Tempus und Aspekt) \\
TPres & Tense & & (Präsens) \\
ASimul & Ant & & (Gleichzeitigkeit) \\
PPos & Pol & & (Positive Aussage) \\
PredVP & Cl & NP VP & der Mann sehen die Frau \\
DetCN & NP & Det CN & der Mann \\
DetQuant & Det & Quant Num & der \\
DefArt & Quant & & der \\
NumSg & Num & & (Singular) \\
UseN & CN & N & Mann \\
man\_N & N & & Mann \\
ComplSlash & VP & VPSlash NP & sehen die Frau \\
%SlashV2a & VPSlash & V2 & sehen \\
%see\_V2 & V2 & & sehen \\
\multicolumn{4}{|c|}{...} \\
NoVoc & Voc & & (Keine Anrede) \\
\hline
\end{tabular}
\end{center}
}
\end{frame}
\subsection{Die Lateinische Sprache}
\begin{frame}[fragile]{Die Lateinische Sprache}
Teil der indogermanischen Sprachfamilie $\rightarrow$ Ähnlichkeiten zu germanischen Sprachen so wie dem Griechischen \\
\begin{center}
\begin{tabular}{|l|l|l|}
\hline
lateinisch & griechisch & deutsch \\
\hline
pater & patér & Vater \\
ager & agrós & Acker \\
trēs & treĩs & drei \\
decem & déka & zehn \\
est & estí & ist \\
\hline
\end{tabular}
\end{center}
Ursprünglich Sprache der Bewohner der mittelitalienischen Region Latium
\end{frame}
\begin{frame}{Sprachliche Besonderheiten}
\begin{itemize}
\item Sehr freie Satzstellung $\rightarrow$ aber meist Verwendung von Subjekt-Objekt-Verb
\item Flektierende Sprache mit synthetischer Syntax (Abl. abs. und AcI)
\begin{itemize}
\item Augusto regente pax erat in toto imperio romano $\rightarrow$ Als/weil Augustus regierte, herrschte im ganzen römischen Reich Frieden.
\item Imperatorem venire audit $\rightarrow$ Er hört, dass der Imperator kommt.
\end{itemize}
\item Ablativ und Vokativ als eigene Fälle
\item Fehlen von Artikel
\end{itemize}
\end{frame}
\section{Umsetzung}
\begin{frame}{Umsetzung}
\begin{itemize}
\item Lexikon der RGL
\item Morphologie der RGL
\item Syntax der RGL
\item Optional: rein sprachspezifische Konstrukte
\end{itemize}
\end{frame}
\subsection{Lexikon}
\begin{frame}{Lexikon}
\begin{itemize}
\item Ca. 400 vorgegebene englische Wörter aus allen möglichen Wortarten und verschiedenen Bereichen
\item Keine Klärung von Ambiguitäten (z.B. bank) $\rightarrow$ willkürliche Wahl der Übersetzung
\item Viele moderne Begriffe (Auto, Eisenbahn, Computer, Fernseher) $\rightarrow$ Übersetzung mit Hilfe der Wikipedia
\item Begriffe ohne auffindbare Übersetzung (ein-/ausschalten) $\rightarrow$ Wahl eines nahe liegenden Wortes (accendere/exstinguere)
\item Manche Differenzierungen nicht in jeder Sprache möglich
\end{itemize}
\end{frame}
\begin{frame}{}
\begin{block}{Beispiel}
{\scriptsize\ttfamily
blue\_A = mkA ( variants { ''caeruleus'' ; ''caerulus'' } ) ; -- 3 L... \\
boat\_N = mkN ''navicula'' ; -- -ae f. L... \\
book\_N = mkN ''liber'' ''libri'' masculine ; -- Ranta; -bri m. L... \\
boot\_N = mkN ''calceus'' ; -- -i m. L... \\
boss\_N = mkN ''dux'' ''ducis'' ( variants { feminine ; masculine } ) ; -- ducis m./f. L... \\
boy\_N = mkN ''puer'' ''pueri'' masculine ; -- -eri m. L... \\
bread\_N = ( variants { (mkN ''panis'' ''panis'' masculine ) ; mkN ''pane'' } ) ; -- -is m./n. L... \\
break\_V2 = mkV2 (mkV ''rumpo'' ''rupi'' ''ruptum'' ''rumpere'') ; -- Ranta; 3 L...
}
\end{block}
\end{frame}
\subsection{Morphologie}
\begin{frame}{Morphologie}
\begin{itemize}
\item Einteilung in vier Gruppen: Nomina (Substantive, Adjektive, Pronomina, Numeralia), Verben, Partikel (Adverbien, Präpositionen, Konjunktionen), Interjektionen. Es gibt keine Artikel
\item Nomina und Verben werden flektiert, Partikel und Interjektionen werden nicht flektiert
\item Fünf Nomendeklinationen, drei Adjektivdeklinationen, Adjektivkomparation, Adverbbildung, vier Verbkonjugationen, Deponentia
\end{itemize}
\end{frame}
\begin{frame}{Smart Paradigms}
Pattern Matching um für ein Wort aus möglichst wenig Formen das Paradigma zu bestimmen
\begin{block}{Beispiel}
{\scriptsize\ttfamily
noun : Str -> Noun = \textbackslash verbum -> \\
case verbum of \{ \\
\_ + ''a'' => noun1 verbum ; \\
\_ + ''us'' => noun2us verbum ; \\
\_ + ''um'' => noun2um verbum ; \\
\_ + ''er'' => noun2er verbum ; \\
\_ + ''u'' => noun4u verbum ; \\
\_ + ''es'' => noun5 verbum ; \\
\_ => noun3 verbum \\
\} ;
}
\end{block}
\end{frame}
\subsection{Syntax}
\begin{frame}{Syntax}
\begin{itemize}
\item Problem: Freie Wortstellung im Satz $\rightarrow$ Variationen erhöhen die Komplexität exponentiell
\item Zunächst: Beschränkung auf SOV-Wortstellung (Subjekt-Objekt-Verb)
\item Später: Suche nach performanten Implementierungsmöglichkeiten für beschränkte oder volle Variation
\end{itemize}
\end{frame}
\subsection{Ausblick}
\begin{frame}{Ausblick}
\begin{itemize}
\item Anbinden eines größeres Lexikons
\item Integration in eine Weboberfläche oder eine Android-App
\item Anwendung in der Lehre (Translation Quiz)
\end{itemize}
\end{frame}
\section{Abschluss}
\begin{frame}{Zusammenfassung}
\begin{itemize}
\item Lexikon mit ca. 400 teils modernen Wörtern
\item Morphologie mit Smart Paradigms
\item Syntax mit möglichst freier Wortstellung
\end{itemize}
\end{frame}
\begin{frame}{Literatur}
\begin{itemize}
\item Bayer, Karl u. Lindauer, Josef: Lateinische Grammatik, C.C. Buchners Verlag, Bamberg 1994
\item Leuman, M./Hofmann, J.B./ Szantyr, A.: Lateinische Grammatik. Auf der Grundlage des Werkes von Friedrich Stolz und Joseph Hermann Schmalz; Band 2: Lateinische Syntax und Stilistik, C.H. Beck'sche Verlagsbuchhandlung, München 1972
\item Ranta, Aarne: Grammatical Framework. Programming with Multilingual Grammars, CSLI Publications, Stanford 2011
\item Ranta, Aarne: Grammatical Framework Tutorial, http://www.grammaticalframework.org/doc/tutorial/gf-tutorial.html 2010
\end{itemize}
\end{frame}
\end{document}

Binary file not shown.

View File

@@ -0,0 +1,101 @@
@inproceedings{BAMMAN2006,
author = {Bamman, David and Crane, Gregory},
title = {The Design and Use of a Latin Dependency Treebank},
journal = {Procedings of the TLT},
year = {2006},
pages = {67-78},
editor = {Hajic, Jan and Nivre, Joakim},
booktitle = {Proceedings of the Fifth International Treebanks and Linguistic Theories Conference},
organization = {Institute of Formal and Applied Linguistics, Faculty of Mathematics and Physics, Charles University},
url = {http://hdl.handle.net/10427/42684},
address = {Prag}
}
@book{BAYER-LINDAUER1994,
title = {Lateinische Grammatik},
editor = {Bayer, Karl and Lindauer, Josef},
publisher = {C.C. Buchners Verlag, J. Lindauer Verlag, R. Oldenburg Verlag},
year = {1994},
city = {Bamberg, M"unchen},
edition = {2. Auflage, auf der Grundlage der Lateinischen Schulgrammatik von Landgraf-Leitschuh neu bearbeitet}
}
@book{HOPCROFT1979,
author = {Hopcroft, John E. and Ullman, Jeffrey D.},
title = {Introduction to Automata Theory, Languages and Computation},
publisher = {Addison-Wesley Publishing Company},
year = {1979},
city = {Reading MA, Menlo Park CA, London, Amsterdam, Don Mills ON, Sydney}
}
@book{LANGENSCHEIDT1981,
title = {Langenscheidts Schulw"orterbuch Lateinisch},
subtitle = {Lateinisch-Deutsch Deutsch-Latein},
edition = {14. Auflage},
editor = {Pertsch, {\relax Dr.} Erich and Lange-Kowal, {\relax Dr.} Ernst Erwin},
publisher = {Langenscheidt},
year = {1981},
city = {Berlin, M"uenchen, Wien, Z"urich}
}
@book{METZLER2004,
publisher = {Directmedia},
title = {Metzler Lexikon Sprache},
year = {2004},
city = {Berlin},
editor = {Gl"uck, Helmut},
series = {Digitale Bibliothek},
number = {34},
edition = {2. Auflage}
}
@book{MUELLER-LANCE2006,
author = {M"uller-Lanc\'e, Johannes},
title = {Latein f"ur Romanisten},
publisher = {Gunter Narr Verlag},
city = {T"ubingen},
year = {2006},
subtitle = {Ein Lehr- und Arbeitsbuch},
edition = {1. Auflage}
}
@book{NEUE1897,
author = {Neue, Friedrich},
title = {Formenlehre der lateinischen Sprache},
publisher = {S. Calvary & Co.},
year = {1897},
city = {Berlin},
volume = {Band 3},
subtitle = {Das Verb},
edition = {3. sehr vermehrte Auflage}
}
@book{PONS2012,
title = {Sch"ulerw"orterbuch Latein},
editor = {Dralle, Anette and Federking, Walther and Vetter, Gregor},
publisher = {PONS GmbH},
year = {2012},
city = {Stuttgart},
subtitle = {Latein-Deutsch und Deutsch-Latein},
edition = {1. Auflage}
}
@book{RANTA2011,
author = {Ranta, Aarne},
title = {Grammatical Framework},
publisher = {CSLL Studies in Computational Linguistics},
year = {2011},
subtitle = {Programming with Multilingual Grammars},
city = {Stanford, California}
}
@book{SCHOENING2008,
author = {Sch"oning, Uwe},
title = {Theoretische Intormatik - kurz gefasst},
publisher = {Spektrum Akademischer Verlag},
year = {2008},
city = {Heidelberg},
edition = {5. Auflage}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,56 @@
diff --git a/lib/src/latin/AdjectiveLat.gf b/lib/src/latin/AdjectiveLat.gf
index 9b0f345..7aa096a 100644
--- a/lib/src/latin/AdjectiveLat.gf
+++ b/lib/src/latin/AdjectiveLat.gf
@@ -1,39 +1,45 @@
concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
lin
- PositA a = a ;
+ PositA a = -- A -> AP
+ {
+ s = table { Ag g n c => a.s ! Posit ! Ag g n c } ;
+ };
{-
ComparA a np = {
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
isPre = False
} ;
-- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 a np = {
s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
isPre = False
} ;
ReflA2 a = {
s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
isPre = False
} ;
SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ;
isPre = False
} ;
-}
- AdAP ada ap = {
- s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c ;
- isPre = ap.isPre
- } ;
+ -- AdAP ada ap = {
+ -- s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c ;
+ -- isPre = ap.isPre
+ -- } ;
--- UseA2 a = a ;
+ UseA2 a = -- A2 -> AP
+ {
+ s = table { Ag g n c => a.s ! Posit ! Ag g n c } ;
+ } ;
}

View File

@@ -0,0 +1,28 @@
diff --git a/lib/src/latin/AdverbLat.gf b/lib/src/latin/AdverbLat.gf
index b959ab8..d3cb693 100644
--- a/lib/src/latin/AdverbLat.gf
+++ b/lib/src/latin/AdverbLat.gf
@@ -1,21 +1,21 @@
concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude in {
- lin
+-- lin
-- PositAdvAdj a = {s = a.s ! AAdv} ;
-- ComparAdvAdj cadv a np = {
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom
-- } ;
-- ComparAdvAdjS cadv a s = {
-- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
-- } ;
- PrepNP prep np = {s = appPrep prep np.s} ;
+-- PrepNP prep np = {s = appPrep prep np.s} ;
-- AdAdv = cc2 ;
--
-- SubjS = cc2 ;
-----b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
--
-- AdnCAdv cadv = {s = cadv.s ++ "than"} ;
--
}

View File

@@ -0,0 +1,13 @@
diff --git a/lib/src/latin/AllLat.gf b/lib/src/latin/AllLat.gf
index 79f9117..902c652 100644
--- a/lib/src/latin/AllLat.gf
+++ b/lib/src/latin/AllLat.gf
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:prelude
concrete AllLat of AllLatAbs =
- LangLat
--- ExtraLat
+ LangLat,
+ ExtraLat
** {} ;

View File

@@ -0,0 +1,13 @@
diff --git a/lib/src/latin/AllLatAbs.gf b/lib/src/latin/AllLatAbs.gf
index 7b7af3f..ba468a1 100644
--- a/lib/src/latin/AllLatAbs.gf
+++ b/lib/src/latin/AllLatAbs.gf
@@ -1 +1,7 @@
-abstract AllLatAbs = Lang ;
+--# -path=.:../abstract:../common:prelude
+
+abstract AllLatAbs =
+ Lang,
+ IrregLatAbs-[can_VV,go_V],
+ ExtraLatAbs
+ ** {} ;

View File

@@ -0,0 +1,130 @@
diff --git a/lib/src/latin/CatLat.gf b/lib/src/latin/CatLat.gf
index 8d85714..af48f02 100644
--- a/lib/src/latin/CatLat.gf
+++ b/lib/src/latin/CatLat.gf
@@ -1,88 +1,91 @@
concrete CatLat of Cat = CommonX ** open ResLat, Prelude in {
flags optimize=all_subs ;
lincat
---- Tensed/Untensed
--
--- S = {s : Str} ;
--- QS = {s : QForm => Str} ;
+ S = {s : Str} ;
+ QS = {s : QForm => Str} ;
-- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts
-- SSlash = {s : Str ; c2 : Str} ;
--
---- Sentence
--
- Cl = {s : VAnter => VTense => Polarity => Str} ;
+ Cl = { s : Tense => Anteriority => Polarity => Order => Str } ;
-- ClSlash = {
--- s : ResLat.Tense => Anteriority => CPolarity => Order => Str ;
+-- s : ResLat.Tense => Anteriority => Polarity => Order => Str ;
-- c2 : Str
-- } ;
--- Imp = {s : CPolarity => ImpForm => Str} ;
+ Imp = {s : Polarity => ImpForm => Str} ;
--
---- Question
--
--- QCl = {s : ResLat.Tense => Anteriority => CPolarity => QForm => Str} ;
--- IP = {s : Case => Str ; n : Number} ;
--- IComp = {s : Str} ;
--- IDet = {s : Str ; n : Number} ;
--- IQuant = {s : Number => Str} ;
+ QCl = {s : ResLat.Tense => Anteriority => Polarity => QForm => Str} ;
+ IP = {s : Case => Str ; n : Number} ;
+ IComp = {s : Str} ;
+ IDet = Determiner ; --{s : Str ; n : Number} ;
+ IQuant = {s : Agr => Str} ;
--
---- Relative
--
-- RCl = {
-- s : ResLat.Tense => Anteriority => CPolarity => Agr => Str ;
-- c : Case
-- } ;
-- RP = {s : RCase => Str ; a : RAgr} ;
--
---- Verb
--
- VP = ResLat.VP ;
- VPSlash = ResLat.VP ** {c2 : Preposition} ;
- Comp = {s : Gender => Number => Case => Str} ;
+ VP = ResLat.VerbPhrase ;
+ VPSlash = VP ** {c2 : Preposition} ;
+ Comp = {s : Agr => Str} ;
--
---- Adjective
--
- AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
+-- AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
+ AP =
+ {
+ s : Agr => Str ;
+-- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns
+ } ;
--
---- Noun
--
- CN = {s : Number => Case => Str ; g : Gender} ;
- NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
+ CN = ResLat.CommonNoun ;
+ NP = ResLat.NounPhrase ;
+ Pron = ResLat.Pronoun ;
Det = Determiner ;
--- Predet, Ord = {s : Str} ;
+ Predet, Ord = {s : Str} ;
Num = {s : Gender => Case => Str ; n : Number} ;
-- Card = {s : Str ; n : Number} ;
Quant = Quantifier ;
--
---- Numeral
--
-- Numeral = {s : CardOrd => Str ; n : Number} ;
Digits = {s : Str ; unit : Unit} ;
--
---- Structural
--
Conj = {s1,s2 : Str ; n : Number} ;
--- Subj = {s : Str} ;
- Prep = {s : Str ; c : Case} ;
+ Subj = {s : Str} ;
+ Prep = ResLat.Preposition ;
--
---- Open lexical classes, e.g. Lexicon
- V = Verb ;
- V2 = Verb ** {c : Preposition} ;
--- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
--- V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;
--- V3 = Verb ** {c2, c3 : Str} ;
--- VV = {s : VVForm => Str ; isAux : Bool} ;
--- V2V = Verb ** {c2 : Str ; isAux : Bool} ;
---
- A = Adjective ** {isPre : Bool} ;
--- A2 = {s : AForm => Str ; c2 : Str} ;
---
+ V, VS, VQ, VA = ResLat.Verb ; -- = {s : VForm => Str} ;
+ V2, V2A, V2Q, V2S = Verb ** {c : Prep } ;
+ V3 = Verb ** {c2, c3 : Prep} ;
+ VV = ResLat.VV ;
+ V2V = Verb ** {c2 : Str ; isAux : Bool} ;
+
+ A = Adjective ;
+
N = Noun ;
--- N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
--- N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Str} ;
- PN = {s : Case => Str ; g : Gender} ;
---
+ N2 = Noun ** { c : Prep } ;
+ N3 = Noun ** { c : Prep ; c2 : Prep } ;
+ PN = Noun ;
+ A2 = Adjective ** { c : Prep} ;
}

View File

@@ -0,0 +1,82 @@
diff --git a/lib/src/latin/ConjunctionLat.gf b/lib/src/latin/ConjunctionLat.gf
index a857eef..125767d 100644
--- a/lib/src/latin/ConjunctionLat.gf
+++ b/lib/src/latin/ConjunctionLat.gf
@@ -1,60 +1,57 @@
---concrete ConjunctionLat of Conjunction =
--- CatLat ** open ResLat, Coordination, Prelude in {
+concrete ConjunctionLat of Conjunction =
+ CatLat ** open ResLat, StructuralLat, Coordination, Prelude in {
--
-- flags optimize=all_subs ;
--
--- lin
+ lin
--
--- ConjS = conjunctDistrSS ;
+ ConjS = conjunctDistrSS ;
--
--- ConjAdv = conjunctDistrSS ;
+ ConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
--
--- ConjAP conj ss = conjunctDistrTable Agr conj ss ** {
--- isPre = ss.isPre
--- } ;
+ ConjAP conj ss = conjunctDistrTable Agr conj ss ;
--
--{---b
--
-- ConjS = conjunctSS ;
-- DConjS = conjunctDistrSS ;
--
-- ConjAdv = conjunctSS ;
-- DConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
--
--- ConjAP conj ss = conjunctTable Agr conj ss ** {
--- isPre = ss.isPre
--- } ;
+-- ConjAP conj ss = conjunctTable Agr conj ss ;
+--
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
---}
--
---- These fun's are generated from the list cat's.
--
-- BaseS = twoSS ;
-- ConsS = consrSS comma ;
--- BaseAdv = twoSS ;
--- ConsAdv = consrSS comma ;
+ BaseAdv = twoSS ;
+ ConsAdv = consrSS "et" ;
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
--- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
--- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
+ BaseAP x y = lin A ( twoTable Agr x y ) ;
+ ConsAP xs x = lin A ( consrTable Agr and_Conj.s2 xs x );
--
--- lincat
--- [S] = {s1,s2 : Str} ;
--- [Adv] = {s1,s2 : Str} ;
+ lincat
+ [S] = {s1,s2 : Str} ;
+ [Adv] = {s1,s2 : Str} ;
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
--- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
+ [AP] = {s1,s2 : Agr => Str } ;
--
---}
+}

View File

@@ -0,0 +1,16 @@
diff --git a/lib/src/latin/ExtraLat.gf b/lib/src/latin/ExtraLat.gf
index 9dad2f9..e6c8728 100644
--- a/lib/src/latin/ExtraLat.gf
+++ b/lib/src/latin/ExtraLat.gf
@@ -1,3 +1,11 @@
concrete ExtraLat of ExtraLatAbs = CatLat **
open ResLat, Coordination, Prelude in {
+ lin
+ UsePronNonDrop p = -- Pron -> NP
+ {
+ g = p.g ;
+ n = p.n ;
+ p = p.p ;
+ s = p.pers ! PronNonDrop ! PronRefl ;
+ } ;
}

View File

@@ -0,0 +1,11 @@
diff --git a/lib/src/latin/ExtraLatAbs.gf b/lib/src/latin/ExtraLatAbs.gf
new file mode 100644
index 0000000..f2d1729
--- /dev/null
+++ b/lib/src/latin/ExtraLatAbs.gf
@@ -0,0 +1,5 @@
+abstract ExtraLatAbs = Extra ** {
+ fun
+ UsePronNonDrop : Pron -> NP ;
+
+}

View File

@@ -0,0 +1,26 @@
diff --git a/lib/src/latin/GrammarLat.gf b/lib/src/latin/GrammarLat.gf
index efa7f69..09966e9 100644
--- a/lib/src/latin/GrammarLat.gf
+++ b/lib/src/latin/GrammarLat.gf
@@ -1,19 +1,18 @@
--# -path=.:../abstract:../common:prelude
concrete GrammarLat of Grammar =
NounLat,
VerbLat,
AdjectiveLat,
AdverbLat,
NumeralLat,
SentenceLat,
-- QuestionLat,
-- RelativeLat,
-- ConjunctionLat,
--- PhraseLat,
+ PhraseLat,
TextX,
- StructuralLat,
+ StructuralLat
-- IdiomLat
- TenseX
** {
} ;

View File

@@ -0,0 +1,641 @@
diff --git a/lib/src/latin/IrregLat.gf b/lib/src/latin/IrregLat.gf
index 20657f0..2c3cb65 100644
--- a/lib/src/latin/IrregLat.gf
+++ b/lib/src/latin/IrregLat.gf
@@ -1,181 +1,458 @@
-----# -path=.:prelude:../abstract:../common
---
---concrete IrregLat of IrregLatAbs = CatLat ** open ParadigmsLat in {
+--# -path=.:prelude:../abstract:../common
+
+concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat in {
--
--flags optimize=values ;
--
--- lin
--- awake_V = irregV "awake" "awoke" "awoken" ;
--- bear_V = irregV "bear" "bore" "born" ;
--- beat_V = irregV "beat" "beat" "beat" ;
--- become_V = irregV "become" "became" "become" ;
--- begin_V = irregV "begin" "began" "begun" ;
--- bend_V = irregV "bend" "bent" "bent" ;
--- beset_V = irregV "beset" "beset" "beset" ;
--- bet_V = irregDuplV "bet" "bet" "bet" ;
--- bid_V = irregDuplV "bid" (variants {"bid" ; "bade"}) (variants {"bid" ; "bidden"}) ;
--- bind_V = irregV "bind" "bound" "bound" ;
--- bite_V = irregV "bite" "bit" "bitten" ;
--- bleed_V = irregV "bleed" "bled" "bled" ;
--- blow_V = irregV "blow" "blew" "blown" ;
--- break_V = irregV "break" "broke" "broken" ;
--- breed_V = irregV "breed" "bred" "bred" ;
--- bring_V = irregV "bring" "brought" "brought" ;
--- broadcast_V = irregV "broadcast" "broadcast" "broadcast" ;
--- build_V = irregV "build" "built" "built" ;
--- burn_V = irregV "burn" (variants {"burned" ; "burnt"}) (variants {"burned" ; "burnt"}) ;
--- burst_V = irregV "burst" "burst" "burst" ;
--- buy_V = irregV "buy" "bought" "bought" ;
--- cast_V = irregV "cast" "cast" "cast" ;
--- catch_V = irregV "catch" "caught" "caught" ;
--- choose_V = irregV "choose" "chose" "chosen" ;
--- cling_V = irregV "cling" "clung" "clung" ;
--- come_V = irregV "come" "came" "come" ;
--- cost_V = irregV "cost" "cost" "cost" ;
--- creep_V = irregV "creep" "crept" "crept" ;
--- cut_V = irregDuplV "cut" "cut" "cut" ;
--- deal_V = irregV "deal" "dealt" "dealt" ;
--- dig_V = irregDuplV "dig" "dug" "dug" ;
--- dive_V = irregV "dive" (variants {"dived" ; "dove"}) "dived" ;
--- do_V = mk5V "do" "does" "did" "done" "doing" ;
--- draw_V = irregV "draw" "drew" "drawn" ;
--- dream_V = irregV "dream" (variants {"dreamed" ; "dreamt"}) (variants {"dreamed" ; "dreamt"}) ;
--- drive_V = irregV "drive" "drove" "driven" ;
--- drink_V = irregV "drink" "drank" "drunk" ;
--- eat_V = irregV "eat" "ate" "eaten" ;
--- fall_V = irregV "fall" "fell" "fallen" ;
--- feed_V = irregV "feed" "fed" "fed" ;
--- feel_V = irregV "feel" "felt" "felt" ;
--- fight_V = irregV "fight" "fought" "fought" ;
--- find_V = irregV "find" "found" "found" ;
--- fit_V = irregDuplV "fit" "fit" "fit" ;
--- flee_V = irregV "flee" "fled" "fled" ;
--- fling_V = irregV "fling" "flung" "flung" ;
--- fly_V = irregV "fly" "flew" "flown" ;
--- forbid_V = irregDuplV "forbid" "forbade" "forbidden" ;
--- forget_V = irregDuplV "forget" "forgot" "forgotten" ;
--- forgive_V = irregV "forgive" "forgave" "forgiven" ;
--- forsake_V = irregV "forsake" "forsook" "forsaken" ;
--- freeze_V = irregV "freeze" "froze" "frozen" ;
--- get_V = irregDuplV "get" "got" "gotten" ;
--- give_V = irregV "give" "gave" "given" ;
--- go_V = mk5V "go" "goes" "went" "gone" "going" ;
--- grind_V = irregV "grind" "ground" "ground" ;
--- grow_V = irregV "grow" "grew" "grown" ;
--- hang_V = irregV "hang" "hung" "hung" ;
--- have_V = mk5V "have" "has" "had" "had" "having" ;
--- hear_V = irregV "hear" "heard" "heard" ;
--- hide_V = irregV "hide" "hid" "hidden" ;
--- hit_V = irregDuplV "hit" "hit" "hit" ;
--- hold_V = irregV "hold" "held" "held" ;
--- hurt_V = irregV "hurt" "hurt" "hurt" ;
--- keep_V = irregV "keep" "kept" "kept" ;
--- kneel_V = irregV "kneel" "knelt" "knelt" ;
--- knit_V = irregDuplV "knit" "knit" "knit" ;
--- know_V = irregV "know" "knew" "know" ;
--- lay_V = irregV "lay" "laid" "laid" ;
--- lead_V = irregV "lead" "led" "led" ;
--- leap_V = irregV "leap" (variants {"leaped" ; "lept"}) (variants {"leaped" ; "lept"}) ;
--- learn_V = irregV "learn" (variants {"learned" ; "learnt"}) (variants {"learned" ; "learnt"}) ;
--- leave_V = irregV "leave" "left" "left" ;
--- lend_V = irregV "lend" "lent" "lent" ;
--- let_V = irregDuplV "let" "let" "let" ;
--- lie_V = irregV "lie" "lay" "lain" ;
--- light_V = irregV "light" (variants {"lighted" ; "lit"}) "lighted" ;
--- lose_V = irregV "lose" "lost" "lost" ;
--- make_V = irregV "make" "made" "made" ;
--- mean_V = irregV "mean" "meant" "meant" ;
--- meet_V = irregV "meet" "met" "met" ;
--- misspell_V = irregV "misspell" (variants {"misspelled" ; "misspelt"}) (variants {"misspelled" ; "misspelt"}) ;
--- mistake_V = irregV "mistake" "mistook" "mistaken" ;
--- mow_V = irregV "mow" "mowed" (variants {"mowed" ; "mown"}) ;
--- overcome_V = irregV "overcome" "overcame" "overcome" ;
--- overdo_V = mk5V "overdo" "overdoes" "overdid" "overdone" "overdoing" ;
--- overtake_V = irregV "overtake" "overtook" "overtaken" ;
--- overthrow_V = irregV "overthrow" "overthrew" "overthrown" ;
--- pay_V = irregV "pay" "paid" "paid" ;
--- plead_V = irregV "plead" "pled" "pled" ;
--- prove_V = irregV "prove" "proved" (variants {"proved" ; "proven"}) ;
--- put_V = irregDuplV "put" "put" "put" ;
--- quit_V = irregDuplV "quit" "quit" "quit" ;
--- read_V = irregV "read" "read" "read" ;
--- rid_V = irregDuplV "rid" "rid" "rid" ;
--- ride_V = irregV "ride" "rode" "ridden" ;
--- ring_V = irregV "ring" "rang" "rung" ;
--- rise_V = irregV "rise" "rose" "risen" ;
--- run_V = irregDuplV "run" "ran" "run" ;
--- saw_V = irregV "saw" "sawed" (variants {"sawed" ; "sawn"}) ;
--- say_V = irregV "say" "said" "said" ;
--- see_V = irregV "see" "saw" "seen" ;
--- seek_V = irregV "seek" "sought" "sought" ;
--- sell_V = irregV "sell" "sold" "sold" ;
--- send_V = irregV "send" "sent" "sent" ;
--- set_V = irregDuplV "set" "set" "set" ;
--- sew_V = irregV "sew" "sewed" (variants {"sewed" ; "sewn"}) ;
--- shake_V = irregV "shake" "shook" "shaken" ;
--- shave_V = irregV "shave" "shaved" (variants {"shaved" ; "shaven"}) ;
--- shear_V = irregV "shear" "shore" "shorn" ;
--- shed_V = irregDuplV "shed" "shed" "shed" ;
--- shine_V = irregV "shine" "shone" "shone" ;
--- shoe_V = irregV "shoe" "shoed" (variants {"shoed" ; "shod"}) ;
--- shoot_V = irregV "shoot" "shot" "shot" ;
--- show_V = irregV "show" "showed" (variants {"showed" ; "shown"}) ;
--- shrink_V = irregV "shrink" "shrank" "shrunk" ;
--- shut_V = irregDuplV "shut" "shut" "shut" ;
--- sing_V = irregV "sing" "sang" "sung" ;
--- sink_V = irregV "sink" "sank" "sunk" ;
--- sit_V = irregDuplV "sit" "sat" "sat" ;
--- sleep_V = irregV "sleep" "slept" "slept" ;
--- slay_V = irregV "slay" "slew" "slain" ;
--- slide_V = irregV "slide" "slid" "slid" ;
--- sling_V = irregV "sling" "slung" "slung" ;
--- slit_V = irregDuplV "slit" "slit" "slit" ;
--- smite_V = irregV "smite" "smote" "smitten" ;
--- sow_V = irregV "sow" "sowed" (variants {"sowed" ; "sown"}) ;
--- speak_V = irregV "speak" "spoke" "spoken" ;
--- speed_V = irregV "speed" "sped" "sped" ;
--- spend_V = irregV "spend" "spent" "spent" ;
--- spill_V = irregV "spill" (variants {"spilled" ; "spilt"}) (variants {"spilled" ; "spilt"}) ;
--- spin_V = irregDuplV "spin" "spun" "spun" ;
--- spit_V = irregDuplV "spit" (variants {"spit" ; "spat"}) "spit" ;
--- split_V = irregDuplV "split" "split" "split" ;
--- spread_V = irregV "spread" "spread" "spread" ;
--- spring_V = irregV "spring" (variants {"sprang" ; "sprung"}) "sprung" ;
--- stand_V = irregV "stand" "stood" "stood" ;
--- steal_V = irregV "steal" "stole" "stolen" ;
--- stick_V = irregV "stick" "stuck" "stuck" ;
--- sting_V = irregV "sting" "stung" "stung" ;
--- stink_V = irregV "stink" "stank" "stunk" ;
--- stride_V = irregV "stride" "strod" "stridden" ;
--- strike_V = irregV "strike" "struck" "struck" ;
--- string_V = irregV "string" "strung" "strung" ;
--- strive_V = irregV "strive" "strove" "striven" ;
--- swear_V = irregV "swear" "swore" "sworn" ;
--- sweep_V = irregV "sweep" "swept" "swept" ;
--- swell_V = irregV "swell" "swelled" (variants {"swelled" ; "swollen"}) ;
--- swim_V = irregDuplV "swim" "swam" "swum" ;
--- swing_V = irregV "swing" "swung" "swung" ;
--- take_V = irregV "take" "took" "taken" ;
--- teach_V = irregV "teach" "taught" "taught" ;
--- tear_V = irregV "tear" "tore" "torn" ;
--- tell_V = irregV "tell" "told" "told" ;
--- think_V = irregV "think" "thought" "thought" ;
--- thrive_V = irregV "thrive" (variants {"thrived" ; "throve"}) "thrived" ;
--- throw_V = irregV "throw" "threw" "thrown" ;
--- thrust_V = irregV "thrust" "thrust" "thrust" ;
--- tread_V = irregV "tread" "trod" "trodden" ;
--- understand_V = irregV "understand" "understood" "understood" ;
--- uphold_V = irregV "uphold" "upheld" "upheld" ;
--- upset_V = irregDuplV "upset" "upset" "upset" ;
--- wake_V = irregV "wake" "woke" "woken" ;
--- wear_V = irregV "wear" "wore" "worn" ;
--- weave_V = irregV "weave" (variants {"weaved" ; "wove"}) (variants {"weaved" ; "woven"}) ;
--- wed_V = irregDuplV "wed" "wed" "wed" ;
--- weep_V = irregV "weep" "wept" "wept" ;
--- wind_V = irregV "wind" "wound" "wound" ;
--- win_V = irregDuplV "win" "won" "won" ;
--- withhold_V = irregV "withhold" "withheld" "withheld" ;
--- withstand_V = irregV "withstand" "withstood" "withstood" ;
--- wring_V = irregV "wring" "wrung" "wrung" ;
--- write_V = irregV "write" "wrote" "written" ;
---}
+
+ lin
+ science_N = pluralN (mkN "litera" ) ; -- only pl. (Langenscheidts)
+
+ -- Bayer-Lindauer 93 1
+ be_V =
+ let
+ pres_stem = "s" ;
+ pres_ind_base = "su" ;
+ pres_conj_base = "si" ;
+ impf_ind_base = "era" ;
+ impf_conj_base = "esse" ;
+ fut_I_base = "eri" ;
+ imp_base = "es" ;
+ perf_stem = "fu" ;
+ perf_ind_base = "fu" ;
+ perf_conj_base = "fueri" ;
+ pqperf_ind_base = "fuera" ;
+ pqperf_conj_base = "fuisse" ;
+ fut_II_base = "fueri" ;
+ part_stem = "fut" ;
+ verb = mkVerb "esse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
+ imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) n p =>
+ table Number [ table Person [ "sum" ; "es" ; "est" ] ;
+ table Person [ "sumus" ; "estis" ; "sunt" ]
+ ] ! n ! p ;
+ a => verb.act ! a
+ };
+ pass =
+ \\_ => "######" ; -- no passive forms
+ inf =
+ verb.inf ;
+ imp =
+ table {
+ VImp1 Sg => "es" ;
+ VImp1 Pl => "este" ;
+ VImp2 Pl P2 => "estote" ;
+ a => verb.imp ! a
+ } ;
+ sup =
+ \\_ => "######" ; -- no supin forms
+ ger =
+ \\_ => "######" ; -- no gerund forms
+ geriv =
+ \\_ => "######" ; -- no gerundive forms
+ part = table {
+ VActFut =>
+ verb.part ! VActFut ;
+ VActPres =>
+ \\_ => "######" ; -- no such participle
+ VPassPerf =>
+ \\_ => "######" -- no such participle
+ }
+ } ;
+
+ -- Bayer-Lindauer 93 2.2
+ can_VV =
+ let
+ pres_stem = "pos" ;
+ pres_ind_base = "pos" ;
+ pres_conj_base = "possi" ;
+ impf_ind_base = "potera" ;
+ impf_conj_base = "posse" ;
+ fut_I_base = "poteri" ;
+ imp_base = "" ;
+ perf_stem = "potu" ;
+ perf_ind_base = "potu" ;
+ perf_conj_base = "potueri" ;
+ pqperf_ind_base = "potuera" ;
+ pqperf_conj_base = "potuisse" ;
+ fut_II_base = "potueri" ;
+ part_stem = "" ;
+ verb = mkVerb "posse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
+ imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) n p =>
+ table Number [ table Person [ "possum" ; "potes" ; "potest" ] ;
+ table Person [ "possumus" ; "potestis" ; "possunt" ]
+ ] ! n ! p ;
+ a => verb.act ! a
+ } ;
+ pass =
+ \\_ => "######" ; -- no passive forms
+ inf =
+ table {
+ VInfActFut _ => "######" ;
+ a => verb.inf ! a
+ } ;
+ imp =
+ \\_ => "######" ;
+ sup =
+ \\_ => "######" ;
+ ger =
+ \\_ => "######" ;
+ geriv =
+ \\_ => "######" ;
+ part = table {
+ VActFut =>
+ \\_ => "######" ; -- no such participle
+ VActPres =>
+ \\_ => "######" ; -- no such participle
+ VPassPerf =>
+ \\_ => "######" -- no such participle
+ } ;
+ isAux = False
+ };
+
+ -- Bayer-Lindauer 94
+ bring_V =
+ let
+ pres_stem = "fer" ;
+ pres_ind_base = "fer" ;
+ pres_conj_base = "fera" ;
+ impf_ind_base = "fereba" ;
+ impf_conj_base = "ferre" ;
+ fut_I_base = "fere" ;
+ imp_base = "fer" ;
+ perf_stem = "tul" ;
+ perf_ind_base = "tul" ;
+ perf_conj_base = "tuleri" ;
+ pqperf_ind_base = "tulera" ;
+ pqperf_conj_base = "tulisse" ;
+ fut_II_base = "tuleri" ;
+ part_stem = "lat" ;
+ verb = mkVerb "ferre" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
+ imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) n p =>
+ table Number [ table Person [ "fero" ; "fers" ; "fert" ] ;
+ table Person [ "ferimus" ; "fertis" ; "ferunt" ]
+ ] ! n ! p ;
+ a => verb.act ! a
+ } ;
+ pass =
+ table {
+ VPass (VPres VInd) n p =>
+ table Number [ table Person [ "feror" ; "ferris" ; "fertur" ] ;
+ table Person [ "ferimur" ; "ferimini" ; "feruntur" ]
+ ] ! n ! p ;
+ a => verb.pass ! a
+ } ;
+ inf =
+ verb.inf ;
+ imp =
+ table {
+ VImp1 n => table Number [ "fer" ; "ferte" ] ! n ;
+ VImp2 Sg ( P2 | P3 ) => "ferto" ;
+ VImp2 Pl P2 => "fertote" ;
+ a => verb.imp ! a
+ } ;
+ sup =
+ verb.sup ;
+ ger =
+ verb.ger ;
+ geriv =
+ verb.geriv ;
+ part = verb.part ;
+ };
+
+ -- Bayer-Lindauer 95
+ want_V =
+ let
+ pres_stem = "vel" ;
+ pres_ind_base = "vol" ;
+ pres_conj_base = "veli" ;
+ impf_ind_base = "voleba" ;
+ impf_conj_base = "volle" ;
+ fut_I_base = "vole" ;
+ imp_base = "" ;
+ perf_stem = "volu" ;
+ perf_ind_base = "volu" ;
+ perf_conj_base = "volueri" ;
+ pqperf_ind_base = "voluera" ;
+ pqperf_conj_base = "voluisse" ;
+ fut_II_base = "volueri" ;
+ part_stem = "volet" ;
+ verb = mkVerb "velle" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
+ imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) n p =>
+ table Number [ table Person [ "volo" ; "vis" ; "vult" ] ;
+ table Person [ "volumus" ; "vultis" ; "volunt" ]
+ ] ! n ! p ;
+ a => verb.act ! a
+ } ;
+ pass =
+ \\_ => "######" ;
+ ger =
+ verb.ger ;
+ geriv =
+ verb.geriv ;
+ imp =
+ \\_ => "######" ;
+ inf =
+ verb.inf ;
+ part = table {
+ VActFut =>
+ \\_ => "######" ;
+ VActPres =>
+ verb.part ! VActPres ;
+ VPassPerf =>
+ \\_ => "######"
+ } ;
+ sup =
+ verb.sup ;
+ } ;
+
+ -- Bayer-Lindauer 96 1
+ go_V =
+ let
+ pres_stem = "i" ;
+ pres_ind_base = "i" ;
+ pres_conj_base = "ea" ;
+ impf_ind_base = "iba" ;
+ impf_conj_base = "ire" ;
+ fut_I_base = "ibi" ;
+ imp_base = "i" ;
+ perf_stem = "i" ;
+ perf_ind_base = "i" ;
+ perf_conj_base = "ieri" ;
+ pqperf_ind_base = "iera" ;
+ pqperf_conj_base = "isse" ;
+ fut_II_base = "ieri" ;
+ part_stem = "it" ;
+ verb = mkVerb "ire" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base
+ imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) n p =>
+ table Number [ table Person [ "eo" ; "is" ; "it" ] ;
+ table Person [ "imus" ; "itis" ; "eunt" ]
+ ] ! n ! p ;
+ VAct VAnt (VPres VInd) Sg P2 => "isti" ;
+ VAct VAnt (VPres VInd) Pl P2 => "istis" ;
+ a => verb.act ! a
+ } ;
+ pass =
+ \\_ => "######"; -- no passive forms
+ ger =
+ table VGerund [ "eundum" ; "eundi" ; "eundo" ; "eundo" ] ;
+ geriv =
+ verb.geriv ;
+ imp =
+ table {
+ VImp2 Pl P3 => "eunto" ;
+ a => verb.imp ! a
+ } ;
+ inf =
+ table {
+ VInfActPerf _ => "isse" ;
+ a =>verb.inf ! a
+ };
+ part = table {
+ VActFut =>
+ verb.part ! VActFut ;
+ VActPres =>
+ table {
+ Ag ( Fem | Masc ) n c =>
+ ( mkNoun ( "iens" ) ( "euntem" ) ( "euntis" )
+ ( "eunti" ) ( "eunte" ) ( "iens" )
+ ( "euntes" ) ( "euntes" ) ( "euntium" )
+ ( "euntibus" )
+ Masc ).s ! n ! c ;
+ Ag Neutr n c =>
+ ( mkNoun ( "iens" ) ( "iens" ) ( "euntis" )
+ ( "eunti" ) ( "eunte" ) ( "iens" )
+ ( "euntia" ) ( "euntia" ) ( "euntium" )
+ ( "euntibus" )
+ Masc ).s ! n ! c
+ } ;
+ VPassPerf =>
+ \\_ => "######" -- no such participle
+ } ;
+ sup =
+ \\_ => "######" -- really no such form?
+ } ;
+
+ -- Bayer-Lindauer 97
+ become_V =
+ let
+ pres_stem = "fi" ;
+ pres_ind_base = "fi" ;
+ pres_conj_base = "fia" ;
+ impf_ind_base = "fieba" ;
+ impf_conj_base = "fiere" ;
+ fut_I_base = "fie" ;
+ imp_base = "fi" ;
+ perf_stem = "" ;
+ perf_ind_base = "" ;
+ perf_conj_base = "" ;
+ pqperf_ind_base = "" ;
+ pqperf_conj_base = "" ;
+ fut_II_base = "" ;
+ part_stem = "fact" ;
+
+ verb =
+ mkVerb "fieri" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) Sg P1 => "fio" ;
+ VAct VAnt _ _ _ => "######" ; -- perfect expressed by participle
+ a => verb.act ! a
+ } ;
+ pass =
+ \\_ => "######" ; -- no passive forms
+ ger =
+ \\_ => "######" ; -- no gerund form
+ geriv =
+ \\_ => "######" ; -- no gerundive form
+ imp =
+ verb.imp ;
+ inf =
+ table {
+ VInfActPerf _ => "factus" ;
+ VInfActFut Masc => "futurum" ;
+ VInfActFut Fem => "futura" ;
+ VInfActFut Neutr => "futurum" ;
+ a => verb.inf ! a
+ } ;
+ part = table {
+ VActFut =>
+ \\_ => "######" ; -- no such participle
+ VActPres =>
+ \\_ => "######" ; -- no such participle
+ VPassPerf =>
+ verb.part ! VPassPerf
+ } ;
+ sup =
+ \\_ => "######" -- no supin
+ } ;
+
+ -- Source ?
+ rain_V =
+ {
+ act =
+ table {
+ VAct VSim (VPres VInd) Sg P3 => "pluit" ;
+ VAct VSim (VPres VInd) Pl P3 => "pluunt" ;
+ VAct VSim (VImpf VInd) Sg P3 => "pluebat" ;
+ VAct VSim (VImpf VInd) Pl P3 => "pluebant" ;
+ VAct VSim VFut Sg P3 => "pluet" ;
+ VAct VSim VFut Pl P3 => "pluent" ;
+ VAct VAnt (VPres VInd) Sg P3 => "pluvit" ;
+ VAct VAnt (VPres VInd) Pl P3 => "pluverunt" ;
+ VAct VAnt (VImpf VInd) Sg P3 => "pluverat" ;
+ VAct VAnt (VImpf VInd) Pl P3 => "pluverat" ;
+ VAct VAnt VFut Sg P3 => "pluverit" ;
+ VAct VAnt VFut Pl P3 => "pluverint" ;
+ VAct VSim (VPres VConj) Sg P3 => "pluat" ;
+ VAct VSim (VPres VConj) Pl P3 => "pluant" ;
+ VAct VSim (VImpf VConj) Sg P3 => "plueret" ;
+ VAct VSim (VImpf VConj) Pl P3 => "pluerent" ;
+ VAct VAnt (VPres VConj) Sg P3 => "pluverit" ;
+ VAct VAnt (VPres VConj) Pl P3 => "pluverint" ;
+ VAct VAnt (VImpf VConj) Sg P3 => "pluvisset" ;
+ VAct VAnt (VImpf VConj) Pl P3 => "pluvissent" ;
+ _ => "######" -- no such forms
+ } ;
+ pass =
+ \\_ => "######" ; -- no passive forms
+ inf = table {
+ VInfActPres => "pluere" ;
+ VInfActPerf _ => "pluvisse" ;
+ _ => "######"
+ } ;
+ imp =
+ table {
+ VImp2 Sg ( P2 | P3 ) => "pluito" ;
+ VImp2 Pl P2 => "pluitote" ;
+ VImp2 Pl P3 => "pluunto" ;
+ _ => "######"
+ } ;
+ ger =
+ \\_ => "######" ; -- no gerund forms
+ geriv =
+ \\_ => "######" ; -- no gerundive forms
+ sup =
+ \\_ => "######" ; -- no supin forms
+ part = table {
+ VActPres =>
+ \\_ => "pluens" ;
+ VActFut =>
+ \\_ => "######" ; -- no such participle
+ VPassPerf =>
+ \\_ => "######" -- no such participle
+ }
+ } ;
+
+ -- Bayer-Lindauer 98
+ hate_V =
+ let
+ pres_stem = "" ;
+ pres_ind_base = "" ;
+ pres_conj_base = "" ;
+ impf_ind_base = "" ;
+ impf_conj_base = "" ;
+ fut_I_base = "" ;
+ imp_base = "" ;
+ perf_stem = "od" ;
+ perf_ind_base = "od" ;
+ perf_conj_base = "oderi" ;
+ pqperf_ind_base = "odera" ;
+ pqperf_conj_base = "odissem" ;
+ fut_II_base = "oderi" ;
+ part_stem = "os" ;
+ verb =
+ mkVerb "odisse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+ in {
+ act = table {
+ VAct VSim t n p => verb.act ! VAct VAnt t n p ;
+ _ => "######" -- no such verb forms
+ } ;
+ pass = \\_ => "######" ; -- no passive forms
+ ger = \\_ => "######" ; -- no gerund forms
+ geriv = \\_ => "######" ; -- no gerundive forms
+ imp = \\_ => "######" ; -- no imperative form
+ inf = table {
+ VInfActPres => verb.inf ! VInfActPres ;
+ VInfActFut g => verb.inf ! VInfActFut g ; -- really ?
+ _ => "######"
+ } ;
+ part = table {
+ VActFut =>
+ verb.part ! VActFut ;
+ VActPres =>
+ \\_ => "######" ; -- no such participle form
+ VPassPerf =>
+ \\_ => "######" -- no such participle form
+ } ;
+ sup = \\_ => "######" ; -- no such supine form
+ } ;
+}

View File

@@ -0,0 +1,18 @@
diff --git a/lib/src/latin/IrregLatAbs.gf b/lib/src/latin/IrregLatAbs.gf
new file mode 100644
index 0000000..a5e86f7
--- /dev/null
+++ b/lib/src/latin/IrregLatAbs.gf
@@ -0,0 +1,12 @@
+abstract IrregLatAbs = Cat ** {
+ fun
+ science_N : N ;
+ be_V : V ;
+ can_VV : VV ;
+ bring_V : V ;
+ want_V : V ;
+ go_V : V;
+ become_V : V;
+ rain_V : V;
+ hate_V : V;
+}

View File

@@ -0,0 +1,17 @@
diff --git a/lib/src/latin/LangLat.gf b/lib/src/latin/LangLat.gf
index e727a11..a61a880 100644
--- a/lib/src/latin/LangLat.gf
+++ b/lib/src/latin/LangLat.gf
@@ -1,10 +1,12 @@
--# -path=.:../abstract:../common:../prelude
concrete LangLat of Lang =
GrammarLat,
+ ParadigmsLat,
+ ConjunctionLat,
LexiconLat
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;
} ;

View File

@@ -0,0 +1,767 @@
diff --git a/lib/src/latin/LexiconLat.gf b/lib/src/latin/LexiconLat.gf
index 4c0fc16..14bdba2 100644
--- a/lib/src/latin/LexiconLat.gf
+++ b/lib/src/latin/LexiconLat.gf
@@ -1,377 +1,395 @@
--# -path=.:prelude
+--1 Basic Latin Lexicon.
+
+-- Aarne Ranta pre 2013, Herbert Lange 2013
+
+-- This lexicon implements all the words in the abstract Lexicon.
+-- For each entry a source is given, either a printed dictionary, a
+-- printed grammar book or a link to an online source. The used printed
+-- dictionaries are Langescheidts Schulwörterbuch Lateinisch 17. Edition
+-- 1984 (shorter: Langenscheidts), PONS Schulwörterbuch Latein 1. Edition
+-- 2012 (Shorter: Pons) and Der kleine Stowasser 3. Edition 1991 (shorter:
+-- Stowasser). The Grammar book is Bayer-Lindauer: Lateinische Schulgrammatik
+-- 2. Edition 1994.
+
concrete LexiconLat of Lexicon = CatLat ** open
ParadigmsLat,
--- IrregLat,
+ IrregLat,
+ ResLat,
+ StructuralLat,
+ NounLat,
+ AdjectiveLat,
+ VerbLat,
Prelude in {
flags
optimize=values ;
-
+ coding = utf8;
lin
--- airplane_N = mkN "airplane" ;
--- answer_V2S = mkV2S (regV "answer") toP ;
--- apartment_N = mkN "apartment" ;
--- apple_N = mkN "apple" ;
- art_N = mkN "ars" ;
--- ask_V2Q = mkV2Q (regV "ask") noPrep ;
- baby_N = mkN "infans" ;
- bad_A = mkA "malus" ;
--- bank_N = mkN "bank" ;
- beautiful_A = mkA "pulcher" ;
--- become_VA = mkVA (irregV "become" "became" "become") ;
- beer_N = mkN "cerevisia" ;
--- beg_V2V = mkV2V (regDuplV "beg") noPrep toP ;
- big_A = mkA "magnus" ;
--- bike_N = mkN "bike" ;
- bird_N = mkN "avis" "avis" masculine ;
- black_A = mkA "niger" ;
--- blue_A = regADeg "blue" ;
--- boat_N = mkN "boat" ;
- book_N = mkN "liber" ;
--- boot_N = mkN "boot" ;
--- boss_N = mkN human (mkN "boss") ;
- boy_N = mkN "liber" ;
- bread_N = mkN "panis" "panis" masculine ;
- break_V2 = mkV2 (mkV "rumpo" "rupi" "ruptum" "rumpere") ;
--- broad_A = regADeg "broad" ;
--- brother_N2 = mkN2 (mkN masculine (mkN "brother")) (mkPrep "of") ;
--- brown_A = regADeg "brown" ;
--- butter_N = mkN "butter" ;
--- buy_V2 = dirV2 (irregV "buy" "bought" "bought") ;
--- camera_N = mkN "camera" ;
--- cap_N = mkN "cap" ;
--- car_N = mkN "car" ;
--- carpet_N = mkN "carpet" ;
- cat_N = mkN "felis" ;
--- ceiling_N = mkN "ceiling" ;
--- chair_N = mkN "chair" ;
--- cheese_N = mkN "cheese" ;
--- child_N = mk2N "child" "children" ;
--- church_N = mkN "church" ;
- city_N = mkN "urbs" "urbis" feminine ;
--- clean_A = regADeg "clean" ;
--- clever_A = regADeg "clever" ;
--- close_V2 = dirV2 (regV "close") ;
--- coat_N = mkN "coat" ;
--- cold_A = regADeg "cold" ;
--- come_V = (irregV "come" "came" "come") ;
--- computer_N = mkN "computer" ;
--- country_N = mkN "country" ;
--- cousin_N = mkN human (mkN "cousin") ;
--- cow_N = mkN "cow" ;
--- die_V = (regV "die") ;
--- dirty_A = regADeg "dirty" ;
--- distance_N3 = mkN3 (mkN "distance") fromP toP ;
--- doctor_N = mkN human (mkN "doctor") ;
--- dog_N = mkN "dog" ;
--- door_N = mkN "door" ;
--- drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;
--- easy_A2V = mkA2V (regA "easy") forP ;
--- eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;
--- empty_A = regADeg "empty" ;
--- enemy_N = mkN "enemy" ;
--- factory_N = mkN "factory" ;
--- father_N2 = mkN2 (mkN masculine (mkN "father")) (mkPrep "of") ;
--- fear_VS = mkVS (regV "fear") ;
--- find_V2 = dirV2 (irregV "find" "found" "found") ;
--- fish_N = mk2N "fish" "fish" ;
--- floor_N = mkN "floor" ;
--- forget_V2 = dirV2 (irregDuplV "forget" "forgot" "forgotten") ;
--- fridge_N = mkN "fridge" ;
--- friend_N = mkN human (mkN "friend") ;
--- fruit_N = mkN "fruit" ;
--- fun_AV = mkAV (regA "fun") ;
--- garden_N = mkN "garden" ;
--- girl_N = mkN feminine (mkN "girl") ;
--- glove_N = mkN "glove" ;
- gold_N = mkN "aurum" ;
- good_A = mkA "bonus" ;
--- go_V = mk5V "go" "goes" "went" "gone" "going" ;
--- green_A = regADeg "green" ;
--- harbour_N = mkN "harbour" ;
--- hate_V2 = dirV2 (regV "hate") ;
--- hat_N = mkN "hat" ;
--- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ;
--- hear_V2 = dirV2 (irregV "hear" "heard" "heard") ;
--- hill_N = mkN "hill" ;
--- hope_VS = mkVS (regV "hope") ;
--- horse_N = mkN "horse" ;
--- hot_A = duplADeg "hot" ;
--- house_N = mkN "house" ;
--- important_A = compoundADeg (regA "important") ;
--- industry_N = mkN "industry" ;
--- iron_N = mkN "iron" ;
--- king_N = mkN masculine (mkN "king") ;
--- know_V2 = dirV2 (irregV "know" "knew" "known") ;
--- lake_N = mkN "lake" ;
--- lamp_N = mkN "lamp" ;
--- learn_V2 = dirV2 (regV "learn") ;
--- leather_N = mkN "leather" ;
--- leave_V2 = dirV2 (irregV "leave" "left" "left") ;
--- like_V2 = dirV2 (regV "like") ;
--- listen_V2 = prepV2 (regV "listen") toP ;
--- live_V = (regV "live") ;
--- long_A = regADeg "long" ;
--- lose_V2 = dirV2 (irregV "lose" "lost" "lost") ;
- love_N = mkN "amor" ;
- love_V2 = mkV2 "amare" ;
--- man_N = mkN masculine (mk2N "man" "men") ;
--- married_A2 = mkA2 (regA "married") toP ;
--- meat_N = mkN "meat" ;
--- milk_N = mkN "milk" ;
--- moon_N = mkN "moon" ;
--- mother_N2 = mkN2 (mkN feminine (mkN "mother")) (mkPrep "of") ;
--- mountain_N = mkN "mountain" ;
--- music_N = mkN "music" ;
--- narrow_A = regADeg "narrow" ;
--- new_A = regADeg "new" ;
--- newspaper_N = mkN "newspaper" ;
--- oil_N = mkN "oil" ;
--- old_A = regADeg "old" ;
--- open_V2 = dirV2 (regV "open") ;
--- paint_V2A = mkV2A (regV "paint") noPrep ;
--- paper_N = mkN "paper" ;
--- paris_PN = mkPN (mkN nonhuman (mkN "Paris")) ;
--- peace_N = mkN "peace" ;
--- pen_N = mkN "pen" ;
--- planet_N = mkN "planet" ;
--- plastic_N = mkN "plastic" ;
--- play_V2 = dirV2 (regV "play") ;
--- policeman_N = mkN masculine (mkN "policeman" "policemen") ;
--- priest_N = mkN human (mkN "priest") ;
--- probable_AS = mkAS (regA "probable") ;
--- queen_N = mkN feminine (mkN "queen") ;
--- radio_N = mkN "radio" ;
--- rain_V0 = mkV0 (regV "rain") ;
--- read_V2 = dirV2 (irregV "read" "read" "read") ;
--- red_A = duplADeg "red" ;
--- religion_N = mkN "religion" ;
--- restaurant_N = mkN "restaurant" ;
--- river_N = mkN "river" ;
--- rock_N = mkN "rock" ;
--- roof_N = mkN "roof" ;
--- rubber_N = mkN "rubber" ;
--- run_V = (irregDuplV "run" "ran" "run") ;
--- say_VS = mkVS (irregV "say" "said" "said") ;
--- school_N = mkN "school" ;
--- science_N = mkN "science" ;
--- sea_N = mkN "sea" ;
--- 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 = mk2N "sheep" "sheep" ;
--- ship_N = mkN "ship" ;
--- shirt_N = mkN "shirt" ;
--- shoe_N = mkN "shoe" ;
--- shop_N = mkN "shop" ;
--- short_A = regADeg "short" ;
--- silver_N = mkN "silver" ;
--- sister_N = mkN2 (mkN feminine (mkN "sister")) (mkPrep "of") ;
- sleep_V = mkV "dormio" "dormivi" "dormitus" "dormire" ;
--- small_A = regADeg "small" ;
--- snake_N = mkN "snake" ;
--- sock_N = mkN "sock" ;
--- speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ;
--- star_N = mkN "star" ;
--- steel_N = mkN "steel" ;
--- stone_N = mkN "stone" ;
--- stove_N = mkN "stove" ;
--- student_N = mkN human (mkN "student") ;
--- stupid_A = regADeg "stupid" ;
--- sun_N = mkN "sun" ;
--- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;
--- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;
--- table_N = mkN "table" ;
--- talk_V3 = mkV3 (regV "talk") toP aboutP ;
--- teacher_N = mkN human (mkN "teacher") ;
--- teach_V2 = dirV2 (irregV "teach" "taught" "taught") ;
--- television_N = mkN "television" ;
--- thick_A = regADeg "thick" ;
--- thin_A = duplADeg "thin" ;
--- train_N = mkN "train" ;
--- travel_V = (regDuplV "travel") ;
--- tree_N = mkN "tree" ;
--- ---- trousers_N = mkN "trousers" ;
--- ugly_A = regADeg "ugly" ;
--- understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;
--- university_N = mkN "university" ;
--- village_N = mkN "village" ;
--- wait_V2 = prepV2 (regV "wait") forP ;
--- walk_V = (regV "walk") ;
--- warm_A = regADeg "warm" ;
--- war_N = mkN "war" ;
--- watch_V2 = dirV2 (regV "watch") ;
--- water_N = mkN "water" ;
--- white_A = regADeg "white" ;
--- window_N = mkN "window" ;
--- wine_N = mkN "wine" ;
--- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;
--- woman_N = mkN feminine (mk2N "woman" "women") ;
--- wonder_VQ = mkVQ (regV "wonder") ;
--- wood_N = mkN "wood" ;
--- write_V2 = dirV2 (irregV "write" "wrote" "written") ;
--- yellow_A = regADeg "yellow" ;
--- young_A = regADeg "young" ;
---
--- do_V2 = dirV2 (mk5V "do" "does" "did" "done" "doing") ;
--- now_Adv = mkAdv "now" ;
--- already_Adv = mkAdv "already" ;
--- song_N = mkN "song" ;
--- add_V3 = dirV3 (regV "add") toP ;
--- number_N = mkN "number" ;
--- put_V2 = prepV2 (irregDuplV "put" "put" "put") noPrep ;
--- stop_V = regDuplV "stop" ;
--- jump_V = regV "jump" ;
---
--- left_Ord = ss "left" ;
--- right_Ord = ss "right" ;
--- far_Adv = mkAdv "far" ;
--- correct_A = (regA "correct") ;
--- dry_A = regA "dry" ;
--- dull_A = regA "dull" ;
--- full_A = regA "full" ;
--- heavy_A = regA "heavy" ;
--- near_A = regA "near" ;
--- rotten_A = (regA "rotten") ;
--- round_A = regA "round" ;
--- sharp_A = regA "sharp" ;
--- smooth_A = regA "smooth" ;
--- straight_A = regA "straight" ;
--- wet_A = regA "wet" ; ----
--- wide_A = regA "wide" ;
--- animal_N = mkN "animal" ;
--- ashes_N = mkN "ash" ; -- FIXME: plural only?
--- back_N = mkN "back" ;
--- bark_N = mkN "bark" ;
--- belly_N = mkN "belly" ;
--- blood_N = mkN "blood" ;
--- bone_N = mkN "bone" ;
--- breast_N = mkN "breast" ;
--- cloud_N = mkN "cloud" ;
--- day_N = mkN "day" ;
--- dust_N = mkN "dust" ;
--- ear_N = mkN "ear" ;
--- earth_N = mkN "earth" ;
--- egg_N = mkN "egg" ;
--- eye_N = mkN "eye" ;
--- fat_N = mkN "fat" ;
--- feather_N = mkN "feather" ;
--- fingernail_N = mkN "fingernail" ;
--- fire_N = mkN "fire" ;
--- flower_N = mkN "flower" ;
--- fog_N = mkN "fog" ;
--- foot_N = mk2N "foot" "feet" ;
--- forest_N = mkN "forest" ;
--- grass_N = mkN "grass" ;
--- guts_N = mkN "gut" ; -- FIXME: no singular
--- hair_N = mkN "hair" ;
--- hand_N = mkN "hand" ;
--- head_N = mkN "head" ;
--- heart_N = mkN "heart" ;
--- horn_N = mkN "horn" ;
--- husband_N = mkN masculine (mkN "husband") ;
--- ice_N = mkN "ice" ;
--- knee_N = mkN "knee" ;
--- leaf_N = mk2N "leaf" "leaves" ;
--- leg_N = mkN "leg" ;
--- liver_N = mkN "liver" ;
--- louse_N = mk2N "louse" "lice" ;
--- mouth_N = mkN "mouth" ;
--- name_N = mkN "name" ;
--- neck_N = mkN "neck" ;
--- night_N = mkN "night" ;
--- nose_N = mkN "nose" ;
--- person_N = mkN human (mkN "person") ;
--- rain_N = mkN "rain" ;
--- road_N = mkN "road" ;
--- root_N = mkN "root" ;
--- rope_N = mkN "rope" ;
--- salt_N = mkN "salt" ;
--- sand_N = mkN "sand" ;
--- seed_N = mkN "seed" ;
--- skin_N = mkN "skin" ;
--- sky_N = mkN "sky" ;
--- smoke_N = mkN "smoke" ;
--- snow_N = mkN "snow" ;
--- stick_N = mkN "stick" ;
--- tail_N = mkN "tail" ;
--- tongue_N = mkN "tongue" ;
--- tooth_N = mk2N "tooth" "teeth" ;
--- wife_N = mkN feminine (mk2N "wife" "wives") ;
--- wind_N = mkN "wind" ;
--- wing_N = mkN "wing" ;
--- worm_N = mkN "worm" ;
--- year_N = mkN "year" ;
--- blow_V = IrregLat.blow_V ;
--- breathe_V = dirV2 (regV "breathe") ;
--- burn_V = IrregLat.burn_V ;
--- dig_V = IrregLat.dig_V ;
--- fall_V = IrregLat.fall_V ;
--- float_V = regV "float" ;
--- flow_V = regV "flow" ;
--- fly_V = IrregLat.fly_V ;
--- freeze_V = IrregLat.freeze_V ;
--- give_V3 = dirV3 give_V toP ;
--- laugh_V = regV "laugh" ;
--- lie_V = IrregLat.lie_V ;
--- play_V = regV "play" ;
--- sew_V = IrregLat.sew_V ;
--- sing_V = IrregLat.sing_V ;
--- sit_V = IrregLat.sit_V ;
--- smell_V = regV "smell" ;
--- spit_V = IrregLat.spit_V ;
--- stand_V = IrregLat.stand_V ;
--- swell_V = IrregLat.swell_V ;
--- swim_V = IrregLat.swim_V ;
--- think_V = IrregLat.think_V ;
--- turn_V = regV "turn" ;
--- vomit_V = regV "vomit" ;
---
--- bite_V2 = dirV2 IrregLat.bite_V ;
--- count_V2 = dirV2 (regV "count") ;
--- cut_V2 = dirV2 IrregLat.cut_V ;
--- 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 = dirV2 (regV "kill") ;
--- pull_V2 = dirV2 (regV "pull") ;
--- push_V2 = dirV2 (regV "push") ;
--- rub_V2 = dirV2 (regDuplV "rub") ;
--- scratch_V2 = dirV2 (regV "scratch") ;
--- split_V2 = dirV2 split_V ;
--- squeeze_V2 = dirV2 (regV "squeeze") ;
--- stab_V2 = dirV2 (regDuplV "stab") ;
--- suck_V2 = dirV2 (regV "suck") ;
--- throw_V2 = dirV2 throw_V ;
--- tie_V2 = dirV2 (regV "tie") ;
--- wash_V2 = dirV2 (regV "wash") ;
--- wipe_V2 = dirV2 (regV "wipe") ;
---
----- other_A = regA "other" ;
---
--- grammar_N = mkN "grammar" ;
--- language_N = mkN "language" ;
--- rule_N = mkN "rule" ;
---
----- added 4/6/2007
--- john_PN = mkPN (mkN masculine (mkN "John")) ;
--- question_N = mkN "question" ;
--- ready_A = regA "ready" ;
--- reason_N = mkN "reason" ;
--- today_Adv = mkAdv "today" ;
--- uncertain_A = regA "uncertain" ;
---
---oper
--- aboutP = mkPrep "about" ;
--- atP = mkPrep "at" ;
--- forP = mkPrep "for" ;
--- fromP = mkPrep "from" ;
--- inP = mkPrep "in" ;
--- onP = mkPrep "on" ;
--- toP = mkPrep "to" ;
---
+ airplane_N = mkN "aeroplanum" ; -- -i n. (http://la.wikipedia.org/wiki/A%C3%ABroplanum / Pons)
+ answer_V2S = mkV2S ( mkV "respondere" ) Dat_Prep ; -- -spondeo, -spondi, -sponsum 2 (Langenscheidts) alicui; ad, contra, adversus aliquid (Stowasser)
+ apartment_N = mkN "domicilium" ; -- -i n. (Langenscheidts)
+ apple_N = mkN "malum" ; -- -i n. (Langenscheidts)
+ art_N = mkN "ars" "artis" feminine ; -- Ranta; artis f. (Langenscheidts)
+ ask_V2Q = mkV2Q ( mkV "rogare" ) Acc_Prep ; -- rogo 1 (Langenscheidts) aliquem aliquid (Stowasser)
+ baby_N = mkN "infans" "infantis" ( variants { feminine ; masculine } ); -- Ranta; -antis m./f. (Langenscheidts)
+ bad_A = mkA "malus" ; -- Ranta; peior, pessimus 3 (Langenscheidts)
+ bank_N = mkN "argentaria" ; -- -ae f. (http://la.wikipedia.org/wiki/Argentaria / Pons)
+ beautiful_A = mkA "pulcher" ; -- -chra, -chrum (Langenscheidts)
+ become_VA = mkVA (mkV "fieri") ; -- fio, factus (Langenscheidts)
+ beer_N = mkN ( "cervisia" ) ; -- Ranta; -ae f. (http://la.wikipedia.org/wiki/Cervisia / Pons)
+ beg_V2V = mkV2V ( mkV "petere" "peto" "petivi" "petitum" ) "ab" False ; -- peto, -tivi/tii, -titum 3 (Langenscheidts) ab aliquo (Stowasser)
+ big_A = mkA "magnus" ; -- Ranta; maior, maximus 3 (Langenscheidts)
+ bike_N = mkN "birota" ; -- -ae f. (http://la.wikipedia.org/wiki/Birota / Pons)
+ bird_N = mkN "avis" "avis" feminine ; -- Ranta; -is f. (Langenscheidts)
+ black_A = mkA "niger" ; -- Ranta; -gra, -grum (Langenscheidts)
+ blue_A = mkA ( variants { "caeruleus" ; "caerulus" } ) ; -- 3 (Langenscheidts)
+ boat_N = mkN "navicula" ; -- -ae f. (Langenscheidts)
+ book_N = mkN "liber"; -- Ranta; -bri m. (Langenscheidts)
+ boot_N = mkN "calceus" ; -- -i m. (Langenscheidts)
+ boss_N = mkN "dux" "ducis" ( variants { feminine ; masculine } ) ; -- ducis m./f. (Langenscheidts)
+ boy_N = mkN "puer" "pueri" masculine ; -- -eri m. (Langenscheidts)
+ bread_N = variants { (mkN "panis" "panis" masculine ) ; (mkN "pane" "panis" neuter ) } ; -- -is m./n. (Langenscheidts)
+ break_V2 = mkV2 ( mkV "rumpere" "rumpo" "rupi" "ruptum" ) ; -- Ranta; 3 (Langenscheidts) aliquem (Bayer-Lindauer 110)
+ broad_A = mkA "latus" ; -- 3 (Langenscheidts)
+ brother_N2 = mkN2 ( mkN "frater" "fratris" masculine ) Gen_Prep; -- -tris m. (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
+ brown_A = mkA "fulvus" ; -- 3 (Langenscheidts)
+ butter_N = mkN "butyrum" ; -- -i n. (http://la.wikipedia.org/wiki/Butyrum / Pons)
+ buy_V2 = mkV2 (mkV "emere") ; -- emo, emi, emptum 3 (Langenscheidts) (Stowasser) ab, de aliquo (Stowasser)
+ -- Trying to work with Machina ++ photographica
+ camera_N = ResLat.useCNasN (AdjCN (PositA (mkA "photographicus") ) (UseN (mkN "machina" ) ) ) ; -- (http://la.wikipedia.org/wiki/Machina_photographica / Pons)
+ cap_N = mkN "galerus" ; -- -i m. (Langenscheidts)
+ car_N = mkN "autoreada" ; -- -ae f. (Pons / http://la.wikipedia.org/wiki/Autocinetum)
+ carpet_N = mkN "stragulum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Teges_pavimenti)
+ cat_N = mkN ( variants {"feles" ; "felis" } ) "felis" feminine ; -- -is f. (Langenscheidts)
+ ceiling_N = mkN "tegimentum" ; -- -i n. (Langenscheidts)
+ chair_N = mkN "sedes" "sedis" feminine; -- -is f. (Langenscheidts)
+ cheese_N = mkN "caseus" ; -- -i m. (Langenscheidts)
+ child_N = mkN "proles" "prolis" feminine ; -- -is f. (Langenscheidts)
+ church_N = mkN "ecclesia" ; -- -ae f. (Langenscheidts)
+ city_N = mkN "urbs" "urbis" feminine; -- Ranta; urbis f. (Langenscheidts)
+ clean_A = mkA "lautus" ; -- 3 (Langenscheidts)
+ clever_A = mkA "callidus" ; -- 3 (Langenscheidts)
+ close_V2 = mkV2 (mkV "claudere") ; -- claudo, clasi, clausum 3 (Langenscheidts) aliquem (Bayer-Lindauer 110)
+ coat_N = mkN "pallium" ; -- -i n. (Langenscheidts)
+ cold_A = mkA "frigidus" ; -- 3 (Langenscheidts)
+ come_V = mkV "venire" ; -- veno, veni, ventum 4 (Langenscheidts)
+ computer_N = mkN "computatrum" ; -- -i n. (http://la.wikipedia.org/wiki/Computatrum / Pons)
+ country_N = mkN "terra" ; -- -ae f. (Langenscheidts)
+ cousin_N = mkN ( variants {"consobrinus" ; "consobrina" } ) ; -- -i/-ae m./f. (Langenscheidts)
+ cow_N = mkN "bos" "bovis" ( variants { feminine ; masculine } ) ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts)
+ die_V = mkV "mori" "mortuus" "morturus"; -- morior, mortuus sum, morturus (Langenscheidts)
+ dirty_A = mkA "sordidus" ; -- 3 (Langenscheidts)
+
+ distance_N3 = mkN3 (mkN "distantia") from_Prep to_Prep ; -- -ae f. (Langenscheidts) ab, ad aliquem; alicuius; aliquem (???)
+ doctor_N = mkN "medicus" ; -- -i m. (Langenscheidts)
+ dog_N = mkN "canis" "canis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
+ door_N = mkN "porta" ; -- -ae f. (Langenscheidts)
+ drink_V2 = mkV2 (mkV "bibere") ; -- bibo, potum 3 (Langenscheidts) aliquem (Bayer-Lindauer 110)
+ easy_A2V = mkA2V (mkA "facilis" "facile" ) for_Prep ; -- -e sup -illimus (Langenscheidts)
+ eat_V2 = mkV2 (mkV "cenare") ; -- ceno 1 (Langenscheidts) aliquem (Bayer-Lindauer 110)
+ empty_A = mkA "vacuus" ; -- 3 (Langenscheidts)
+ enemy_N = mkN "hostis" "hostis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
+ factory_N = mkN "officina" ; -- -ae f. (Langenscheidts)
+ father_N2 = mkN2 (mkN "pater" "patris" masculine ) Gen_Prep ; -- -tris m. gen pl -um (Langenscheidts) alicuius (Bayer-Lindauer 125.2)
+ fear_VS = mkVS (mkV "timere") ; -- timeo, timui, --- 2 (Langenscheidts)
+ find_V2 = mkV2 (mkV "reperire") ; -- reperio, repperi, repertum 4 (Langenscheidts) aliquem
+ fish_N = mkN "piscis" "piscis" masculine ; -- -is m. (Langenscheidts)
+ floor_N = mkN "pavimentum" ; -- -i n. (Langenscheidts)
+ forget_V2 = mkV2 (mkV "oblivisci" "obliviscor" "oblitus" ) ; -- obliscor, oblitus sum 3 (Langenscheidts)
+ fridge_N = mkN "frigidarium" ; -- --i n. (Pons / http://la.wikipedia.org/wiki/Armarium_frigidarium)
+ friend_N = mkN ( variants { "amicus" ; "amica" } ) ; -- -i/-ae m./f. (Langenscheidts)
+ fruit_N = mkN "fructus" "fructus" masculine; -- -us m. (Langenscheidts)
+ fun_AV = mkAV (mkA "iocosus") ; -- 3 (Langenscheidts)
+ garden_N = mkN "hortus" ; -- -i m. (Langenscheidts)
+ girl_N = mkN "puella" ; -- -ae f. (Langenscheidts)
+ glove_N = mkN "caestus" "caestus" masculine ; --us m. (Langenscheidts)
+ gold_N = mkN "aurum" ; -- Ranta; -i n. (Langenscheidts)
+ good_A = mkA "bonus" ; -- Ranta; 3 comp melior, -us; sup optimus 3; adv bene
+ go_V = IrregLat.go_V ; -- eo, i(v)i, itum (Langenscheidts)
+ green_A = mkA "viridis" "viride"; -- -e (Langenscheidts)
+ harbour_N = mkN "portus" "portus" masculine ; -- -us m. (Langenscheidts)
+ hate_V2 = mkV2 IrregLat.hate_V Acc_Prep ; -- odi, osurus/odivi (Langenscheidts)
+ hat_N = mkN "petasus" ; -- -i m. (Langenscheidts)
+ hear_V2 = mkV2 (mkV "audire") ; -- 4 (Langenscheidts)
+ hill_N = mkN "collis" "collis" masculine ; -- -is m. (Langenscheidts)
+ hope_VS = mkVS (mkV "sperare") ; -- 1 (Langenscheidts)
+ horse_N = mkN "equus" ; -- -i m. (Langenscheidts)
+ hot_A = mkA "calidus" ; -- 3 (Langenscheidts)
+ house_N = mkN "domus" "domus" feminine ; -- -us f. (Langenscheidts)
+ important_A = mkA "gravis" "grave"; -- -e (Langenscheidts)
+ industry_N = mkN "industria" ; -- -ae f. (http://la.wikipedia.org/wiki/Industria / Pons)
+ iron_N = mkN "ferrum" ; -- -i m. (Langenscheidts)
+ king_N = mkN "rex" "regis" masculine; -- regis m. (Langenscheidts)
+ know_V2 = mkV2 (mkV "scire") ; -- scio, scivi/scii, scitum 4 (Langenscheidts)
+ know_VQ = mkV "scire" ;
+ know_VS = mkV "scire" ;
+ lake_N = mkN "lacus" "lacus" masculine; -- -us m. (Langenscheidts)
+ lamp_N = mkN "lucerna" ; -- -ae f. (Langenscheidts)
+ learn_V2 = mkV2 (mkV "discere" "disco" "didici") ; -- disco, didici, - 3 (-isc-?) (Langenscheidts)
+ leather_N = mkN "scortum" ; -- -i n. (Langenscheidts)
+ leave_V2 = mkV2 (mkV "relinquere" "relinquo" "relinqui" "relictum") ; -- relinquo, relinqui, relictum 3 (Langenscheidts)
+ like_V2 = mkV2 ( IrregLat.want_V ) ; -- vello, velli (volsi, vulsi), vulsum 3 (Langenscheidts)
+ listen_V2 = mkV2 (mkV "auscultare") ; -- ausculto 1 (Langenscheidts)
+ live_V = mkV "vivere" "vivo" "vixi" "victum" ; -- vivo, vixi, victurus 3 (Langenscheidts)
+ long_A = mkA "longus" ; -- 3 (Langenscheidts)
+ lose_V2 = mkV2 (mkV "amittere") ; -- amitto, amissi, amissum 3 (Langenscheidts)
+ love_N = mkN "amor" "amoris" masculine ; -- Ranta; -oris m. (Langenscheidts)
+ love_V2 = mkV2 "amare" ; -- Ranta; amo 1 (Langenscheidts)
+ man_N = mkN "vir" "viri" masculine ; -- viri m. (Langenscheidts)
+ -- Category not yet implemented
+ married_A2 = mkA2 (mkA "coniunctus") to_Prep; -- 3 (http://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.04.0060:entry=coniunctus&highlight=married)
+ meat_N = mkN "carnis" "carnis" feminine ; -- -is f. (Langenscheidts)
+ milk_N = mkN "lac" "lactis" neuter ; -- -- lactis n. (Langenscheidts)
+ moon_N = mkN "luna" ; -- -ae f. (Langenscheidts)
+ mother_N2 = mkN2 ( mkN "mater" "matris" feminine ) Gen_Prep ; -- matris f. (Langenscheidts)
+ mountain_N = mkN "mons" "montis" masculine ; -- montis m. (Langenscheidts)
+ music_N = mkN "musica" ; -- -ae f. L..
+ narrow_A = mkA "angustus" ; -- 3 (Langenscheidts)
+ new_A = mkA "novus" ; -- 3 (Langenscheidts)
+ newspaper_N = mkN "diurnum" ; -- -i n. (Pons)
+ oil_N = mkN "oleum" ; -- -i n. (Langenscheidts)
+ old_A = mkA "vetus" "veteris"; -- (Langenscheidts)
+ open_V2 = mkV2 (mkV "aperire") ; -- aperio, aperui, apertum 4 (Langenscheidts)
+ paint_V2A = mkV2A (mkV "pingere" "pingo" "pinxi" "pictum" ) Acc_Prep ; -- pingo, pinxi, pictum 3 (Langenscheidts)
+ paper_N = mkN "charta" ; -- -ae f. (http://la.wikipedia.org/wiki/Charta / Pons)
+ paris_PN = mkPN (mkN "Lutetia") ; -- -ae f. (http://la.wikipedia.org/wiki/Lutetia)
+ peace_N = mkN "pax" "pacis" feminine ; -- pacis f. (Langenscheidts)
+ pen_N = mkN "stilus" ; -- -i m. (Langenscheidts)
+ planet_N = mkN "planeta" ; -- -ae m. (http://la.wikipedia.org/wiki/Planeta)
+ plastic_N = mkN "plastica" "plasticae" feminine ; -- -ae f. (http://la.wikipedia.org/wiki/Plasticum)
+ play_V2 = mkV2 (mkV "ludere" "ludo" "lusi" "lusum" ) ; -- ludo, lusi, lusum 3 (Langenscheidts)
+ policeman_N = mkN "custos" "custodis" ( variants { masculine ; feminine } ) ; -- -odis m./f. (Langenscheidts)
+ priest_N = mkN "sacerdos" "sacerdotis" ( variants { masculine ; feminine } ) ; -- -dotis m./f. (Langenscheidts)
+ probable_AS = mkAS (mkA "verisimilis" "verisimile") ; -- -e (Langenscheidts)
+ queen_N = mkN "regina" ; -- -ae f. (Langenscheidts)
+ radio_N = mkN "radiophonum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Radiophonia)
+ rain_V0 = mkV0 ( IrregLat.rain_V ) ; -- (Langenscheidts)
+ read_V2 = mkV2 (mkV "legere" "lego" "legi" "lectum") ; -- lego, legi, lectum 3 (Langenscheidts)
+ red_A = mkA "ruber" ; -- rubra, rubrum (Langenscheidts)
+ religion_N = mkN "religio" "religionis" feminine ; -- -onis f. (Langenscheidts)
+ restaurant_N = mkN "taberna" ; -- -ae f. (Langenscheidts)
+ river_N = mkN "fluvius" ; -- -i m. (Langenscheidts)
+ rock_N = mkN "saxum" ; -- -i n. (Langenscheidts)
+ roof_N = mkN "tectum" ; -- -i n. (Langenscheidts)
+ rubber_N = mkN "cummis" "cummis" feminine ; -- -is f. Der kleine Stowasser
+ run_V = mkV "currere" "curro" "cucurri" "cursum" ; -- curro, cucurri, cursum 3 (Langenscheidts)
+ say_VS = mkVS (mkV "dicere" "dico" "dixi" "dictum") ; -- dico, dixi, dictum 3 (Langenscheidts)
+ school_N = mkN "schola" ; -- -ae f. (Langenscheidts)
+ -- Irregular
+ science_N = IrregLat.science_N ;
+ sea_N = mkN "mare" "maris" neuter ; -- -is n. (Langenscheidts)
+ seek_V2 = mkV2 (mkV "quaerere" "quaero" "quaesivi" "quaesitum" ) ; -- quaero, quaesivi, quaesitum 3 (Langenscheidts)
+ see_V2 = mkV2 (mkV "videre") ; -- video, vidi, visum 2 (Langenscheidts)
+ sell_V3 = mkV3 ( mkV "vendere" "vendo" "vendidi" "venditum" ) Acc_Prep Dat_Prep ; -- vendo, vendidi, venditum 3 (Langenscheidts)
+ send_V3 = mkV3 ( mkV "mittere" "mitto" "misi" "missum" ) Acc_Prep Dat_Prep ; -- mitto, misi, missum 3 (Langenscheidts)
+ sheep_N = mkN "ovis" "ovis" feminine ; -- -is f. (Langenscheidts)
+ ship_N = mkN "navis" "navis" feminine ; -- -is f. acc. -em (-im) abl meist -i (Langenscheidts)
+ shirt_N = mkN "tunica" ; -- -ae f. (Langenscheidts)
+ shoe_N = boot_N ;
+ shop_N = mkN "institorium" ; -- -i n. (Langenscheidts)
+ short_A = mkA "brevis" "breve" ; -- -e (Langenscheidts)
+ silver_N = mkN "argentum" ; -- -i n. (Langenscheidts)
+ sister_N = mkN "soror" "sororis" feminine; -- -oris f. (Langenscheidts)
+-- sleep_V = mkV "dormio" "dormivi" "dormitus" "dormire" ; -- Ranta;
+ sleep_V = mkV "dormire" ; -- 4 (Langenscheidts)
+ small_A = mkA "parvus" ; -- 3 (Langenscheidts)
+ snake_N = mkN "serpens" "serpentis" ( variants { masculine ; feminine } ) ; -- -entis m./f. (Langenscheidts)
+ sock_N = mkN "impile" "impilis" masculine ; -- -is n. (Pons)
+ speak_V2 = mkV2 (mkV "loqui" "loquor" "locutus" ) ; -- loquor, locutus sum 3 (Langenscheidts)
+ star_N = mkN "stella" ; -- -ae f. (Langenscheidts)
+ steel_N = mkN "chalybs" "chalybis" masculine ; -- chalybis m. (Langenscheidts)
+ stone_N = mkN "lapis" "lapidis" masculine ; -- -idis m. (Langenscheidts)
+ stove_N = mkN "fornax" "formacis" feminine ; -- -acis f. (Langenscheidts)
+ student_N = mkN ( variants { "discipulus"; "discipula" } ) ; -- -i/-ae m./f. (Langenscheidts)
+ stupid_A = mkA "stultus" ; -- 3 (Langenscheidts)
+ sun_N = mkN "sol" "solis" masculine ; -- solis m. (Langenscheidts)
+ switch8off_V2 = mkV2 (mkV "accendere") ; -- -cendo, -cendi, -censum 3 (Langenscheidts)
+ switch8on_V2 = mkV2 ( variants { mkV "exstinguere" "exstingo" "exstinxi" "exstinctum" ; mkV "extinguere" "extingo" "extinxi" "extinctum" } ) ; -- -ingo, -inxi, -inctum 3 (Langenscheidts)
+ table_N = mkN "mensa" ; -- -ae f. (Langenscheidts)
+ talk_V3 = mkV3 ( lin V speak_V2 ) Dat_Prep Acc_Prep ;
+ teacher_N = mkN "magister" "magistri" masculine ; -- -tri m. (Langenscheidts)
+ teach_V2 = mkV2 (mkV "docere") ; -- doceo, docui, doctum 2 (Langenscheidts)
+ television_N = mkN "televisio" "televisionis" feminine ; -- -onis f. (Pons)
+ thick_A = mkA "crassus" ; -- 3 (Langenscheidts)
+ thin_A = mkA "tenuis" "tenue" ; -- -e (Langenscheidts)
+ train_N = mkN "hamaxostichus" ; -- -i m. (http://la.wikipedia.org/wiki/Hamaxostichus)
+ travel_V = ResLat.useVPasV ( ComplSlash ( SlashV2a ( mkV2 "facere" ) ) ( DetCN ( DetQuant IndefArt NumSg ) ( UseN ( mkN "iter" "itineris" Neutr ) ) ) ) ; -- facio, feci, factum 3
+ tree_N = mkN "arbor" "arboris" feminine ; -- -oris f.
+ -- Not even in English implemented
+---- trousers_N = mkN "trousers" ;
+ ugly_A = mkA "foedus" ; -- 3 (Langenscheidts)
+ understand_V2 = mkV2 (mkV "intellegere" "intellego" "intellexi" "intellectum" ) ; -- intellego, intellexi, intellectum 3 (Langenscheidts)
+ university_N = mkN "universitas" "universitatis" feminine ; -- -atis f. (http://la.wikipedia.org/wiki/Universitas) and (Langenscheidts)
+ village_N = mkN "vicus" ; -- -i m. (Langenscheidts)
+ wait_V2 = mkV2 (mkV "exspectare") ; -- 1 (Langenscheidts)
+ walk_V = mkV "vadere" ; -- 3 (Langenscheidts)
+ warm_A = mkA "calidus" ; -- 3 (Langenscheidts)
+ war_N = mkN "bellum" ; -- -i m. (Langenscheidts)
+ watch_V2 = mkV2 (mkV "spectare") ; -- 1 (Langenscheidts)
+ water_N = mkN "aqua" ; -- -ae f. (Langenscheidts)
+ white_A = mkA "albus" ; -- 3 (Langenscheidts)
+ window_N = mkN "fenestra" ; -- -ae f. (Langenscheidts)
+ wine_N = mkN "vinum" ; -- -i n. (Langenscheidts)
+ win_V2 = mkV2 (mkV "vincere") ; -- vinco, vici, victum 3 (Langenscheidts)
+ woman_N = mkN "femina" ; -- -ae f. (Langenscheidts)
+ wonder_VQ = mkVQ (mkV "mirari") ; -- 1 (Langenscheidts)
+ wood_N = mkN "lignum" ; -- -i n. (Langenscheidts)
+ write_V2 = mkV2 (mkV "scribere") ; -- scribo, scripsi, scriptum 3 (Langenscheidts)
+ yellow_A = mkA "flavus" ; -- 3 (Langenscheidts)
+ young_A = mkA "adulescens" "adulescentis"; -- -entis (Langenscheidts)
+
+ do_V2 = mkV2 (mkV "agere") ; -- ago, egi, actum 3 (Langenscheidts)
+ now_Adv = mkAdv "nunc" ; -- (Langenscheidts)
+ already_Adv = mkAdv "iam" ; -- (Langenscheidts)
+ song_N = mkN "carmen" "carminis" neuter ; -- -inis n. (Langenscheidts)
+ add_V3 = mkV3 ( mkV "addere" "addo" "addidi" "additum" ) Acc_Prep to_P ; -- addo, addidi, additum 3 (Langenscheidts)
+ number_N = mkN "numerus" ; -- -i m.
+ put_V2 = mkV2 (mkV "ponere" "pono" "posui" "positum" ) ; -- pono, posui, positum 3 (Langenscheidts)
+ stop_V = mkV "sistere" "sisto" "steti" "statum" ; -- sisto, stiti/steti, statum 3 (Langenscheidts)
+ jump_V = mkV "saltare" ; -- 1 (Langenscheidts)
+
+ left_Ord = ss "sinister" ; -- -tra, -trum (Langenscheidts)
+ right_Ord = ss "dexter" ; -- -t(e)ra, -t(e)rum (Langenscheidts)
+ far_Adv = mkAdv "longe" ; -- (Langenscheidts)
+ correct_A = mkA "rectus" ; -- 3 (Langenscheidts)
+ dry_A = mkA "aridus" ; -- 3 (Langenscheidts)
+ dull_A = mkA "bardus" ; -- 3 (Langenscheidts) u. (http://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.04.0060:entry=bardus&highlight=dull)
+ full_A = mkA "plenus" ; -- 3 (Langenscheidts)
+ heavy_A = mkA "gravis" "grave" ; -- -e (Langenscheidts)
+ near_A = mkA "propinquus" ; -- 3 (comp. durch propior, -ius sup. durch proximus 3) (Langenscheidts)
+ rotten_A = mkA "perditus" ; -- 3 (Langenscheidts)
+ round_A = mkA "rotundus" ; -- 3 (Langenscheidts)
+ sharp_A = mkA "acer" "acris" ; -- acris, acre (Langenscheidts)
+ smooth_A = mkA "lubricus" ; -- 3 (Langenscheidts)
+ straight_A = mkA "rectus" ; -- 3 (Langenscheidts)
+ wet_A = mkA "umidus" ; -- 3 (Langenscheidts)
+ wide_A = mkA "vastus" ; -- 3 (Langenscheidts)
+ animal_N = mkN "animal" "animalis" neuter ; -- -alis n. (Langenscheidts)
+ ashes_N = mkN "cinis" "cineris" masculine ; -- -eris m. (Langenscheidts) & Bayer-Lindauer 33 1.2
+ back_N = mkN "tergum" ; -- -i n. (Langenscheidts)
+ bark_N = mkN "cortex" "corticis" ( variants { masculine ; feminine } ) ; -- -icis m./(f.) (Langenscheidts)
+ belly_N = mkN "venter" "ventris" masculine ; -- -tris m. (Langenscheidts)
+ blood_N = variants { mkN "sanguis" "sanguinis" masculine ; mkN "sangis" "sanginis" masculine} ; -- -inis m. (Langenscheidts)
+ bone_N = mkN "os" "ossis" neuter ; -- ossis n. (Langenscheidts)
+ breast_N = mkN "pectus""pectoris" neuter ; -- pectoris n. (Langenscheidts)
+ cloud_N = mkN "nubes" "nubis" feminine ; -- -is f. (Langenscheidts)
+ day_N = mkN "dies" "diei" ( variants { masculine ; feminine } ) ; -- -ei m./f. (Langenscheidts)
+ dust_N = mkN "pulvis" "pulveris" masculine; -- -veris m. (Langenscheidts)
+ ear_N = mkN "auris" "auris" feminine; -- -is f. (Langenscheidts)
+ earth_N = mkN "terra" ; -- -ae f. (Langenscheidts)
+ egg_N = mkN "ovum" ; -- -i n. (Langenscheidts)
+ eye_N = mkN "oculus" ; -- -i m. (Langenscheidts)
+ fat_N = mkN "omentum" ; -- -i n. (Langenscheidts)
+ feather_N = mkN "penna" ; -- -ae f. (Langenscheidts)
+ fingernail_N = mkN "unguis" "unguis" masculine ; -- -is m. (Langenscheidts)
+ fire_N = mkN "ignis" "ignis" masculine; -- -is m. (Langenscheidts)
+ flower_N = mkN "flos" "floris" masculine ; -- floris m. (Langenscheidts)
+ fog_N = mkN "nebula" ; -- -ae f. (Langenscheidts)
+ foot_N = mkN "pes" "pedis" masculine ; -- pedis m. (Langenscheidts)
+ forest_N = mkN "silva" ; -- -ae f. (Langenscheidts)
+ grass_N = mkN "gramen" "graminis" neuter ; -- -inis n. (Langenscheidts)
+ guts_N = mkN "intestinum" ; -- -i n. (Langenscheidts)
+ hair_N = mkN "capillus" ; -- -i m. (Langenscheidts)
+ hand_N = mkN "manus" "manus" feminine ; -- -us f. (Langenscheidts)
+ head_N = mkN "caput" "capitis" neuter ; -- -itis n. (Langenscheidts)
+ heart_N = mkN "cor" "cordis" neuter; -- cordis n. (Langenscheidts)
+ horn_N = mkN ( variants { "cornu" ; "cornus" } ) "cornus" neuter ; -- -us n. (Langenscheidts)
+ husband_N = mkN "maritus" ; -- -i m. (Langenscheidts)
+ ice_N = mkN "glacies" "glaciei" feminine ; -- -ei f. (Langenscheidts)
+ knee_N = mkN "genu" "genus" neuter ; -- -us n. (Langenscheidts)
+ leaf_N = mkN "folium" ; -- -i n. (Langenscheidts)
+ leg_N = bone_N ;
+ liver_N = variants { ( mkN "iecur" "iecoris" neuter ) ; ( mkN "iocur" "iocineris" neuter ) } ; -- iecoris/iocineris n. (Langenscheidts)
+ louse_N = mkN "pedis" "pedis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts)
+ mouth_N = mkN "os" "oris" neuter ; -- oris n. (Langenscheidts)
+ name_N = mkN "nomen" "nominis" neuter ; -- -inis n. (Langenscheidts)
+ neck_N = mkN "cervix" "cervicis" feminine ; -- -icis f. (meist pl.) (Langenscheidts)
+ night_N = mkN "nox" "noctis" feminine ; -- noctis f. (Langenscheidts)
+ nose_N = mkN ( variants { "nasus" ; "nasum" } ) ; -- -i m./n. (Langenscheidts)
+ person_N = mkN "persona" ; -- -ae f. (Langenscheidts)
+ rain_N = mkN "pluvia" ; -- -ae f. (Langenscheidts)
+ road_N = mkN "via" ; -- -ae f. (Langenscheidts)
+ root_N = mkN "radix" "radicis" feminine ; -- -icis f. (Langenscheidts)
+ rope_N = mkN "funis" "funis" ( variants { masculine ; feminine } ) ; -- -is m.(/f.) (Langenscheidts)
+ salt_N = mkN "sal" "salis" ( variants { masculine ; neuter } ) ; -- salis m./n. (Langenscheidts)
+ sand_N = mkN "arena" ; -- -ae f. (Langenscheidts)
+ seed_N = mkN "semen" "seminis" neuter ; -- -inis n. (Langenscheidts)
+ skin_N = mkN "cutis" "cutis" feminine ; -- -is f. (Langenscheidts)
+ sky_N = mkN "caelum" ; -- -i n. (Langenscheidts)
+ smoke_N = mkN "fumus" ; -- -i m. (Langenscheidts)
+ snow_N = mkN "nix" "nivis" feminine ; -- nivis (gen. pl. -ium) f. (Langenscheidts)
+ stick_N = mkN ( variants { "baculum" ; "baculus" } ) ; -- -i n./m.
+ tail_N = mkN "cauda" ; -- -ae f. (Langenscheidts)
+ tongue_N = mkN "lingua" ; -- -ae f. (Langenscheidts)
+ tooth_N = mkN "dens" "dentis" masculine; -- dentis m. (Langenscheidts)
+ wife_N = mkN "mulier" "mulieris" feminine; -- -eris f. (Langenscheidts)
+ wind_N = mkN "ventus" ; -- -i m. (Langenscheidts)
+ wing_N = mkN "ala" ; -- -ae f. (Langenscheidts)
+ worm_N = mkN "vermis" "vermis" masculine ; -- -is m. (Langenscheidts)
+ year_N = mkN "annus" ; -- -i m. (Langenscheidts)
+ blow_V = mkV "flare" ; -- flo 1 (Langenscheidts)
+ breathe_V = mkV "spirare" ; -- spiro 1 (Langenscheidts)
+ burn_V = mkV "ardere" ; -- ardeo, arsi, arsum 2 (Langenscheidts)
+ dig_V = mkV "fodere" "fodio" "fodi" "fossum" ; -- fodio, fodi, fossum 3 (Langenscheidts)
+ fall_V = mkV "caedere" "caedo" "cecidi" "caesum" ; -- caedo, cecidi, caesum 3 (Langenscheidts)
+ float_V = mkV "fluitere" ; -- fluito 1 (Langenscheidts)
+ flow_V = mkV "fluere" "fluo" "fluxi" "fluctum" ; -- fluo, fluxi, fluxum 3 (Langenscheidts)
+ fly_V = mkV "volare" ; -- volo 1 (Langenscheidts)
+ freeze_V = mkV "gelare" ; -- gelo 1 (Langenscheidts)
+ -- Category not yet implemented
+ give_V3 = mkV3 (mkV "donare" ) from_Prep to_Prep ;
+ laugh_V = mkV "ridere" ; -- rideo, -si, -sum 2 (Langenscheidts)
+ lie_V = mkV "iacere" ; -- iaceo, iacui, - 2 (Langenscheidts)
+ play_V = mkV "ludere" ; -- ludo, -si, -sum 3 (Langenscheidts)
+ sew_V = mkV "serere" "sero" "sevi" "satum" ; -- sero, sevi, satum 3 (Langenscheidts)
+ sing_V = mkV "cantare" ; -- canto 1 (Langenscheidts)
+ sit_V = mkV "sedere" ; -- sedeo, sedi, sessum 2 (Langenscheidts)
+ smell_V = mkV "olere" ; -- oleo, -ui, - 2 (Langenscheidts)
+ spit_V = mkV "spuere" "spuo" "spui" "sputum" ; -- spuo, -ui, -utum 3 (Langenscheidts)
+ stand_V = mkV "stare" ; -- sto, steti, staturus, statum 1 (Langenscheidts)
+ swell_V = mkV "intumescere" "intumesco" "intumui" ; -- intumesco, -mui, - 3 (Langenscheidts)
+ swim_V = mkV "natare" ; -- nato 1 (Langenscheidts)
+ think_V = mkV "cogitare" ; -- cogito 1 (Langenscheidts)
+ turn_V = mkV "vertere" ; -- verso 1 (Langenscheidts)
+ vomit_V = mkV "vomere" "vomo" "vomui" "vomitum" ; -- vomo, -ui, -itum 3 (Langenscheidts)
+
+ bite_V2 = mkV2 "mordere" ; -- mordeo, momordi, morsum 2 (Langenscheidts)
+ count_V2 = mkV2 (mkV "numerare") ; -- numero 1 (Langenscheidts)
+ cut_V2 = mkV2 (mkV "secare" ) ; -- seco, secui, sectum, secaturus 1 (Langenscheidts)
+ fear_V2 = mkV2 (mkV "timere") ; -- timeo, ui, - 2 (Langenscheidts)
+ fight_V2 = mkV2 (mkV "pugnare" ) ; -- pugno 1 (Langenscheidts)
+ hit_V2 = mkV2 ( mkV "ferire" ) ; -- ferio, -, - 4 (Langenscheidts)
+ hold_V2 = mkV2 ( mkV "tenere" ) ; -- teneo, tenui, tentum 2 (Langenscheidts)
+ hunt_V2 = mkV2 (mkV "agitare") ; -- agito 1 (Langenscheidts)
+ kill_V2 = mkV2 (mkV "necare") ; -- neco 1 (Langenscheidts)
+ pull_V2 = mkV2 (mkV "trahere" "traho" "traxi" "tractum" ) ; -- traho, traxi, tractum 3 (Langenscheidts)
+ push_V2 = mkV2 (mkV "premere" "premo" "pressi" "pressum" ) ; -- premo, pressi, pressum 3 (Langenscheidts)
+ rub_V2 = mkV2 (mkV "radere" "rado" "rasi" "rasum" ) ; -- raso, -si, -sum 3 (Langenscheidts)
+ scratch_V2 = mkV2 (mkV "scalpere" "scalpo" "scalpsi" "scalptum" ) ; -- scalpo, -psi, -ptum 3 (Langenscheidts)
+ split_V2 = mkV2 ( mkV "scindere" "scindo" "scidi" "scissum" ) ; -- scindo, -idi, -issum 3 (Langenscheidts)
+ squeeze_V2 = mkV2 (mkV "premere" "premo" "pressi" "pressum" ) ; -- premo, pressi, pressum 3 (Langenscheidts)
+ stab_V2 = mkV2 (mkV "transfigere" "transfigo" "transfixi" "transfixum") ; -- -figo, -fixi, fixum 3 (Langenscheidts)
+ suck_V2 = mkV2 (mkV "fellare") ; -- fel(l)o 1 (Langenscheidts)
+ throw_V2 = mkV2 (mkV "iacere" "iacio" "ieci" "iactum" ) ; -- iacio, ieci, iactum 3 (Langenscheidts)
+ tie_V2 = mkV2 (mkV "vincire") ; -- vincio, vinxi, vinctum 4 (Langenscheidts)
+ wash_V2 = mkV2 (mkV "lavare") ; -- lavo, lavi, lautum (lotum)/lavatum 1 (Langenscheidts)
+ wipe_V2 = mkV2 (mkV "detergere") ; -- detergeo, -tersi, -tersum 2/ detergo, -, - 3 (Langenscheidts)
+
+---- other_A = mkA "other" ;
+
+ grammar_N = mkN "grammatica" ; -- -ae/-orum f./n. (http://la.wikipedia.org/wiki/Grammatica) and (Langenscheidts)
+ language_N = mkN "lingua" ; -- -ae f. (Langenscheidts)
+ rule_N = mkN "regula" ; -- -ae f. (Langenscheidts)
+
+-- added 4/6/2007
+ john_PN = mkPN (mkN "Iohannes") ; -- (http://en.wikipedia.org/wiki/John_(given_name))
+ question_N = mkN "rogatio" "rogationis" feminine; -- -onis f. (Langenscheidts)
+ ready_A = mkA "paratus" ; -- 3 (Langenscheidts)
+ reason_N = mkN "causa" ; -- -ae f. (Langenscheidts)
+ today_Adv = mkAdv "hodie" ; -- (Langenscheidts)
+ uncertain_A = mkA "incertus" ; -- 3 (Langenscheidts)
+
+ alas_Interj = ss "eheu" ;
}

View File

@@ -0,0 +1,818 @@
diff --git a/lib/src/latin/MorphoLat.gf b/lib/src/latin/MorphoLat.gf
index 1236145..9c11286 100644
--- a/lib/src/latin/MorphoLat.gf
+++ b/lib/src/latin/MorphoLat.gf
@@ -1,197 +1,624 @@
-----# -path=.:../../prelude
---
-----1 A Simple Latlish Resource Morphology
-----
----- Aarne Ranta 2002 -- 2005
-----
----- This resource morphology contains definitions needed in the resource
----- syntax. To build a lexicon, it is better to use $ParadigmsLat$, which
----- gives a higher-level access to this module.
---
---resource MorphoLat = ResLat ** open Prelude, (Predef=Predef) in {
+--# -path=.:../prelude
+
+--1 A Simple Latin Resource Morphology.
+
+-- Herbert Lange 2013
+
+-- This resource morphology contains definitions needed in the resource
+-- syntax. To build a lexicon, it is better to use $ParadigmsLat$, which
+-- gives a higher-level access to this module.
+
+resource MorphoLat = ParamX, ResLat ** open Prelude in {
--
-- flags optimize=all ;
--
+
----2 Phonology
-----
----- To regulate the use of endings for both nouns, adjectives, and verbs:
---
---oper
--- y2ie : Str -> Str -> Str = \fly,s ->
--- let y = last (init fly) in
--- case y of {
--- "a" => fly + s ;
--- "e" => fly + s ;
--- "o" => fly + s ;
--- "u" => fly + s ;
--- _ => init fly + "ie" + s
--- } ;
---
---
-----2 Nouns
-----
----- For conciseness and abstraction, we define a worst-case macro for
----- noun inflection. It is used for defining special case that
----- only need one string as argument.
---
---oper
--- CommonNoun : Type = {s : Number => Case => Str} ;
---
--- nounGen : Str -> CommonNoun = \dog -> case last dog of {
--- "y" => nounY "dog" ;
--- "s" => nounS (init "dog") ;
--- _ => nounReg "dog"
--- } ;
---
----- These are auxiliaries to $nounGen$.
---
--- nounReg : Str -> CommonNoun = \dog ->
--- mkNoun dog (dog + "s") (dog + "'s") (dog + "s'");
--- nounS : Str -> CommonNoun = \kiss ->
--- mkNoun kiss (kiss + "es") (kiss + "'s") (kiss + "es'") ;
--- nounY : Str -> CommonNoun = \fl ->
--- mkNoun (fl + "y") (fl + "ies") (fl + "y's") (fl + "ies'") ;
---
---
+oper
+ -- sounds and sound changes
+ vowel : pattern Str = #( "a" | "e" | "o" | "u" | "y" );
+ semivowel : pattern Str = #( "j" | "w" );
+ consonant : pattern Str = #( "p" | "b" | "f" | "v" | "m" | "t" | "d" | "s" | "z" | "n" | "r" | "c" | "g" | "l" | "q" | "qu" | "h" );
+ stop : pattern Str = #( "p" | "b" | "t" | "d" | "c" | "q" | "q" );
+ fricative : pattern Str = #( "f" | "v" | "s" | "z" | "h" );
+ nasal : pattern Str = #( "m" | "n" );
+ liquid : pattern Str = #( "r" | "l" );
+-- consonant : pattern Str = #(#stop | #fricative | #nasal | #liquid ); -- not working
+----2 Nouns
+
+-- declensions
+oper
+
+ -- a-Declension
+ noun1 : Str -> Noun = \mensa ->
+ let
+ mensae = mensa + "e" ;
+ mensis = init mensa + "is" ;
+ in
+ mkNoun
+ mensa (mensa +"m") mensae mensae mensa mensa
+ mensae (mensa + "s") (mensa + "rum") mensis
+ Fem ;
+
+ -- o-Declension
+ noun2us : Str -> Noun = \servus ->
+ let
+ serv = Predef.tk 2 servus ;
+ servum = serv + "um" ;
+ servi = serv + "i" ;
+ servo = serv + "o" ;
+ in
+ mkNoun
+ servus servum servi servo servo (serv + "e")
+ servi (serv + "os") (serv + "orum") (serv + "is")
+ Masc ;
+
+ noun2er : Str -> Str -> Noun = \liber,libri ->
+ let
+ libr : Str = Predef.tk 1 libri;
+ librum = libr + "um" ;
+ libri = libr + "i" ;
+ libro = libr + "o" ;
+ in
+ mkNoun
+ liber librum libri libro libro liber
+ libri ( libr + "os" ) ( libr + "orum" ) ( libr + "is" )
+ Masc ;
+
+ noun2um : Str -> Noun = \bellum ->
+ let
+ bell = Predef.tk 2 bellum ;
+ belli = bell + "i" ;
+ bello = bell + "o" ;
+ bella = bell + "a" ;
+ in
+ mkNoun
+ bellum bellum belli bello bello (bell + "um")
+ bella bella (bell + "orum") (bell + "is")
+ Neutr ;
+
+ -- Consonant declension
+ noun3c : Str -> Str -> Gender -> Noun = \rex,regis,g ->
+ let
+ reg : Str = Predef.tk 2 regis ;
+ regemes : Str * Str = case g of {
+ Masc | Fem => < reg + "em" , reg + "es" > ;
+ Neutr => < rex , reg + "a" >
+ } ;
+ in
+ mkNoun
+ rex regemes.p1 regis ( reg + "i" ) ( reg + "e" ) rex
+ regemes.p2 regemes.p2 ( reg + "um" ) ( reg + "ibus" )
+ g ;
+
+ -- i-declension
+ noun3i : Str -> Str -> Gender -> Noun = \ars,artis,g ->
+ let
+ art : Str = Predef.tk 2 artis ;
+ artemes : Str * Str = case g of {
+ Masc | Fem => < art + "em" , art + "es" > ;
+ Neutr => case art of {
+ _ + #consonant + #consonant => < ars , art + "a" > ; -- maybe complete fiction but may be working
+ _ => < ars , art + "ia" > -- Bayer-Lindauer 32 4
+ }
+ } ;
+ arte : Str = case ars of {
+ _ + ( "e" | "al" | "ar" ) => art + "i" ;
+ _ => art + "e"
+ };
+ in
+ mkNoun
+ ars artemes.p1 artis ( art + "i" ) arte ars
+ artemes.p2 artemes.p2 ( art + "ium" ) ( art + "ibus" )
+ g ;
+
+ -- u-Declension
+
+ noun4us : Str -> Noun = \fructus ->
+ let
+ fructu = init fructus ;
+ fruct = init fructu
+ in
+ mkNoun
+ fructus (fructu + "m") fructus (fructu + "i") fructu fructus
+ fructus fructus (fructu + "um") (fruct + "ibus")
+ Masc ;
+
+ noun4u : Str -> Noun = \cornu ->
+ let
+ corn = init cornu ;
+ cornua = cornu + "a"
+ in
+ mkNoun
+ cornu cornu (cornu + "s") cornu cornu cornu
+ cornua cornua (cornu + "um") (corn + "ibus")
+ Neutr ;
+
+ -- e-Declension
+ noun5 : Str -> Noun = \res ->
+ let
+ re = init res ;
+ rei = re + "i"
+ in
+ mkNoun
+ res (re+ "m") rei rei re res
+ res res (re + "rum") (re + "bus")
+ Fem ;
+
+ -- smart paradigms
+
+ noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g ->
+ let s : Noun = case <verbum,verbi> of {
+ <_ + "a", _ + "ae"> => noun1 verbum ;
+ <_ + "us", _ + "i"> => noun2us verbum ;
+ <_ + "um", _ + "i"> => noun2um verbum ;
+ <_ + ( "er" | "ir" ) , _ + "i"> => noun2er verbum verbi ;
+
+ <_ + "us", _ + "us"> => noun4us verbum ;
+ <_ + "u", _ + "us"> => noun4u verbum ;
+ <_ + "es", _ + "ei"> => noun5 verbum ;
+ _ => noun3 verbum verbi g
+ }
+ in
+ nounWithGen g s ;
+
+ noun : Str -> Noun = \verbum ->
+ case verbum of {
+ _ + "a" => noun1 verbum ;
+ _ + "us" => noun2us verbum ;
+ _ + "um" => noun2um verbum ;
+ _ + ( "er" | "ir" ) => noun2er verbum ( (Predef.tk 2 verbum) + "ri" ) ;
+ _ + "u" => noun4u verbum ;
+ _ + "es" => noun5 verbum ;
+ _ => Predef.error ("3rd declinsion cannot be applied to just one noun form " ++ verbum)
+ } ;
+
+
+ noun12 : Str -> Noun = \verbum ->
+ case verbum of {
+ _ + "a" => noun1 verbum ;
+ _ + "us" => noun2us verbum ;
+ _ + "um" => noun2um verbum ;
+ _ + ( "er" | "ir" ) =>
+ let
+ puer = verbum ;
+ pue = Predef.tk 1 puer ;
+ e = case puer of {
+ -- Exception of nouns where e is part of the word stem Bayer-Lindauer 27 4.2
+ "puer" | "socer" | "gener" | "vesper" => "e" ;
+ -- Exception of adjectives where e is part of the word stem 31 3.2
+ ("asper" | "miser" | "tener" | "frugifer") + _ => "e";
+ -- "liber" => ( "e" | "" ) ; conflicting with noun liber
+ _ => ""
+ } ;
+ pu = Predef.tk 1 pue ;
+ in noun2er verbum ( pu + e + "ri" );
+ _ => Predef.error ("noun12 does not apply to" ++ verbum)
+ } ;
+
+ noun3 : Str -> Str -> Gender -> Noun = \rex,regis,g ->
+ let
+ reg : Str = Predef.tk 2 regis ;
+ in
+ case <rex,reg> of {
+ -- Bos has to many exceptions to be handled correctly
+ < "bos" , "bov" > => mkNoun "bos" "bovem" "bovis" "bovi" "bove" "bos" "boves" "boves" "boum" "bobus" g;
+ -- Some exceptions with no fitting rules
+ < "nix" , _ > => noun3i rex regis g; -- Langenscheidts
+ < ( "sedes" | "canis" | "iuvenis" | "mensis" | "sal" ) , _ > => noun3c rex regis g ; -- Bayer-Lindauer 31 3 and Exercitia Latina 32 b), sal must be handled here because it will be handled wrongly by the next rule
+ < _ + ( "e" | "al" | "ar" ) , _ > => noun3i rex regis g ; -- Bayer-Lindauer 32 2.3
+ ( < _ + "ter" , _ + "tr" >
+ | < _ + "en" , _ + "in" >
+ | < _ + "s" , _ + "r" >
+ ) => noun3c rex regis g ; -- might not be right but seems fitting for Bayer-Lindauer 31 2.2
+ < _ , _ + #consonant + #consonant > => noun3i rex regis g ; -- Bayer-Lindauer 32 2.2
+ < _ + ( "is" | "es" ) , _ > =>
+ if_then_else
+ Noun
+ -- assumption based on Bayer-Lindauer 32 2.1
+ ( pbool2bool ( Predef.eqInt ( Predef.length rex ) ( Predef.length regis ) ) )
+ ( noun3i rex regis g )
+ ( noun3c rex regis g ) ;
+ _ => noun3c rex regis g
+ } ;
+
+
----3 Proper names
-----
----- Regular proper names are inflected with "'s" in the genitive.
---
--- nameReg : Str -> Gender -> {s : Case => Str} = \john,g ->
--- {s = table {Gen => john + "'s" ; _ => john} ; g = g} ;
---
+
----2 Determiners
---
--- mkDeterminer : Number -> Str -> {s,sp : Str ; n : Number} = \n,s ->
--- {s,sp = s ; n = n} ;
---
+
----2 Pronouns
-----
----- Here we define personal pronouns.
-----
----- We record the form "mine" and the gender for later use.
---
--- Pronoun : Type =
--- {s : Case => Str ; a : Agr} ;
---
--- mkPronoun : (_,_,_,_ : Str) -> Number -> Person -> Gender -> Pronoun =
--- \I,me,my,mine,n,p,g ->
--- {s = table {Nom => I ; Acc => me ; Gen => my} ;
--- a = toAgr n p g
--- } ;
---
--- human : Gender = Masc ; --- doesn't matter
---
--- pronI = mkPronoun "I" "me" "my" "mine" Sg P1 human ;
--- pronYouSg = mkPronoun "you" "you" "your" "yours" Sg P2 human ; -- verb agr OK
--- pronHe = mkPronoun "he" "him" "his" "his" Sg P3 Masc ;
--- pronShe = mkPronoun "she" "her" "her" "hers" Sg P3 Fem ;
--- pronIt = mkPronoun "it" "it" "its" "it" Sg P3 Neutr ;
---
--- pronWe = mkPronoun "we" "us" "our" "ours" Pl P1 human ;
--- pronYouPl = mkPronoun "you" "you" "your" "yours" Pl P2 human ;
--- pronThey = mkPronoun "they" "them" "their" "theirs" Pl P3 human ; ---
---
---
+
----2 Adjectives
-----
----- To form the adjectival and the adverbial forms, two strings are needed
----- in the worst case. (First without degrees.)
---
--- Adjective = {s : AForm => Str} ;
---
----- However, most adjectives can be inflected using the final character.
----- N.B. this is not correct for "shy", but $mkAdjective$ has to be used.
---
--- regAdjective : Str -> Adjective = \free ->
--- let
--- e = last free ;
--- fre = init free ;
--- freely = case e of {
--- "y" => fre + "ily" ;
--- _ => free + "ly"
--- } ;
--- fre = case e of {
--- "e" => fre ;
--- "y" => fre + "i" ;
--- _ => free
--- }
--- in
--- mkAdjective free (fre + "er") (fre + "est") freely ;
---
----- Many adjectives are 'inflected' by adding a comparison word.
---
--- adjDegrLong : Str -> Adjective = \ridiculous ->
--- mkAdjective
--- ridiculous
--- ("more" ++ ridiculous)
--- ("most" ++ ridiculous)
--- ((regAdjective ridiculous).s ! AAdv) ;
---
---
+oper
+ comp_super : Noun -> ( Agr => Str ) * ( Agr => Str ) =
+ \bonus ->
+ case bonus.s!Sg!Gen of {
+ -- Exception Bayer-Lindauer 50 1
+ "boni" => < comp "meli" , table { Ag g n c => table Gender [ (noun2us "optimus").s ! n ! c ; (noun1 "optima").s ! n ! c ; (noun2um "optimum").s ! n ! c ] ! g } > ;
+ "mali" => < comp "pei" , super "pessus" > ;
+ "magni" => < comp "mai" , table { Ag g n c => table Gender [ (noun2us "maximus").s ! n ! c ; (noun1 "maxima").s ! n ! c ; (noun2um "maximum").s ! n ! c ] ! g } > ;
+ "parvi" => < comp "mini" , table { Ag g n c => table Gender [ (noun2us "minimus").s ! n ! c ; (noun1 "minima").s ! n ! c ; (noun2um "minimum").s ! n ! c ] ! g } >;
+ --Exception Bayer-Lindauer 50.3
+ "novi" => < comp "recenti" , super "recens" > ;
+ "feri" => < comp "feroci" , super "ferox" > ;
+ "sacris" => < comp "sancti" , super "sanctus" >;
+ "frugiferi" => < comp "fertilis" , super "fertilis" > ;
+ "veti" => < comp "vetusti" , super "vetustus" >;
+ "inopis" => < comp "egentis" , super "egens" >;
+ -- Default Case use Singular Genetive to determine comparative
+ sggen => < comp sggen , super (bonus.s!Sg!Nom) >
+ } ;
+
+ comp : Str -> ( Agr => Str ) = \boni -> -- Bayer-Lindauer 46 2
+ case boni of {
+ bon + ( "i" | "is" ) =>
+ table
+ {
+ Ag ( Fem | Masc ) Sg c => table Case [ bon + "ior" ;
+ bon + "iorem" ;
+ bon + "ioris" ;
+ bon + "iori" ;
+ bon + "iore";
+ bon + "ior" ] ! c ;
+ Ag ( Fem | Masc ) Pl c => table Case [ bon + "iores" ;
+ bon + "iores" ;
+ bon + "iorum" ;
+ bon + "ioribus" ;
+ bon + "ioribus" ;
+ bon + "iores" ] ! c ;
+ Ag Neutr Sg c => table Case [ bon + "ius" ;
+ bon + "ius" ;
+ bon + "ioris" ;
+ bon + "iori" ;
+ bon + "iore" ;
+ bon + "ius" ] ! c ;
+ Ag Neutr Pl c => table Case [ bon + "iora" ;
+ bon + "iora" ;
+ bon + "iorum" ;
+ bon + "ioribus" ;
+ bon + "ioribus" ;
+ bon + "iora" ] ! c
+ }
+ } ;
+
+ super : Str -> ( Agr => Str ) = \bonus ->
+ let
+ prefix : Str = case bonus of {
+ ac + "er" => bonus ; -- Bayer-Lindauer 48 2
+ faci + "lis" => faci + "l" ; -- Bayer-Lindauer 48 3
+ feli + "x" => feli + "c" ; -- Bayer-Lindauer 48 1
+ ege + "ns" => ege + "nt" ; -- Bayer-Lindauer 48 1
+ bon + ( "us" | "is") => bon -- Bayer-Lindauer 48 1
+ };
+ suffix : Str = case bonus of {
+ ac + "er" => "rim" ; -- Bayer-Lindauer 48 2
+ faci + "lis" => "lim" ; -- Bayer-Lindauer 48 3
+ _ => "issim" -- Bayer-Lindauer 48 1
+ };
+ in
+ table {
+ Ag Fem n c => (noun1 ( prefix + suffix + "a" )).s ! n ! c ;
+ Ag Masc n c => (noun2us ( prefix + suffix + "us" )).s ! n ! c;
+ Ag Neutr n c => (noun2um ( prefix + suffix + "um" )).s ! n ! c
+ } ;
+
+ adj12 : Str -> Adjective = \bonus ->
+ let
+ bon : Str = case bonus of {
+ -- Exceptions Bayer-Lindauer 41 3.2
+ ("asper" | "liber" | "miser" | "tener" | "frugifer") => bonus ;
+ -- Usual cases
+ pulch + "er" => pulch + "r" ;
+ bon + "us" => bon ;
+ _ => Predef.error ("adj12 does not apply to" ++ bonus)
+ } ;
+ nbonus = (noun12 bonus) ;
+ compsup : ( Agr => Str ) * ( Agr => Str ) =
+ -- Bayer-Lindauer 50 4
+ case bonus of {
+ (_ + #vowel + "us" ) |
+ (_ + "r" + "us" ) =>
+ < table { Ag g n c => table Gender [ ( noun12 bonus ).s ! n ! c ; ( noun12 ( bon + "a" ) ).s ! n ! c ; ( noun12 ( bon + "um" ) ).s ! n ! c ] ! g } ,
+ table { Ag g n c => table Gender [ ( noun12 bonus ).s ! n ! c ; ( noun12 ( bon + "a" ) ).s ! n ! c ; ( noun12 ( bon + "um" ) ).s ! n ! c ] ! g } > ;
+ _ => comp_super nbonus
+ };
+ advs : Str * Str =
+ case bonus of {
+ -- Bayer-Lindauer 50 4
+ idon + ( #vowel | "r" ) + "us" => < "magis" , "maxime" > ;
+ _ => < "" , "" >
+ }
+ in
+ mkAdjective
+ nbonus
+ (noun1 (bon + "a"))
+ (noun2um (bon + "um"))
+ < compsup.p1 , advs.p1 >
+ < compsup.p2 , advs.p2 > ;
+
+ adj3x : (_,_ : Str) -> Adjective = \acer,acris ->
+ let
+ ac = Predef.tk 2 acer ;
+ acrise : Str * Str = case acer of {
+ _ + "er" => <ac + "ris", ac + "re"> ;
+ _ + "is" => <acer , ac + "e"> ;
+ _ => <acer , acer>
+ } ;
+ nacer = (noun3adj acer acris Masc) ;
+ compsuper = comp_super nacer;
+ in
+ mkAdjective
+ nacer
+ (noun3adj acrise.p1 acris Fem)
+ (noun3adj acrise.p2 acris Neutr)
+ < compsuper.p1 , "" >
+ < compsuper.p2 , "" >
+ ;
+
+-- smart paradigms
+
+ adj123 : Str -> Str -> Adjective = \bonus,boni ->
+ case <bonus,boni> of {
+ <_ + ("us" | "er"), _ + "i" > => adj12 bonus ;
+ <_ + ("us" | "er"), _ + "is"> => adj3x bonus boni ;
+ <_ , _ + "is"> => adj3x bonus boni ;
+ <_ + "is" , _ + "e" > => adj3x bonus boni ;
+ _ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni)
+ } ;
+
+ adj : Str -> Adjective = \bonus ->
+ case bonus of {
+ _ + ("us" | "er") => adj12 bonus ;
+ facil + "is" => adj3x bonus bonus ;
+ feli + "x" => adj3x bonus (feli + "cis") ;
+ _ => adj3x bonus (bonus + "is") ---- any example?
+ } ;
+
+
----3 Verbs
-----
----- The worst case needs five forms. (The verb "be" is treated separately.)
---
--- mkVerb4 : (_,_,_,_: Str) -> Verb = \go,goes,went,gone ->
--- let going = case last go of {
--- "e" => init go + "ing" ;
--- _ => go + "ing"
--- }
--- in
--- mkVerb go goes went gone going ;
---
----- This is what we use to derive the irregular forms in almost all cases
---
--- mkVerbIrreg : (_,_,_ : Str) -> Verb = \bite,bit,bitten ->
--- let bites = case last bite of {
--- "y" => y2ie bite "s" ;
--- "s" => init bite + "es" ;
--- _ => bite + "s"
--- }
--- in mkVerb4 bite bites bit bitten ;
---
----- This is used to derive regular forms.
---
--- mkVerbReg : Str -> Verb = \soak ->
--- let
--- soaks = case last soak of {
--- "y" => y2ie soak "s" ;
--- "s" => init soak + "es" ;
--- _ => soak + "s"
--- } ;
--- soaked = case last soak of {
--- "e" => init soak + "s" ;
--- _ => soak + "ed"
--- }
--- in
--- mkVerb4 soak soaks soaked soaked ;
---
--- verbGen : Str -> Verb = \kill -> case last kill of {
--- "y" => verbP3y (init kill) ;
--- "e" => verbP3e (init kill) ;
--- "s" => verbP3s (init kill) ;
--- _ => regVerbP3 kill
--- } ;
---
----- These are just auxiliary to $verbGen$.
---
--- regVerbP3 : Str -> Verb = \walk ->
--- mkVerbIrreg walk (walk + "ed") (walk + "ed") ;
--- verbP3s : Str -> Verb = \kiss ->
--- mkVerb4 kiss (kiss + "es") (kiss + "ed") (kiss + "ed") ;
--- verbP3e : Str -> Verb = \love ->
--- mkVerb4 love (love + "s") (love + "d") (love + "d") ;
--- verbP3y : Str -> Verb = \cr ->
--- mkVerb4 (cr + "y") (cr + "ies") (cr + "ied") (cr + "ied") ;
---
------ The particle always appears right after the verb.
---
--- verbPart : Verb -> Str -> Verb = \v,p ->
--- {s = \\f => v.s ! f ++ p ; isRefl = v.isRefl} ;
---
--- verbNoPart : Verb -> Verb = \v -> verbPart v [] ;
---
---
---} ;
---
+
+-- 1./a-conjugation
+
+ verb1 : Str -> Verb = \laudare ->
+ let
+ lauda = Predef.tk 2 laudare ;
+ laud = init lauda ;
+ laudav = lauda + "v" ;
+ pres_stem = lauda ;
+ pres_ind_base = lauda ;
+ pres_conj_base = laud + "e" ;
+ impf_ind_base = lauda + "ba" ;
+ impf_conj_base = lauda + "re" ;
+ fut_I_base = lauda + "bi" ;
+ imp_base = lauda ;
+ perf_stem = laudav ;
+ perf_ind_base = laudav ;
+ perf_conj_base = laudav + "eri" ;
+ pqperf_ind_base = laudav + "era" ;
+ pqperf_conj_base = laudav + "isse" ;
+ fut_II_base = laudav + "eri" ;
+ part_stem = lauda + "t" ;
+ in
+ mkVerb laudare pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+
+ -- 2./e-conjugation
+
+ verb2 : Str -> Verb = \monere ->
+ let
+ mone = Predef.tk 2 monere ;
+ mon = init mone ;
+ monu = mon + "u" ;
+ pres_stem = mone ;
+ pres_ind_base = mone ;
+ pres_conj_base = mone + "a" ;
+ impf_ind_base = mone + "ba" ;
+ impf_conj_base = mone + "re" ;
+ fut_I_base = mone + "bi" ;
+ imp_base = mone ;
+ perf_stem = monu ;
+ perf_ind_base = monu ;
+ perf_conj_base = monu + "eri" ;
+ pqperf_ind_base = monu + "era" ;
+ pqperf_conj_base = monu + "isse" ;
+ fut_II_base = monu + "eri" ;
+ part_stem = mon + "it" ;
+ in
+ mkVerb monere pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+
+-- 3./Consonant conjugation
+
+ verb3c : ( regere,rexi,rectus : Str ) -> Verb = \regere,rexi,rectus ->
+ let
+ rege = Predef.tk 2 regere ;
+ reg = init rege ;
+ rex = init rexi ;
+ rect = Predef.tk 2 rectus ;
+ pres_stem = reg ;
+ pres_ind_base = reg ;
+ pres_conj_base = reg + "a" ;
+ impf_ind_base = reg + "eba" ;
+ impf_conj_base = reg + "ere" ;
+ fut_I_base = rege ;
+ imp_base = reg ;
+ perf_stem = rex ;
+ perf_ind_base = rex ;
+ perf_conj_base = rex + "eri" ;
+ pqperf_ind_base = rex + "era" ;
+ pqperf_conj_base = rex + "isse" ;
+ fut_II_base = rex + "eri" ;
+ part_stem = rect ;
+ in
+ mkVerb regere pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+
+-- 3./i-conjugation
+
+ verb3i : ( capere,cepi,captus : Str ) -> Verb = \capere,cepi,captus ->
+ let
+ cape = Predef.tk 2 capere ;
+ cap = init cape ;
+ capi = cap + "i" ;
+ cep = init cepi ;
+ capt = Predef.tk 2 captus ;
+ pres_stem = capi ;
+ pres_ind_base = capi ;
+ pres_conj_base = capi + "a" ;
+ impf_ind_base = capi + "eba" ;
+ impf_conj_base = cape + "re" ;
+ fut_I_base = capi + "e" ;
+ imp_base = cap ;
+ perf_stem = cep ;
+ perf_ind_base = cep ;
+ perf_conj_base = cep + "eri" ;
+ pqperf_ind_base = cep + "era" ;
+ pqperf_conj_base = cep + "isse" ;
+ fut_II_base = cep + "eri" ;
+ part_stem = capt ;
+ in
+ mkVerb capere pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+
+-- 4./i-conjugation
+
+ verb4 : Str -> Verb = \audire ->
+ let
+ audi = Predef.tk 2 audire ;
+ audiv = audi + "v" ;
+ pres_stem = audi ;
+ pres_ind_base = audi ;
+ pres_conj_base = audi + "a" ;
+ impf_ind_base = audi + "eba" ;
+ impf_conj_base = audi + "re" ;
+ fut_I_base = audi +"e" ;
+ imp_base = audi ;
+ perf_stem = audiv ;
+ perf_ind_base = audiv ;
+ perf_conj_base = audiv + "eri" ;
+ pqperf_ind_base = audiv + "era" ;
+ pqperf_conj_base = audiv + "isse" ;
+ fut_II_base = audiv + "eri" ;
+ part_stem = audi + "t" ;
+ in
+ mkVerb audire pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base
+ perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ;
+
+-- deponent verb
+
+-- 1./a-conjugation
+ deponent1 : Str -> Verb = \hortari ->
+ let
+ horta = Predef.tk 2 hortari ;
+ hort = init horta ;
+ pres_stem = horta ;
+ pres_ind_base = horta ;
+ pres_conj_base = hort + "e" ;
+ impf_ind_base = horta + "ba" ;
+ impf_conj_base = horta + "re" ;
+ fut_I_base = horta + "bi" ;
+ imp_base = horta ;
+ part_stem = horta + "t" ;
+ in
+ mkDeponent hortari pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base part_stem ;
+
+-- 2./e-conjugation
+ deponent2 : Str -> Verb = \vereri ->
+ let
+ vere = Predef.tk 2 vereri ;
+ ver = init vere ;
+ pres_stem = vere ;
+ pres_ind_base = vere ;
+ pres_conj_base = vere + "a" ;
+ impf_ind_base = vere + "ba" ;
+ impf_conj_base = vere + "re" ;
+ fut_I_base = vere + "bi" ;
+ imp_base = vere ;
+ part_stem = ver + "it" ;
+ in
+ mkDeponent vereri pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base part_stem ;
+
+-- 3./Consonant conjugation
+ deponent3c : ( sequi,sequor,secutus : Str ) -> Verb = \sequi,sequor,secutus ->
+ let
+ sequ = Predef.tk 2 sequor ;
+ secu = Predef.tk 3 secutus ;
+ pres_stem = sequ ;
+ pres_ind_base = sequ ;
+ pres_conj_base = sequ + "a" ;
+ impf_ind_base = sequ + "eba" ;
+ impf_conj_base = sequ + "ere" ;
+ fut_I_base = sequ + "e" ;
+ imp_base = sequi ;
+ part_stem = secu + "t" ;
+ in
+ mkDeponent sequi pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base part_stem ;
+
+-- 3./i-conjugation
+ deponent3i : ( pati,patior,passus : Str ) -> Verb = \pati,patior,passus ->
+ let
+ pat = init pati ;
+ pass = Predef.tk 2 passus ;
+ pres_stem = pati ;
+ pres_ind_base = pati ;
+ pres_conj_base = pati + "a" ;
+ impf_ind_base = pati + "eba" ;
+ impf_conj_base = pat + "ere" ;
+ fut_I_base = pati + "e" ;
+ imp_base = pati ;
+ part_stem = pass ;
+ in
+ mkDeponent pati pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base part_stem ;
+
+-- 4./i-conjugation
+ deponent4 : Str -> Verb = \largiri ->
+ let
+ largi = Predef.tk 2 largiri ;
+ pres_stem = largi ;
+ pres_ind_base = largi ;
+ pres_conj_base = largi + "a" ;
+ impf_ind_base = largi + "eba" ;
+ impf_conj_base = largi + "re" ;
+ fut_I_base = largi + "e" ;
+ imp_base = largi ;
+ part_stem = largi + "t" ;
+ in
+ mkDeponent largiri pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base imp_base part_stem ;
+
+-- smart paradigms
+
+ verb_ippp : (iacere,iacio,ieci,iactus : Str) -> Verb =
+ \iacere,iacio,ieci,iactus ->
+ case iacere of {
+ _ + "ari" => deponent1 iacere ;
+ _ + "eri" => deponent2 iacere ;
+ _ + "iri" => deponent4 iacere ;
+ _ + "i" => case iacio of {
+ _ + "ior" => deponent3i iacere iacio iactus ;
+ _ => deponent3c iacere iacio iactus
+ } ;
+ _ + "are" => verb1 iacere ;
+ _ + "ire" => verb4 iacere ; -- ieci iactus ;
+ _ + "ere" => case iacio of {
+ _ + #consonant + "o" => verb3c iacere ieci iactus ; -- Bayer-Lindauer 74 1
+ _ + "eo" => verb2 iacere ;
+ _ + ( "i" | "u" ) + "o" => verb3i iacere ieci iactus ; -- Bayer-Linduaer 74 1
+ _ => verb3c iacere ieci iactus
+ } ;
+ _ => Predef.error ("verb_ippp: illegal infinitive form" ++ iacere)
+ } ;
+
+ verb : (iacere : Str) -> Verb =
+ \iacere ->
+ case iacere of {
+ _ + "ari" => deponent1 iacere ;
+ _ + "eri" => deponent2 iacere ;
+ _ + "iri" => deponent4 iacere ;
+ _ + "are" => verb1 iacere ;
+ _ + "ire" => -- let iaci = Predef.tk 2 iacere in
+ verb4 iacere ; -- (iaci + "vi") (iaci + "tus") ;
+ _ + "ere" => verb2 iacere ;
+ _ => Predef.error ("verb: illegal infinitive form" ++ iacere)
+ } ;
+}
\ No newline at end of file

View File

@@ -0,0 +1,194 @@
diff --git a/lib/src/latin/NounLat.gf b/lib/src/latin/NounLat.gf
index 01eb80a..ea60fbd 100644
--- a/lib/src/latin/NounLat.gf
+++ b/lib/src/latin/NounLat.gf
@@ -1,132 +1,151 @@
-concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
+concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in {
flags optimize=all_subs ;
lin
- DetCN det cn = {
- s = \\c => det.s ! cn.g ! c ++ cn.s ! det.n ! c ;
- n = det.n ; g = cn.g ; p = P3
+ DetCN det cn = -- Det -> CN -> NP
+ {
+ s = \\c => det.s ! cn.g ! c ++ cn.preap.s ! (Ag cn.g det.n c) ++ cn.s ! det.n ! c ++ cn.postap.s ! (Ag cn.g det.n c) ;
+ n = det.n ; g = cn.g ; p = P3 ;
} ;
--- UsePN pn = pn ** {a = agrgP3 Sg pn.g} ;
- UsePron p = p ;
+ UsePN pn = lin NP { s = pn.s ! Sg ; g = pn.g ; n = Sg ; p = P3 } ;
+
+ UsePron p = -- Pron -> Np
+ {
+ g = p.g ;
+ n = p.n ;
+ p = p.p ;
+ s = \\c => case c of {
+ Nom => p.pers ! PronDrop ! PronRefl ; -- Drop pronoun in nominative case
+ _ => p.pers ! PronNonDrop ! PronRefl -- but don't drop it otherwise
+ } ! c ;
+ } ;
-- PredetNP pred np = {
-- s = \\c => pred.s ++ np.s ! c ;
-- a = np.a
-- } ;
--
-- PPartNP np v2 = {
-- s = \\c => np.s ! c ++ v2.s ! VPPart ;
-- a = np.a
-- } ;
--
-- RelNP np rs = {
-- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
-- a = np.a
-- } ;
--
-- AdvNP np adv = {
-- s = \\c => np.s ! c ++ adv.s ;
-- a = np.a
-- } ;
--
-- DetQuantOrd quant num ord = {
-- s = quant.s ! num.hasCard ! num.n ++ num.s ++ ord.s ;
-- sp = quant.sp ! num.hasCard ! num.n ++ num.s ++ ord.s ;
-- n = num.n
-- } ;
--
DetQuant quant num = {
- s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! g ! c ;
- sp = \\g,c => quant.sp ! num.n ! g ! c ++ num.s ! g ! c ;
+ s = \\g,c => quant.s ! Ag g num.n c ++ num.s ! g ! c ;
+ sp = \\g,c => quant.sp ! Ag g num.n c ++ num.s ! g ! c ;
n = num.n
} ;
- DetNP det = {
- s = det.sp ! Neutr ;
- g = Neutr ; n = det.n ; p = P3
- } ;
+ -- DetNP det = {
+ -- s = det.sp ! Neutr ;
+ -- g = Neutr ; n = det.n ; p = P3
+ -- } ;
-- PossPron p = {
-- s = \\_,_ => p.s ! Gen ;
-- sp = \\_,_ => p.sp
-- } ;
--
NumSg = {s = \\_,_ => [] ; n = Sg} ;
NumPl = {s = \\_,_ => [] ; n = Pl} ;
-- NumCard n = n ** {hasCard = True} ;
--
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
-- OrdDigits n = {s = n.s ! NOrd} ;
--
-- NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
-- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
--
-- AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
--
-- OrdSuperl a = {s = a.s ! AAdj Superl} ;
DefArt = {
- s = \\_,_,_ => [] ;
- sp = \\n,g => (personalPronoun g n P3).s
+ s = \\_ => [] ;
+ sp = \\_ => [] ;
} ;
--- IndefArt = {
--- s = \\c,n => case <n,c> of {
--- <Sg,False> => artIndef ;
--- _ => []
--- } ;
--- sp = \\c,n => case <n,c> of {
--- <Sg,False> => "one" ;
--- <Pl,False> => "ones" ;
--- _ => []
--- }
--- } ;
---
--- MassNP cn = {
--- s = cn.s ! Sg ;
--- a = agrP3 Sg
--- } ;
---
- UseN n = n ;
--- UseN2 n = n ;
------b UseN3 n = n ;
+ IndefArt = {
+ s = \\_ => [] ;
+ sp = \\_ => [] ;
+ } ;
+
+ -- MassNP cn = {
+ -- s = cn.s ! Sg ;
+ -- a = Ag cn.g Sg
+ -- } ;
+
+--2 Common Nouns
+ UseN n = -- N -> CN
+ lin CN ( n ** {preap, postap = {s = \\_ => "" } } ) ;
+
+ UseN2 n2 = -- N2 -> CN
+ lin CN ( n2 ** {preap, postap = {s = \\_ => "" } } ) ;
+ -----b UseN3 n = n ;
--
-- Use2N3 f = {
-- s = \\n,c => f.s ! n ! Nom ;
-- g = f.g ;
-- c2 = f.c2
-- } ;
--
-- Use3N3 f = {
-- s = \\n,c => f.s ! n ! Nom ;
-- g = f.g ;
-- c2 = f.c3
-- } ;
--
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; g = f.g} ;
-- ComplN3 f x = {
-- s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ;
-- g = f.g ;
-- c2 = f.c3
-- } ;
- AdjCN ap cn = {
- s = \\n,c => preOrPost ap.isPre (ap.s ! cn.g ! n ! c) (cn.s ! n ! c) ;
- g = cn.g
+ param
+ AdjPos = Pre | Post ;
+ lin
+ AdjCN ap cn = -- AP -> CN -> CN
+ let pos = variants { Post ; Pre }
+ in
+ {
+ -- s = \\n,c => preOrPost ap.isPre (ap.s ! cn.g ! n ! c) (cn.s ! n ! c) ;
+ -- s = \\n,c => ( cn.s ! n ! c ) ++ ( ap.s ! AdjPhr cn.g n c) ; -- always add adjectives after noun?
+ s = cn.s ;
+ postap = case pos of { Pre => cn.postap ; Post => { s = \\a => ap.s ! a ++ cn.postap.s ! a } } ;
+ preap = case pos of { Pre => { s = \\a => ap.s ! a ++ cn.preap.s ! a } ; Post => cn.preap } ;
+ -- variants { postap = ConsAP postap ap ; preap = ConsAP preap ap } ; -- Nice if that would work
+ g = cn.g
} ;
-- RelCN cn rs = {
-- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ;
-- g = cn.g
-- } ;
- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
+-- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
-- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;
--
-- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c ; g = cn.g} ;
--
}

View File

@@ -0,0 +1,120 @@
diff --git a/lib/src/latin/ParadigmsLat.gf b/lib/src/latin/ParadigmsLat.gf
index 808d46b..a45cd4a 100644
--- a/lib/src/latin/ParadigmsLat.gf
+++ b/lib/src/latin/ParadigmsLat.gf
@@ -1,65 +1,102 @@
---# -path=.:../abstract:../../prelude:../common
+--# -path=.:../abstract:../prelude:../common
--1 Latin Lexical Paradigms
--
--- Aarne Ranta 2008
+-- Aarne Ranta 2008, Extended Herbert Lange 2013
--
-- 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 ParadigmsLat = open
(Predef=Predef),
Prelude,
ResLat,
+ MorphoLat,
CatLat
in {
--2 Parameters
--
-- To abstract over gender names, we define the following identifiers.
oper
masculine : Gender ;
feminine : Gender ;
neuter : Gender ;
mkN = overload {
mkN : (verbum : Str) -> N
- = \n -> noun n ** {lock_N = <>} ;
+ = \n -> lin N ( noun n ) ;
mkN : (verbum, verbi : Str) -> Gender -> N
- = \x,y,z -> noun_ngg x y z ** {lock_N = <>} ;
+ = \x,y,z -> lin N ( noun_ngg x y z ) ;
} ;
mkA = overload {
mkA : (verbum : Str) -> A
- = \n -> adj n ** {isPre = False ; lock_A = <>} ;
+ = \n -> lin A ( adj n ** {isPre = False } ) ;
mkA : (verbum, verbi : Str) -> A
- = \x,y -> adj123 x y ** {isPre = False ; lock_A = <>} ;
+ = \x,y -> lin A ( adj123 x y ** {isPre = False } ) ;
mkA : (bonus,bona,bonum : N) -> A
- = \x,y,z -> mkAdjective x y z ** {isPre = False ; lock_A = <>} ;
+ = \x,y,z ->
+ let compsup = comp_super x ;
+ advs : Str * Str =
+ case x.s!Sg!Nom of {
+ -- Bayer-Lindauer 50 4
+ idon + #vowel + "us" => < "magis" , "maxime" > ;
+ _ => < "" , "" >
+ };
+ in
+ lin A ( mkAdjective x y z < compsup.p1 , advs.p2 > < compsup.p2 , advs.p2> ** {isPre = False } ) ;
} ;
mkV = overload {
mkV : (tacere : Str) -> V
- = \v -> verb v ** {lock_V = <>} ;
- mkV : (iacio,ieci,iactus,iacere : Str) -> V
- = \v,x,y,z -> verb_pppi v x y z ** {lock_V = <>} ;
+ = \v -> lin V ( verb v ) ;
+ mkV : (iacere,iacio,ieci,iactus : Str) -> V
+ = \v,x,y,z -> lin V ( verb_ippp v x y z ) ;
+ mkV : (iacere,iacio,ieci : Str) -> V
+ = \v,x,y -> lin V ( verb_ippp v x y "######" ) ;
} ;
+ V0 : Type = V ;
+ mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working
+
mkV2 = overload {
mkV2 : (amare : Str) -> V2
- = \v -> verb v ** {c = {s = [] ; c = Acc} ; lock_V2 = <>} ;
+ = \v -> lin V2 ( verb v ** { c = lin Prep ( mkPrep "" Acc ) } ) ;
mkV2 : (facere : V) -> V2
- = \v -> v ** {c = {s = [] ; c = Acc} ; lock_V2 = <>} ;
+ = \v -> lin V2 ( v ** { c = lin Prep ( mkPrep "" Acc ) } ) ;
+ mkV2 : V -> Prep -> V2
+ = \v,p -> lin V2 ( v ** { c = p } ) ;
} ;
---.
+
masculine = Masc ;
feminine = Fem ;
neuter = Neutr ;
+-- To be implemented, just place holders
+ mkPN : N -> PN = \n -> lin PN n ;
+ mkN2 : N -> Prep -> N2 = \n,p -> lin N2 ( n ** { c = p } );
+ mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 ( n **{ c = p1 ; c2 = p2 } ) ;
+ mkV2S : V -> Prep -> V2S = \v,p -> lin V2S ( v ** { c = p } ) ;
+ mkV2Q : V -> Prep -> V2Q = \v,p -> lin V2Q ( v ** { c = p } ) ;
+ mkV2V : V -> Str -> Bool -> V2V = \v,s,b -> lin V2V ( v ** { c2 = s ; isAux = b } ) ;
+ mkVV : V -> Bool -> VV = \v,b -> lin VV ( v ** { isAux = b } ) ;
+ mkVA : V -> VA = \v -> lin VA v ;
+ mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 ( v ** { c2 = p1; c3 = p2 } ) ;
+ mkVQ : V -> VQ = \v -> lin VQ v ;
+ mkVS : V -> VS = \v -> lin VS v ;
+ mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (v ** { c = p } ) ;
+ AS : Type = A ;
+ mkAS : A -> AS = \a -> lin AS a ;
+ mkA2 : A -> Prep -> A2 = \a,p -> lin A2 ( a ** { c = p } ) ;
+ A2V : Type = A2 ;
+ mkA2V : A -> Prep -> A2V = \a,p -> lin A2V ( lin A2 ( a ** { c = p } ) ) ;
+ AV : Type = A ;
+ mkAV : A -> AV = \a -> lin AV a ;
}

Some files were not shown because too many files have changed in this diff Show More