1
0
forked from GitHub/gf-rgl

Merge pull request #203 from daherb/latin

Latin
This commit is contained in:
Inari Listenmaa
2019-03-19 16:59:11 +01:00
committed by GitHub
42 changed files with 2515 additions and 867 deletions

View File

@@ -22,7 +22,7 @@ Ice,Icelandic,icelandic,,,,,,n,,y
Ina,Interlingua,interlingua,,,y,,n,n,,n
Ita,Italian,italian,Romance,,y,,,,y,y
Jpn,Japanese,japanese,,,,,,,,y
Lat,Latin,latin,,,y,,n,n,,n
Lat,Latin,latin,,,,,y,n,n,y
Lav,Latvian,latvian,,,,,,,y,y
Mlt,Maltese,maltese,,,,,,,,y
Mon,Mongolian,mongolian,,,,,,n,,y
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis
22 Ina Interlingua interlingua y n n n
23 Ita Italian italian Romance y y y
24 Jpn Japanese japanese y
25 Lat Latin latin y n y n n n y
26 Lav Latvian latvian y y
27 Mlt Maltese maltese y
28 Mon Mongolian mongolian n y

View File

@@ -1,3 +1,3 @@
--# -path=.:../latin:../common:../abstract:../prelude
resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd] ;
resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd,mkNum] ;

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,16 @@ 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 ;
S = \s -> combineSentence s ! SPreO ! PreO ! SOV ;
}

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,87 @@ 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
BaseS x y = {
l = \\c => { s1 = x ; s2 = y } ;
} ;
-- ConsS : S -> ListS -> ListS
-- TO FIX
-- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) };
-- ConsS s ss = {
-- l = \\c =>
-- { s1 = ss.s1 ++
-- table {
-- And => and_Conj
-- } ! c
-- ++ ss.s2 ;
-- s2 = s }
-- } ;
-- 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 : S} } ; -- 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 {
}

1
src/latin/DictLat.gf Symbolic link
View File

@@ -0,0 +1 @@
dict/DictLat.gf

1
src/latin/DictLatAbs.gf Symbolic link
View File

@@ -0,0 +1 @@
dict/DictLatAbs.gf

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)

View File

@@ -1,39 +1,22 @@
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 ConjS : Conj -> ListS -> S = notYet "ConjS" ;
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" ;
@@ -42,101 +25,132 @@ 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 IdRP : RP = notYet "IdRP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
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 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 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 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 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 RelCN : CN -> RS -> CN = notYet "RelCN" ;
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 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 AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
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 AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
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 CompIP : IP -> IComp = notYet "CompIP" ;
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 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 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 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" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
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 ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelS : S -> RS -> S = notYet "RelS" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
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 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" ;
}
{-
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 = "" ; 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

@@ -1 +0,0 @@
concrete BigLat of BigLatAbs = GrammarLat, DictLat ;

View File

@@ -1 +0,0 @@
abstract BigLatAbs = Grammar, DictLatAbs ;

View File

@@ -1 +0,0 @@
concrete BigLatEng of BigLatAbs = GrammarEng, DictLatEng ;

View File

@@ -1,81 +0,0 @@
import Data.Char
import Data.List
main = mkLatin
mkLatin = do
ws <- readFile "DICTPAGE.RAW" >>= return . lines
let fcs = mkDict ws
let fs = [unwords [status st ++ "fun",f,":",cat,";","--",eng] | [st, f,cat,_,eng] <- fcs]
let ls = [unwords [status st ++ "lin",f,"=",lat,";"] | [st, f,_,lat,_] <- fcs]
writeFile "DictLatAbs.gf" "abstract DictLatAbs = Cat ** {"
appendFile "DictLatAbs.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n"
appendFile "DictLatAbs.gf" (unlines fs)
appendFile "DictLatAbs.gf" "}"
writeFile "DictLat.gf" "concrete DictLat of DictLatAbs = CatLat ** open ParadigmsLat in {"
appendFile "DictLat.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n"
appendFile "DictLat.gf" (unlines ls)
appendFile "DictLat.gf" "}"
let es = [unwords [status st ++ "lin",f,"=",mkEng cat eng,";"] | [st, f,cat,_,eng] <- fcs]
writeFile "DictLatEng.gf" "concrete DictLatEng of DictLatAbs = CatEng ** open ParadigmsEng in {"
appendFile "DictLatEng.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n"
appendFile "DictLatEng.gf" (unlines es)
appendFile "DictLatEng.gf" "}"
--- putStrLn $ unlines ls
mkDict :: [String] -> [[String]] -- fun, cat, lat, eng
mkDict = map mkOne . zip [10001 ..] . map cleanUp
where
cleanUp s = let (lat,eng) = break (=='[') s in
(words (filter (\c -> c==' ' || isLetter c) lat), eng)
mkOne (i,(lws,eng)) = addId i (mkLat lws) ++ [eng]
mkLat lws = case lws of
x:y:"N":_:g:_ -> f [x, "N", lin "mkN" [show x,show y, (snd (gender g))]] where f = if fst (gender g) then ok else todo
x:y:"N": g:_ -> f [x, "N", lin "mkN" [show x,show y, (snd (gender g))]] where f = if fst (gender g) then ok else todo
x:"gen":z:"ADJ":_ -> ok [x, "A", lin "mkA" [show x]]
x:y:z:"ADJ":_ -> ok [x, "A", lin "mkA" [show x]]
x:"ADV":_ -> ok [x, "Adv", lin "mkAdv" [show x]]
x:y:z:u:"V":_:"INTRANS":_ -> okv [y, "V", lin "mkV" [show y,show x,show z,show u]]
x:y:z:u:"V":_:"TRANS":_ -> okv [y, "V2", lin "mkV2" ["(" ++ lin "mkV" [show y,show x,show z,show u] ++ ")"]]
x:y:z:u:"V":_:"DEP":_ -> todo [y, "V", lin "depV" ["(" ++ lin "mkV" [show y,show x,show z,show u] ++ ")"]]
x:y:z:u:"V":_ -> okv [y, "V", lin "mkV" [show y,show x,show z,show u]]
_ -> todo ["TODO","",unwords lws]
addId i (st:f:c:rest) = st:(f ++ "_" ++ show i ++ "_" ++ c):c:rest
gender g = case g of
"M" -> (True, "masculine")
"F" -> (True, "feminine")
"N" -> (True, "neuter")
"C" -> (True, "masculine {-C-}")
_ -> (False, g ++ "{-??-}")
fun x c = x ++ "_" ++ c
lin f xs = unwords (f:xs)
todo xs = "1":xs
ok xs = "0":xs
okv r@(f:_) = if elem (take 3 (reverse f)) ["era","ere","eri"] then ok r else todo r
status st = case st of
"0" -> ""
_ -> "-- "
-- build an English version: TODO better analysis of the notation
mkEng cat eng = unwords $ intersperse "|" $ map mkOne engs
where
mkOne s = unwords ["mk" ++ cat, show s]
engs = [clean (takeWhile (flip notElem "\r,;") (drop 11 eng))] ---- TODO
clean s = case s of
'\\':r:cs -> clean cs
c:cs -> c:clean cs
_ -> s
-- [DXXFS] :: counting-board; side-board; slab table; panel; square stone on top of column;
-- [EEQEE] :: Father; (Aramaic); bishop of Syriac/Coptic church; (false read obba/decanter);

View File

@@ -1,33 +0,0 @@
Aarne Ranta 2017-01-19
A script for building a Latin dictionary from William Whitaker's Words
Source: http://archives.nd.edu/whitaker/dictpage.zip
See also: https://en.wikipedia.org/wiki/William_Whitaker's_Words
License: BSD for the script. Unknown for the source, therefore not redistributed here.
Usage:
runghc MkLatin.hs
Output:
DictLatAbs.gf
DictLat.gf
Uses Herbert Lange's RGL implementation of Latin (darcs version of 2017-01-19 with ParadigmsLat.mkAdv added by AR)
Coverage of first version: 90%; 3938 missing out of 39227 entries. Marked with leading "--"
Reasons for uncovered entries
- uncommon category (e.g. structural words)
- missing case in ParadigmsLat.gf, e.g. deponent verbs
Matching for adjectives (A) uncertain, because we only use ParadigmsLat.gf.mkA : Str -> A
Verb subcat information is uncertain, too. It is based on the src's TRANS and INTRANS flags.