moved lib/next-resource to next-lib/src, to enable linking with next-lib as value of GF_LIB_PATH

This commit is contained in:
aarne
2008-09-22 11:49:15 +00:00
parent 4862018f14
commit 98665df78b
441 changed files with 125291 additions and 5 deletions

View File

@@ -0,0 +1,39 @@
concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in {
lin
PositA a = a ;
{-
ComparA a np = {
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
isPre = False
} ;
-- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 a np = {
s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
isPre = False
} ;
ReflA2 a = {
s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
isPre = False
} ;
SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ;
isPre = False
} ;
-}
AdAP ada ap = {
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c ;
isPre = ap.isPre
} ;
-- UseA2 a = a ;
}

View File

@@ -0,0 +1,21 @@
concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude 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
-- } ;
PrepNP prep np = {s = appPrep prep np.s} ;
-- AdAdv = cc2 ;
--
-- SubjS = cc2 ;
-----b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
--
-- AdnCAdv cadv = {s = cadv.s ++ "than"} ;
--
}

View File

@@ -0,0 +1,9 @@
--# -path=.:../abstract:../common:prelude
abstract AllEngAbs =
Lang,
IrregEngAbs-[
blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,
sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V],
ExtraEngAbs
** {} ;

View File

@@ -0,0 +1,9 @@
----# -path=.:../abstract:../common:prelude
--
--concrete AllLat of AllLatAbs =
-- LangLat,
-- IrregLat-[
-- blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,
-- sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V],
-- ExtraLat
-- ** {} ;

View File

@@ -0,0 +1,76 @@
--concrete BackwardLat of Backward = CatLat ** open ResLat in {
--
-- flags optimize=all_subs ;
--
-- lin
--
---- A repository of obsolete constructs, needed for backward compatibility.
---- They create spurious ambiguities if used in combination with Lang.
--
---- from Verb 19/4/2008
--
-- ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
-- ComplV3 v np np2 =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
-- ComplV2V v np vp =
-- insertObj (\\a => infVP v.isAux vp a)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2S v np s =
-- insertObj (\\_ => conjThat ++ s.s)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2Q v np q =
-- insertObj (\\_ => q.s ! QIndir)
-- (insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v)) ;
-- ComplV2A v np ap =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
--
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
--
---- from Sentence 19/4/2008
--
-- SlashV2 np v2 =
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
--
-- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a
-- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
-- {c2 = v2.c2} ;
--
---- from Noun 19/4/2008
--
-- NumInt n = {s = n.s ; n = Pl} ;
-- OrdInt n = {s = n.s ++ "th"} ; --- DEPRECATED
--
-- DetSg quant ord = {
-- s = quant.s ! Sg ++ ord.s ;
-- n = Sg
-- } ;
--
-- DetPl quant num ord = {
-- s = quant.s ! num.n ++ num.s ++ ord.s ;
-- n = num.n
-- } ;
--
-- NoNum = {s = []; n = Pl } ;
--
-- DefArt = {s = \\_ => artDef} ;
--
-- IndefArt = {
-- s = table {
-- Sg => artIndef ;
-- Pl => []
-- }
-- } ;
--
-- MassDet = {s = \\_ => []} ;
--
--
--
---- from Structural 19/4/2008
--
-- that_NP = regNP "that" Sg ;
-- these_NP = regNP "these" Pl ;
-- this_NP = regNP "this" Sg ;
-- those_NP = regNP "those" Pl ;
--
--}

View File

@@ -0,0 +1,88 @@
concrete CatLat of Cat = CommonX ** open ResLat, Prelude in {
flags optimize=all_subs ;
lincat
---- Tensed/Untensed
--
-- S = {s : Str} ;
-- QS = {s : QForm => Str} ;
-- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts
-- SSlash = {s : Str ; c2 : Str} ;
--
---- Sentence
--
Cl = {s : VAnter => VTense => Polarity => Str} ;
-- ClSlash = {
-- s : ResLat.Tense => Anteriority => CPolarity => Order => Str ;
-- c2 : Str
-- } ;
-- Imp = {s : CPolarity => ImpForm => Str} ;
--
---- Question
--
-- QCl = {s : ResLat.Tense => Anteriority => CPolarity => QForm => Str} ;
-- IP = {s : Case => Str ; n : Number} ;
-- IComp = {s : Str} ;
-- IDet = {s : Str ; n : Number} ;
-- IQuant = {s : Number => Str} ;
--
---- Relative
--
-- RCl = {
-- s : ResLat.Tense => Anteriority => CPolarity => Agr => Str ;
-- c : Case
-- } ;
-- RP = {s : RCase => Str ; a : RAgr} ;
--
---- Verb
--
VP = ResLat.VP ;
VPSlash = ResLat.VP ** {c2 : Preposition} ;
Comp = {s : Gender => Number => Case => Str} ;
--
---- Adjective
--
AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ;
--
---- Noun
--
CN = {s : Number => Case => Str ; g : Gender} ;
NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
Det = Determiner ;
-- Predet, Ord = {s : Str} ;
Num = {s : Gender => Case => Str ; n : Number} ;
-- Card = {s : Str ; n : Number} ;
Quant = Quantifier ;
--
---- Numeral
--
-- Numeral = {s : CardOrd => Str ; n : Number} ;
-- Digits = {s : CardOrd => Str ; n : Number ; tail : DTail} ;
--
---- Structural
--
Conj = {s1,s2 : Str ; n : Number} ;
-- Subj = {s : Str} ;
Prep = {s : Str ; c : Case} ;
--
---- Open lexical classes, e.g. Lexicon
V = Verb ;
V2 = Verb ** {c : Preposition} ;
-- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
-- V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;
-- V3 = Verb ** {c2, c3 : Str} ;
-- VV = {s : VVForm => Str ; isAux : Bool} ;
-- V2V = Verb ** {c2 : Str ; isAux : Bool} ;
--
A = Adjective ** {isPre : Bool} ;
-- A2 = {s : AForm => Str ; c2 : Str} ;
--
N = Noun ;
-- N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
-- N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Str} ;
PN = {s : Case => Str ; g : Gender} ;
--
}

View File

@@ -0,0 +1,60 @@
--concrete ConjunctionLat of Conjunction =
-- CatLat ** open ResLat, Coordination, Prelude 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 ** {
-- isPre = ss.isPre
-- } ;
--
--{---b
--
-- ConjS = conjunctSS ;
-- DConjS = conjunctDistrSS ;
--
-- ConjAdv = conjunctSS ;
-- DConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = conjAgr (agrP3 conj.n) ss.a
-- } ;
--
-- ConjAP conj ss = conjunctTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
---}
--
---- These fun's are generated from the list cat's.
--
-- BaseS = twoSS ;
-- ConsS = consrSS comma ;
-- BaseAdv = twoSS ;
-- ConsAdv = consrSS comma ;
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
-- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
-- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
--
-- lincat
-- [S] = {s1,s2 : Str} ;
-- [Adv] = {s1,s2 : Str} ;
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
-- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
--
--}

View File

@@ -0,0 +1,16 @@
abstract ExtraEngAbs = Extra ** {
-- uncontracted negations; contracted are the default
fun
UncNegCl : Tense -> Ant -> Cl -> S ;
UncNegQCl : Tense -> Ant -> QCl -> QS ;
UncNegRCl : Tense -> Ant -> RCl -> RS ;
UncNegImpSg : Imp -> Utt; -- do not help yourself
UncNegImpPl : Imp -> Utt; -- do not help yourselves
-- freely compounded nouns
CompoundCN : CN -> CN -> CN ; -- rock album
}

View File

@@ -0,0 +1,53 @@
--concrete ExtraLat of ExtraLatAbs = CatLat **
-- open ResLat, Coordination, Prelude in {
--
-- lin
-- GenNP np = {s,sp = \\_,_ => np.s ! Gen} ;
-- ComplBareVS v s = insertObj (\\_ => s.s) (predV v) ;
--
-- StrandRelSlash rp slash = {
-- s = \\t,a,p,ag =>
-- rp.s ! RC (fromAgr ag).g Acc ++ slash.s ! t ! a ! p ! ODir ++ slash.c2 ;
-- c = Acc
-- } ;
-- EmptyRelSlash rp slash = {
-- s = \\t,a,p,_ => slash.s ! t ! a ! p ! ODir ++ slash.c2 ;
-- c = Acc
-- } ;
--
-- StrandQuestSlash ip slash =
-- {s = \\t,a,b,q =>
-- (mkQuestion (ss (ip.s ! Acc)) slash).s ! t ! a ! b ! q ++ slash.c2
-- };
--
-- lincat
-- VPI = {s : VPIForm => Agr => Str} ;
-- [VPI] = {s1,s2 : VPIForm => Agr => Str} ;
--
-- lin
-- BaseVPI = twoTable2 VPIForm Agr ;
-- ConsVPI = consrTable2 VPIForm Agr comma ;
--
-- MkVPI vp = {
-- s = \\v,a => vp.ad ++ vp.inf ++ vp.s2 ! a
-- } ;
-- ConjVPI = conjunctDistrTable2 VPIForm Agr ;
-- ComplVPIVV vv vpi =
-- insertObj (\\a => (if_then_Str vv.isAux [] "to") ++ vpi.s ! VPIInf ! a) (predVV vv) ;
--
-- UncNegCl t a cl = {s = t.s ++ a.s ++ cl.s ! t.t ! a.a ! neg ! ODir} ;
-- UncNegQCl t a cl = {s = \\q => t.s ++ a.s ++ cl.s ! t.t ! a.a ! neg !q} ;
-- UncNegRCl t a cl = {
-- s = \\r => t.s ++ a.s ++ cl.s ! t.t ! a.a ! neg ! r ;
-- c = cl.c
-- } ;
-- UncNegImpSg imp = {s = imp.s ! neg ! ImpF Sg False} ;
-- UncNegImpPl imp = {s = imp.s ! neg ! ImpF Pl False} ;
--
-- CompoundCN a b = {s = \\n,c => a.s ! Sg ! Nom ++ b.s ! n ! c ; g = b.g} ;
--
--
-- oper
-- neg = CNeg False ;
--
--}

View File

@@ -0,0 +1,18 @@
--# -path=.:../abstract:../common:prelude
concrete GrammarLat of Grammar =
NounLat,
VerbLat,
AdjectiveLat,
AdverbLat,
-- NumeralLat,
SentenceLat,
-- QuestionLat,
-- RelativeLat,
-- ConjunctionLat,
-- PhraseLat,
TextX,
StructuralLat,
-- IdiomLat
** {
} ;

View File

@@ -0,0 +1,30 @@
--concrete IdiomLat of Idiom = CatLat ** open Prelude, ResLat in {
--
-- flags optimize=all_subs ;
--
-- lin
-- ImpersCl vp = mkClause "it" (agrP3 Sg) vp ;
-- GenericCl vp = mkClause "one" (agrP3 Sg) vp ;
--
-- CleftNP np rs = mkClause "it" (agrP3 Sg)
-- (insertObj (\\_ => rs.s ! np.a)
-- (insertObj (\\_ => np.s ! rs.c) (predAux auxBe))) ;
--
-- CleftAdv ad s = mkClause "it" (agrP3 Sg)
-- (insertObj (\\_ => conjThat ++ s.s)
-- (insertObj (\\_ => ad.s) (predAux auxBe))) ;
--
-- ExistNP np =
-- mkClause "there" (agrP3 (fromAgr np.a).n)
-- (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;
--
-- ExistIP ip =
-- mkQuestion (ss (ip.s ! Nom))
-- (mkClause "there" (agrP3 ip.n) (predAux auxBe)) ;
--
-- ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;
--
-- ImpPl1 vp = {s = "let's" ++ infVP True vp (AgP1 Pl)} ;
--
--}
--

View File

@@ -0,0 +1,176 @@
abstract IrregEngAbs = Cat ** {
fun
awake_V : V ;
bear_V : V ;
beat_V : V ;
become_V : V ;
begin_V : V ;
bend_V : V ;
beset_V : V ;
bet_V : V ;
bid_V : V ;
bind_V : V ;
bite_V : V ;
bleed_V : V ;
blow_V : V ;
break_V : V ;
breed_V : V ;
bring_V : V ;
broadcast_V : V ;
build_V : V ;
burn_V : V ;
burst_V : V ;
buy_V : V ;
cast_V : V ;
catch_V : V ;
choose_V : V ;
cling_V : V ;
come_V : V ;
cost_V : V ;
creep_V : V ;
cut_V : V ;
deal_V : V ;
dig_V : V ;
dive_V : V ;
do_V : V ;
draw_V : V ;
dream_V : V ;
drive_V : V ;
drink_V : V ;
eat_V : V ;
fall_V : V ;
feed_V : V ;
feel_V : V ;
fight_V : V ;
find_V : V ;
fit_V : V ;
flee_V : V ;
fling_V : V ;
fly_V : V ;
forbid_V : V ;
forget_V : V ;
forgive_V : V ;
forsake_V : V ;
freeze_V : V ;
get_V : V ;
give_V : V ;
go_V : V ;
grind_V : V ;
grow_V : V ;
hang_V : V ;
have_V : V ;
hear_V : V ;
hide_V : V ;
hit_V : V ;
hold_V : V ;
hurt_V : V ;
keep_V : V ;
kneel_V : V ;
knit_V : V ;
know_V : V ;
lay_V : V ;
lead_V : V ;
leap_V : V ;
learn_V : V ;
leave_V : V ;
lend_V : V ;
let_V : V ;
lie_V : V ;
light_V : V ;
lose_V : V ;
make_V : V ;
mean_V : V ;
meet_V : V ;
misspell_V : V ;
mistake_V : V ;
mow_V : V ;
overcome_V : V ;
overdo_V : V ;
overtake_V : V ;
overthrow_V : V ;
pay_V : V ;
plead_V : V ;
prove_V : V ;
put_V : V ;
quit_V : V ;
read_V : V ;
rid_V : V ;
ride_V : V ;
ring_V : V ;
rise_V : V ;
run_V : V ;
saw_V : V ;
say_V : V ;
see_V : V ;
seek_V : V ;
sell_V : V ;
send_V : V ;
set_V : V ;
sew_V : V ;
shake_V : V ;
shave_V : V ;
shear_V : V ;
shed_V : V ;
shine_V : V ;
shoe_V : V ;
shoot_V : V ;
show_V : V ;
shrink_V : V ;
shut_V : V ;
sing_V : V ;
sink_V : V ;
sit_V : V ;
sleep_V : V ;
slay_V : V ;
slide_V : V ;
sling_V : V ;
slit_V : V ;
smite_V : V ;
sow_V : V ;
speak_V : V ;
speed_V : V ;
spend_V : V ;
spill_V : V ;
spin_V : V ;
spit_V : V ;
split_V : V ;
spread_V : V ;
spring_V : V ;
stand_V : V ;
steal_V : V ;
stick_V : V ;
sting_V : V ;
stink_V : V ;
stride_V : V ;
strike_V : V ;
string_V : V ;
strive_V : V ;
swear_V : V ;
sweep_V : V ;
swell_V : V ;
swim_V : V ;
swing_V : V ;
take_V : V ;
teach_V : V ;
tear_V : V ;
tell_V : V ;
think_V : V ;
thrive_V : V ;
throw_V : V ;
thrust_V : V ;
tread_V : V ;
understand_V : V ;
uphold_V : V ;
upset_V : V ;
wake_V : V ;
wear_V : V ;
weave_V : V ;
wed_V : V ;
weep_V : V ;
wind_V : V ;
win_V : V ;
withhold_V : V ;
withstand_V : V ;
wring_V : V ;
write_V : V ;
}

View File

@@ -0,0 +1,181 @@
----# -path=.:prelude:../abstract:../common
--
--concrete IrregLat of IrregLatAbs = CatLat ** open ParadigmsLat in {
--
--flags optimize=values ;
--
-- lin
-- awake_V = irregV "awake" "awoke" "awoken" ;
-- bear_V = irregV "bear" "bore" "born" ;
-- beat_V = irregV "beat" "beat" "beat" ;
-- become_V = irregV "become" "became" "become" ;
-- begin_V = irregV "begin" "began" "begun" ;
-- bend_V = irregV "bend" "bent" "bent" ;
-- beset_V = irregV "beset" "beset" "beset" ;
-- bet_V = irregDuplV "bet" "bet" "bet" ;
-- bid_V = irregDuplV "bid" (variants {"bid" ; "bade"}) (variants {"bid" ; "bidden"}) ;
-- bind_V = irregV "bind" "bound" "bound" ;
-- bite_V = irregV "bite" "bit" "bitten" ;
-- bleed_V = irregV "bleed" "bled" "bled" ;
-- blow_V = irregV "blow" "blew" "blown" ;
-- break_V = irregV "break" "broke" "broken" ;
-- breed_V = irregV "breed" "bred" "bred" ;
-- bring_V = irregV "bring" "brought" "brought" ;
-- broadcast_V = irregV "broadcast" "broadcast" "broadcast" ;
-- build_V = irregV "build" "built" "built" ;
-- burn_V = irregV "burn" (variants {"burned" ; "burnt"}) (variants {"burned" ; "burnt"}) ;
-- burst_V = irregV "burst" "burst" "burst" ;
-- buy_V = irregV "buy" "bought" "bought" ;
-- cast_V = irregV "cast" "cast" "cast" ;
-- catch_V = irregV "catch" "caught" "caught" ;
-- choose_V = irregV "choose" "chose" "chosen" ;
-- cling_V = irregV "cling" "clung" "clung" ;
-- come_V = irregV "come" "came" "come" ;
-- cost_V = irregV "cost" "cost" "cost" ;
-- creep_V = irregV "creep" "crept" "crept" ;
-- cut_V = irregDuplV "cut" "cut" "cut" ;
-- deal_V = irregV "deal" "dealt" "dealt" ;
-- dig_V = irregDuplV "dig" "dug" "dug" ;
-- dive_V = irregV "dive" (variants {"dived" ; "dove"}) "dived" ;
-- do_V = mk5V "do" "does" "did" "done" "doing" ;
-- draw_V = irregV "draw" "drew" "drawn" ;
-- dream_V = irregV "dream" (variants {"dreamed" ; "dreamt"}) (variants {"dreamed" ; "dreamt"}) ;
-- drive_V = irregV "drive" "drove" "driven" ;
-- drink_V = irregV "drink" "drank" "drunk" ;
-- eat_V = irregV "eat" "ate" "eaten" ;
-- fall_V = irregV "fall" "fell" "fallen" ;
-- feed_V = irregV "feed" "fed" "fed" ;
-- feel_V = irregV "feel" "felt" "felt" ;
-- fight_V = irregV "fight" "fought" "fought" ;
-- find_V = irregV "find" "found" "found" ;
-- fit_V = irregDuplV "fit" "fit" "fit" ;
-- flee_V = irregV "flee" "fled" "fled" ;
-- fling_V = irregV "fling" "flung" "flung" ;
-- fly_V = irregV "fly" "flew" "flown" ;
-- forbid_V = irregDuplV "forbid" "forbade" "forbidden" ;
-- forget_V = irregDuplV "forget" "forgot" "forgotten" ;
-- forgive_V = irregV "forgive" "forgave" "forgiven" ;
-- forsake_V = irregV "forsake" "forsook" "forsaken" ;
-- freeze_V = irregV "freeze" "froze" "frozen" ;
-- get_V = irregDuplV "get" "got" "gotten" ;
-- give_V = irregV "give" "gave" "given" ;
-- go_V = mk5V "go" "goes" "went" "gone" "going" ;
-- grind_V = irregV "grind" "ground" "ground" ;
-- grow_V = irregV "grow" "grew" "grown" ;
-- hang_V = irregV "hang" "hung" "hung" ;
-- have_V = mk5V "have" "has" "had" "had" "having" ;
-- hear_V = irregV "hear" "heard" "heard" ;
-- hide_V = irregV "hide" "hid" "hidden" ;
-- hit_V = irregDuplV "hit" "hit" "hit" ;
-- hold_V = irregV "hold" "held" "held" ;
-- hurt_V = irregV "hurt" "hurt" "hurt" ;
-- keep_V = irregV "keep" "kept" "kept" ;
-- kneel_V = irregV "kneel" "knelt" "knelt" ;
-- knit_V = irregDuplV "knit" "knit" "knit" ;
-- know_V = irregV "know" "knew" "know" ;
-- lay_V = irregV "lay" "laid" "laid" ;
-- lead_V = irregV "lead" "led" "led" ;
-- leap_V = irregV "leap" (variants {"leaped" ; "lept"}) (variants {"leaped" ; "lept"}) ;
-- learn_V = irregV "learn" (variants {"learned" ; "learnt"}) (variants {"learned" ; "learnt"}) ;
-- leave_V = irregV "leave" "left" "left" ;
-- lend_V = irregV "lend" "lent" "lent" ;
-- let_V = irregDuplV "let" "let" "let" ;
-- lie_V = irregV "lie" "lay" "lain" ;
-- light_V = irregV "light" (variants {"lighted" ; "lit"}) "lighted" ;
-- lose_V = irregV "lose" "lost" "lost" ;
-- make_V = irregV "make" "made" "made" ;
-- mean_V = irregV "mean" "meant" "meant" ;
-- meet_V = irregV "meet" "met" "met" ;
-- misspell_V = irregV "misspell" (variants {"misspelled" ; "misspelt"}) (variants {"misspelled" ; "misspelt"}) ;
-- mistake_V = irregV "mistake" "mistook" "mistaken" ;
-- mow_V = irregV "mow" "mowed" (variants {"mowed" ; "mown"}) ;
-- overcome_V = irregV "overcome" "overcame" "overcome" ;
-- overdo_V = mk5V "overdo" "overdoes" "overdid" "overdone" "overdoing" ;
-- overtake_V = irregV "overtake" "overtook" "overtaken" ;
-- overthrow_V = irregV "overthrow" "overthrew" "overthrown" ;
-- pay_V = irregV "pay" "paid" "paid" ;
-- plead_V = irregV "plead" "pled" "pled" ;
-- prove_V = irregV "prove" "proved" (variants {"proved" ; "proven"}) ;
-- put_V = irregDuplV "put" "put" "put" ;
-- quit_V = irregDuplV "quit" "quit" "quit" ;
-- read_V = irregV "read" "read" "read" ;
-- rid_V = irregDuplV "rid" "rid" "rid" ;
-- ride_V = irregV "ride" "rode" "ridden" ;
-- ring_V = irregV "ring" "rang" "rung" ;
-- rise_V = irregV "rise" "rose" "risen" ;
-- run_V = irregDuplV "run" "ran" "run" ;
-- saw_V = irregV "saw" "sawed" (variants {"sawed" ; "sawn"}) ;
-- say_V = irregV "say" "said" "said" ;
-- see_V = irregV "see" "saw" "seen" ;
-- seek_V = irregV "seek" "sought" "sought" ;
-- sell_V = irregV "sell" "sold" "sold" ;
-- send_V = irregV "send" "sent" "sent" ;
-- set_V = irregDuplV "set" "set" "set" ;
-- sew_V = irregV "sew" "sewed" (variants {"sewed" ; "sewn"}) ;
-- shake_V = irregV "shake" "shook" "shaken" ;
-- shave_V = irregV "shave" "shaved" (variants {"shaved" ; "shaven"}) ;
-- shear_V = irregV "shear" "shore" "shorn" ;
-- shed_V = irregDuplV "shed" "shed" "shed" ;
-- shine_V = irregV "shine" "shone" "shone" ;
-- shoe_V = irregV "shoe" "shoed" (variants {"shoed" ; "shod"}) ;
-- shoot_V = irregV "shoot" "shot" "shot" ;
-- show_V = irregV "show" "showed" (variants {"showed" ; "shown"}) ;
-- shrink_V = irregV "shrink" "shrank" "shrunk" ;
-- shut_V = irregDuplV "shut" "shut" "shut" ;
-- sing_V = irregV "sing" "sang" "sung" ;
-- sink_V = irregV "sink" "sank" "sunk" ;
-- sit_V = irregDuplV "sit" "sat" "sat" ;
-- sleep_V = irregV "sleep" "slept" "slept" ;
-- slay_V = irregV "slay" "slew" "slain" ;
-- slide_V = irregV "slide" "slid" "slid" ;
-- sling_V = irregV "sling" "slung" "slung" ;
-- slit_V = irregDuplV "slit" "slit" "slit" ;
-- smite_V = irregV "smite" "smote" "smitten" ;
-- sow_V = irregV "sow" "sowed" (variants {"sowed" ; "sown"}) ;
-- speak_V = irregV "speak" "spoke" "spoken" ;
-- speed_V = irregV "speed" "sped" "sped" ;
-- spend_V = irregV "spend" "spent" "spent" ;
-- spill_V = irregV "spill" (variants {"spilled" ; "spilt"}) (variants {"spilled" ; "spilt"}) ;
-- spin_V = irregDuplV "spin" "spun" "spun" ;
-- spit_V = irregDuplV "spit" (variants {"spit" ; "spat"}) "spit" ;
-- split_V = irregDuplV "split" "split" "split" ;
-- spread_V = irregV "spread" "spread" "spread" ;
-- spring_V = irregV "spring" (variants {"sprang" ; "sprung"}) "sprung" ;
-- stand_V = irregV "stand" "stood" "stood" ;
-- steal_V = irregV "steal" "stole" "stolen" ;
-- stick_V = irregV "stick" "stuck" "stuck" ;
-- sting_V = irregV "sting" "stung" "stung" ;
-- stink_V = irregV "stink" "stank" "stunk" ;
-- stride_V = irregV "stride" "strod" "stridden" ;
-- strike_V = irregV "strike" "struck" "struck" ;
-- string_V = irregV "string" "strung" "strung" ;
-- strive_V = irregV "strive" "strove" "striven" ;
-- swear_V = irregV "swear" "swore" "sworn" ;
-- sweep_V = irregV "sweep" "swept" "swept" ;
-- swell_V = irregV "swell" "swelled" (variants {"swelled" ; "swollen"}) ;
-- swim_V = irregDuplV "swim" "swam" "swum" ;
-- swing_V = irregV "swing" "swung" "swung" ;
-- take_V = irregV "take" "took" "taken" ;
-- teach_V = irregV "teach" "taught" "taught" ;
-- tear_V = irregV "tear" "tore" "torn" ;
-- tell_V = irregV "tell" "told" "told" ;
-- think_V = irregV "think" "thought" "thought" ;
-- thrive_V = irregV "thrive" (variants {"thrived" ; "throve"}) "thrived" ;
-- throw_V = irregV "throw" "threw" "thrown" ;
-- thrust_V = irregV "thrust" "thrust" "thrust" ;
-- tread_V = irregV "tread" "trod" "trodden" ;
-- understand_V = irregV "understand" "understood" "understood" ;
-- uphold_V = irregV "uphold" "upheld" "upheld" ;
-- upset_V = irregDuplV "upset" "upset" "upset" ;
-- wake_V = irregV "wake" "woke" "woken" ;
-- wear_V = irregV "wear" "wore" "worn" ;
-- weave_V = irregV "weave" (variants {"weaved" ; "wove"}) (variants {"weaved" ; "woven"}) ;
-- wed_V = irregDuplV "wed" "wed" "wed" ;
-- weep_V = irregV "weep" "wept" "wept" ;
-- wind_V = irregV "wind" "wound" "wound" ;
-- win_V = irregDuplV "win" "won" "won" ;
-- withhold_V = irregV "withhold" "withheld" "withheld" ;
-- withstand_V = irregV "withstand" "withstood" "withstood" ;
-- wring_V = irregV "wring" "wrung" "wrung" ;
-- write_V = irregV "write" "wrote" "written" ;
--}

View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract:../common:prelude
concrete LangLat of Lang =
GrammarLat,
LexiconLat
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;
} ;

View File

@@ -0,0 +1,377 @@
--# -path=.:prelude
concrete LexiconLat of Lexicon = CatLat ** open
ParadigmsLat,
-- IrregLat,
Prelude in {
flags
optimize=values ;
lin
-- airplane_N = mkN "airplane" ;
-- answer_V2S = mkV2S (regV "answer") toP ;
-- apartment_N = mkN "apartment" ;
-- apple_N = mkN "apple" ;
art_N = mkN "ars" ;
-- ask_V2Q = mkV2Q (regV "ask") noPrep ;
baby_N = mkN "infans" ;
bad_A = mkA "malus" ;
-- bank_N = mkN "bank" ;
beautiful_A = mkA "pulcher" ;
-- become_VA = mkVA (irregV "become" "became" "become") ;
beer_N = mkN "cerevisia" ;
-- beg_V2V = mkV2V (regDuplV "beg") noPrep toP ;
big_A = mkA "magnus" ;
-- bike_N = mkN "bike" ;
bird_N = mkN "avis" "avis" masculine ;
black_A = mkA "niger" ;
-- blue_A = regADeg "blue" ;
-- boat_N = mkN "boat" ;
book_N = mkN "liber" ;
-- boot_N = mkN "boot" ;
-- boss_N = mkN human (mkN "boss") ;
boy_N = mkN "liber" ;
bread_N = mkN "panis" "panis" masculine ;
break_V2 = mkV2 (mkV "rumpo" "rupi" "ruptum" "rumpere") ;
-- broad_A = regADeg "broad" ;
-- brother_N2 = mkN2 (mkN masculine (mkN "brother")) (mkPrep "of") ;
-- brown_A = regADeg "brown" ;
-- butter_N = mkN "butter" ;
-- buy_V2 = dirV2 (irregV "buy" "bought" "bought") ;
-- camera_N = mkN "camera" ;
-- cap_N = mkN "cap" ;
-- car_N = mkN "car" ;
-- carpet_N = mkN "carpet" ;
cat_N = mkN "felis" ;
-- ceiling_N = mkN "ceiling" ;
-- chair_N = mkN "chair" ;
-- cheese_N = mkN "cheese" ;
-- child_N = mk2N "child" "children" ;
-- church_N = mkN "church" ;
city_N = mkN "urbs" "urbis" feminine ;
-- clean_A = regADeg "clean" ;
-- clever_A = regADeg "clever" ;
-- close_V2 = dirV2 (regV "close") ;
-- coat_N = mkN "coat" ;
-- cold_A = regADeg "cold" ;
-- come_V = (irregV "come" "came" "come") ;
-- computer_N = mkN "computer" ;
-- country_N = mkN "country" ;
-- cousin_N = mkN human (mkN "cousin") ;
-- cow_N = mkN "cow" ;
-- die_V = (regV "die") ;
-- dirty_A = regADeg "dirty" ;
-- distance_N3 = mkN3 (mkN "distance") fromP toP ;
-- doctor_N = mkN human (mkN "doctor") ;
-- dog_N = mkN "dog" ;
-- door_N = mkN "door" ;
-- drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;
-- easy_A2V = mkA2V (regA "easy") forP ;
-- eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;
-- empty_A = regADeg "empty" ;
-- enemy_N = mkN "enemy" ;
-- factory_N = mkN "factory" ;
-- father_N2 = mkN2 (mkN masculine (mkN "father")) (mkPrep "of") ;
-- fear_VS = mkVS (regV "fear") ;
-- find_V2 = dirV2 (irregV "find" "found" "found") ;
-- fish_N = mk2N "fish" "fish" ;
-- floor_N = mkN "floor" ;
-- forget_V2 = dirV2 (irregDuplV "forget" "forgot" "forgotten") ;
-- fridge_N = mkN "fridge" ;
-- friend_N = mkN human (mkN "friend") ;
-- fruit_N = mkN "fruit" ;
-- fun_AV = mkAV (regA "fun") ;
-- garden_N = mkN "garden" ;
-- girl_N = mkN feminine (mkN "girl") ;
-- glove_N = mkN "glove" ;
gold_N = mkN "aurum" ;
good_A = mkA "bonus" ;
-- go_V = mk5V "go" "goes" "went" "gone" "going" ;
-- green_A = regADeg "green" ;
-- harbour_N = mkN "harbour" ;
-- hate_V2 = dirV2 (regV "hate") ;
-- hat_N = mkN "hat" ;
-- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ;
-- hear_V2 = dirV2 (irregV "hear" "heard" "heard") ;
-- hill_N = mkN "hill" ;
-- hope_VS = mkVS (regV "hope") ;
-- horse_N = mkN "horse" ;
-- hot_A = duplADeg "hot" ;
-- house_N = mkN "house" ;
-- important_A = compoundADeg (regA "important") ;
-- industry_N = mkN "industry" ;
-- iron_N = mkN "iron" ;
-- king_N = mkN masculine (mkN "king") ;
-- know_V2 = dirV2 (irregV "know" "knew" "known") ;
-- lake_N = mkN "lake" ;
-- lamp_N = mkN "lamp" ;
-- learn_V2 = dirV2 (regV "learn") ;
-- leather_N = mkN "leather" ;
-- leave_V2 = dirV2 (irregV "leave" "left" "left") ;
-- like_V2 = dirV2 (regV "like") ;
-- listen_V2 = prepV2 (regV "listen") toP ;
-- live_V = (regV "live") ;
-- long_A = regADeg "long" ;
-- lose_V2 = dirV2 (irregV "lose" "lost" "lost") ;
love_N = mkN "amor" ;
love_V2 = mkV2 "amare" ;
-- man_N = mkN masculine (mk2N "man" "men") ;
-- married_A2 = mkA2 (regA "married") toP ;
-- meat_N = mkN "meat" ;
-- milk_N = mkN "milk" ;
-- moon_N = mkN "moon" ;
-- mother_N2 = mkN2 (mkN feminine (mkN "mother")) (mkPrep "of") ;
-- mountain_N = mkN "mountain" ;
-- music_N = mkN "music" ;
-- narrow_A = regADeg "narrow" ;
-- new_A = regADeg "new" ;
-- newspaper_N = mkN "newspaper" ;
-- oil_N = mkN "oil" ;
-- old_A = regADeg "old" ;
-- open_V2 = dirV2 (regV "open") ;
-- paint_V2A = mkV2A (regV "paint") noPrep ;
-- paper_N = mkN "paper" ;
-- paris_PN = mkPN (mkN nonhuman (mkN "Paris")) ;
-- peace_N = mkN "peace" ;
-- pen_N = mkN "pen" ;
-- planet_N = mkN "planet" ;
-- plastic_N = mkN "plastic" ;
-- play_V2 = dirV2 (regV "play") ;
-- policeman_N = mkN masculine (mkN "policeman" "policemen") ;
-- priest_N = mkN human (mkN "priest") ;
-- probable_AS = mkAS (regA "probable") ;
-- queen_N = mkN feminine (mkN "queen") ;
-- radio_N = mkN "radio" ;
-- rain_V0 = mkV0 (regV "rain") ;
-- read_V2 = dirV2 (irregV "read" "read" "read") ;
-- red_A = duplADeg "red" ;
-- religion_N = mkN "religion" ;
-- restaurant_N = mkN "restaurant" ;
-- river_N = mkN "river" ;
-- rock_N = mkN "rock" ;
-- roof_N = mkN "roof" ;
-- rubber_N = mkN "rubber" ;
-- run_V = (irregDuplV "run" "ran" "run") ;
-- say_VS = mkVS (irregV "say" "said" "said") ;
-- school_N = mkN "school" ;
-- science_N = mkN "science" ;
-- sea_N = mkN "sea" ;
-- seek_V2 = dirV2 (irregV "seek" "sought" "sought") ;
-- see_V2 = dirV2 (irregV "see" "saw" "seen") ;
-- sell_V3 = dirV3 (irregV "sell" "sold" "sold") toP ;
-- send_V3 = dirV3 (irregV "send" "sent" "sent") toP ;
-- sheep_N = mk2N "sheep" "sheep" ;
-- ship_N = mkN "ship" ;
-- shirt_N = mkN "shirt" ;
-- shoe_N = mkN "shoe" ;
-- shop_N = mkN "shop" ;
-- short_A = regADeg "short" ;
-- silver_N = mkN "silver" ;
-- sister_N = mkN2 (mkN feminine (mkN "sister")) (mkPrep "of") ;
sleep_V = mkV "dormio" "dormivi" "dormitus" "dormire" ;
-- small_A = regADeg "small" ;
-- snake_N = mkN "snake" ;
-- sock_N = mkN "sock" ;
-- speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ;
-- star_N = mkN "star" ;
-- steel_N = mkN "steel" ;
-- stone_N = mkN "stone" ;
-- stove_N = mkN "stove" ;
-- student_N = mkN human (mkN "student") ;
-- stupid_A = regADeg "stupid" ;
-- sun_N = mkN "sun" ;
-- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;
-- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;
-- table_N = mkN "table" ;
-- talk_V3 = mkV3 (regV "talk") toP aboutP ;
-- teacher_N = mkN human (mkN "teacher") ;
-- teach_V2 = dirV2 (irregV "teach" "taught" "taught") ;
-- television_N = mkN "television" ;
-- thick_A = regADeg "thick" ;
-- thin_A = duplADeg "thin" ;
-- train_N = mkN "train" ;
-- travel_V = (regDuplV "travel") ;
-- tree_N = mkN "tree" ;
-- ---- trousers_N = mkN "trousers" ;
-- ugly_A = regADeg "ugly" ;
-- understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;
-- university_N = mkN "university" ;
-- village_N = mkN "village" ;
-- wait_V2 = prepV2 (regV "wait") forP ;
-- walk_V = (regV "walk") ;
-- warm_A = regADeg "warm" ;
-- war_N = mkN "war" ;
-- watch_V2 = dirV2 (regV "watch") ;
-- water_N = mkN "water" ;
-- white_A = regADeg "white" ;
-- window_N = mkN "window" ;
-- wine_N = mkN "wine" ;
-- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;
-- woman_N = mkN feminine (mk2N "woman" "women") ;
-- wonder_VQ = mkVQ (regV "wonder") ;
-- wood_N = mkN "wood" ;
-- write_V2 = dirV2 (irregV "write" "wrote" "written") ;
-- yellow_A = regADeg "yellow" ;
-- young_A = regADeg "young" ;
--
-- do_V2 = dirV2 (mk5V "do" "does" "did" "done" "doing") ;
-- now_Adv = mkAdv "now" ;
-- already_Adv = mkAdv "already" ;
-- song_N = mkN "song" ;
-- add_V3 = dirV3 (regV "add") toP ;
-- number_N = mkN "number" ;
-- put_V2 = prepV2 (irregDuplV "put" "put" "put") noPrep ;
-- stop_V = regDuplV "stop" ;
-- jump_V = regV "jump" ;
--
-- left_Ord = ss "left" ;
-- right_Ord = ss "right" ;
-- far_Adv = mkAdv "far" ;
-- correct_A = (regA "correct") ;
-- dry_A = regA "dry" ;
-- dull_A = regA "dull" ;
-- full_A = regA "full" ;
-- heavy_A = regA "heavy" ;
-- near_A = regA "near" ;
-- rotten_A = (regA "rotten") ;
-- round_A = regA "round" ;
-- sharp_A = regA "sharp" ;
-- smooth_A = regA "smooth" ;
-- straight_A = regA "straight" ;
-- wet_A = regA "wet" ; ----
-- wide_A = regA "wide" ;
-- animal_N = mkN "animal" ;
-- ashes_N = mkN "ash" ; -- FIXME: plural only?
-- back_N = mkN "back" ;
-- bark_N = mkN "bark" ;
-- belly_N = mkN "belly" ;
-- blood_N = mkN "blood" ;
-- bone_N = mkN "bone" ;
-- breast_N = mkN "breast" ;
-- cloud_N = mkN "cloud" ;
-- day_N = mkN "day" ;
-- dust_N = mkN "dust" ;
-- ear_N = mkN "ear" ;
-- earth_N = mkN "earth" ;
-- egg_N = mkN "egg" ;
-- eye_N = mkN "eye" ;
-- fat_N = mkN "fat" ;
-- feather_N = mkN "feather" ;
-- fingernail_N = mkN "fingernail" ;
-- fire_N = mkN "fire" ;
-- flower_N = mkN "flower" ;
-- fog_N = mkN "fog" ;
-- foot_N = mk2N "foot" "feet" ;
-- forest_N = mkN "forest" ;
-- grass_N = mkN "grass" ;
-- guts_N = mkN "gut" ; -- FIXME: no singular
-- hair_N = mkN "hair" ;
-- hand_N = mkN "hand" ;
-- head_N = mkN "head" ;
-- heart_N = mkN "heart" ;
-- horn_N = mkN "horn" ;
-- husband_N = mkN masculine (mkN "husband") ;
-- ice_N = mkN "ice" ;
-- knee_N = mkN "knee" ;
-- leaf_N = mk2N "leaf" "leaves" ;
-- leg_N = mkN "leg" ;
-- liver_N = mkN "liver" ;
-- louse_N = mk2N "louse" "lice" ;
-- mouth_N = mkN "mouth" ;
-- name_N = mkN "name" ;
-- neck_N = mkN "neck" ;
-- night_N = mkN "night" ;
-- nose_N = mkN "nose" ;
-- person_N = mkN human (mkN "person") ;
-- rain_N = mkN "rain" ;
-- road_N = mkN "road" ;
-- root_N = mkN "root" ;
-- rope_N = mkN "rope" ;
-- salt_N = mkN "salt" ;
-- sand_N = mkN "sand" ;
-- seed_N = mkN "seed" ;
-- skin_N = mkN "skin" ;
-- sky_N = mkN "sky" ;
-- smoke_N = mkN "smoke" ;
-- snow_N = mkN "snow" ;
-- stick_N = mkN "stick" ;
-- tail_N = mkN "tail" ;
-- tongue_N = mkN "tongue" ;
-- tooth_N = mk2N "tooth" "teeth" ;
-- wife_N = mkN feminine (mk2N "wife" "wives") ;
-- wind_N = mkN "wind" ;
-- wing_N = mkN "wing" ;
-- worm_N = mkN "worm" ;
-- year_N = mkN "year" ;
-- blow_V = IrregLat.blow_V ;
-- breathe_V = dirV2 (regV "breathe") ;
-- burn_V = IrregLat.burn_V ;
-- dig_V = IrregLat.dig_V ;
-- fall_V = IrregLat.fall_V ;
-- float_V = regV "float" ;
-- flow_V = regV "flow" ;
-- fly_V = IrregLat.fly_V ;
-- freeze_V = IrregLat.freeze_V ;
-- give_V3 = dirV3 give_V toP ;
-- laugh_V = regV "laugh" ;
-- lie_V = IrregLat.lie_V ;
-- play_V = regV "play" ;
-- sew_V = IrregLat.sew_V ;
-- sing_V = IrregLat.sing_V ;
-- sit_V = IrregLat.sit_V ;
-- smell_V = regV "smell" ;
-- spit_V = IrregLat.spit_V ;
-- stand_V = IrregLat.stand_V ;
-- swell_V = IrregLat.swell_V ;
-- swim_V = IrregLat.swim_V ;
-- think_V = IrregLat.think_V ;
-- turn_V = regV "turn" ;
-- vomit_V = regV "vomit" ;
--
-- bite_V2 = dirV2 IrregLat.bite_V ;
-- count_V2 = dirV2 (regV "count") ;
-- cut_V2 = dirV2 IrregLat.cut_V ;
-- fear_V2 = dirV2 (regV "fear") ;
-- fight_V2 = dirV2 fight_V ;
-- hit_V2 = dirV2 hit_V ;
-- hold_V2 = dirV2 hold_V ;
-- hunt_V2 = dirV2 (regV "hunt") ;
-- kill_V2 = dirV2 (regV "kill") ;
-- pull_V2 = dirV2 (regV "pull") ;
-- push_V2 = dirV2 (regV "push") ;
-- rub_V2 = dirV2 (regDuplV "rub") ;
-- scratch_V2 = dirV2 (regV "scratch") ;
-- split_V2 = dirV2 split_V ;
-- squeeze_V2 = dirV2 (regV "squeeze") ;
-- stab_V2 = dirV2 (regDuplV "stab") ;
-- suck_V2 = dirV2 (regV "suck") ;
-- throw_V2 = dirV2 throw_V ;
-- tie_V2 = dirV2 (regV "tie") ;
-- wash_V2 = dirV2 (regV "wash") ;
-- wipe_V2 = dirV2 (regV "wipe") ;
--
---- other_A = regA "other" ;
--
-- grammar_N = mkN "grammar" ;
-- language_N = mkN "language" ;
-- rule_N = mkN "rule" ;
--
---- added 4/6/2007
-- john_PN = mkPN (mkN masculine (mkN "John")) ;
-- question_N = mkN "question" ;
-- ready_A = regA "ready" ;
-- reason_N = mkN "reason" ;
-- today_Adv = mkAdv "today" ;
-- uncertain_A = regA "uncertain" ;
--
--oper
-- aboutP = mkPrep "about" ;
-- atP = mkPrep "at" ;
-- forP = mkPrep "for" ;
-- fromP = mkPrep "from" ;
-- inP = mkPrep "in" ;
-- onP = mkPrep "on" ;
-- toP = mkPrep "to" ;
--
}

View File

@@ -0,0 +1,197 @@
----# -path=.:../../prelude
--
----1 A Simple Latlish Resource Morphology
----
---- Aarne Ranta 2002 -- 2005
----
---- This resource morphology contains definitions needed in the resource
---- syntax. To build a lexicon, it is better to use $ParadigmsLat$, which
---- gives a higher-level access to this module.
--
--resource MorphoLat = ResLat ** open Prelude, (Predef=Predef) in {
--
-- flags optimize=all ;
--
----2 Phonology
----
---- To regulate the use of endings for both nouns, adjectives, and verbs:
--
--oper
-- y2ie : Str -> Str -> Str = \fly,s ->
-- let y = last (init fly) in
-- case y of {
-- "a" => fly + s ;
-- "e" => fly + s ;
-- "o" => fly + s ;
-- "u" => fly + s ;
-- _ => init fly + "ie" + s
-- } ;
--
--
----2 Nouns
----
---- For conciseness and abstraction, we define a worst-case macro for
---- noun inflection. It is used for defining special case that
---- only need one string as argument.
--
--oper
-- CommonNoun : Type = {s : Number => Case => Str} ;
--
-- nounGen : Str -> CommonNoun = \dog -> case last dog of {
-- "y" => nounY "dog" ;
-- "s" => nounS (init "dog") ;
-- _ => nounReg "dog"
-- } ;
--
---- These are auxiliaries to $nounGen$.
--
-- nounReg : Str -> CommonNoun = \dog ->
-- mkNoun dog (dog + "s") (dog + "'s") (dog + "s'");
-- nounS : Str -> CommonNoun = \kiss ->
-- mkNoun kiss (kiss + "es") (kiss + "'s") (kiss + "es'") ;
-- nounY : Str -> CommonNoun = \fl ->
-- mkNoun (fl + "y") (fl + "ies") (fl + "y's") (fl + "ies'") ;
--
--
----3 Proper names
----
---- Regular proper names are inflected with "'s" in the genitive.
--
-- nameReg : Str -> Gender -> {s : Case => Str} = \john,g ->
-- {s = table {Gen => john + "'s" ; _ => john} ; g = g} ;
--
----2 Determiners
--
-- mkDeterminer : Number -> Str -> {s,sp : Str ; n : Number} = \n,s ->
-- {s,sp = s ; n = n} ;
--
----2 Pronouns
----
---- Here we define personal pronouns.
----
---- We record the form "mine" and the gender for later use.
--
-- Pronoun : Type =
-- {s : Case => Str ; a : Agr} ;
--
-- mkPronoun : (_,_,_,_ : Str) -> Number -> Person -> Gender -> Pronoun =
-- \I,me,my,mine,n,p,g ->
-- {s = table {Nom => I ; Acc => me ; Gen => my} ;
-- a = toAgr n p g
-- } ;
--
-- human : Gender = Masc ; --- doesn't matter
--
-- pronI = mkPronoun "I" "me" "my" "mine" Sg P1 human ;
-- pronYouSg = mkPronoun "you" "you" "your" "yours" Sg P2 human ; -- verb agr OK
-- pronHe = mkPronoun "he" "him" "his" "his" Sg P3 Masc ;
-- pronShe = mkPronoun "she" "her" "her" "hers" Sg P3 Fem ;
-- pronIt = mkPronoun "it" "it" "its" "it" Sg P3 Neutr ;
--
-- pronWe = mkPronoun "we" "us" "our" "ours" Pl P1 human ;
-- pronYouPl = mkPronoun "you" "you" "your" "yours" Pl P2 human ;
-- pronThey = mkPronoun "they" "them" "their" "theirs" Pl P3 human ; ---
--
--
----2 Adjectives
----
---- To form the adjectival and the adverbial forms, two strings are needed
---- in the worst case. (First without degrees.)
--
-- Adjective = {s : AForm => Str} ;
--
---- However, most adjectives can be inflected using the final character.
---- N.B. this is not correct for "shy", but $mkAdjective$ has to be used.
--
-- regAdjective : Str -> Adjective = \free ->
-- let
-- e = last free ;
-- fre = init free ;
-- freely = case e of {
-- "y" => fre + "ily" ;
-- _ => free + "ly"
-- } ;
-- fre = case e of {
-- "e" => fre ;
-- "y" => fre + "i" ;
-- _ => free
-- }
-- in
-- mkAdjective free (fre + "er") (fre + "est") freely ;
--
---- Many adjectives are 'inflected' by adding a comparison word.
--
-- adjDegrLong : Str -> Adjective = \ridiculous ->
-- mkAdjective
-- ridiculous
-- ("more" ++ ridiculous)
-- ("most" ++ ridiculous)
-- ((regAdjective ridiculous).s ! AAdv) ;
--
--
----3 Verbs
----
---- The worst case needs five forms. (The verb "be" is treated separately.)
--
-- mkVerb4 : (_,_,_,_: Str) -> Verb = \go,goes,went,gone ->
-- let going = case last go of {
-- "e" => init go + "ing" ;
-- _ => go + "ing"
-- }
-- in
-- mkVerb go goes went gone going ;
--
---- This is what we use to derive the irregular forms in almost all cases
--
-- mkVerbIrreg : (_,_,_ : Str) -> Verb = \bite,bit,bitten ->
-- let bites = case last bite of {
-- "y" => y2ie bite "s" ;
-- "s" => init bite + "es" ;
-- _ => bite + "s"
-- }
-- in mkVerb4 bite bites bit bitten ;
--
---- This is used to derive regular forms.
--
-- mkVerbReg : Str -> Verb = \soak ->
-- let
-- soaks = case last soak of {
-- "y" => y2ie soak "s" ;
-- "s" => init soak + "es" ;
-- _ => soak + "s"
-- } ;
-- soaked = case last soak of {
-- "e" => init soak + "s" ;
-- _ => soak + "ed"
-- }
-- in
-- mkVerb4 soak soaks soaked soaked ;
--
-- verbGen : Str -> Verb = \kill -> case last kill of {
-- "y" => verbP3y (init kill) ;
-- "e" => verbP3e (init kill) ;
-- "s" => verbP3s (init kill) ;
-- _ => regVerbP3 kill
-- } ;
--
---- These are just auxiliary to $verbGen$.
--
-- regVerbP3 : Str -> Verb = \walk ->
-- mkVerbIrreg walk (walk + "ed") (walk + "ed") ;
-- verbP3s : Str -> Verb = \kiss ->
-- mkVerb4 kiss (kiss + "es") (kiss + "ed") (kiss + "ed") ;
-- verbP3e : Str -> Verb = \love ->
-- mkVerb4 love (love + "s") (love + "d") (love + "d") ;
-- verbP3y : Str -> Verb = \cr ->
-- mkVerb4 (cr + "y") (cr + "ies") (cr + "ied") (cr + "ied") ;
--
----- The particle always appears right after the verb.
--
-- verbPart : Verb -> Str -> Verb = \v,p ->
-- {s = \\f => v.s ! f ++ p ; isRefl = v.isRefl} ;
--
-- verbNoPart : Verb -> Verb = \v -> verbPart v [] ;
--
--
--} ;
--

View File

@@ -0,0 +1,132 @@
concrete NounLat of Noun = CatLat ** open ResLat, Prelude in {
flags optimize=all_subs ;
lin
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.n ! c ;
n = det.n ; g = cn.g ; p = P3
} ;
-- UsePN pn = pn ** {a = agrgP3 Sg pn.g} ;
UsePron p = p ;
-- PredetNP pred np = {
-- s = \\c => pred.s ++ np.s ! c ;
-- a = np.a
-- } ;
--
-- PPartNP np v2 = {
-- s = \\c => np.s ! c ++ v2.s ! VPPart ;
-- a = np.a
-- } ;
--
-- RelNP np rs = {
-- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
-- a = np.a
-- } ;
--
-- AdvNP np adv = {
-- s = \\c => np.s ! c ++ adv.s ;
-- a = np.a
-- } ;
--
-- DetQuantOrd quant num ord = {
-- s = quant.s ! num.hasCard ! num.n ++ num.s ++ ord.s ;
-- sp = quant.sp ! num.hasCard ! num.n ++ num.s ++ ord.s ;
-- n = num.n
-- } ;
--
DetQuant quant num = {
s = \\g,c => quant.s ! num.n ! g ! c ++ num.s ! g ! c ;
sp = \\g,c => quant.sp ! num.n ! g ! c ++ num.s ! g ! c ;
n = num.n
} ;
DetNP det = {
s = det.sp ! Neutr ;
g = Neutr ; n = det.n ; p = P3
} ;
-- PossPron p = {
-- s = \\_,_ => p.s ! Gen ;
-- sp = \\_,_ => p.sp
-- } ;
--
NumSg = {s = \\_,_ => [] ; n = Sg} ;
NumPl = {s = \\_,_ => [] ; n = Pl} ;
-- NumCard n = n ** {hasCard = True} ;
--
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
-- OrdDigits n = {s = n.s ! NOrd} ;
--
-- NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
-- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
--
-- AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
--
-- OrdSuperl a = {s = a.s ! AAdj Superl} ;
DefArt = {
s = \\_,_,_ => [] ;
sp = \\n,g => (personalPronoun g n P3).s
} ;
-- IndefArt = {
-- s = \\c,n => case <n,c> of {
-- <Sg,False> => artIndef ;
-- _ => []
-- } ;
-- sp = \\c,n => case <n,c> of {
-- <Sg,False> => "one" ;
-- <Pl,False> => "ones" ;
-- _ => []
-- }
-- } ;
--
-- MassNP cn = {
-- s = cn.s ! Sg ;
-- a = agrP3 Sg
-- } ;
--
UseN n = n ;
-- UseN2 n = n ;
-----b UseN3 n = n ;
--
-- Use2N3 f = {
-- s = \\n,c => f.s ! n ! Nom ;
-- g = f.g ;
-- c2 = f.c2
-- } ;
--
-- Use3N3 f = {
-- s = \\n,c => f.s ! n ! Nom ;
-- g = f.g ;
-- c2 = f.c3
-- } ;
--
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; g = f.g} ;
-- ComplN3 f x = {
-- s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ;
-- g = f.g ;
-- c2 = f.c3
-- } ;
AdjCN ap cn = {
s = \\n,c => preOrPost ap.isPre (ap.s ! cn.g ! n ! c) (cn.s ! n ! c) ;
g = cn.g
} ;
-- RelCN cn rs = {
-- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ;
-- g = cn.g
-- } ;
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;
-- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;
--
-- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c ; g = cn.g} ;
--
}

View File

@@ -0,0 +1,95 @@
--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} ;
--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 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 ;
--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 ;
--lin pot3 n = {
-- s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
--lin pot3plus n m = {
-- s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
--
---- numerals as sequences of digits
--
-- lincat
-- Dig = TDigit ;
--
-- lin
-- IDig d = d ** {tail = T1} ;
--
-- IIDig d i = {
-- s = \\o => d.s ! NCard ++ commaIf i.tail ++ i.s ! o ;
-- n = Pl ;
-- tail = inc i.tail
-- } ;
--
-- D_0 = mkDig "0" ;
-- D_1 = mk3Dig "1" "1st" Sg ;
-- D_2 = mk2Dig "2" "2nd" ;
-- D_3 = mk2Dig "3" "3rd" ;
-- D_4 = mkDig "4" ;
-- D_5 = mkDig "5" ;
-- D_6 = mkDig "6" ;
-- D_7 = mkDig "7" ;
-- D_8 = mkDig "8" ;
-- D_9 = mkDig "9" ;
--
-- oper
-- commaIf : DTail -> Str = \t -> case t of {
-- T3 => "," ;
-- _ => []
-- } ;
--
-- inc : DTail -> DTail = \t -> case t of {
-- T1 => T2 ;
-- T2 => T3 ;
-- T3 => T1
-- } ;
--
-- mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
-- mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ;
--
-- mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
-- s = table {NCard => c ; NOrd => o} ;
-- n = n
-- } ;
--
-- TDigit = {
-- n : Number ;
-- s : CardOrd => Str
-- } ;
--
--}

View File

@@ -0,0 +1 @@
--resource OverloadLat = Overload with (Grammar = GrammarLat) ;

View File

@@ -0,0 +1,65 @@
--# -path=.:../abstract:../../prelude:../common
--1 Latin Lexical Paradigms
--
-- Aarne Ranta 2008
--
-- This is an API for the user of the resource grammar
-- for adding lexical items. It gives functions for forming
-- expressions of open categories: nouns, adjectives, verbs.
--
-- Closed categories (determiners, pronouns, conjunctions) are
-- accessed through the resource syntax API, $Structural.gf$.
resource ParadigmsLat = open
(Predef=Predef),
Prelude,
ResLat,
CatLat
in {
--2 Parameters
--
-- To abstract over gender names, we define the following identifiers.
oper
masculine : Gender ;
feminine : Gender ;
neuter : Gender ;
mkN = overload {
mkN : (verbum : Str) -> N
= \n -> noun n ** {lock_N = <>} ;
mkN : (verbum, verbi : Str) -> Gender -> N
= \x,y,z -> noun_ngg x y z ** {lock_N = <>} ;
} ;
mkA = overload {
mkA : (verbum : Str) -> A
= \n -> adj n ** {isPre = False ; lock_A = <>} ;
mkA : (verbum, verbi : Str) -> A
= \x,y -> adj123 x y ** {isPre = False ; lock_A = <>} ;
mkA : (bonus,bona,bonum : N) -> A
= \x,y,z -> mkAdjective x y z ** {isPre = False ; lock_A = <>} ;
} ;
mkV = overload {
mkV : (tacere : Str) -> V
= \v -> verb v ** {lock_V = <>} ;
mkV : (iacio,ieci,iactus,iacere : Str) -> V
= \v,x,y,z -> verb_pppi v x y z ** {lock_V = <>} ;
} ;
mkV2 = overload {
mkV2 : (amare : Str) -> V2
= \v -> verb v ** {c = {s = [] ; c = Acc} ; lock_V2 = <>} ;
mkV2 : (facere : V) -> V2
= \v -> v ** {c = {s = [] ; c = Acc} ; lock_V2 = <>} ;
} ;
--.
masculine = Masc ;
feminine = Fem ;
neuter = Neutr ;
}

View File

@@ -0,0 +1,24 @@
--concrete PhraseLat of Phrase = CatLat ** open Prelude, ResLat in {
--
-- lin
-- PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
--
-- UttS s = s ;
-- UttQS qs = {s = qs.s ! QDir} ;
-- UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;
-- UttImpPl pol imp = {s = pol.s ++ imp.s ! 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 ;
--
-- NoPConj = {s = []} ;
-- PConjConj conj = {s = conj.s2} ; ---
--
-- NoVoc = {s = []} ;
-- VocNP np = {s = "," ++ np.s ! Nom} ;
--
--}

View File

@@ -0,0 +1,55 @@
--concrete QuestionLat of Question = CatLat ** open ResLat, Prelude in {
--
-- flags optimize=all_subs ;
--
-- lin
--
-- QuestCl cl = {
-- s = \\t,a,p =>
-- let cls = cl.s ! t ! a ! p
-- in table {
-- QDir => cls ! OQuest ;
-- QIndir => "if" ++ cls ! ODir
-- } ---- "whether" in ExtLat
-- } ;
--
-- QuestVP qp vp =
-- let cl = mkClause (qp.s ! Nom) (agrP3 qp.n) vp
-- in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ;
--
-- QuestSlash ip slash =
-- mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ;
-- --- stranding in ExratLat
--
-- QuestIAdv iadv cl = mkQuestion iadv cl ;
--
-- QuestIComp icomp np =
-- mkQuestion icomp (mkClause (np.s ! Nom) np.a (predAux auxBe)) ;
--
--
-- PrepIP p ip = {s = p.s ++ ip.s ! Acc} ;
--
-- AdvIP ip adv = {
-- s = \\c => ip.s ! c ++ adv.s ;
-- n = ip.n
-- } ;
--
-- IdetCN idet cn = {
-- s = \\c => idet.s ++ cn.s ! idet.n ! c ;
-- n = idet.n
-- } ;
--
-- IdetIP idet = {
-- s = \\c => idet.s ;
-- n = idet.n
-- } ;
--
-- IdetQuant idet num = {
-- s = idet.s ! num.n ++ num.s ;
-- n = num.n
-- } ;
--
-- CompIAdv a = a ;
-- CompIP p = ss (p.s ! Nom) ;
--
--}

View File

@@ -0,0 +1,54 @@
--concrete RelativeLat of Relative = CatLat ** open ResLat in {
--
-- flags optimize=all_subs ;
--
-- lin
--
-- RelCl cl = {
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir ;
-- c = Nom
-- } ;
--
-- RelVP rp vp = {
-- s = \\t,ant,b,ag =>
-- let
-- agr = case rp.a of {
-- RNoAg => ag ;
-- RAg a => a
-- } ;
-- cl = mkClause (rp.s ! RC (fromAgr agr).g Nom) agr vp
-- in
-- cl.s ! t ! ant ! b ! ODir ;
-- c = Nom
-- } ;
--
---- Pied piping: "at which we are looking". Stranding and empty
---- relative are defined in $ExtraLat.gf$ ("that we are looking at",
---- "we are looking at").
--
-- RelSlash rp slash = {
-- s = \\t,a,p,agr =>
-- slash.c2 ++ rp.s ! RPrep (fromAgr agr).g ++ slash.s ! t ! a ! p ! ODir ;
-- c = Acc
-- } ;
--
-- FunRP p np rp = {
-- s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep (fromAgr np.a).g ;
-- a = RAg np.a
-- } ;
--
-- IdRP =
-- let varr : Str -> Str = \x -> variants {x ; "that"} --- for bwc
-- in {
-- s = table {
-- RC _ Gen => "whose" ;
-- RC Neutr _ => varr "which" ;
-- RC _ Acc => varr "whom" ;
-- RC _ Nom => varr "who" ;
-- RPrep Neutr => "which" ;
-- RPrep _ => "whom"
-- } ;
-- a = RNoAg
-- } ;
--
--}

View File

@@ -0,0 +1,570 @@
--# -path=.:../abstract:../common:../../prelude
--1 Latlish auxiliary operations.
resource ResLat = ParamX ** open Prelude in {
param
Gender = Masc | Fem | Neutr ;
Case = Nom | Acc | Gen | Dat | Abl | Voc ;
-- Degree = DPos | DComp | DSup ;
oper
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
Adjective : Type = {s : Gender => Number => Case => Str} ;
-- worst case
mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun =
\sn,sa,sg,sd,sab,sv,pn,pa,pg,pd, g -> {
s = table {
Sg => table {
Nom => sn ;
Acc => sa ;
Gen => sg ;
Dat => sd ;
Abl => sab ;
Voc => sv
} ;
Pl => table {
Nom | Voc => pn ;
Acc => pa ;
Gen => pg ;
Dat | Abl => pd
}
} ;
g = g
} ;
-- declensions
noun1 : Str -> Noun = \mensa ->
let
mensae = mensa + "a" ;
mensis = init mensa + "is" ;
in
mkNoun
mensa (mensa +"m") mensae mensae mensa mensa
mensae (mensa + "s") (mensa + "rum") mensis
Fem ;
noun2us : Str -> Noun = \servus ->
let
serv = Predef.tk 2 servus ;
servum = serv + "um" ;
servi = serv + "i" ;
servo = serv + "o" ;
in
mkNoun
servus servum servi servo servo (serv + "e")
servi (serv + "os") (serv + "orum") (serv + "is")
Masc ;
noun2er : Str -> Noun = \puer ->
let
puerum = puer + "um" ;
pueri = puer + "i" ;
puero = puer + "o" ;
in
mkNoun
puer puerum pueri puero puero (puer + "e")
pueri (puer + "os") (puer + "orum") (puer + "is")
Masc ;
noun2um : Str -> Noun = \bellum ->
let
bell = Predef.tk 2 bellum ;
belli = bell + "i" ;
bello = bell + "o" ;
bella = bell + "a" ;
in
mkNoun
bellum bellum belli bello bello (bell + "e")
bella bella (bell + "orum") (bell + "is")
Neutr ;
-- smart paradigm for declensions 1&2
noun12 : Str -> Noun = \verbum ->
case verbum of {
_ + "a" => noun1 verbum ;
_ + "us" => noun2us verbum ;
_ + "um" => noun2um verbum ;
_ + "er" => noun2er verbum ;
_ => Predef.error ("noun12 does not apply to" ++ verbum)
} ;
noun3c : Str -> Str -> Gender -> Noun = \rex,regis,g ->
let
reg = Predef.tk 2 regis ;
rege : Str = case rex of {
_ + "e" => reg + "i" ;
_ + ("al" | "ar") => rex + "i" ;
_ => reg + "e"
} ;
regemes : Str * Str = case g of {
Neutr => <rex,reg + "a"> ;
_ => <reg + "em", reg + "es">
} ;
in
mkNoun
rex regemes.p1 (reg + "is") (reg + "i") rege rex
regemes.p2 regemes.p2 (reg + "um") (reg + "ibus")
g ;
noun3 : Str -> Noun = \labor ->
case labor of {
_ + "r" => noun3c labor (labor + "is") Masc ;
fl + "os" => noun3c labor (fl + "oris") Masc ;
lim + "es" => noun3c labor (lim + "itis") Masc ;
cod + "ex" => noun3c labor (cod + "icis") Masc ;
poem + "a" => noun3c labor (poem + "atis") Neutr ;
calc + "ar" => noun3c labor (calc + "aris") Neutr ;
mar + "e" => noun3c labor (mar + "is") Neutr ;
car + "men" => noun3c labor (car + "minis") Neutr ;
rob + "ur" => noun3c labor (rob + "oris") Neutr ;
temp + "us" => noun3c labor (temp + "oris") Neutr ;
vers + "io" => noun3c labor (vers + "ionis") Fem ;
imag + "o" => noun3c labor (imag + "inis") Fem ;
ae + "tas" => noun3c labor (ae + "tatis") Fem ;
vo + "x" => noun3c labor (vo + "cis") Fem ;
pa + "rs" => noun3c labor (pa + "rtis") Fem ;
cut + "is" => noun3c labor (cut + "is") Fem ;
urb + "s" => noun3c labor (urb + "is") Fem ;
_ => Predef.error ("noun3 does not apply to" ++ labor)
} ;
noun4us : Str -> Noun = \fructus ->
let
fructu = init fructus ;
fruct = init fructu
in
mkNoun
fructus (fructu + "m") fructus (fructu + "i") fructu fructus
fructus fructus (fructu + "um") (fruct + "ibus")
Masc ;
noun4u : Str -> Noun = \cornu ->
let
corn = init cornu ;
cornua = cornu + "a"
in
mkNoun
cornu cornu (cornu + "s") (cornu + "i") cornu cornu
cornua cornua (cornu + "um") (corn + "ibus")
Neutr ;
noun5 : Str -> Noun = \res ->
let
re = init res ;
rei = re + "i"
in
mkNoun
res (re+ "m") rei rei re res
res res (re + "rum") (re + "bus")
Fem ;
-- to change the default gender
nounWithGen : Gender -> Noun -> Noun = \g,n ->
{s = n.s ; g = g} ;
-- smart paradigms
noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g ->
let s : Noun = case <verbum,verbi> of {
<_ + "a", _ + "ae"> => noun1 verbum ;
<_ + "us", _ + "i"> => noun2us verbum ;
<_ + "um", _ + "i"> => noun2um verbum ;
<_ + "er", _ + "i"> => noun2er verbum ;
<_ + "us", _ + "us"> => noun4us verbum ;
<_ + "u", _ + "us"> => noun4u verbum ;
<_ + "es", _ + "ei"> => noun5 verbum ;
_ => noun3c verbum verbi g
}
in
nounWithGen g s ;
noun : Str -> Noun = \verbum ->
case verbum of {
_ + "a" => noun1 verbum ;
_ + "us" => noun2us verbum ;
_ + "um" => noun2um verbum ;
_ + "er" => noun2er verbum ;
_ + "u" => noun4u verbum ;
_ + "es" => noun5 verbum ;
_ => noun3 verbum
} ;
-- adjectives
mkAdjective : (_,_,_ : Noun) -> Adjective = \bonus,bona,bonum -> {
s = table {
Masc => bonus.s ;
Fem => bona.s ;
Neutr => bonum.s
}
} ;
adj12 : Str -> Adjective = \bonus ->
let
bon : Str = case bonus of {
pulch + "er" => pulch + "r" ;
bon + "us" => bon ;
_ => Predef.error ("adj12 does not apply to" ++ bonus)
}
in
mkAdjective (noun12 bonus) (noun1 (bon + "a")) (noun2um (bon + "um")) ;
adj3x : (_,_ : Str) -> Adjective = \acer,acris ->
let
ac = Predef.tk 2 acer ;
acrise : Str * Str = case acer of {
_ + "er" => <ac + "ris", ac + "re"> ;
_ + "is" => <acer , ac + "e"> ;
_ => <acer , acer>
}
in
mkAdjective
(noun3adj acer acris Masc)
(noun3adj acrise.p1 acris Fem)
(noun3adj acrise.p2 acris Neutr) ;
noun3adj : Str -> Str -> Gender -> Noun = \audax,audacis,g ->
let
audac = Predef.tk 2 audacis ;
audacem = case g of {Neutr => audax ; _ => audac + "em"} ;
audaces = case g of {Neutr => audac +"ia" ; _ => audac + "es"} ;
audaci = audac + "i" ;
in
mkNoun
audax audacem (audac + "is") audaci audaci audax
audaces audaces (audac + "ium") (audac + "ibus")
g ;
-- smart paradigm
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 ;
_ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni)
} ;
adj : Str -> Adjective = \bonus ->
case bonus of {
_ + ("us" | "er") => adj12 bonus ;
facil + "is" => adj3x bonus bonus ;
feli + "x" => adj3x bonus (feli + "cis") ;
_ => adj3x bonus (bonus + "is") ---- any example?
} ;
-- verbs
param
VActForm = VAct VAnter VTense Number Person ;
VPassForm = VPass VTense Number Person ;
VInfForm = VInfActPres | VInfActPerf ;
VImpForm = VImpPres Number | VImpFut2 Number | VImpFut3 Number ;
VGerund = VGenAcc | VGenGen |VGenDat | VGenAbl ;
VSupine = VSupAcc | VSupAbl ;
VAnter = VSim | VAnt ;
VTense = VPres VMood | VImpf VMood | VFut ;
VMood = VInd | VConj ;
oper
Verb : Type = {
act : VActForm => Str ;
-- pass : VPassForm => Str ;
inf : VAnter => Str ;
-- imp : VImpForm => Str ;
-- ger : VGerund => Str ;
-- sup : VSupine => Str ;
-- partActPres : Adjective ;
-- partActFut : Adjective ;
-- partPassPerf : Adjective ;
-- partPassFut : Adjective ;
} ;
mkVerb :
(cela,cele,celab,celo,celant,celare,celavi,celatus,celabo,celabunt,celabi : Str)
-> Verb =
\cela,cele,celab,celo,celant,celare,celavi,celatus,celabo,celabunt,celabi ->
let
celav = init celavi
in {
act = table {
VAct VSim (VPres VInd) Sg P1 => celo ;
VAct VSim (VPres VInd) Pl P3 => celant ;
VAct VSim (VPres VInd) n p => cela + actPresEnding n p ;
VAct VSim (VPres VConj) n p => cele + actPresEnding n p ;
VAct VSim (VImpf VInd) n p => celab + "ba" + actPresEnding n p ;
VAct VSim (VImpf VConj) n p => celare + actPresEnding n p ;
VAct VSim VFut Sg P1 => celabo ;
VAct VSim VFut Pl P3 => celabunt ;
VAct VSim VFut n p => celabi + actPresEnding n p ;
VAct VAnt (VPres VInd) Pl P3 => celav + "erunt" ;
VAct VAnt (VPres VInd) n p => celavi + actPerfEnding n p ;
VAct VAnt (VPres VConj) n p => celav + "eri" + actPresEnding n p ;
VAct VAnt (VImpf VInd) n p => celav + "era" + actPresEnding n p ;
VAct VAnt (VImpf VConj) n p => celav + "isse" + actPresEnding n p ;
VAct VAnt VFut Sg P1 => celav + "ero" ;
VAct VAnt VFut n p => celav + "eri" + actPresEnding n p
} ;
inf = table {
VSim => celare ;
VAnt => celav + "isse"
}
} ;
actPresEnding : Number -> Person -> Str =
useEndingTable <"m", "s", "t", "mus", "tis", "nt"> ;
actPerfEnding : Number -> Person -> Str =
useEndingTable <"", "sti", "t", "mus", "stis", "erunt"> ;
useEndingTable : (Str*Str*Str*Str*Str*Str) -> Number -> Person -> Str =
\es,n,p -> case n of {
Sg => case p of {
P1 => es.p1 ;
P2 => es.p2 ;
P3 => es.p3
} ;
Pl => case p of {
P1 => es.p4 ;
P2 => es.p5 ;
P3 => es.p6
}
} ;
esse_V : Verb =
let
esse = mkVerb "es" "si" "era" "sum" "sunt" "esse" "fui" "*futus"
"ero" "erunt" "eri" ;
in {
act = table {
VAct VSim (VPres VInd) Sg P2 => "es" ;
VAct VSim (VPres VInd) Pl P1 => "sumus" ;
v => esse.act ! v
} ;
inf = esse.inf
} ;
verb1 : Str -> Verb = \celare ->
let
cela = Predef.tk 2 celare ;
cel = init cela ;
celo = cel + "o" ;
cele = cel + "e" ;
celavi = cela + "vi" ;
celatus = cela + "tus" ;
in mkVerb cela cele cela celo (cela + "nt") celare celavi celatus
(cela + "bo") (cela + "bunt") (cela + "bi") ;
verb2 : Str -> Verb = \habere ->
let
habe = Predef.tk 2 habere ;
hab = init habe ;
habeo = habe + "o" ;
habea = habe + "a" ;
habui = hab + "ui" ;
habitus = hab + "itus" ;
in mkVerb habe habea habe habeo (habe + "nt") habere habui habitus
(habe + "bo") (habe + "bunt") (habe + "bi") ;
verb3 : (_,_,_ : Str) -> Verb = \gerere,gessi,gestus ->
let
gere = Predef.tk 2 gerere ;
ger = init gere ;
gero = ger + "o" ;
geri = ger + "i" ;
gera = ger + "a" ;
in mkVerb geri gera gere gero (ger + "unt") gerere gessi gestus
(ger + "am") (ger + "ent") gere ;
verb3i : (_,_,_ : Str) -> Verb = \iacere,ieci,iactus ->
let
iac = Predef.tk 3 iacere ;
iaco = iac + "io" ;
iaci = iac + "i" ;
iacie = iac + "ie" ;
iacia = iac + "ia" ;
in mkVerb iaci iacia iacie iaco (iaci + "unt") iacere ieci iactus
(iac + "iam") (iac + "ient") iacie ;
verb4 : (_,_,_ : Str) -> Verb = \sentire,sensi,sensus ->
let
senti = Predef.tk 2 sentire ;
sentio = senti + "o" ;
sentia = senti + "a" ;
sentie = senti + "e" ;
in mkVerb senti sentia sentie sentio (senti + "unt") sentire sensi sensus
(senti + "am") (senti + "ent") sentie ;
-- smart paradigms
verb_pppi : (iacio,ieci,iactus,iacere : Str) -> Verb =
\iacio,ieci,iactus,iacere ->
case iacere of {
_ + "are" => verb1 iacere ;
_ + "ire" => verb4 iacere ieci iactus ;
_ + "ere" => case iacio of {
_ + "eo" => verb2 iacere ;
_ + "io" => verb3i iacere ieci iactus ;
_ => verb3 iacere ieci iactus
} ;
_ => Predef.error ("verb_pppi: illegal infinitive form" ++ iacere)
} ;
verb : (iacere : Str) -> Verb =
\iacere ->
case iacere of {
_ + "are" => verb1 iacere ;
_ + "ire" => let iaci = Predef.tk 2 iacere
in verb4 iacere (iaci + "vi") (iaci + "tus") ;
_ + "ere" => verb2 iacere ;
_ => Predef.error ("verb: illegal infinitive form" ++ iacere)
} ;
-- pronouns
Pronoun : Type = {
s : Case => Str ;
g : Gender ;
n : Number ;
p : Person ;
} ;
mkPronoun : (_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pronoun =
\ego,me,mei,mihi,mee,g,n,p -> {
s = pronForms ego me mei mihi mee ;
g = g ;
n = n ;
p = p
} ;
pronForms : (_,_,_,_,_ : Str) -> Case => Str =
\ego,me,mei,mihi,mee -> table Case [ego ; me ; mei ; mihi ; mee ; ego] ;
personalPronoun : Gender -> Number -> Person -> Pronoun = \g,n,p -> {
s = case <g,n,p> of {
<_,Sg,P1> => pronForms "ego" "me" "mei" "mihi" "me" ;
<_,Sg,P2> => pronForms "tu" "te" "tui" "tibi" "te" ;
<_,Pl,P1> => pronForms "nos" "nos" "nostri" "nobis" "nobis" ; --- nostrum
<_,Pl,P2> => pronForms "vos" "vos" "vestri" "vobis" "vobis" ; --- vestrum
<Masc, Sg,P3> => pronForms "is" "eum" "eius" "ei" "eo" ;
<Fem, Sg,P3> => pronForms "ea" "eam" "eius" "ei" "ea" ;
<Neutr,Sg,P3> => pronForms "id" "id" "eius" "ei" "eo" ;
<Masc, Pl,P3> => pronForms "ii" "eos" "eorum" "iis" "iis" ;
<Fem, Pl,P3> => pronForms "ii" "eas" "earum" "iis" "iis" ;
<Neutr,Pl,P3> => pronForms "ea" "ea" "eorum" "iis" "iis"
} ;
g = g ;
n = n ;
p = p
} ;
Preposition : Type = {s : Str ; c : Case} ;
VP : Type = {
fin : VActForm => Str ;
inf : VAnter => Str ;
obj : Str ;
adj : Gender => Number => Str
} ;
VPSlash = VP ** {c2 : Preposition} ;
predV : Verb -> VP = \v -> {
fin = v.act ;
inf = v.inf ;
obj = [] ;
adj = \\_,_ => []
} ;
predV2 : (Verb ** {c : Preposition}) -> VPSlash = \v -> predV v ** {c2 = v.c} ;
appPrep : Preposition -> (Case => Str) -> Str = \c,s -> c.s ++ s ! c.c ;
insertObj : Str -> VP -> VP = \obj,vp -> {
fin = vp.fin ;
inf = vp.inf ;
obj = obj ++ vp.obj ;
adj = vp.adj
} ;
insertAdj : (Gender => Number => Case => Str) -> VP -> VP = \adj,vp -> {
fin = vp.fin ;
inf = vp.inf ;
obj = vp.obj ;
adj = \\g,n => adj ! g ! n ! Nom ++ vp.adj ! g ! n
} ;
Clause = {s : VAnter => VTense => Polarity => Str} ;
mkClause : Pronoun -> VP -> Clause = \np,vp -> {
s = \\a,t,p => np.s ! Nom ++ vp.obj ++ vp.adj ! np.g ! np.n ++ negation p ++
vp.fin ! VAct a t np.n np.p
} ;
negation : Polarity -> Str = \p -> case p of {
Pos => [] ;
Neg => "non"
} ;
-- determiners
Determiner : Type = {
s,sp : Gender => Case => Str ;
n : Number
} ;
Quantifier : Type = {
s,sp : Number => Gender => Case => Str ;
} ;
mkQuantifG : (_,_,_,_,_ : Str) -> (_,_,_,_ : Str) -> (_,_,_ : Str) ->
Gender => Case => Str =
\mn,ma,mg,md,mab, fno,fa,fg,fab, nn,ng,nab -> table {
Masc => pronForms mn ma mg md mab ;
Fem => pronForms fno fa fg md fab ;
Neutr => pronForms nn nn ng md nab
} ;
mkQuantifier : (sg,pl : Gender => Case => Str) -> Quantifier = \sg,pl ->
let ssp = table {Sg => sg ; Pl => pl}
in {
s = ssp ;
sp = ssp
} ;
hic_Quantifier = mkQuantifier
(mkQuantifG
"hic" "hunc" "huius" "huic" "hoc" "haec" "hanc" "huius" "hac" "hoc" "huius" "hoc")
(mkQuantifG
"hi" "hos" "horum" "his" "his" "hae" "has" "harum" "his" "haec" "horum" "his")
;
ille_Quantifier = mkQuantifier
(mkQuantifG
"ille" "illum" "illius" "illi" "illo"
"illa" "illam" "illius" "illa"
"illud" "illius" "illo")
(mkQuantifG
"illi" "illos" "illorum" "illis" "illis"
"illae" "illas" "illarum" "illis"
"illa" "illorum" "illis")
;
mkPrep : Str -> Case -> {s : Str ; c : Case} = \s,c -> {s = s ; c = c} ;
}

View File

@@ -0,0 +1,67 @@
concrete SentenceLat of Sentence = CatLat ** open Prelude, ResLat in {
flags optimize=all_subs ;
lin
PredVP = mkClause ;
--
-- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
--
-- ImpVP vp = {
-- s = \\pol,n =>
-- let
-- agr = AgP2 (numImp n) ;
-- verb = infVP True vp agr ;
-- dont = case pol of {
-- CNeg True => "don't" ;
-- CNeg False => "do" ++ "not" ;
-- _ => []
-- }
-- in
-- dont ++ verb
-- } ;
--
-- SlashVP np vp =
-- mkClause (np.s ! Nom) np.a vp ** {c2 = vp.c2} ;
--
-- AdvSlash slash adv = {
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
-- c2 = slash.c2
-- } ;
--
-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
--
-- SlashVS np vs slash =
-- mkClause (np.s ! Nom) np.a
-- (insertObj (\\_ => conjThat ++ slash.s) (predV vs)) **
-- {c2 = slash.c2} ;
--
-- EmbedS s = {s = conjThat ++ s.s} ;
-- EmbedQS qs = {s = qs.s ! QIndir} ;
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
--
-- UseCl t p cl = {
-- s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! ODir
-- } ;
-- UseQCl t p cl = {
-- s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! q
-- } ;
-- UseRCl t p cl = {
-- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! r ;
-- c = cl.c
-- } ;
-- UseSlash t p cl = {
-- s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! ODir ;
-- c2 = cl.c2
-- } ;
--
-- AdvS a s = {s = a.s ++ "," ++ s.s} ;
--
-- RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ;
--
-- oper
-- ctr = contrNeg True ; -- contracted negations
--
}

View File

@@ -0,0 +1,124 @@
concrete StructuralLat of Structural = CatLat **
open ResLat, (P = ParadigmsLat), Prelude in
{
flags optimize=all ;
lin
above_Prep = mkPrep "super" Acc ;
after_Prep = mkPrep "post" Acc ;
-- all_Predet = ss "all" ;
almost_AdA, almost_AdN = ss "quasi" ;
-- although_Subj = ss "although" ;
always_AdV = ss "semper" ;
-- and_Conj = sd2 [] "and" ** {n = Pl} ;
-----b and_Conj = ss "and" ** {n = Pl} ;
-- because_Subj = ss "because" ;
before_Prep = mkPrep "ante" Acc ;
-- behind_Prep = ss "behind" ;
between_Prep = mkPrep "inter" Acc ;
-- both7and_DConj = sd2 "both" "and" ** {n = Pl} ;
but_PConj = ss "sed" ;
by8agent_Prep = mkPrep "a" Abl ;
by8means_Prep = mkPrep "per" Acc ;
-- can8know_VV, can_VV = {
-- s = table {
-- VVF VInf => ["be able to"] ;
-- VVF VPres => "can" ;
-- VVF VPPart => ["been able to"] ;
-- VVF VPresPart => ["being able to"] ;
-- VVF VPast => "could" ; --# notpresent
-- VVPastNeg => "couldn't" ; --# notpresent
-- VVPresNeg => "can't"
-- } ;
-- isAux = True
-- } ;
-- during_Prep = ss "during" ;
-- either7or_DConj = sd2 "either" "or" ** {n = Sg} ;
-- everybody_NP = regNP "everybody" Sg ;
-- every_Det = mkDeterminer Sg "every" ;
-- everything_NP = regNP "everything" Sg ;
-- everywhere_Adv = ss "everywhere" ;
-- few_Det = mkDeterminer Pl "few" ;
----- first_Ord = ss "first" ; DEPRECATED
for_Prep = mkPrep "pro" Abl ;
from_Prep = mkPrep "de" Abl ;
he_Pron = personalPronoun Masc Sg P3 ;
here_Adv = ss "hic" ;
-- here7to_Adv = ss ["to here"] ;
-- here7from_Adv = ss ["from here"] ;
-- how_IAdv = ss "how" ;
-- how8many_IDet = mkDeterminer Pl ["how many"] ;
-- if_Subj = ss "if" ;
in8front_Prep = mkPrep "coram" Abl ;
i_Pron = personalPronoun Masc Sg P1 ;
in_Prep = mkPrep "in" Abl ;
it_Pron = personalPronoun Neutr Sg P3 ;
-- less_CAdv = ss "less" ;
-- many_Det = mkDeterminer Pl "many" ;
-- more_CAdv = ss "more" ;
-- most_Predet = ss "most" ;
-- much_Det = mkDeterminer Sg "much" ;
-- must_VV = {
-- s = table {
-- VVF VInf => ["have to"] ;
-- VVF VPres => "must" ;
-- VVF VPPart => ["had to"] ;
-- VVF VPresPart => ["having to"] ;
-- VVF VPast => ["had to"] ; --# notpresent
-- VVPastNeg => ["hadn't to"] ; --# notpresent
-- VVPresNeg => "mustn't"
-- } ;
-- isAux = True
-- } ;
-----b no_Phr = ss "no" ;
no_Utt = ss "non" ;
-- on_Prep = ss "on" ;
------ one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED
only_Predet = ss "tantum" ;
-- or_Conj = sd2 [] "or" ** {n = Sg} ;
-- otherwise_PConj = ss "otherwise" ;
part_Prep = mkPrep [] Gen ;
-- please_Voc = ss "please" ;
possess_Prep = mkPrep [] Gen ;
-- quite_Adv = ss "quite" ;
she_Pron = personalPronoun Fem Sg P3 ;
so_AdA = ss "sic" ;
-- somebody_NP = regNP "somebody" Sg ;
-- someSg_Det = mkDeterminer Sg "some" ;
-- somePl_Det = mkDeterminer Pl "some" ;
-- something_NP = regNP "something" Sg ;
-- somewhere_Adv = ss "somewhere" ;
that_Quant = ille_Quantifier ;
-- there_Adv = ss "there" ;
-- there7to_Adv = ss "there" ;
-- there7from_Adv = ss ["from there"] ;
-- therefore_PConj = ss "therefore" ;
they_Pron = personalPronoun Masc Pl P3 ;
this_Quant = hic_Quantifier ;
-- through_Prep = ss "through" ;
-- too_AdA = ss "too" ;
-- to_Prep = ss "to" ;
under_Prep = mkPrep "sub" Acc ;
very_AdA = ss "valde" ;
-- want_VV = P.mkVV (P.regV "want") ;
we_Pron = personalPronoun Masc Pl P1 ;
-- whatPl_IP = mkIP "what" "what" "what's" Pl ;
-- whatSg_IP = mkIP "what" "what" "what's" Sg ;
-- when_IAdv = ss "when" ;
-- when_Subj = ss "when" ;
-- where_IAdv = ss "where" ;
-- which_IQuant = {s = \\_ => "which"} ;
-----b whichPl_IDet = mkDeterminer Pl ["which"] ;
-----b whichSg_IDet = mkDeterminer Sg ["which"] ;
-- whoPl_IP = mkIP "who" "whom" "whose" Pl ;
-- whoSg_IP = mkIP "who" "whom" "whose" Sg ;
-- why_IAdv = ss "why" ;
without_Prep = mkPrep "sine" Abl ;
with_Prep = mkPrep "cum" Abl ;
yes_Utt = ss "sic" ;
youSg_Pron = personalPronoun Masc Sg P2 ;
youPl_Pron = personalPronoun Masc Pl P2 ;
youPol_Pron = personalPronoun Masc Sg P2 ;
}

View File

@@ -0,0 +1,37 @@
--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
-- CNIntNP cn i = {
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
-- a = agrgP3 Sg cn.g
-- } ;
-- CNSymbNP det cn xs = {
-- s = \\c => det.s ++ cn.s ! det.n ! c ++ xs.s ;
-- a = agrgP3 det.n cn.g
-- } ;
-- CNNumNP cn i = {
-- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ;
-- a = agrgP3 Sg cn.g
-- } ;
--
-- SymbS sy = sy ;
--
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;
-- SymbOrd sy = {s = sy.s ++ "th"} ;
--
--lincat
--
-- Symb, [Symb] = SS ;
--
--lin
--
-- MkSymb s = s ;
--
-- BaseSymb = infixSS "and" ;
-- ConsSymb = infixSS "," ;
--
--}

View File

@@ -0,0 +1,50 @@
concrete VerbLat of Verb = CatLat ** open ResLat in {
flags optimize=all_subs ;
lin
UseV = predV ;
SlashV2a v = predV2 v ;
-- Slash2V3 v np =
-- insertObjc (\\_ => v.c2 ++ np.s ! Acc) (predV v ** {c2 = v.c3}) ;
-- Slash3V3 v np =
-- insertObjc (\\_ => v.c3 ++ np.s ! Acc) (predVc v) ; ----
--
-- ComplVV v vp = insertObj (\\a => infVP v.isAux vp a) (predVV v) ;
-- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
-- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
-- ComplVA v ap = insertObj (ap.s) (predV v) ;
--
-- SlashV2V v vp = insertObjc (\\a => infVP v.isAux vp a) (predVc v) ;
-- SlashV2S v s = insertObjc (\\_ => conjThat ++ s.s) (predVc v) ;
-- SlashV2Q v q = insertObjc (\\_ => q.s ! QIndir) (predVc v) ;
-- SlashV2A v ap = insertObjc (\\a => ap.s ! a) (predVc v) ; ----
--
ComplSlash vp np = insertObj (appPrep vp.c2 np.s) vp ;
--
-- SlashVV vv vp =
-- insertObj (\\a => infVP vv.isAux vp a) (predVV vv) **
-- {c2 = vp.c2} ;
-- SlashV2VNP vv np vp =
-- insertObjPre (\\_ => vv.c2 ++ np.s ! Acc)
-- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **
-- {c2 = vp.c2} ;
--
UseComp comp = insertAdj comp.s (predV esse_V) ;
AdvVP vp adv = insertObj adv.s vp ;
AdVVP adv vp = insertObj adv.s vp ;
-- ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ;
--
-- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
--
-----b UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
--
CompAP ap = ap ;
-- CompNP np = {s = \\_ => np.s ! Acc} ;
-- CompAdv a = {s = \\_ => a.s} ;
--
}

View File

@@ -0,0 +1,29 @@
Renaming on Mac:
for each in *Eng.gf ;
do
mv $each $(basename $each Eng.gf)Lat.gf
done
In-place change:
sed -e 's/Eng/Lat/g' -i *Lat.gf
Start with the following:
concrete GrammarLat of Grammar =
NounLat,
VerbLat,
AdjectiveLat,
-- AdverbLat,
-- NumeralLat,
SentenceLat,
-- QuestionLat,
-- RelativeLat,
-- ConjunctionLat,
-- PhraseLat,
TextX,
StructuralLat,
-- IdiomLat