forked from GitHub/gf-rgl
updated latin rgl
This commit is contained in:
@@ -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} ;
|
||||
}
|
||||
|
||||
@@ -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} ;
|
||||
--
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
|
||||
concrete CatLat of Cat = CommonX-[Adv] ** open ResLat, ParamX, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
@@ -6,7 +6,7 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
|
||||
|
||||
---- Tensed/Untensed
|
||||
--
|
||||
S = {s : Str} ;
|
||||
S = Sentence ;
|
||||
QS = {s : QForm => Str} ;
|
||||
-- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts
|
||||
-- SSlash = {s : Str ; c2 : Str} ;
|
||||
@@ -15,11 +15,12 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
|
||||
--
|
||||
Cl = Clause ;
|
||||
ClSlash = Clause ;
|
||||
Imp = {s : Polarity => ImpForm => Str} ;
|
||||
Imp = {s : Polarity => VImpForm => Str} ;
|
||||
--
|
||||
---- Question
|
||||
--
|
||||
QCl = {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ;
|
||||
--
|
||||
-- TO FIX
|
||||
QCl = Clause ; -- {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ;
|
||||
IP = {s : Case => Str ; n : Number} ;
|
||||
IComp = {s : Str} ;
|
||||
IDet = Determiner ; --{s : Str ; n : Number} ;
|
||||
@@ -36,37 +37,35 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
|
||||
---- Verb
|
||||
--
|
||||
VP = ResLat.VerbPhrase ;
|
||||
VPSlash = VP ** {c2 : Preposition} ;
|
||||
VPSlash = ResLat.ObjectVerbPhrase ; -- VP ** {c2 : Preposition} ;
|
||||
Comp = {s : Agr => Str} ;
|
||||
--
|
||||
---- Adjective
|
||||
--
|
||||
-- AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
|
||||
AP =
|
||||
{
|
||||
s : Agr => Str ;
|
||||
-- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns
|
||||
} ;
|
||||
AP = AdjectivePhrase ;
|
||||
|
||||
--
|
||||
---- Noun
|
||||
--
|
||||
CN = ResLat.ComplexNoun ;
|
||||
CN = ResLat.CommonNoun ;
|
||||
NP = ResLat.NounPhrase ;
|
||||
Pron = ResLat.Pronoun ;
|
||||
Det = Determiner ;
|
||||
Predet, Ord = {s : Str} ;
|
||||
Predet = {s : Str} ;
|
||||
Ord = Ordinal ;
|
||||
Num = {s : Gender => Case => Str ; n : Number} ;
|
||||
-- Card = {s : Str ; n : Number} ;
|
||||
Card = {s : Gender => Case => Str ; n : Number} ;
|
||||
Quant = Quantifier ;
|
||||
--
|
||||
---- Numeral
|
||||
--
|
||||
-- Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||
Numeral = ResLat.Numeral ;
|
||||
Digits = {s : Str ; unit : Unit} ;
|
||||
--
|
||||
---- Structural
|
||||
--
|
||||
Conj = {s1,s2 : Str ; n : Number} ;
|
||||
Conj = ResLat.Conjunction; --{s1,s2 : Str ; n : Number} ;
|
||||
Subj = {s : Str} ;
|
||||
Prep = ResLat.Preposition ;
|
||||
--
|
||||
@@ -79,10 +78,15 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in {
|
||||
V2V = Verb ** {c2 : Str ; isAux : Bool} ;
|
||||
|
||||
A = Adjective ;
|
||||
|
||||
Adv = Adverb ;
|
||||
|
||||
N = Noun ;
|
||||
N2 = Noun ** { c : Prep } ;
|
||||
N3 = Noun ** { c : Prep ; c2 : Prep } ;
|
||||
PN = Noun ;
|
||||
A2 = Adjective ** { c : Prep} ;
|
||||
|
||||
linref
|
||||
NP = \np -> np.preap.s ! Ag np.g np.n Nom ++ np.s ! Nom ++ np.postap.s ! Ag np.g np.n Nom ;
|
||||
VP = \vp -> vp.adv ++ vp.inf ! VInfActPres ++ vp.obj ++ vp.compl ! Ag Masc Sg Nom ;
|
||||
}
|
||||
|
||||
@@ -1,26 +1,41 @@
|
||||
concrete ConjunctionLat of Conjunction =
|
||||
CatLat ** open ResLat, StructuralLat, Coordination, Prelude in {
|
||||
CatLat ** open ResLat, StructuralLat, Coordination, Prelude, ParadigmsLat in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
--
|
||||
|
||||
lin
|
||||
--
|
||||
ConjS = conjunctDistrSS ;
|
||||
--
|
||||
ConjAdv = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
||||
-- a = conjAgr (agrP3 conj.n) ss.a
|
||||
-- } ;
|
||||
--
|
||||
ConjAP conj ss = conjunctDistrTable Agr conj ss ;
|
||||
--
|
||||
--{---b
|
||||
--
|
||||
-- ConjS = conjunctSS ;
|
||||
-- ConjS : Conj -> ListS -> S ; -- he walks and she runs
|
||||
-- TO FIX
|
||||
-- ConjS conj ss = { s = \\_ => conjunctDistrX conj (ss.l ! conj.c) ; sadv = lin Adv { s = []} ; neg = ss.neg } ;
|
||||
|
||||
-- ConjAdv : Conj -> ListAdv -> Adv ; -- here or there
|
||||
ConjAdv conj ss = mkAdv (conjunctDistrSS conj (ss.l ! conj.c) ).s ;
|
||||
|
||||
-- ConjNP : Conj -> ListNP -> NP ; -- she or we
|
||||
ConjNP conj nps =
|
||||
{
|
||||
s = case conj.c of {
|
||||
And => case nps.isBase of {
|
||||
False => (conjunctDistrTable Case conj (nps.l ! And)).s ;
|
||||
True => \\c => conj.s1 ++ (nps.l ! And).s1 ! c ++ conj.s2 ++ (nps.l ! And).s2 ! c
|
||||
} ;
|
||||
c => (conjunctDistrTable Case conj (nps.l ! And)).s
|
||||
} ;
|
||||
n = case conj.c of { And => Pl ; _ => nps.n } ;
|
||||
g = nps.g ;
|
||||
p = nps.p ;
|
||||
adv = nps.adv ;
|
||||
preap = nps.preap ;
|
||||
postap = nps.postap ;
|
||||
det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = nps.n };
|
||||
} ;
|
||||
|
||||
-- ConjAP : Conj -> ListAP -> AP ;
|
||||
ConjAP conj ss = conjunctDistrTable Agr conj (ss.l ! conj.c) ;
|
||||
|
||||
--
|
||||
-- DConjS = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjAdv = conjunctSS ;
|
||||
-- DConjAdv = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjNP conj ss = conjunctTable Case conj ss ** {
|
||||
@@ -29,29 +44,77 @@ concrete ConjunctionLat of Conjunction =
|
||||
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
||||
-- a = conjAgr (agrP3 conj.n) ss.a
|
||||
-- } ;
|
||||
--
|
||||
-- ConjAP conj ss = conjunctTable Agr conj ss ;
|
||||
--
|
||||
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
|
||||
-- isPre = ss.isPre
|
||||
-- } ;
|
||||
---}
|
||||
--
|
||||
---- These fun's are generated from the list cat's.
|
||||
--
|
||||
-- BaseS = twoSS ;
|
||||
-- ConsS = consrSS comma ;
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS "et" ;
|
||||
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
|
||||
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
|
||||
BaseAP x y = lin A ( twoTable Agr x y ) ;
|
||||
ConsAP xs x = lin A ( consrTable Agr and_Conj.s2 xs x );
|
||||
--
|
||||
|
||||
-- BaseS : S -> S -> ListS
|
||||
-- TO FIX
|
||||
-- BaseS x y = { l = \\c => twoStr (x.s ! PreS) (y.s ! PreS) } ;
|
||||
|
||||
-- ConsS : S -> ListS -> ListS
|
||||
-- TO FIX
|
||||
-- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) };
|
||||
|
||||
-- BaseAdv : Adv -> Adv -> ListAdv
|
||||
BaseAdv x y = { l = \\c => twoSS (ss (x.s ! Posit)) (ss (y.s ! Posit)) } ;
|
||||
|
||||
-- ConsAdv : Adv -> ListAdv -> ListAdv
|
||||
ConsAdv x xs = { l = \\_ => consrSS bindComma (ss (x.s ! Posit)) (xs.l ! Comma) } ;
|
||||
|
||||
-- BaseNP : NP -> NP -> ListNP ; -- John, Mary
|
||||
BaseNP x y = {
|
||||
l = \\c => twoTable Case x y ;
|
||||
g = Masc ; -- Just guessing (but maybe sexist bullshit)
|
||||
n = matchNumber x.n y.n ;
|
||||
p = P3 ;
|
||||
adv = x.adv ++ y.adv ;
|
||||
preap = lin AP { s = \\a => x.preap.s ! a ++ y.preap.s ! a } ;
|
||||
postap = lin AP { s = \\a => x.postap.s ! a ++ y.postap.s ! a } ;
|
||||
isBase = True ;
|
||||
det = { s = \\g,c => x.det.s ! g ! c ++ y.det.s ! g ! c ; sp = \\g,c => x.det.sp ! g ! c ++ y.det.sp ! g ! c ; n = matchNumber x.get.n y.get.n } ;
|
||||
|
||||
} ;
|
||||
|
||||
-- ConsNP : NP -> ListNP -> ListNP ; -- John, Mary, Bill
|
||||
ConsNP x xs = {
|
||||
l = \\_ => consrTable Case bindComma x ( xs.l ! Comma );
|
||||
n = matchNumber x.n xs.n ;
|
||||
g = xs.g ;
|
||||
p = xs.p ;
|
||||
adv = x.adv ++ xs.adv ;
|
||||
preap = lin AP { s = \\a => x.preap.s ! a ++ xs.preap.s ! a } ;
|
||||
postap = lin AP { s = \\a => x.postap.s ! a ++ xs.postap.s ! a } ;
|
||||
isBase = False
|
||||
-- TODO det
|
||||
} ;
|
||||
|
||||
-- BaseAP : AP -> AP -> ListAP
|
||||
BaseAP x y = { l = \\c => twoTable Agr x y };
|
||||
|
||||
-- ConsAP : AP -> ListAP -> ListAP
|
||||
ConsAP x xs =
|
||||
{ l = \\_ => consrTable Agr and_Conj.s2 x (xs.l ! Comma ) } ;
|
||||
--
|
||||
lincat
|
||||
[S] = {s1,s2 : Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
||||
[AP] = {s1,s2 : Agr => Str } ;
|
||||
-- [S] = { l : Coordinator => {s1,s2 : Str} } ; -- TO FIX
|
||||
[Adv] = { l: Coordinator => {s1,s2 : Str}} ;
|
||||
[NP] = {l : Coordinator => {s1,s2 : Case => Str} ; g : Gender ; n : Number ; p : Person ; adv : Str ; preap : AP ; postap : AP ; isBase : Bool } ;
|
||||
[AP] = {l : Coordinator => {s1,s2 : Agr => Str } } ;
|
||||
|
||||
oper
|
||||
-- Generates a new number value given two number values.
|
||||
-- Pl if any of the two is Pl
|
||||
-- Sg otherwise
|
||||
matchNumber : Number -> Number -> Number = \n1,n2 ->
|
||||
case <n1,n2> of {
|
||||
<Pl,_> => Pl ;
|
||||
<_,Pl> => Pl ;
|
||||
<_,_> => Sg
|
||||
} ;
|
||||
--
|
||||
}
|
||||
|
||||
1
src/latin/DictLat.gf
Symbolic link
1
src/latin/DictLat.gf
Symbolic link
@@ -0,0 +1 @@
|
||||
dict/DictLat.gf
|
||||
1
src/latin/DictLatAbs.gf
Symbolic link
1
src/latin/DictLatAbs.gf
Symbolic link
@@ -0,0 +1 @@
|
||||
dict/DictLatAbs.gf
|
||||
@@ -1,13 +1,54 @@
|
||||
concrete ExtraLat of ExtraLatAbs =
|
||||
CatLat,
|
||||
ExtraLexiconLat **
|
||||
open ResLat, Coordination, Prelude in {
|
||||
CatLat, 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...
|
||||
}
|
||||
|
||||
@@ -1,8 +1,32 @@
|
||||
abstract ExtraLatAbs =
|
||||
Extra,
|
||||
ExtraLexiconLatAbs **
|
||||
{
|
||||
Extra, 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 ;
|
||||
}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
concrete ExtraLexiconLat of ExtraLexiconLatAbs = {
|
||||
};
|
||||
@@ -1,3 +0,0 @@
|
||||
abstract ExtraLexiconLatAbs = {
|
||||
|
||||
};
|
||||
@@ -11,8 +11,8 @@ concrete GrammarLat of Grammar =
|
||||
-- RelativeLat,
|
||||
ConjunctionLat,
|
||||
PhraseLat,
|
||||
TextX,
|
||||
TenseX,
|
||||
TextX-[Adv],
|
||||
TenseX-[Adv],
|
||||
StructuralLat
|
||||
-- IdiomLat
|
||||
** {
|
||||
|
||||
@@ -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)} ;
|
||||
--
|
||||
--}
|
||||
--
|
||||
}
|
||||
@@ -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 ;
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
concrete LangLat of Lang =
|
||||
GrammarLat,
|
||||
ParadigmsLat,
|
||||
-- ConjunctionLat,
|
||||
LexiconLat
|
||||
-- ConstructionLat
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,142 +1 @@
|
||||
resource MissingLat = open GrammarLat, Prelude in {
|
||||
|
||||
-- temporary definitions to enable the compilation of RGL API
|
||||
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
|
||||
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
|
||||
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
|
||||
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
|
||||
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
|
||||
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
|
||||
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
|
||||
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
|
||||
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
|
||||
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
|
||||
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
|
||||
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
|
||||
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
|
||||
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
|
||||
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
|
||||
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
|
||||
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
||||
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
|
||||
oper CompCN : CN -> Comp = notYet "CompCN" ;
|
||||
oper CompIP : IP -> IComp = notYet "CompIP" ;
|
||||
oper CompNP : NP -> Comp = notYet "CompNP" ;
|
||||
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
|
||||
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
|
||||
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
||||
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
|
||||
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
|
||||
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
|
||||
oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
|
||||
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
|
||||
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
|
||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
||||
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
|
||||
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
|
||||
oper EmbedS : S -> SC = notYet "EmbedS" ;
|
||||
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
|
||||
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
||||
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
|
||||
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
||||
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
|
||||
oper IdRP : RP = notYet "IdRP" ;
|
||||
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
|
||||
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
|
||||
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
|
||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
|
||||
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
|
||||
oper MassNP : CN -> NP = notYet "MassNP" ;
|
||||
oper NumCard : Card -> Num = notYet "NumCard" ;
|
||||
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
|
||||
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
|
||||
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
|
||||
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
|
||||
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
|
||||
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
|
||||
oper PassV2 : V2 -> VP = notYet "PassV2" ;
|
||||
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
|
||||
oper PossPron : Pron -> Quant = notYet "PossPron" ;
|
||||
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
|
||||
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
|
||||
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
|
||||
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
|
||||
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
|
||||
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
|
||||
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
|
||||
oper RelCl : Cl -> RCl = notYet "RelCl" ;
|
||||
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
||||
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
|
||||
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
|
||||
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
|
||||
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
|
||||
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
|
||||
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
|
||||
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
|
||||
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
|
||||
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
||||
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
|
||||
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
|
||||
oper UseComparA : A -> AP = notYet "UseComparA" ;
|
||||
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
|
||||
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
|
||||
oper UttAP : AP -> Utt = notYet "UttAP" ;
|
||||
oper UttAdv : Adv -> Utt = notYet "UttAdv" ;
|
||||
oper UttCN : CN -> Utt = notYet "UttCN" ;
|
||||
oper UttCard : Card -> Utt = notYet "UttCard" ;
|
||||
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
|
||||
oper UttIP : IP -> Utt = notYet "UttIP" ;
|
||||
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
|
||||
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
|
||||
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
|
||||
oper UttNP : NP -> Utt = notYet "UttNP" ;
|
||||
oper UttVP : VP -> Utt = notYet "UttVP" ;
|
||||
oper n2 : Digit = notYet "n2" ;
|
||||
oper n3 : Digit = notYet "n3" ;
|
||||
oper n4 : Digit = notYet "n4" ;
|
||||
oper n5 : Digit = notYet "n5" ;
|
||||
oper n6 : Digit = notYet "n6" ;
|
||||
oper n7 : Digit = notYet "n7" ;
|
||||
oper n8 : Digit = notYet "n8" ;
|
||||
oper n9 : Digit = notYet "n9" ;
|
||||
oper num : Sub1000000 -> Numeral = notYet "num" ;
|
||||
oper pot0 : Digit -> Sub10 = notYet "pot0" ;
|
||||
oper pot01 : Sub10 = notYet "pot01" ;
|
||||
oper pot0as1 : Sub10 -> Sub100 = notYet "pot0as1" ;
|
||||
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
|
||||
oper pot110 : Sub100 = notYet "pot110" ;
|
||||
oper pot111 : Sub100 = notYet "pot111" ;
|
||||
oper pot1as2 : Sub100 -> Sub1000 = notYet "pot1as2" ;
|
||||
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
|
||||
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
|
||||
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
|
||||
oper pot2as3 : Sub1000 -> Sub1000000 = notYet "pot2as3" ;
|
||||
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
|
||||
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
|
||||
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
|
||||
|
||||
}
|
||||
|
||||
{-
|
||||
AR 28/3/2017
|
||||
|
||||
To build:
|
||||
|
||||
$ gf api/TryLat.gf | grep constant | sort -u >missLat.tmp
|
||||
|
||||
$ ghci
|
||||
Prelude> pgf <- PGF.readPGF "Lang.pgf"
|
||||
Prelude> ms <- readFile "missLat.tmp" >>= return . map (last . words) . lines
|
||||
Prelude> let ts = [PGF.showType [] t | m <- ms, Just t <- [PGF.functionType pgf (PGF.mkCId m)]]
|
||||
Prelude> putStrLn $ unlines ["oper " ++ f ++ " : " ++ t ++ " = notYet \"" ++ f ++ "\" ;" | (f,t) <- zip ms ts]
|
||||
|
||||
To use:
|
||||
|
||||
--# -path=.:alltenses:prelude:../latin
|
||||
resource ConstructorsLat = Constructors with (Grammar = GrammarLat) **
|
||||
open MissingLat in {}
|
||||
|
||||
-}
|
||||
@@ -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)
|
||||
} ;
|
||||
}
|
||||
@@ -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 } ;
|
||||
}
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 } );
|
||||
|
||||
@@ -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} ; ---
|
||||
--
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
@@ -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
|
||||
-- } ;
|
||||
--
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 } } ;
|
||||
}
|
||||
|
||||
@@ -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} ;
|
||||
--
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
--# -path=.:../abstract:../common
|
||||
|
||||
concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat in {
|
||||
--
|
||||
--lin
|
||||
-- SymbPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- IntPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- FloatPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
-- NumPN i = {s = \\c => i.s ; g = Neutr} ; --- c
|
||||
concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat, ParadigmsLat, TenseX in {
|
||||
|
||||
lin
|
||||
SymbPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
|
||||
IntPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
|
||||
FloatPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c
|
||||
NumPN i = {s = \\n,c => i.s ! Neutr ! c; g = Neutr} ; --- c
|
||||
-- CNIntNP cn i = {
|
||||
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
|
||||
-- a = agrgP3 Sg cn.g
|
||||
@@ -20,20 +20,17 @@ concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat in {
|
||||
-- a = agrgP3 Sg cn.g
|
||||
-- } ;
|
||||
--
|
||||
-- SymbS sy = sy ;
|
||||
--
|
||||
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;
|
||||
-- SymbOrd sy = {s = sy.s ++ "th"} ;
|
||||
--
|
||||
--lincat
|
||||
--
|
||||
-- Symb, [Symb] = SS ;
|
||||
--
|
||||
--lin
|
||||
--
|
||||
-- MkSymb s = s ;
|
||||
SymbS sy = { s = \\_ => sy.s ; neg = \\_ => "" ; o = \\_ => "" ; p = PPos ; sadv = ss "" ; t = TPres ; v = \\_ => "" } ;
|
||||
--
|
||||
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;
|
||||
SymbOrd sy = { s = \\g,n,c => sy.s } ; -- does not inflect properly
|
||||
|
||||
lincat
|
||||
Symb, [Symb] = SS ;
|
||||
|
||||
lin
|
||||
MkSymb s = s ;
|
||||
|
||||
-- BaseSymb = infixSS "and" ;
|
||||
-- ConsSymb = infixSS "," ;
|
||||
--
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
concrete BigLat of BigLatAbs = GrammarLat, DictLat ;
|
||||
@@ -1 +0,0 @@
|
||||
abstract BigLatAbs = Grammar, DictLatAbs ;
|
||||
@@ -1 +0,0 @@
|
||||
concrete BigLatEng of BigLatAbs = GrammarEng, DictLatEng ;
|
||||
34819
src/latin/dict/DictLat.gf
Normal file
34819
src/latin/dict/DictLat.gf
Normal file
File diff suppressed because it is too large
Load Diff
37214
src/latin/dict/DictLatAbs.gf
Normal file
37214
src/latin/dict/DictLatAbs.gf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
Reference in New Issue
Block a user