1 Commits

Author SHA1 Message Date
Inari Listenmaa
ba879527ab (Som) Add full forms of the pronoun into the s field in UsePron…
…The clitic forms used in VPs and Cls are syncategorematic, so those constructions did not break.
2026-04-22 17:20:09 +02:00
149 changed files with 2707 additions and 146193 deletions

View File

@@ -15,7 +15,7 @@ concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
lincat Conj = {s : Str} ; lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ; lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ; lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {s : Case => Gender => Str; sp : Species; n : Number} ; lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ; lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ; lincat GN = {s : Str} ;
lincat IComp = {s : Str} ; lincat IComp = {s : Str} ;
@@ -38,7 +38,7 @@ concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ; lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat QCl = {s : Str} ; lincat QCl = {s : Str} ;
lincat QS = {s : Str} ; lincat QS = {s : Str} ;
lincat Quant = {s : Case => Gender => Number => Str; sp : Species} ; lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat RCl = {s : Str} ; lincat RCl = {s : Str} ;
lincat RP = {s : Str} ; lincat RP = {s : Str} ;
lincat RS = {s : Str} ; lincat RS = {s : Str} ;

View File

@@ -4,7 +4,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
lin lin
DetCN det cn = { DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ; s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
a = agrgP3 cn.g det.n a = agrgP3 cn.g det.n
} ; } ;
@@ -13,7 +13,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
DetQuant quant num = { DetQuant quant num = {
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ; s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
n = num.n ; n = num.n ;
sp = quant.sp spec = quant.spec
} ; } ;
NumSg = {s = []; n = Sg} ; NumSg = {s = []; n = Sg} ;
@@ -21,12 +21,12 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
DefArt = { DefArt = {
s = \\c,g,n => [] ; s = \\c,g,n => [] ;
sp = Def spec = Def
} ; } ;
IndefArt = { IndefArt = {
s = \\c,g => table Number ["një"; []] ; s = \\c,g => table Number ["një"; []] ;
sp = Indef spec = Indef
} ; } ;
UseN n = n ; UseN n = n ;

View File

@@ -1327,7 +1327,7 @@ oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
} }
} }
} ; } ;
sp = Indef spec = Indef
} ; } ;
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det = oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
@@ -1350,7 +1350,7 @@ oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
Fem => f8 Fem => f8
} }
} ; } ;
sp = Indef ; spec = Indef ;
n = n n = n
} ; } ;

View File

@@ -1,14 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in { concrete AdjectiveBel of Adjective = CatBel ** {
lin lin
PositA a = a ; PositA a = a ;
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
} }

View File

@@ -1,13 +0,0 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}

View File

@@ -1,5 +1,4 @@
concrete AllBel of AllBelAbs = concrete AllBel of AllBelAbs =
LangBel, LangBel
ExtendBel
** **
{} ; {} ;

View File

@@ -1,4 +1,3 @@
abstract AllBelAbs = abstract AllBelAbs =
Lang, Lang
Extend
** {} ** {}

View File

@@ -1,68 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in { concrete CatBel of Cat = CommonX ** open ResBel in {
lincat lincat N = Noun ;
S = {s : Str} ; lincat N2 = Noun ** {c2 : Compl} ;
QS = {s : Str} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
RS = {s : Str} ; lincat V = V ;
Cl = {s : R.Tense => R.Polarity => Str} ; lincat VV,VS,VQ,VA = V ;
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ; lincat V2 = V ** {c2 : Compl} ;
SSlash = {s : Str; c : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
Imp = {s : R.Polarity => Number => Str} ; lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
QCl = {s : R.Tense => R.Polarity => Str} ; lincat LN,SN,GN,PN = {s : Str} ;
IP = NPhrase ;
IComp = {s : Str} ;
IDet = {s : Case => Gender => Str; n : Number} ;
IQuant = {s : Case => Gender => Number => Str} ;
RCl = {s : R.Tense => R.Polarity => Str} ; linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
RP = {s : Str} ;
VP = VPhrase ;
Comp = {s : Agr => Str} ;
VPSlash = VSlash ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
CN = CommonNoun ;
NP = NPhrase ;
Pron = {s: Case => Str; a: Agr} ;
Det = {s : Case => Gender => Str; n : Number} ;
Predet = {s : Case => Gender => Number => Str} ;
Quant = {s : Case => Gender => Number => Str} ;
Num = {s : Case => Gender => Str; n : Number} ;
Card = {s : Str; n : Number} ;
ACard = {s : Str; n : Number} ;
Ord = Adj ;
DAP = {s : Case => Gender => Str; n : Number} ;
Numeral = {s : Str} ;
Digits = {s : Str} ;
Decimal = {s : Str} ;
Conj = {s : Str; n : Number} ;
Subj = {s : Str} ;
Prep = Compl ;
V = Verb ;
VV,VS,VQ,VA = Verb ;
V2 = Verb ** {c2 : Compl} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
A = Adj ;
A2 = Adj ** {c2 : Compl} ;
AP = AdjPhrase ;
LN = {s : Case => Str; g : Gender; n : Number} ;
PN = {s : Case => Str; g : Gender; n : Number} ;
GN = {s : Str; g : Gender} ;
SN = {s : Str} ;
linref
V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
N,N2,N3 = \n -> n.s ! Nom ! Sg ;
A,A2,AP,Ord = \a -> a.s ! Nom ! GSg Masc ;
NP,IP = \np -> np.s ! Nom ;
S,QS,RS = \s -> s.s ;
} }

View File

@@ -1,60 +0,0 @@
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAP conj xs = {s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
a = {g=Masc; n=conj.n; p=P3}
} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjCN conj xs = {
s = \\c,n => xs.s1 ! c ! n ++ conj.s ++ xs.s2 ! c ! n ;
voc = xs.voc ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\c,g => xs.s1 ! c ! g ++ conj.s ++ xs.s2 ! c ! g ;
n = conj.n
} ;
BaseS x y = {s1 = x.s; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s; s2 = y.s} ;
ConsRS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseNP x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsNP x xs = {
s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ;
s2 = xs.s2
} ;
BaseAP x y = {s1 = x.s; s2 = y.s} ;
ConsAP x xs = {s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s; s2 = y.s; voc = x.voc ++ "," ++ y.voc; g = x.g} ;
ConsCN x xs = {s1 = \\c,n => x.s ! c ! n ++ "," ++ xs.s1 ! c ! n; s2 = xs.s2; voc = x.voc ++ "," ++ xs.voc; g = xs.g} ;
BaseDAP x y = {s1 = x.s; s2 = y.s} ;
ConsDAP x xs = {s1 = \\c,g => x.s ! c ! g ++ "," ++ xs.s1 ! c ! g; s2 = xs.s2} ;
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str} ;
[AP] = {s1,s2 : Case => GenNum => Str} ;
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
[DAP] = {s1,s2 : Case => Gender => Str} ;
}

View File

@@ -1,141 +0,0 @@
concrete ConstructionBel of Construction = CatBel ** open ResBel, ParadigmsBel, (R = ParamX) in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
oper
adjVP : Adj -> VPhrase = \a -> {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = "быць" ++ a.s ! Nom ! GSg Masc ;
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
} ;
lin
hungry_VP = adjVP (mkA "галодны") ;
thirsty_VP = adjVP (mkA "спрагнены") ;
tired_VP = adjVP (mkA "стомлены") ;
scared_VP = adjVP (mkA "спалоханы") ;
ill_VP = adjVP (mkA "хворы") ;
ready_VP = adjVP (mkA "гатовы") ;
has_age_VP card = {
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
inf = card.s ++ "гадоў" ;
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
} ;
have_name_Cl np name = {s = \\t,p => np.s ! Gen ++ "імя" ++ name.s ! Nom} ;
married_Cl np spouse = {s = \\t,p => np.s ! Nom ++ copula t p np.a ++ "жанаты" ++ "з" ++ spouse.s ! Instr} ;
what_name_QCl np = {s = \\t,p => "як" ++ "завуць" ++ np.s ! Acc} ;
how_old_QCl np = {s = \\t,p => "колькі гадоў" ++ np.s ! Dat} ;
how_far_QCl np = {s = \\t,p => "як далёка" ++ np.s ! Nom} ;
weather_adjCl ap = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter} ;
is_right_VP = adjVP (mkA "правы") ;
is_wrong_VP = adjVP (mkA "няправы") ;
n_units_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn} ;
n_units_of_NP card cn np = mkSimpleNP (card.s ++ cn.s ! Gen ! Pl ++ np.s ! Gen) Neuter Sg P3 ;
n_unit_CN card unit cn = nounFromStr (card.s ++ unit.s ! Nom ! Pl ++ cn.s ! Nom ! Sg) cn.g ;
bottle_of_CN np = nounFromStr ("бутэлька" ++ np.s ! Gen) Fem ;
cup_of_CN np = nounFromStr ("кубак" ++ np.s ! Gen) Masc ;
glass_of_CN np = nounFromStr ("шклянка" ++ np.s ! Gen) Fem ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "бракуе" ++ x.s ! Gen ! Pl ++ "да" ++ y.s ! Gen ! Sg} ;
timeunitAdv card unit = {s = card.s ++ unit.s} ;
timeunitRange c1 c2 unit = {s = c1.s ++ "да" ++ c2.s ++ unit.s} ;
oneHour = {s = "1"} ; twoHour = {s = "2"} ; threeHour = {s = "3"} ; fourHour = {s = "4"} ;
fiveHour = {s = "5"} ; sixHour = {s = "6"} ; sevenHour = {s = "7"} ; eightHour = {s = "8"} ;
nineHour = {s = "9"} ; tenHour = {s = "10"} ; elevenHour = {s = "11"} ; twelveHour = {s = "12"} ;
thirteenHour = {s = "13"} ; fourteenHour = {s = "14"} ; fifteenHour = {s = "15"} ; sixteenHour = {s = "16"} ;
seventeenHour = {s = "17"} ; eighteenHour = {s = "18"} ; nineteenHour = {s = "19"} ; twentyHour = {s = "20"} ;
twentyOneHour = {s = "21"} ; twentyTwoHour = {s = "22"} ; twentyThreeHour = {s = "23"} ; twentyFourHour = {s = "24"} ;
timeHour h = {s = "а" ++ h.s} ;
timeHourMinute h m = {s = "а" ++ h.s ++ ":" ++ m.s} ;
weekdayPunctualAdv d = {s = "у" ++ d.s} ;
weekdayHabitualAdv d = {s = "па" ++ d.s} ;
weekdayLastAdv d = {s = "мінулай" ++ d.s} ;
weekdayNextAdv d = {s = "наступнай" ++ d.s} ;
monthAdv m = {s = "у" ++ m.s} ;
yearAdv y = {s = "у" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "па-" ++ l.s} ;
weekdayN d = nounFromStr d.s Masc ;
monthN m = nounFromStr m.s Masc ;
weekdayPN d = mkPN d.s ;
monthPN m = mkPN m.s ;
languageNP l = mkSimpleNP l.s Neuter Sg P3 ;
languageCN l = nounFromStr l.s Neuter ;
second_Timeunit = {s = "секунд"} ;
minute_Timeunit = {s = "хвілін"} ;
hour_Timeunit = {s = "гадзін"} ;
day_Timeunit = {s = "дзён"} ;
week_Timeunit = {s = "тыдняў"} ;
month_Timeunit = {s = "месяцаў"} ;
year_Timeunit = {s = "гадоў"} ;
monday_Weekday = {s = "панядзелак"} ;
tuesday_Weekday = {s = "аўторак"} ;
wednesday_Weekday = {s = "серада"} ;
thursday_Weekday = {s = "чацвер"} ;
friday_Weekday = {s = "пятніца"} ;
saturday_Weekday = {s = "субота"} ;
sunday_Weekday = {s = "нядзеля"} ;
january_Month = {s = "студзень"} ;
february_Month = {s = "люты"} ;
march_Month = {s = "сакавік"} ;
april_Month = {s = "красавік"} ;
may_Month = {s = "май"} ;
june_Month = {s = "чэрвень"} ;
july_Month = {s = "ліпень"} ;
august_Month = {s = "жнівень"} ;
september_Month = {s = "верасень"} ;
october_Month = {s = "кастрычнік"} ;
november_Month = {s = "лістапад"} ;
december_Month = {s = "снежань"} ;
afrikaans_Language = {s = "афрыкаанс"} ;
amharic_Language = {s = "амхарску"} ;
arabic_Language = {s = "арабску"} ;
bulgarian_Language = {s = "балгарску"} ;
catalan_Language = {s = "каталанску"} ;
chinese_Language = {s = "кітайску"} ;
danish_Language = {s = "дацку"} ;
dutch_Language = {s = "нідэрландску"} ;
english_Language = {s = "англійску"} ;
estonian_Language = {s = "эстонску"} ;
finnish_Language = {s = "фінску"} ;
french_Language = {s = "французску"} ;
german_Language = {s = "нямецку"} ;
greek_Language = {s = "грэцку"} ;
hebrew_Language = {s = "іўрыце"} ;
hindi_Language = {s = "хіндзі"} ;
japanese_Language = {s = "японску"} ;
italian_Language = {s = "італьянску"} ;
latin_Language = {s = "лацінску"} ;
latvian_Language = {s = "латышску"} ;
maltese_Language = {s = "мальтыйску"} ;
nepali_Language = {s = "непальску"} ;
norwegian_Language = {s = "нарвежску"} ;
persian_Language = {s = "персідску"} ;
polish_Language = {s = "польску"} ;
punjabi_Language = {s = "панджабі"} ;
romanian_Language = {s = "румынску"} ;
russian_Language = {s = "руску"} ;
sindhi_Language = {s = "сіндхі"} ;
spanish_Language = {s = "іспанску"} ;
swahili_Language = {s = "суахілі"} ;
swedish_Language = {s = "шведску"} ;
thai_Language = {s = "тайску"} ;
turkish_Language = {s = "турэцку"} ;
urdu_Language = {s = "урду"} ;
}

View File

@@ -29,12 +29,12 @@ lin
paragraph (x.infinitive) ++ paragraph (x.infinitive) ++
heading1 "Present" ++ heading1 "Present" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P1 ! Pl)) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P2 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P2 ! Pl)) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P3 ! Pl))) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++ heading1 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++ tr (th "Sg" ++ td (x.imperative ! Sg)) ++

View File

@@ -1,244 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lincat
VPS = {s : Agr => Str} ;
[VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Agr => Str; c : Compl; post : Str} ;
[VPS2] = {s1,s2 : Agr => Str; c : Compl; post : Str} ;
VPI2 = {s : Str; c : Compl; post : Str} ;
[VPI2] = {s1,s2 : Str; c : Compl; post : Str} ;
[Comp] = {s1,s2 : Agr => Str} ;
[Imp] = {s1,s2 : R.Polarity => Number => Str} ;
RNP = {s : Case => Str} ;
RNPList = {s1,s2 : Case => Str} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
GenNP np = {s = \\_,_,_ => np.s ! Gen} ;
GenIP ip = {s = \\_,_,_ => ip.s ! Gen} ;
GenRP num cn = {s = cn.s ! Gen ! num.n ++ "якога"} ;
GenModNP num np cn = {
s = \\c => np.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
GenModIP num ip cn = {
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
CompBareCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
PiedPipingQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
PiedPipingRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
StrandQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
StrandRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
EmptyRelSlash cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
MkVPS temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a} ;
ConjVPS conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
SQuestVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
QuestVPS ip vps = {s = ip.s ! Nom ++ vps.s ! ip.a} ;
RelVPS rp vps = {s = rp.s ++ vps.s ! defaultAgr} ;
BaseVPS x y = {s1 = x.s; s2 = y.s} ;
ConsVPS x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ExistS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistNPQS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistIPQS temp pol ip = {s = copula temp.t pol.p ip.a ++ ip.s ! Nom} ;
MkVPI vp = {s = vp.inf} ;
ConjVPI conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ComplVPIVV vv vpi = {
s = \\t,p,a => finiteVerb vv t p a ++ vpi.s ;
inf = vv.infinitive ++ vpi.s ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vpi.s
} ;
BaseVPI x y = {s1 = x.s; s2 = y.s} ;
ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
MkVPS2 temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a; c = vp.c; post = vp.post} ;
ConjVPS2 conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a; c = xs.c; post = xs.post} ;
ComplVPS2 vps np = {s = \\a => vps.s ! a ++ prepNP vps.c np ++ vps.post} ;
ReflVPS2 vps rnp = {s = \\a => vps.s ! a ++ rnp.s ! vps.c.c ++ vps.post} ;
BaseVPS2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPS2 x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
MkVPI2 vp = {s = vp.inf; c = vp.c; post = vp.post} ;
ConjVPI2 conj xs = {s = xs.s1 ++ conj.s ++ xs.s2; c = xs.c; post = xs.post} ;
ComplVPI2 vpi np = {s = vpi.s ++ prepNP vpi.c np ++ vpi.post} ;
BaseVPI2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPI2 x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
ConjComp conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
BaseComp x y = {s1 = x.s; s2 = y.s} ;
ConsComp x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ConjImp conj xs = {s = \\p,n => xs.s1 ! p ! n ++ conj.s ++ xs.s2 ! p ! n} ;
BaseImp x y = {s1 = x.s; s2 = y.s} ;
ConsImp x xs = {s1 = \\p,n => x.s ! p ! n ++ "," ++ xs.s1 ! p ! n; s2 = xs.s2} ;
ProDrop pron = pron ;
ICompAP ap = {s = ap.s ! Nom ! GSg Masc} ;
IAdvAdv adv = {s = adv.s} ;
CompIQuant iq = {s = iq.s ! Nom ! Masc ! Sg} ;
PrepCN prep cn = {s = prep.s ++ cn.s ! prep.c ! Sg} ;
FocusObj np ss = {s = np.s ! Acc ++ ss.s} ;
FocusAdv adv s = {s = adv.s ++ s.s} ;
FocusAdV adv s = {s = adv.s ++ s.s} ;
FocusAP ap np = {s = ap.s ! Nom ! genNum np.a.g np.a.n ++ np.s ! Nom} ;
PresPartAP vp = adjFromStr vp.inf ;
EmbedPresPart vp = {s = vp.inf} ;
PastPartAP vp = adjFromStr vp.inf ;
PastPartAgentAP vp np = adjFromStr (vp.inf ++ prepNP (mkPrep "кім" instrumental) np) ;
PassVPSlash vp = {
s = \\t,p,a => copula t p a ++ vp.inf ;
inf = "быць" ++ vp.inf ;
imp = \\p,_ => neg p ++ "будзь" ++ vp.inf
} ;
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
NominalizeVPSlashNP vp np = mkSimpleNP (vp.inf ++ prepNP vp.c np) Neuter Sg P3 ;
ProgrVPSlash vp = vp ;
A2VPSlash a = {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = a.s ! Nom ! GSg Masc ;
c = a.c2 ;
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
post = []
} ;
N2VPSlash n = {
s = \\t,p,agr => copula t p agr ++ n.s ! Nom ! agr.n ;
inf = n.s ! Nom ! Sg ;
c = n.c2 ;
imp = \\p,_ => neg p ++ n.s ! Nom ! Sg ;
post = []
} ;
ExistsNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistCN cn = {s = \\t,p => copula t p {g=cn.g; n=Sg; p=P3} ++ cn.s ! Nom ! Sg} ;
ExistMassCN cn = ExistCN cn ;
ExistPluralCN cn = {s = \\t,p => copula t p {g=cn.g; n=Pl; p=P3} ++ cn.s ! Nom ! Pl} ;
AdvIsNP adv np = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom} ;
AdvIsNPAP adv np ap = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom ++ ap.s ! Nom ! genNum np.a.g np.a.n} ;
PurposeVP vp = {s = "каб" ++ vp.inf} ;
ComplBareVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
inf = vs.infinitive ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
} ;
SlashBareV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = s.s
} ;
ComplDirectVS vs utt = {
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
inf = vs.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ utt.s
} ;
ComplDirectVQ vq utt = {
s = \\t,p,a => finiteVerb vq t p a ++ utt.s ;
inf = vq.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ utt.s
} ;
FrontComplDirectVS np vs utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vs t p np.a} ;
FrontComplDirectVQ np vq utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vq t p np.a} ;
PredAPVP ap vp = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter ++ vp.inf} ;
AdjAsCN ap = nounFromStr (ap.s ! Nom ! GSg Masc) Masc ;
AdjAsNP ap = mkSimpleNP (ap.s ! Nom ! GSg Masc) Masc Sg P3 ;
PredIAdvVP iadv vp = {s = \\t,p => iadv.s ++ vp.inf} ;
EmbedSSlash ss = {s = ss.s} ;
ReflRNP vp rnp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ rnp.s ! vp.c.c ++ vp.post ;
inf = vp.inf ++ rnp.s ! vp.c.c ;
imp = \\p,n => vp.imp ! p ! n ++ rnp.s ! vp.c.c ++ vp.post
} ;
ReflPron = {s = caseTable "сябе"} ;
ReflPoss num cn = {s = \\c => "свой" ++ cn.s ! c ! num.n} ;
PredetRNP pred rnp = {s = \\c => pred.s ! c ! Masc ! Sg ++ rnp.s ! c} ;
AdvRNP np prep rnp = {s = \\c => np.s ! c ++ prep.s ++ rnp.s ! prep.c} ;
AdvRVP vp prep rnp = addAdvVP vp (prep.s ++ rnp.s ! prep.c) ;
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c} ;
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
a = {g=cn.g; n=num.n; p=P3}
} ;
ConjRNP conj xs = {s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c} ;
Base_rr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_nr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_rn_RNP x y = {s1 = x.s; s2 = y.s} ;
Cons_rr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
Cons_nr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
ReflPossPron = mkQuant "свой" ;
ComplGenVV vv ant pol vp = {
s = \\t,p,a => finiteVerb vv t p a ++ neg pol.p ++ vp.inf ;
inf = vv.infinitive ++ neg pol.p ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf
} ;
CompoundN n1 n2 = {
s = \\c,n => n1.s ! Nom ! Sg ++ n2.s ! c ! n ;
voc = n1.voc ++ n2.voc ;
g = n2.g
} ;
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
GerundCN vp = nounFromStr vp.inf Neuter ;
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
GerundAdv vp = {s = vp.inf} ;
WithoutVP vp = {s = "без" ++ vp.inf} ;
ByVP vp = {s = "праз" ++ vp.inf} ;
InOrderToVP vp = {s = "каб" ++ vp.inf} ;
ApposNP np app = {s = \\c => np.s ! c ++ app.s ! Nom; a = np.a} ;
AdAdV ada adv = {s = ada.s ++ adv.s} ;
UttAdV adv = {s = adv.s} ;
PositAdVAdj a = {s = a.s ! Nom ! GSg Neuter} ;
CompS s = {s = \\_ => s.s} ;
CompQS qs = {s = \\_ => qs.s} ;
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
UncontractedNeg = {s = []; p = R.Neg} ;
UttVPShort vp = {s = vp.inf} ;
ComplSlashPartLast vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
DetNPMasc det = {s = \\c => det.s ! c ! Masc; a = {g=Masc; n=det.n; p=P3}} ;
DetNPFem det = {s = \\c => det.s ! c ! Fem; a = {g=Fem; n=det.n; p=P3}} ;
UseComp_estar comp = UseComp_ser comp ;
UseComp_ser comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
UttAccNP np = {s = np.s ! Acc} ;
UttDatNP np = {s = np.s ! Dat} ;
UttAccIP ip = {s = ip.s ! Acc} ;
UttDatIP ip = {s = ip.s ! Dat} ;
UseDAP dap = {s = \\c => dap.s ! c ! Masc; a = {g=Neuter; n=dap.n; p=P3}} ;
UseDAPMasc dap = {s = \\c => dap.s ! c ! Masc; a = {g=Masc; n=dap.n; p=P3}} ;
UseDAPFem dap = {s = \\c => dap.s ! c ! Fem; a = {g=Fem; n=dap.n; p=P3}} ;
CardCNCard card cn = {s = card.s ++ cn.s ! Gen ! Pl; n = Pl} ;
TPastSimple = {s = []; t = R.Past} ;
SubjunctRelCN cn rs = {
s = \\c,n => cn.s ! c ! n ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
}

View File

@@ -2,15 +2,5 @@ concrete GrammarBel of Grammar =
TenseX, TenseX,
PhraseBel, PhraseBel,
NounBel, NounBel,
AdjectiveBel, AdjectiveBel ** {
AdverbBel,
VerbBel,
SentenceBel,
QuestionBel,
RelativeBel,
ConjunctionBel,
NumeralBel,
NamesBel,
StructuralBel,
IdiomBel ** {
} }

View File

@@ -1,22 +0,0 @@
concrete IdiomBel of Idiom = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lin
ImpersCl vp = {s = \\t,p => vp.s ! t ! p ! defaultAgr} ;
GenericCl vp = {s = \\t,p => "нехта" ++ vp.s ! t ! p ! defaultAgr} ;
CleftNP np rs = {s = \\_,_ => "гэта" ++ np.s ! Nom ++ rs.s} ;
CleftAdv adv s = {s = \\_,_ => "гэта" ++ adv.s ++ s.s} ;
ExistNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistIP ip = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom} ;
ExistNPAdv np adv = {s = \\t,p => copula t p np.a ++ np.s ! Nom ++ adv.s} ;
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
SelfAdvVP vp = addAdvVP vp "сам" ;
SelfAdVVP vp = addAdVVP "сам" vp ;
SelfNP np = {s = \\c => np.s ! c ++ "сам"; a = np.a} ;
}

View File

@@ -1,12 +1,10 @@
--# -path=.:../abstract --# -path=.:../abstract
concrete LangBel of Lang = concrete LangBel of Lang =
GrammarBel, GrammarBel,
LexiconBel, LexiconBel
ConstructionBel
,DocumentationBel --# notpresent ,DocumentationBel --# notpresent
** { ** {
flags startcat = Phr ; flags startcat = Phr ;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
concrete NamesBel of Names = CatBel ** open ResBel, ParadigmsBel in {
lin
GivenName gn = mkSimpleNP gn.s gn.g Sg P3 ;
MaleSurname sn = mkSimpleNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkSimpleNP sn.s Fem Sg P3 ;
PlSurname sn = mkSimpleNP sn.s Masc Pl P3 ;
FullName gn sn = mkSimpleNP (gn.s ++ sn.s) gn.g Sg P3 ;
UseLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
PlainLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
InLN ln = {s = "у" ++ ln.s ! Loc} ;
AdjLN ap ln = {
s = \\c => ap.s ! c ! genNum ln.g ln.n ++ ln.s ! c ;
g = ln.g ;
n = ln.n
} ;
}

View File

@@ -1,126 +1,4 @@
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in { concrete NounBel of Noun = CatBel ** {
lin lin
UseN n = n ; UseN n = n ;
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
a = {g=cn.g; n=det.n; p=P3}
} ;
UsePN pn = {
s = pn.s ;
a = {g=pn.g; n=pn.n; p=P3}
} ;
UsePron p = p ;
PredetNP pred np = {
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
a = np.a
} ;
PPartNP np v = {
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
a = np.a
} ;
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
ExtAdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
RelNP np rs = {
s = \\c => np.s ! c ++ rs.s ;
a = np.a
} ;
DetNP det = {
s = \\c => det.s ! c ! Masc ;
a = {g=Masc; n=det.n; p=P3}
} ;
DetQuant q n = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
n = n.n
} ;
DetQuantOrd q n o = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
n = n.n
} ;
NumSg = {s = \\_,_ => []; n = Sg} ;
NumPl = {s = \\_,_ => []; n = Pl} ;
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
NumDigits digits = {s = digits.s; n = Pl} ;
NumDecimal dec = {s = dec.s; n = Pl} ;
NumNumeral numeral = {s = numeral.s; n = Pl} ;
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
OrdDigits d = adjFromStr d.s ;
OrdNumeral n = adjFromStr n.s ;
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
IndefArt = {s = \\_,_,_ => []} ;
DefArt = {s = \\_,_,_ => []} ;
MassNP cn = {
s = \\c => cn.s ! c ! Sg ;
a = {g=cn.g; n=Sg; p=P3}
} ;
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
ComplN2 n np = {
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
voc = n.voc ;
g = n.g
} ;
ComplN3 n np = n ** {c2 = n.c3} ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
AdjCN ap cn = {
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
voc = cn.voc ;
g = cn.g
} ;
RelCN cn rs = {
s = \\c,num => cn.s ! c ! num ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\c,num => cn.s ! c ! num ++ adv.s ;
voc = cn.voc ;
g = cn.g
} ;
SentCN cn sc = {
s = \\c,num => cn.s ! c ! num ++ sc.s ;
voc = cn.voc ;
g = cn.g
} ;
ApposCN cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
voc = cn.voc ;
g = cn.g
} ;
PossNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
PartNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
a = {g=Masc; n=det.n; p=P3}
} ;
AdjDAP dap ap = {
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
n = dap.n
} ;
DetDAP det = det ;
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
} }

View File

@@ -1,65 +0,0 @@
concrete NumeralBel of Numeral = CatBel ** {
lincat
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
Dig = {s : Str} ;
lin
num n = n ;
n2 = {s = "2"} ;
n3 = {s = "3"} ;
n4 = {s = "4"} ;
n5 = {s = "5"} ;
n6 = {s = "6"} ;
n7 = {s = "7"} ;
n8 = {s = "8"} ;
n9 = {s = "9"} ;
pot01 = {s = "1"} ;
pot0 d = d ;
pot0as1 n = n ;
pot110 = {s = "10"} ;
pot111 = {s = "11"} ;
pot1to19 d = {s = "1" ++ d.s} ;
pot1 d = {s = d.s ++ "0"} ;
pot1plus d n = {s = d.s ++ n.s} ;
pot1as2 n = n ;
pot21 = {s = "100"} ;
pot2 n = {s = n.s ++ "00"} ;
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
pot2as3 n = n ;
pot31 = {s = "1000"} ;
pot3 n = {s = n.s ++ "000"} ;
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
pot3as4 n = n ;
pot3decimal d = {s = d.s ++ "тысяч"} ;
pot41 = {s = "1000000"} ;
pot4 n = {s = n.s ++ "000000"} ;
pot4plus n m = {s = n.s ++ "000000" ++ m.s} ;
pot4as5 n = n ;
pot4decimal d = {s = d.s ++ "мільёна"} ;
pot51 = {s = "1000000000"} ;
pot5 n = {s = n.s ++ "000000000"} ;
pot5plus n m = {s = n.s ++ "000000000" ++ m.s} ;
pot5decimal d = {s = d.s ++ "мільярда"} ;
IDig d = d ;
IIDig d ds = {s = d.s ++ ds.s} ;
D_0 = {s = "0"} ;
D_1 = {s = "1"} ;
D_2 = {s = "2"} ;
D_3 = {s = "3"} ;
D_4 = {s = "4"} ;
D_5 = {s = "5"} ;
D_6 = {s = "6"} ;
D_7 = {s = "7"} ;
D_8 = {s = "8"} ;
D_9 = {s = "9"} ;
PosDecimal d = d ;
NegDecimal d = {s = "-" ++ d.s} ;
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
}

View File

@@ -636,42 +636,6 @@ oper
_ => regN form1 _ => regN form1
} ; } ;
compoundN = overload {
compoundN : A -> N -> N = \a,n -> lin N {
s = \\c,num => a.s ! c ! genNum n.g num ++ n.s ! c ! num ;
voc = a.s ! Nom ! genNum n.g Sg ++ n.voc ;
g = n.g
} ;
compoundN : N -> A -> N = \n,a -> lin N {
s = \\c,num => n.s ! c ! num ++ a.s ! c ! genNum n.g num ;
voc = n.voc ++ a.s ! Nom ! genNum n.g Sg ;
g = n.g
} ;
compoundN : N -> Str -> N = \n,adv -> lin N {
s = \\c,num => n.s ! c ! num ++ adv ;
voc = n.voc ++ adv ;
g = n.g
} ;
compoundN : Str -> N -> N = \adv,n -> lin N {
s = \\c,num => adv ++ n.s ! c ! num ;
voc = adv ++ n.voc ;
g = n.g
}
} ;
mkPron : (_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,loc,instr,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen ;
Loc => loc ;
Instr => instr
} ;
a = {g=g; n = n; p = p}
} ;
regV : Str -> V -- infinitive regV : Str -> V -- infinitive
= \form -> case form of { = \form -> case form of {
_ + "агчы" => mkV021 form; _ + "агчы" => mkV021 form;
@@ -753,16 +717,6 @@ oper
_ => regV form1 _ => regV form1
} ; } ;
compoundV : V -> Str -> V = \v,adv -> lin V {
active = \\a => {past=(v.active ! a).past ++ adv ;
pres=\\p,num=>(v.active ! a).pres ! p ! num ++ adv
} ;
imperative = \\num => v.imperative ! num ++ adv ;
infinitive = v.infinitive ++ adv ;
participle = \\g,num => v.participle ! g ! num ++ adv ;
passive = \\a,t => v.passive ! a ! t ++ adv
} ;
regA : Str -> A -- s;Nom;('GSg', Masc) regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of { = \form -> case form of {
_ + "які" => mkA006 form; _ + "які" => mkA006 form;
@@ -865,37 +819,24 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
nominative : Case = Nom ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
accusative : Case = Acc ;
dative : Case = Dat ;
genitive : Case = Gen ;
locative : Case = Loc ;
instrumental : Case = Instr ;
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep : Case -> Prep = \c -> lin Prep {s=[]; c=c} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ; mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s; n=Pl} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s; n=Pl} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ; mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ; mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ; mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ; mkPN : Str -> PN = \s -> lin PN {s=s} ;
} }

View File

@@ -1,25 +1,11 @@
concrete PhraseBel of Phrase = CatBel ** open ResBel in { concrete PhraseBel of Phrase = CatBel ** {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s ! Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttAdv adv = adv ;
UttVP vp = {s = vp.inf} ;
UttCN cn = {s = cn.s ! Nom ! Sg} ;
UttCard card = {s = card.s} ;
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj conj = {s = conj.s} ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = np.s ! Nom} ;
} }

View File

@@ -1,50 +0,0 @@
concrete QuestionBel of Question = CatBel ** open ResBel, (R = ParamX) in {
lincat
QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {
s = \\t,p => ip.s ! Nom ++ vp.s ! t ! p ! ip.a
} ;
QuestSlash ip cl = {
s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p
} ;
QuestIAdv iadv cl = {
s = \\t,p => iadv.s ++ cl.s ! t ! p
} ;
QuestIComp icomp np = {
s = \\t,p => icomp.s ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = \\c => idet.s ! c ! cn.g ++ cn.s ! c ! idet.n ;
a = {g=cn.g; n=idet.n; p=P3}
} ;
IdetIP idet = {
s = \\c => idet.s ! c ! Masc ;
a = {g=Masc; n=idet.n; p=P3}
} ;
AdvIP ip adv = {
s = \\c => ip.s ! c ++ adv.s ;
a = ip.a
} ;
IdetQuant iquant num = {
s = \\c,g => iquant.s ! c ! g ! num.n ++ num.s ! c ! g ;
n = num.n
} ;
PrepIP prep ip = {s = prepNP prep ip} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s ! Nom} ;
ComplSlashIP vp ip = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ vp.c.s ++ ip.s ! vp.c.c ++ vp.post} ;
AdvQVP vp iadv = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ iadv.s} ;
AddAdvQVP qvp iadv = {s = qvp.s ++ iadv.s} ;
QuestQVP ip qvp = {
s = \\_,_ => ip.s ! Nom ++ qvp.s
} ;
}

View File

@@ -1,11 +0,0 @@
concrete RelativeBel of Relative = CatBel ** open ResBel in {
lin
RelCl cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
RelVP rp vp = {s = \\t,p => rp.s ++ vp.s ! t ! p ! defaultAgr} ;
RelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
IdRP = {s = "які"} ;
FunRP prep np rp = {s = prepNP prep np ++ rp.s} ;
}

View File

@@ -1,4 +1,4 @@
resource ResBel = open (R = ParamX), Prelude in { resource ResBel = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ; param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ; param Number = Sg | Pl ;
@@ -40,12 +40,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
param Aspect = Imperf | Perf ; param Aspect = Imperf | Perf ;
param Person = P1 | P2 | P3 ; param Person = P1 | P2 | P3 ;
param Tense = Pres | Past ; param Tense = Pres | Past ;
oper Verb = {active: Aspect => {past: Str; pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703 oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 ->
{ active = table { { active = table {
Imperf => { past = f1 ; Imperf => { Past = f1 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f2 ; Sg => f2 ;
Pl => f3 Pl => f3
@@ -60,8 +60,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
} }
} }
} ; } ;
Perf => { past = f8 ; Perf => { Past = f8 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f9 ; Sg => f9 ;
Pl => f10 Pl => f10
@@ -110,14 +110,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
param GenNum = GSg Gender | GPl ; param GenNum = GSg Gender | GPl ;
oper genNum : Gender -> Number -> GenNum = \g,n -> oper A = {s: Case => GenNum => Str} ; -- 704
case n of { oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
Sg => GSg g ;
Pl => GPl
} ;
oper Adj = {s: Case => GenNum => Str} ; -- 704
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table { { s = table {
Nom => table { Nom => table {
@@ -164,123 +158,6 @@ oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ; oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ; oper CommonNoun = Noun ;
oper AdjPhrase = Adj ; oper AdjPhrase = A ;
oper Agr = {g : Gender ; n : Number ; p : Person} ;
oper defaultAgr : Agr = {g=Masc; n=Sg; p=P3} ;
oper NPhrase : Type = {s : Case => Str; a : Agr} ;
oper mkNPhrase : (Case => Str) -> Agr -> NPhrase =
\s,a -> {s = s; a = a} ;
oper caseTable : Str -> Case => Str =
\s -> table {Nom => s; Acc => s; Dat => s; Gen => s; Loc => s; Instr => s} ;
oper mkSimpleNP : Str -> Gender -> Number -> Person -> NPhrase =
\s,g,n,p -> mkNPhrase (caseTable s) {g=g; n=n; p=p} ;
oper nounFromStr : Str -> Gender -> Noun =
\s,g -> {
s = \\_,_ => s ;
voc = s ;
g = g
} ;
oper adjFromStr : Str -> Adj =
\s -> {s = \\_,_ => s} ;
oper prepNP : Compl -> NPhrase -> Str =
\prep,np -> prep.s ++ np.s ! prep.c ;
oper neg : R.Polarity -> Str =
\p -> case p of {
R.Pos => [] ;
R.Neg => "не"
} ;
oper futureBe : Agr -> Str =
\a -> case <a.p,a.n> of {
<P1,Sg> => "буду" ;
<P2,Sg> => "будзеш" ;
<P3,Sg> => "будзе" ;
<P1,Pl> => "будзем" ;
<P2,Pl> => "будзеце" ;
<P3,Pl> => "будуць"
} ;
oper pastBe : Agr -> Str =
\a -> case <a.g,a.n> of {
<Masc,Sg> => "быў" ;
<Fem,Sg> => "была" ;
<Neuter,Sg> => "было" ;
<_,Pl> => "былі"
} ;
oper copula : R.Tense -> R.Polarity -> Agr -> Str =
\t,p,a -> case t of {
R.Pres => neg p ;
R.Past => neg p ++ pastBe a ;
R.Fut => neg p ++ futureBe a ;
R.Cond => neg p ++ pastBe a ++ "бы"
} ;
oper finiteVerb : Verb -> R.Tense -> R.Polarity -> Agr -> Str =
\v,t,p,a -> case t of {
R.Pres => neg p ++ (v.active ! Imperf).pres ! a.p ! a.n ;
R.Past => neg p ++ v.participle ! a.g ! a.n ;
R.Fut => neg p ++ futureBe a ++ v.infinitive ;
R.Cond => neg p ++ v.participle ! a.g ! a.n ++ "бы"
} ;
oper VPhrase : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
imp : R.Polarity => Number => Str
} ;
oper mkVPhrase : Verb -> VPhrase =
\v -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
imp = \\p,n => neg p ++ v.imperative ! n
} ;
oper VSlash : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
c : Compl ;
imp : R.Polarity => Number => Str ;
post : Str
} ;
oper mkVSlash : Verb -> Compl -> VSlash =
\v,c -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
c = c ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = []
} ;
oper addAdvVP : VPhrase -> Str -> VPhrase =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ++ adv ;
inf = vp.inf ++ adv ;
imp = \\p,n => vp.imp ! p ! n ++ adv
} ;
oper addAdVVP : Str -> VPhrase -> VPhrase =
\adv,vp -> {
s = \\t,p,a => adv ++ vp.s ! t ! p ! a ;
inf = adv ++ vp.inf ;
imp = \\p,n => adv ++ vp.imp ! p ! n
} ;
oper addAdvSlash : VSlash -> Str -> VSlash =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ;
inf = vp.inf ++ adv ;
c = vp.c ;
imp = \\p,n => vp.imp ! p ! n ;
post = vp.post ++ adv
} ;
} }

View File

@@ -1,45 +0,0 @@
concrete SentenceBel of Sentence = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
PredVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a
} ;
PredSCVP sc vp = {
s = \\t,p => sc.s ++ vp.s ! t ! p ! defaultAgr
} ;
SlashVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a ++ vp.post ;
c = vp.c
} ;
AdvSlash cl adv = {
s = \\t,p => cl.s ! t ! p ++ adv.s ;
c = cl.c
} ;
SlashPrep cl prep = {
s = \\t,p => cl.s ! t ! p ++ prep.s ;
c = prep
} ;
SlashVS np vs ss = {
s = \\t,p => np.s ! Nom ++ finiteVerb vs t p np.a ++ ss.s ;
c = ss.c
} ;
ImpVP vp = {s = \\p,n => vp.imp ! p ! n} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "што" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.inf} ;
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseRCl temp pol cl = {s = cl.s ! temp.t ! pol.p} ;
UseSlash temp pol cl = {s = cl.s ! temp.t ! pol.p; c = cl.c} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ rs.s} ;
}

View File

@@ -1,110 +0,0 @@
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
lin
above_Prep = mkPrep "над" instrumental ;
after_Prep = mkPrep "пасля" genitive ;
all_Predet = mkPredet "усе" ;
almost_AdA = mkAdA "амаль" ;
almost_AdN = mkAdN "амаль" ;
although_Subj = mkSubj "хоць" ;
always_AdV = mkAdV "заўсёды" ;
and_Conj = mkConj "і" ;
because_Subj = mkSubj "бо" ;
before_Prep = mkPrep "перад" instrumental ;
behind_Prep = mkPrep "за" instrumental ;
between_Prep = mkPrep "паміж" instrumental ;
both7and_DConj = mkConj "і" ;
but_PConj = mkPConj "але" ;
by8agent_Prep = mkPrep "кім" instrumental ;
by8means_Prep = mkPrep "праз" accusative ;
can8know_VV = mkVV (mkV021 "магчы") ;
can_VV = mkVV (mkV021 "магчы") ;
during_Prep = mkPrep "падчас" genitive ;
either7or_DConj = mkConj "або" ;
every_Det = {s = \\_,_ => "кожны"; n = Sg} ;
everybody_NP = mkSimpleNP "усе" Masc Pl P3 ;
everything_NP = mkSimpleNP "усё" Neuter Sg P3 ;
everywhere_Adv = mkAdv "усюды" ;
few_Det = {s = \\_,_ => "некалькі"; n = Pl} ;
for_Prep = mkPrep "для" genitive ;
from_Prep = mkPrep "ад" genitive ;
i_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Masc Sg P1 ;
youSg_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Masc Sg P2 ;
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
we_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Masc Pl P1 ;
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
they_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Masc Pl P3 ;
here_Adv = mkAdv "тут" ;
here7to_Adv = mkAdv "сюды" ;
here7from_Adv = mkAdv "адсюль" ;
how_IAdv = mkIAdv "як" ;
how8many_IDet = mkIDet "колькі" ;
how8much_IAdv = mkIAdv "колькі" ;
if_Subj = mkSubj "калі" ;
in8front_Prep = mkPrep "перад" instrumental ;
in_Prep = mkPrep "у" locative ;
less_CAdv = {s = "менш"; p = "чым"} ;
many_Det = {s = \\_,_ => "шмат"; n = Pl} ;
more_CAdv = {s = "больш"; p = "чым"} ;
most_Predet = mkPredet "большасць" ;
much_Det = {s = \\_,_ => "шмат"; n = Sg} ;
must_VV = mkVV (mkV "мусіць") ;
no_Utt = {s = "не"} ;
on_Prep = mkPrep "на" locative ;
only_Predet = mkPredet "толькі" ;
or_Conj = mkConj "або" ;
otherwise_PConj = mkPConj "інакш" ;
part_Prep = mkPrep "з" genitive ;
please_Voc = mkVoc "калі ласка" ;
possess_Prep = mkPrep "у" genitive ;
quite_Adv = mkAdA "зусім" ;
so_AdA = mkAdA "так" ;
someSg_Det = {s = \\_,_ => "нейкі"; n = Sg} ;
somePl_Det = {s = \\_,_ => "некаторыя"; n = Pl} ;
somebody_NP = mkSimpleNP "нехта" Masc Sg P3 ;
something_NP = mkSimpleNP "нешта" Neuter Sg P3 ;
somewhere_Adv = mkAdv "недзе" ;
that_Quant = mkQuant "той" ;
that_Subj = mkSubj "што" ;
there_Adv = mkAdv "там" ;
there7to_Adv = mkAdv "туды" ;
there7from_Adv = mkAdv "адтуль" ;
therefore_PConj = mkPConj "таму" ;
this_Quant = mkQuant "гэты" ;
through_Prep = mkPrep "праз" accusative ;
to_Prep = mkPrep "да" genitive ;
too_AdA = mkAdA "занадта" ;
under_Prep = mkPrep "пад" instrumental ;
very_AdA = mkAdA "вельмі" ;
want_VV = mkVV (mkV009 "хацець") ;
whatPl_IP = mkSimpleNP "што" Neuter Pl P3 ;
whatSg_IP = mkSimpleNP "што" Neuter Sg P3 ;
when_IAdv = mkIAdv "калі" ;
when_Subj = mkSubj "калі" ;
where_IAdv = mkIAdv "дзе" ;
which_IQuant = mkIQuant "які" ;
whoPl_IP = mkSimpleNP "хто" Masc Pl P3 ;
whoSg_IP = mkSimpleNP "хто" Masc Sg P3 ;
why_IAdv = mkIAdv "чаму" ;
with_Prep = mkPrep "з" instrumental ;
without_Prep = mkPrep "без" genitive ;
yes_Utt = {s = "так"} ;
no_Quant = mkQuant "ніякі" ;
not_Predet = mkPredet "не" ;
if_then_Conj = mkConj "калі" ;
at_least_AdN = mkAdN "прынамсі" ;
at_most_AdN = mkAdN "найбольш" ;
nobody_NP = mkSimpleNP "ніхто" Masc Sg P3 ;
nothing_NP = mkSimpleNP "нішто" Neuter Sg P3 ;
except_Prep = mkPrep "акрамя" genitive ;
as_CAdv = {s = "так"; p = "як"} ;
have_V2 = mkV2 (mkV071 "мець") ;
language_title_Utt = {s = "беларуская"} ;
}

View File

@@ -1,138 +0,0 @@
concrete VerbBel of Verb = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
UseV v = mkVPhrase v ;
ComplVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ;
inf = vv.infinitive ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.inf
} ;
ComplVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ "што" ++ s.s ;
inf = vs.infinitive ++ "што" ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ "што" ++ s.s
} ;
ComplVQ vq qs = {
s = \\t,p,a => finiteVerb vq t p a ++ qs.s ;
inf = vq.infinitive ++ qs.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ qs.s
} ;
ComplVA va ap = {
s = \\t,p,a => finiteVerb va t p a ++ ap.s ! Nom ! genNum a.g a.n ;
inf = va.infinitive ++ ap.s ! Nom ! GSg Masc ;
imp = \\p,n => neg p ++ va.imperative ! n ++ ap.s ! Nom ! GPl
} ;
SlashV2a v = mkVSlash v v.c2 ;
Slash2V3 v np = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ;
inf = v.infinitive ++ prepNP v.c2 np ;
c = v.c3 ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ;
post = []
} ;
Slash3V3 v np = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ prepNP v.c3 np ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = prepNP v.c3 np
} ;
SlashV2V v vp = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ vp.inf ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = vp.inf
} ;
SlashV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ "што" ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = "што" ++ s.s
} ;
SlashV2Q v qs = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ qs.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = qs.s
} ;
SlashV2A v ap = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ ap.s ! Nom ! GSg Masc ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = ap.s ! Nom ! GSg Masc
} ;
ComplSlash vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
SlashVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = vv.infinitive ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
SlashV2VNP v np vp = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = v.infinitive ++ prepNP v.c2 np ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
ReflVP vp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.post ;
inf = vp.inf ++ "сябе" ;
imp = \\p,n => vp.imp ! p ! n ++ "сябе" ++ vp.post
} ;
UseComp comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
PassV2 v = {
s = \\t,p,a => copula t p a ++ v.participle ! a.g ! a.n ;
inf = "быць" ++ v.participle ! Masc ! Sg ;
imp = \\p,_ => neg p ++ "будзь" ++ v.participle ! Masc ! Sg
} ;
AdvVP vp adv = addAdvVP vp adv.s ;
ExtAdvVP vp adv = addAdvVP vp adv.s ;
AdVVP adv vp = addAdVVP adv.s vp ;
AdvVPSlash vp adv = addAdvSlash vp adv.s ;
AdVVPSlash adv vp = {
s = \\t,p,a => adv.s ++ vp.s ! t ! p ! a ;
inf = adv.s ++ vp.inf ;
c = vp.c ;
imp = \\p,n => adv.s ++ vp.imp ! p ! n ;
post = vp.post
} ;
VPSlashPrep vp prep = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prep.s ;
inf = vp.inf ++ prep.s ;
c = prep ;
imp = \\p,n => vp.imp ! p ! n ++ prep.s ;
post = []
} ;
CompAP ap = {s = \\a => ap.s ! Nom ! genNum a.g a.n} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
UseCopula = {
s = \\t,p,a => copula t p a ;
inf = "быць" ;
imp = \\p,_ => neg p ++ "будзь"
} ;
}

View File

@@ -1,32 +1,4 @@
concrete AdjectiveFao of Adjective = CatFao ** open ResFao in { concrete AdjectiveFao of Adjective = CatFao ** {
lin lin
PositA a = a ; PositA a = a ;
ComparA a np = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c ++ "enn" ++ np.s ! Nom
} ;
ComplA2 a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c
} ;
ReflA2 a = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ "seg"
} ;
UseA2 a = a ;
UseComparA a = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c
} ;
CAdvAP cadv ap np = {
s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ cadv.p ++ np.s ! Nom
} ;
AdjOrd ord = {
s = ord.s
} ;
SentAP ap sc = {
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s
} ;
AdAP ada ap = {
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c
} ;
AdvAP ap adv = {
s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s
} ;
} }

View File

@@ -1,11 +0,0 @@
concrete AdverbFao of Adverb = CatFao ** open Prelude,ResFao in {
lin
PositAdvAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
PrepNP p np = {s = p.s ++ np.s ! p.c} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}

View File

@@ -1,5 +1,4 @@
concrete AllFao of AllFaoAbs = concrete AllFao of AllFaoAbs =
LangFao, LangFao
ExtendFao
** **
{} ; {} ;

View File

@@ -1,4 +1,3 @@
abstract AllFaoAbs = abstract AllFaoAbs =
Lang, Lang
Extend
** {} ** {}

View File

@@ -1,4 +1,4 @@
concrete CatFao of Cat = CommonX ** open ResFao, Prelude in { concrete CatFao of Cat = CommonX ** open ResFao in {
lincat N = Noun ; lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ; lincat N2 = Noun ** {c2 : Compl} ;
@@ -9,43 +9,10 @@ lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ; lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ; lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = VerbPhrase ;
lincat VPSlash = Verb ** {c2 : Compl ; sc : Str} ;
lincat Comp = {s : Gender => Number => Str} ;
lincat Cl = Clause ;
lincat ClSlash = {s : Tense => Polarity => Str ; c2 : Compl} ;
lincat SSlash = {s : Str ; c2 : Compl} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat Prep = Compl ; lincat Prep = Compl ;
lincat CN = CommonNoun ; lincat CN = CommonNoun ;
lincat NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
lincat QS = {s : Str} ;
lincat QCl = {s : Tense => Polarity => Str} ;
lincat IP = {s : Str ; n : Number} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str ; n : Number} ;
lincat IQuant = {s : Str} ;
lincat RCl = {s : Tense => Polarity => Gender => PersNum => Str} ;
lincat RS = {s : Gender => PersNum => Str} ;
lincat RP = {s : Str} ;
lincat AP = AdjPhrase ; lincat AP = AdjPhrase ;
lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat Predet = {s : Str} ;
lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species} ;
lincat Num = {s : Gender => Case => Str ; n : Number ; hasCard : Bool} ;
lincat Card = {s : Gender => Case => Str ; n : Number} ;
lincat ACard = {s : Str} ;
lincat Ord = {s : Gender => Number => Case => Str} ;
lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat S = {s : Str} ; lincat S = {s : Str} ;
lincat Numeral = {
s : CardOrd => Gender => Case => Str ;
n : Number
} ;
lincat Digits = {s : Str ; n : Number} ;
lincat Decimal = {s : Str ; n : Number ; hasDot : Bool} ;
lincat Conj = {s : Str} ;
lincat Subj = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ; lincat LN,SN,GN,PN = {s : Str} ;

View File

@@ -1,53 +0,0 @@
concrete ConjunctionFao of Conjunction = CatFao ** open ResFao, Prelude in {
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Gender => PersNum => Str} ;
[Adv], [AdV], [IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
[AP] = {s1,s2 : Gender => Number => Case => Str} ;
[CN] = {s1,s2 : Species => Number => Case => Str ; g : Gender} ;
[DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species} ;
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = \\g,p => xs.s1 ! g ! p ++ conj.s ++ xs.s2 ! g ! p} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
g = xs.g ;
n = Pl ;
p = P3
} ;
ConjAP conj xs = {s = \\g,n,c => xs.s1 ! g ! n ! c ++ conj.s ++ xs.s2 ! g ! n ! c} ;
ConjCN conj xs = {
s = \\sp,n,c => xs.s1 ! sp ! n ! c ++ conj.s ++ xs.s2 ! sp ! n ! c ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\g,c => xs.s1 ! g ! c ++ conj.s ++ xs.s2 ! g ! c ;
n = xs.n ;
sp = xs.sp
} ;
BaseS x y = {s1 = x.s ; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s ; s2 = y.s} ;
ConsRS x xs = {s1 = \\g,p => x.s ! g ! p ++ "," ++ xs.s1 ! g ! p ; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s ; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseNP x y = {s1 = x.s ; s2 = y.s ; g = x.g ; n = Pl ; p = P3} ;
ConsNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ; s2 = xs.s2 ; g = xs.g ; n = Pl ; p = P3} ;
BaseAP x y = {s1 = x.s ; s2 = y.s} ;
ConsAP x xs = {s1 = \\g,n,c => x.s ! g ! n ! c ++ "," ++ xs.s1 ! g ! n ! c ; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g} ;
ConsCN x xs = {s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; g = xs.g} ;
BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp} ;
ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp} ;
}

View File

@@ -1,173 +0,0 @@
concrete ConstructionFao of Construction = CatFao ** open ResFao, ParadigmsFao in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
lin
hungry_VP = beVP "svangur" ;
thirsty_VP = beVP "tystur" ;
tired_VP = beVP "troyttur" ;
scared_VP = beVP "bangin" ;
ill_VP = beVP "sjúkur" ;
ready_VP = beVP "klárur" ;
has_age_VP card = beVP (cardStr card ++ "ára gamal") ;
have_name_Cl np name = {
Converb = np.s ! Nom ++ "eitur" ++ name.s ! Nom ;
Indicative = \\t,pol => np.s ! Nom ++ "eitur" ++ negStr pol ++ name.s ! Nom ;
Nonfinite = np.s ! Nom ++ "eita" ++ name.s ! Nom ;
Participle = \\_ => np.s ! Nom ++ "itið" ++ name.s ! Nom
} ;
married_Cl np spouse = {
Converb = np.s ! Nom ++ "er giftur við" ++ spouse.s ! Dat ;
Indicative = \\t,pol => np.s ! Nom ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ;
Nonfinite = np.s ! Nom ++ "vera giftur við" ++ spouse.s ! Dat ;
Participle = \\_ => np.s ! Nom ++ "verið giftur við" ++ spouse.s ! Dat
} ;
what_name_QCl np = {
s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom
} ;
how_old_QCl np = {
s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
how_far_QCl np = {
s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
weather_adjCl ap = {
Converb = "tað er" ++ ap.s ! Neuter ! Sg ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Neuter ! Sg ! Nom ;
Nonfinite = "vera" ++ ap.s ! Neuter ! Sg ! Nom ;
Participle = \\_ => "verið" ++ ap.s ! Neuter ! Sg ! Nom
} ;
is_right_VP = beVP "rættur" ;
is_wrong_VP = beVP "skeivur" ;
n_units_AP card cn a = {
s = \\g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! g ! n ! c
} ;
n_units_of_NP card cn np = mkNP (card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ "av" ++ np.s ! Dat) np.g np.n np.p ;
n_unit_CN card unit cn = mkCN (card.s ! unit.g ! Nom ++ unit.s ! Indef ! Sg ! Nom ++ cn.s ! Indef ! Sg ! Nom) cn.g ;
bottle_of_CN np = mkCN ("fløska av" ++ np.s ! Dat) Fem ;
cup_of_CN np = mkCN ("koppur av" ++ np.s ! Dat) Masc ;
glass_of_CN np = mkCN ("glas av" ++ np.s ! Dat) Neuter ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "vantar nakrar" ++ x.s ! Indef ! Pl ! Acc ++ "í" ++ y.s ! Def ! Sg ! Acc} ;
timeunitAdv card unit = {s = "í" ++ cardStr card ++ unit.s} ;
timeunitRange c1 c2 unit = {s = "í" ++ cardStr c1 ++ "til" ++ cardStr c2 ++ unit.s} ;
oneHour = {s = "eitt"} ;
twoHour = {s = "tvey"} ;
threeHour = {s = "trý"} ;
fourHour = {s = "fýra"} ;
fiveHour = {s = "fimm"} ;
sixHour = {s = "seks"} ;
sevenHour = {s = "sjey"} ;
eightHour = {s = "átta"} ;
nineHour = {s = "níggju"} ;
tenHour = {s = "tíggju"} ;
elevenHour = {s = "ellivu"} ;
twelveHour = {s = "tólv"} ;
thirteenHour = {s = "trettan"} ;
fourteenHour = {s = "fjúrtan"} ;
fifteenHour = {s = "fimtan"} ;
sixteenHour = {s = "sekstan"} ;
seventeenHour = {s = "seytjan"} ;
eighteenHour = {s = "átjan"} ;
nineteenHour = {s = "nítjan"} ;
twentyHour = {s = "tjúgu"} ;
twentyOneHour = {s = "tjúgueitt"} ;
twentyTwoHour = {s = "tjúgutvey"} ;
twentyThreeHour = {s = "tjúgutrý"} ;
twentyFourHour = {s = "tjúgufýra"} ;
timeHour h = {s = "klokkan" ++ h.s} ;
timeHourMinute h m = {s = "klokkan" ++ h.s ++ cardStr m} ;
weekdayPunctualAdv w = {s = w.s} ;
weekdayHabitualAdv w = {s = w.s} ;
weekdayLastAdv w = {s = "seinasta" ++ w.s} ;
weekdayNextAdv w = {s = "næsta" ++ w.s} ;
monthAdv m = {s = "í" ++ m.s} ;
yearAdv y = {s = "í" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "á" ++ l.s} ;
weekdayN w = mkCN w.s Masc ;
monthN m = mkCN m.s Masc ;
weekdayPN w = {s = w.s} ;
monthPN m = {s = m.s} ;
languageNP l = mkNP l.s Neuter Sg P3 ;
languageCN l = mkCN l.s Neuter ;
second_Timeunit = {s = "sekund"} ;
minute_Timeunit = {s = "minutt"} ;
hour_Timeunit = {s = "tími"} ;
day_Timeunit = {s = "dagur"} ;
week_Timeunit = {s = "vika"} ;
month_Timeunit = {s = "mánaður"} ;
year_Timeunit = {s = "ár"} ;
monday_Weekday = {s = "mánadagur"} ;
tuesday_Weekday = {s = "týsdagur"} ;
wednesday_Weekday = {s = "mikudagur"} ;
thursday_Weekday = {s = "hósdagur"} ;
friday_Weekday = {s = "fríggjadagur"} ;
saturday_Weekday = {s = "leygardagur"} ;
sunday_Weekday = {s = "sunnudagur"} ;
january_Month = {s = "januar"} ;
february_Month = {s = "februar"} ;
march_Month = {s = "mars"} ;
april_Month = {s = "apríl"} ;
may_Month = {s = "mai"} ;
june_Month = {s = "juni"} ;
july_Month = {s = "juli"} ;
august_Month = {s = "august"} ;
september_Month = {s = "september"} ;
october_Month = {s = "oktober"} ;
november_Month = {s = "november"} ;
december_Month = {s = "desember"} ;
afrikaans_Language = {s = "afrikaans"} ;
amharic_Language = {s = "amhariskt"} ;
arabic_Language = {s = "arabiskt"} ;
bulgarian_Language = {s = "bulgarskt"} ;
catalan_Language = {s = "katalanskt"} ;
chinese_Language = {s = "kinesiskt"} ;
danish_Language = {s = "danskt"} ;
dutch_Language = {s = "hollendskt"} ;
english_Language = {s = "enskt"} ;
estonian_Language = {s = "estiskt"} ;
finnish_Language = {s = "finskt"} ;
french_Language = {s = "franskt"} ;
german_Language = {s = "týskt"} ;
greek_Language = {s = "grikskt"} ;
hebrew_Language = {s = "hebraiskt"} ;
hindi_Language = {s = "hindi"} ;
japanese_Language = {s = "japanskt"} ;
italian_Language = {s = "italskt"} ;
latin_Language = {s = "latín"} ;
latvian_Language = {s = "lettiskt"} ;
maltese_Language = {s = "maltesiskt"} ;
nepali_Language = {s = "nepalskt"} ;
norwegian_Language = {s = "norskt"} ;
persian_Language = {s = "persiskt"} ;
polish_Language = {s = "pólskt"} ;
punjabi_Language = {s = "punjabi"} ;
romanian_Language = {s = "rumenskt"} ;
russian_Language = {s = "russiskt"} ;
sindhi_Language = {s = "sindhi"} ;
spanish_Language = {s = "spanskt"} ;
swahili_Language = {s = "swahili"} ;
swedish_Language = {s = "svenskt"} ;
thai_Language = {s = "tailendskt"} ;
turkish_Language = {s = "turkiskt"} ;
urdu_Language = {s = "urdu"} ;
oper
beVP : Str -> VerbPhrase = \ap -> {
Converb = copula ! Pres ! PPl ++ ap ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ ap ;
Nonfinite = "vera" ++ ap ;
Participle = \\_ => "verið" ++ ap
} ;
cardStr : Card -> Str = \card ->
card.s ! Neuter ! Nom ;
}

View File

@@ -55,8 +55,8 @@ lin
paragraph x.Converb ++ paragraph x.Converb ++
heading2 "Imperative" ++ heading2 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++ tr (th "Sg" ++ td (x.Imperative_Jussive ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl))) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Pl))) ++
heading2 "Indicative" ++ heading2 "Indicative" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++ tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++

View File

@@ -1,32 +0,0 @@
concrete ExtendFao of Extend = CatFao **
open ParadigmsFao, ResFao, (P = ParamX) in {
lincat
VPS = {s : Gender => PersNum => Str} ;
[VPS] = {s1,s2 : Gender => PersNum => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
[VPS2] = {s1,s2 : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
VPI2 = {s : Str ; c2 : Compl ; sc : Str} ;
[VPI2] = {s1,s2 : Str ; c2 : Compl ; sc : Str} ;
[Comp] = {s1,s2 : Gender => Number => Str} ;
[Imp] = {s1,s2 : Polarity => Number => Str} ;
RNP = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
RNPList = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youFem_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
weFem_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
theyFem_Pron = mkPron "tær" "tær" "teimum" "teirra" Masc Pl P3 ;
youPolFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
lin
TPastSimple = {s = [] ; t = P.Past} ;
}

View File

@@ -2,15 +2,5 @@ concrete GrammarFao of Grammar =
TenseX, TenseX,
PhraseFao, PhraseFao,
NounFao, NounFao,
VerbFao, AdjectiveFao ** {
AdjectiveFao,
AdverbFao,
NumeralFao,
SentenceFao,
QuestionFao,
RelativeFao,
ConjunctionFao,
StructuralFao,
IdiomFao,
NamesFao ** {
} }

View File

@@ -1,62 +0,0 @@
concrete IdiomFao of Idiom = CatFao ** open ResFao in {
lin
ImpersCl vp = {
Converb = "tað" ++ vp.Converb ;
Indicative = \\t,pol => "tað" ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3 ;
Nonfinite = "tað" ++ vp.Nonfinite ;
Participle = \\t => "tað" ++ vp.Participle ! t
} ;
GenericCl vp = {
Converb = "mann" ++ vp.Converb ;
Indicative = \\t,pol => "mann" ++ vp.Indicative ! t ! pol ! Masc ! PSg P3 ;
Nonfinite = "mann" ++ vp.Nonfinite ;
Participle = \\t => "mann" ++ vp.Participle ! t
} ;
CleftNP np rs = {
Converb = "tað er" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Nonfinite = "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p
} ;
CleftAdv adv s = {
Converb = "tað er" ++ adv.s ++ s.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ adv.s ++ s.s ;
Nonfinite = "vera" ++ adv.s ++ s.s ;
Participle = \\_ => "verið" ++ adv.s ++ s.s
} ;
ExistNP np = {
Converb = "tað er" ++ np.s ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ;
Nonfinite = "vera" ++ np.s ! Nom ;
Participle = \\_ => "verið" ++ np.s ! Nom
} ;
ExistIP ip = {
s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol
} ;
ExistNPAdv np adv = {
Converb = "tað er" ++ np.s ! Nom ++ adv.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ++ adv.s ;
Nonfinite = "vera" ++ np.s ! Nom ++ adv.s ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ adv.s
} ;
ExistIPAdv ip adv = {
s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s
} ;
ProgrVP vp = {
Converb = "vera við at" ++ vp.Nonfinite ;
Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ "við at" ++ vp.Nonfinite ;
Nonfinite = "vera við at" ++ vp.Nonfinite ;
Participle = \\_ => "verið við at" ++ vp.Nonfinite
} ;
ImpPl1 vp = {s = "lat okkum" ++ vp.Nonfinite} ;
ImpP3 np vp = {s = "lat" ++ np.s ! Acc ++ vp.Nonfinite} ;
SelfAdvVP vp = vp ** {
Converb = vp.Converb ++ "sjálvur" ;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "sjálvur" ;
Nonfinite = vp.Nonfinite ++ "sjálvur" ;
Participle = \\t => vp.Participle ! t ++ "sjálvur"
} ;
SelfAdVVP = SelfAdvVP ;
SelfNP np = np ** {s = \\c => np.s ! c ++ "sjálvur"} ;
}

View File

@@ -2,7 +2,6 @@
concrete LangFao of Lang = concrete LangFao of Lang =
GrammarFao, GrammarFao,
LexiconFao LexiconFao
,ConstructionFao
,DocumentationFao --# notpresent ,DocumentationFao --# notpresent
** { ** {

View File

@@ -1,9 +1,2 @@
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao, ResFao in { concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
lin
apple_N = mkN "epli" ;
big_A = mkA "stórur" ;
child_N = mkN "barn" ;
die_V = mkV "doyggja" "doyrt" ;
good_A = mkA "góður" ;
go_V = mkVerb "farið" "far" "farið" "fari" "fert" "fer" "fara" "fór" "fórt" "fór" "fóru" "fara" "farandi" "farin" ;
} }

View File

@@ -600,18 +600,18 @@ mkN016 base =
Gen => base_1+"ar" Gen => base_1+"ar"
} ; } ;
Pl => table { Pl => table {
Nom => nonExist ; Nom => base_1+"urin" ;
Acc => nonExist ; Acc => base_1+"in" ;
Dat => nonExist ; Dat => base_1+"inum" ;
Gen => nonExist Gen => base_1+"arins"
} }
} ; } ;
Def => table { Def => table {
Sg => table { Sg => table {
Nom => base_1+"urin" ; Nom => nonExist ;
Acc => base_1+"in" ; Acc => nonExist ;
Dat => base_1+"inum" ; Dat => nonExist ;
Gen => base_1+"arins" Gen => nonExist
} ; } ;
Pl => table { Pl => table {
Nom => nonExist ; Nom => nonExist ;
@@ -5670,18 +5670,18 @@ mkN146 base =
Gen => base_1+"s" Gen => base_1+"s"
} ; } ;
Pl => table { Pl => table {
Nom => nonExist ; Nom => base_1+"kurin" ;
Acc => nonExist ; Acc => base_1+"kin" ;
Dat => nonExist ; Dat => base_1+"kinum" ;
Gen => nonExist Gen => base_1+"sins"
} }
} ; } ;
Def => table { Def => table {
Sg => table { Sg => table {
Nom => base_1+"kurin" ; Nom => nonExist ;
Acc => base_1+"kin" ; Acc => nonExist ;
Dat => base_1+"kinum" ; Dat => nonExist ;
Gen => base_1+"sins" Gen => nonExist
} ; } ;
Pl => table { Pl => table {
Nom => nonExist ; Nom => nonExist ;
@@ -8769,7 +8769,7 @@ mkV001 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"að" ; { Converb = base_1+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a" ; Sg => base_1+"a" ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -8802,7 +8802,7 @@ mkV002 base =
case base of { case base of {
"ei"+base_1+"a" => lin V "ei"+base_1+"a" => lin V
{ Converb = "hi"+base_1+"ið" ; { Converb = "hi"+base_1+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => "ei"+base_1 ; Sg => "ei"+base_1 ;
Pl => "ei"+base_1+"ið" Pl => "ei"+base_1+"ið"
} ; } ;
@@ -8835,7 +8835,7 @@ mkV003 base =
case base of { case base of {
"a"+base_1+"a" => lin V "a"+base_1+"a" => lin V
{ Converb = "i"+base_1+"ið" ; { Converb = "i"+base_1+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => "a"+base_1 ; Sg => "a"+base_1 ;
Pl => "a"+base_1+"ið" Pl => "a"+base_1+"ið"
} ; } ;
@@ -8868,7 +8868,7 @@ mkV004 base =
case base of { case base of {
"a"+base_1+"a" => lin V "a"+base_1+"a" => lin V
{ Converb = "a"+base_1+"ið" ; { Converb = "a"+base_1+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => "a"+base_1 ; Sg => "a"+base_1 ;
Pl => "a"+base_1+"ið" Pl => "a"+base_1+"ið"
} ; } ;
@@ -8901,7 +8901,7 @@ mkV005 base =
case base of { case base of {
base_1+"a"+base_2@(?+?) => lin V base_1+"a"+base_2@(?+?) => lin V
{ Converb = base_1+"a"+base_2 ; { Converb = base_1+"a"+base_2 ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -8934,7 +8934,7 @@ mkV006 base =
case base of { case base of {
base_1+"ða" => lin V base_1+"ða" => lin V
{ Converb = base_1+"tt" ; { Converb = base_1+"tt" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ð" ; Sg => base_1+"ð" ;
Pl => base_1+"ðið" Pl => base_1+"ðið"
} ; } ;
@@ -8967,7 +8967,7 @@ mkV007 base =
case base of { case base of {
"eiga" => lin V "eiga" => lin V
{ Converb = "átt" ; { Converb = "átt" ;
imperative = table { Imperative_Jussive = table {
Sg => "eig" ; Sg => "eig" ;
Pl => "eigið" Pl => "eigið"
} ; } ;
@@ -9000,7 +9000,7 @@ mkV008 base =
case base of { case base of {
base_1+"e"+base_2@?+"a" => lin V base_1+"e"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -9033,7 +9033,7 @@ mkV009 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9066,7 +9066,7 @@ mkV010 base =
case base of { case base of {
base_1+"da" => lin V base_1+"da" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"d" ; Sg => base_1+"d" ;
Pl => base_1+"dið" Pl => base_1+"dið"
} ; } ;
@@ -9099,7 +9099,7 @@ mkV011 base =
case base of { case base of {
base_1+"e"+base_2@?+"ja" => lin V base_1+"e"+base_2@?+"ja" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"j" ; Sg => base_1+"e"+base_2+"j" ;
Pl => base_1+"e"+base_2+"jið" Pl => base_1+"e"+base_2+"jið"
} ; } ;
@@ -9132,7 +9132,7 @@ mkV012 base =
case base of { case base of {
base_1+"i"+base_2@?+"ja" => lin V base_1+"i"+base_2@?+"ja" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2 ; Sg => base_1+"i"+base_2 ;
Pl => base_1+"i"+base_2+"jið" Pl => base_1+"i"+base_2+"jið"
} ; } ;
@@ -9165,7 +9165,7 @@ mkV013 base =
case base of { case base of {
base_1+"i"+base_2@?+"da" => lin V base_1+"i"+base_2@?+"da" => lin V
{ Converb = base_1+"u"+base_2+"dið" ; { Converb = base_1+"u"+base_2+"dið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2+"d" ; Sg => base_1+"i"+base_2+"d" ;
Pl => base_1+"i"+base_2+"dið" Pl => base_1+"i"+base_2+"dið"
} ; } ;
@@ -9198,7 +9198,7 @@ mkV014 base =
case base of { case base of {
base_1+"í"+base_2@?+"a" => lin V base_1+"í"+base_2@?+"a" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"í"+base_2 ; Sg => base_1+"í"+base_2 ;
Pl => base_1+"í"+base_2+"ið" Pl => base_1+"í"+base_2+"ið"
} ; } ;
@@ -9231,7 +9231,7 @@ mkV015 base =
case base of { case base of {
base_1+"jó"+base_2@?+"a" => lin V base_1+"jó"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"jó"+base_2 ; Sg => base_1+"jó"+base_2 ;
Pl => base_1+"jó"+base_2+"ið" Pl => base_1+"jó"+base_2+"ið"
} ; } ;
@@ -9264,7 +9264,7 @@ mkV016 base =
case base of { case base of {
base_1+"gja" => lin V base_1+"gja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"g" ; Sg => base_1+"g" ;
Pl => base_1+"gið" Pl => base_1+"gið"
} ; } ;
@@ -9297,7 +9297,7 @@ mkV017 base =
case base of { case base of {
base_1+"e"+base_2@?+"na" => lin V base_1+"e"+base_2@?+"na" => lin V
{ Converb = base_1+"u"+base_2+"nið" ; { Converb = base_1+"u"+base_2+"nið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"n" ; Sg => base_1+"e"+base_2+"n" ;
Pl => base_1+"e"+base_2+"nið" Pl => base_1+"e"+base_2+"nið"
} ; } ;
@@ -9330,7 +9330,7 @@ mkV018 base =
case base of { case base of {
base_1+"e"+base_2@("m"|(?+?))+"a" => lin V base_1+"e"+base_2@("m"|(?+?))+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -9363,7 +9363,7 @@ mkV019 base =
case base of { case base of {
base_1+"ó"+base_2@?+"a" => lin V base_1+"ó"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ó"+base_2 ; Sg => base_1+"ó"+base_2 ;
Pl => base_1+"ó"+base_2+"ið" Pl => base_1+"ó"+base_2+"ið"
} ; } ;
@@ -9396,7 +9396,7 @@ mkV020 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9429,7 +9429,7 @@ mkV021 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"að" ; { Converb = base_1+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a" ; Sg => base_1+"a" ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9462,7 +9462,7 @@ mkV022 base =
case base of { case base of {
base_1+"úgva" => lin V base_1+"úgva" => lin V
{ Converb = base_1+"úð" ; { Converb = base_1+"úð" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"úgv" ; Sg => base_1+"úgv" ;
Pl => base_1+"úgvið" Pl => base_1+"úgvið"
} ; } ;
@@ -9495,7 +9495,7 @@ mkV023 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9528,7 +9528,7 @@ mkV024 base =
case base of { case base of {
base_1+"e"+base_2@?+base_3@?+"a" => lin V base_1+"e"+base_2@?+base_3@?+"a" => lin V
{ Converb = base_1+"o"+base_2+base_3+"ið" ; { Converb = base_1+"o"+base_2+base_3+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+base_3 ; Sg => base_1+"e"+base_2+base_3 ;
Pl => base_1+"e"+base_2+base_3+"ið" Pl => base_1+"e"+base_2+base_3+"ið"
} ; } ;
@@ -9561,7 +9561,7 @@ mkV025 base =
case base of { case base of {
base_1+"ggja" => lin V base_1+"ggja" => lin V
{ Converb = base_1+"ð" ; { Converb = base_1+"ð" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ggj" ; Sg => base_1+"ggj" ;
Pl => base_1+"ggið" Pl => base_1+"ggið"
} ; } ;
@@ -9594,7 +9594,7 @@ mkV026 base =
case base of { case base of {
base_1+"aga" => lin V base_1+"aga" => lin V
{ Converb = base_1+"igið" ; { Converb = base_1+"igið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ag" ; Sg => base_1+"ag" ;
Pl => base_1+"agið" Pl => base_1+"agið"
} ; } ;
@@ -9627,7 +9627,7 @@ mkV027 base =
case base of { case base of {
base_1+"e"+base_2@?+"ka" => lin V base_1+"e"+base_2@?+"ka" => lin V
{ Converb = base_1+"u"+base_2+"kið" ; { Converb = base_1+"u"+base_2+"kið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"k" ; Sg => base_1+"e"+base_2+"k" ;
Pl => base_1+"e"+base_2+"kið" Pl => base_1+"e"+base_2+"kið"
} ; } ;
@@ -9660,7 +9660,7 @@ mkV028 base =
case base of { case base of {
base_1+"e"+base_2@?+"a" => lin V base_1+"e"+base_2@?+"a" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -9693,7 +9693,7 @@ mkV029 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"að" ; { Converb = base_1+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a" ; Sg => base_1+"a" ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9726,7 +9726,7 @@ mkV030 base =
case base of { case base of {
"ve"+base_1+"a" => lin V "ve"+base_1+"a" => lin V
{ Converb = "ve"+base_1+"ið" ; { Converb = "ve"+base_1+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => "ve"+base_1 ; Sg => "ve"+base_1 ;
Pl => "ve"+base_1+"ið" Pl => "ve"+base_1+"ið"
} ; } ;
@@ -9759,7 +9759,7 @@ mkV031 base =
case base of { case base of {
base_1+"na" => lin V base_1+"na" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"na" ; Sg => base_1+"na" ;
Pl => base_1+"nið" Pl => base_1+"nið"
} ; } ;
@@ -9792,7 +9792,7 @@ mkV032 base =
case base of { case base of {
base_1+"a"+base_2@(?+?)+"a" => lin V base_1+"a"+base_2@(?+?)+"a" => lin V
{ Converb = base_1+"a"+base_2+"ið" ; { Converb = base_1+"a"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -9825,7 +9825,7 @@ mkV033 base =
case base of { case base of {
base_1+"a"+base_2@?+"a" => lin V base_1+"a"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"ið" ; { Converb = base_1+"a"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -9858,7 +9858,7 @@ mkV034 base =
case base of { case base of {
base_1+"áa" => lin V base_1+"áa" => lin V
{ Converb = base_1+"ingið" ; { Converb = base_1+"ingið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"á" ; Sg => base_1+"á" ;
Pl => base_1+"áið" Pl => base_1+"áið"
} ; } ;
@@ -9891,7 +9891,7 @@ mkV035 base =
case base of { case base of {
base_1+"la" => lin V base_1+"la" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"la" ; Sg => base_1+"la" ;
Pl => base_1+"lið" Pl => base_1+"lið"
} ; } ;
@@ -9924,7 +9924,7 @@ mkV036 base =
case base of { case base of {
base_1+"ða"+base_2@(?+?) => lin V base_1+"ða"+base_2@(?+?) => lin V
{ Converb = base_1+"da"+base_2 ; { Converb = base_1+"da"+base_2 ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -9957,7 +9957,7 @@ mkV037 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1 ; { Converb = base_1 ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -9990,7 +9990,7 @@ mkV038 base =
case base of { case base of {
base_1+"e"+base_2@?+"ja" => lin V base_1+"e"+base_2@?+"ja" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -10023,7 +10023,7 @@ mkV039 base =
case base of { case base of {
base_1+"na" => lin V base_1+"na" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"n" ; Sg => base_1+"n" ;
Pl => base_1+"nið" Pl => base_1+"nið"
} ; } ;
@@ -10056,7 +10056,7 @@ mkV040 base =
case base of { case base of {
base_1+"ú"+base_2@?+"va" => lin V base_1+"ú"+base_2@?+"va" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ú"+base_2 ; Sg => base_1+"ú"+base_2 ;
Pl => base_1+"ú"+base_2+"ið" Pl => base_1+"ú"+base_2+"ið"
} ; } ;
@@ -10089,7 +10089,7 @@ mkV041 base =
case base of { case base of {
base_1+"y"+base_2@?+"a" => lin V base_1+"y"+base_2@?+"a" => lin V
{ Converb = base_1+"u"+base_2+"t" ; { Converb = base_1+"u"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"y"+base_2 ; Sg => base_1+"y"+base_2 ;
Pl => base_1+"y"+base_2+"ið" Pl => base_1+"y"+base_2+"ið"
} ; } ;
@@ -10122,7 +10122,7 @@ mkV042 base =
case base of { case base of {
base_1+"e"+base_2@?+"ja" => lin V base_1+"e"+base_2@?+"ja" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"jið" Pl => base_1+"e"+base_2+"jið"
} ; } ;
@@ -10155,7 +10155,7 @@ mkV043 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"tt" ; { Converb = base_1+"tt" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -10188,7 +10188,7 @@ mkV044 base =
case base of { case base of {
base_1+"ú"+base_2@?+"a" => lin V base_1+"ú"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ú"+base_2 ; Sg => base_1+"ú"+base_2 ;
Pl => base_1+"ú"+base_2+"ið" Pl => base_1+"ú"+base_2+"ið"
} ; } ;
@@ -10221,7 +10221,7 @@ mkV045 base =
case base of { case base of {
base_1+"la" => lin V base_1+"la" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"l" ; Sg => base_1+"l" ;
Pl => base_1+"lið" Pl => base_1+"lið"
} ; } ;
@@ -10254,7 +10254,7 @@ mkV046 base =
case base of { case base of {
base_1+"a"+base_2@?+"a" => lin V base_1+"a"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"ið" ; { Converb = base_1+"a"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -10287,7 +10287,7 @@ mkV047 base =
case base of { case base of {
base_1+"anga" => lin V base_1+"anga" => lin V
{ Converb = base_1+"ingið" ; { Converb = base_1+"ingið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"akk" ; Sg => base_1+"akk" ;
Pl => base_1+"angið" Pl => base_1+"angið"
} ; } ;
@@ -10320,7 +10320,7 @@ mkV048 base =
case base of { case base of {
base_1+"ja"+base_2@?+"da" => lin V base_1+"ja"+base_2@?+"da" => lin V
{ Converb = base_1+"o"+base_2+"dið" ; { Converb = base_1+"o"+base_2+"dið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ja"+base_2+"d" ; Sg => base_1+"ja"+base_2+"d" ;
Pl => base_1+"ja"+base_2+"dið" Pl => base_1+"ja"+base_2+"dið"
} ; } ;
@@ -10353,7 +10353,7 @@ mkV049 base =
case base of { case base of {
base_1+"e"+base_2@?+"a" => lin V base_1+"e"+base_2@?+"a" => lin V
{ Converb = base_1+"jø"+base_2+"t" ; { Converb = base_1+"jø"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -10386,7 +10386,7 @@ mkV050 base =
case base of { case base of {
base_1+"jó"+base_2@?+"a" => lin V base_1+"jó"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"jó"+base_2 ; Sg => base_1+"jó"+base_2 ;
Pl => base_1+"jó"+base_2+"ið" Pl => base_1+"jó"+base_2+"ið"
} ; } ;
@@ -10419,7 +10419,7 @@ mkV051 base =
case base of { case base of {
base_1+"e"+base_2@?+"pa" => lin V base_1+"e"+base_2@?+"pa" => lin V
{ Converb = base_1+"o"+base_2+"pið" ; { Converb = base_1+"o"+base_2+"pið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"p" ; Sg => base_1+"e"+base_2+"p" ;
Pl => base_1+"e"+base_2+"pið" Pl => base_1+"e"+base_2+"pið"
} ; } ;
@@ -10452,7 +10452,7 @@ mkV052 base =
case base of { case base of {
base_1+"y"+base_2@?+"ja" => lin V base_1+"y"+base_2@?+"ja" => lin V
{ Converb = base_1+"u"+base_2+"t" ; { Converb = base_1+"u"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"y"+base_2 ; Sg => base_1+"y"+base_2 ;
Pl => base_1+"y"+base_2+"ið" Pl => base_1+"y"+base_2+"ið"
} ; } ;
@@ -10485,7 +10485,7 @@ mkV053 base =
case base of { case base of {
base_1+"á"+base_2@?+"a" => lin V base_1+"á"+base_2@?+"a" => lin V
{ Converb = base_1+"á"+base_2+"ið" ; { Converb = base_1+"á"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"á"+base_2 ; Sg => base_1+"á"+base_2 ;
Pl => base_1+"á"+base_2+"ið" Pl => base_1+"á"+base_2+"ið"
} ; } ;
@@ -10518,7 +10518,7 @@ mkV054 base =
case base of { case base of {
base_1+"a"+base_2@?+"a" => lin V base_1+"a"+base_2@?+"a" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -10551,7 +10551,7 @@ mkV055 base =
case base of { case base of {
base_1+"ógva" => lin V base_1+"ógva" => lin V
{ Converb = base_1+"óð" ; { Converb = base_1+"óð" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ógv" ; Sg => base_1+"ógv" ;
Pl => base_1+"ógvið" Pl => base_1+"ógvið"
} ; } ;
@@ -10584,7 +10584,7 @@ mkV056 base =
case base of { case base of {
base_1+"a"+base_2@?+"da" => lin V base_1+"a"+base_2@?+"da" => lin V
{ Converb = base_1+"i"+base_2+"dið" ; { Converb = base_1+"i"+base_2+"dið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2+"d" ; Sg => base_1+"a"+base_2+"d" ;
Pl => base_1+"a"+base_2+"dið" Pl => base_1+"a"+base_2+"dið"
} ; } ;
@@ -10617,7 +10617,7 @@ mkV057 base =
case base of { case base of {
base_1+"anga" => lin V base_1+"anga" => lin V
{ Converb = base_1+"ingið" ; { Converb = base_1+"ingið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ang" ; Sg => base_1+"ang" ;
Pl => base_1+"angið" Pl => base_1+"angið"
} ; } ;
@@ -10650,7 +10650,7 @@ mkV058 base =
case base of { case base of {
base_1+"a"+base_2@?+"a" => lin V base_1+"a"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -10683,7 +10683,7 @@ mkV059 base =
case base of { case base of {
base_1+"ei"+base_2@(?+?)+"ja" => lin V base_1+"ei"+base_2@(?+?)+"ja" => lin V
{ Converb = base_1+"o"+base_2+"t" ; { Converb = base_1+"o"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ei"+base_2+"j" ; Sg => base_1+"ei"+base_2+"j" ;
Pl => base_1+"ei"+base_2+"jið" Pl => base_1+"ei"+base_2+"jið"
} ; } ;
@@ -10716,7 +10716,7 @@ mkV060 base =
case base of { case base of {
base_1+"vø"+base_2@(?+?)+"a" => lin V base_1+"vø"+base_2@(?+?)+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"vø"+base_2 ; Sg => base_1+"vø"+base_2 ;
Pl => base_1+"vø"+base_2+"ið" Pl => base_1+"vø"+base_2+"ið"
} ; } ;
@@ -10749,7 +10749,7 @@ mkV061 base =
case base of { case base of {
base_1+"y"+base_2@?+"gja" => lin V base_1+"y"+base_2@?+"gja" => lin V
{ Converb = base_1+"u"+base_2+"t" ; { Converb = base_1+"u"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"y"+base_2+"g" ; Sg => base_1+"y"+base_2+"g" ;
Pl => base_1+"y"+base_2+"gið" Pl => base_1+"y"+base_2+"gið"
} ; } ;
@@ -10782,7 +10782,7 @@ mkV062 base =
case base of { case base of {
base_1+"o"+base_2@?+"a" => lin V base_1+"o"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"o"+base_2 ; Sg => base_1+"o"+base_2 ;
Pl => base_1+"o"+base_2+"ið" Pl => base_1+"o"+base_2+"ið"
} ; } ;
@@ -10815,7 +10815,7 @@ mkV063 base =
case base of { case base of {
base_1+"pa" => lin V base_1+"pa" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"p" ; Sg => base_1+"p" ;
Pl => base_1+"pið" Pl => base_1+"pið"
} ; } ;
@@ -10848,7 +10848,7 @@ mkV064 base =
case base of { case base of {
base_1+"úgva" => lin V base_1+"úgva" => lin V
{ Converb = base_1+"ovið" ; { Converb = base_1+"ovið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"úg" ; Sg => base_1+"úg" ;
Pl => base_1+"úgið" Pl => base_1+"úgið"
} ; } ;
@@ -10881,7 +10881,7 @@ mkV065 base =
case base of { case base of {
base_1+"u"+base_2@?+"na" => lin V base_1+"u"+base_2@?+"na" => lin V
{ Converb = base_1+"u"+base_2+"nað" ; { Converb = base_1+"u"+base_2+"nað" ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -10914,7 +10914,7 @@ mkV066 base =
case base of { case base of {
base_1+"ø"+base_2@?+"a" => lin V base_1+"ø"+base_2@?+"a" => lin V
{ Converb = base_1+"ø"+base_2+"ið" ; { Converb = base_1+"ø"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ø"+base_2 ; Sg => base_1+"ø"+base_2 ;
Pl => base_1+"ø"+base_2+"ið" Pl => base_1+"ø"+base_2+"ið"
} ; } ;
@@ -10947,7 +10947,7 @@ mkV067 base =
case base of { case base of {
base_1+"sa" => lin V base_1+"sa" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"s" ; Sg => base_1+"s" ;
Pl => base_1+"sið" Pl => base_1+"sið"
} ; } ;
@@ -10980,7 +10980,7 @@ mkV068 base =
case base of { case base of {
base_1+"a" => lin V base_1+"a" => lin V
{ Converb = base_1+"ið" ; { Converb = base_1+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -11013,7 +11013,7 @@ mkV069 base =
case base of { case base of {
base_1+"e"+base_2@?+"gja" => lin V base_1+"e"+base_2@?+"gja" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"gj" ; Sg => base_1+"e"+base_2+"gj" ;
Pl => base_1+"e"+base_2+"gjið" Pl => base_1+"e"+base_2+"gjið"
} ; } ;
@@ -11046,7 +11046,7 @@ mkV070 base =
case base of { case base of {
base_1+"iggja" => lin V base_1+"iggja" => lin V
{ Converb = base_1+"igið" ; { Converb = base_1+"igið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"igg" ; Sg => base_1+"igg" ;
Pl => base_1+"iggið" Pl => base_1+"iggið"
} ; } ;
@@ -11079,7 +11079,7 @@ mkV071 base =
case base of { case base of {
base_1+"e"+base_2@?+"a" => lin V base_1+"e"+base_2@?+"a" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -11112,7 +11112,7 @@ mkV072 base =
case base of { case base of {
base_1+"a"+base_2@?+"a" => lin V base_1+"a"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"ið" ; { Converb = base_1+"a"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -11145,7 +11145,7 @@ mkV073 base =
case base of { case base of {
base_1+"á"+base_2@?+"a" => lin V base_1+"á"+base_2@?+"a" => lin V
{ Converb = base_1+"á"+base_2+"ið" ; { Converb = base_1+"á"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"á"+base_2 ; Sg => base_1+"á"+base_2 ;
Pl => base_1+"á"+base_2+"ið" Pl => base_1+"á"+base_2+"ið"
} ; } ;
@@ -11178,7 +11178,7 @@ mkV074 base =
case base of { case base of {
base_1+"ey"+base_2@?+"a" => lin V base_1+"ey"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ey"+base_2 ; Sg => base_1+"ey"+base_2 ;
Pl => base_1+"ey"+base_2+"ið" Pl => base_1+"ey"+base_2+"ið"
} ; } ;
@@ -11211,7 +11211,7 @@ mkV075 base =
case base of { case base of {
base_1+"ega" => lin V base_1+"ega" => lin V
{ Converb = nonExist ; { Converb = nonExist ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -11244,7 +11244,7 @@ mkV076 base =
case base of { case base of {
base_1+"u"+base_2@?+"na" => lin V base_1+"u"+base_2@?+"na" => lin V
{ Converb = base_1+"u"+base_2+"nað" ; { Converb = base_1+"u"+base_2+"nað" ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -11277,7 +11277,7 @@ mkV077 base =
case base of { case base of {
base_1+"ja" => lin V base_1+"ja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -11310,7 +11310,7 @@ mkV078 base =
case base of { case base of {
base_1+"ja" => lin V base_1+"ja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"jið" Pl => base_1+"jið"
} ; } ;
@@ -11343,7 +11343,7 @@ mkV079 base =
case base of { case base of {
base_1+"ða" => lin V base_1+"ða" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ð" ; Sg => base_1+"ð" ;
Pl => base_1+"ðið" Pl => base_1+"ðið"
} ; } ;
@@ -11376,7 +11376,7 @@ mkV080 base =
case base of { case base of {
base_1+"áa" => lin V base_1+"áa" => lin V
{ Converb = base_1+"átt" ; { Converb = base_1+"átt" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"á" ; Sg => base_1+"á" ;
Pl => base_1+"áið" Pl => base_1+"áið"
} ; } ;
@@ -11409,7 +11409,7 @@ mkV081 base =
case base of { case base of {
base_1+"áða" => lin V base_1+"áða" => lin V
{ Converb = base_1+"átt" ; { Converb = base_1+"átt" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"áð" ; Sg => base_1+"áð" ;
Pl => base_1+"áðið" Pl => base_1+"áðið"
} ; } ;
@@ -11442,7 +11442,7 @@ mkV082 base =
case base of { case base of {
base_1+"ða"+base_2@(?+?) => lin V base_1+"ða"+base_2@(?+?) => lin V
{ Converb = base_1+"ð"+base_2 ; { Converb = base_1+"ð"+base_2 ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -11475,7 +11475,7 @@ mkV083 base =
case base of { case base of {
base_1+"ø"+base_2@?+"ka" => lin V base_1+"ø"+base_2@?+"ka" => lin V
{ Converb = base_1+"o"+base_2+"kið" ; { Converb = base_1+"o"+base_2+"kið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ø"+base_2+"k" ; Sg => base_1+"ø"+base_2+"k" ;
Pl => base_1+"ø"+base_2+"kið" Pl => base_1+"ø"+base_2+"kið"
} ; } ;
@@ -11508,7 +11508,7 @@ mkV084 base =
case base of { case base of {
base_1+"íggja" => lin V base_1+"íggja" => lin V
{ Converb = base_1+"æð" ; { Converb = base_1+"æð" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"íggj" ; Sg => base_1+"íggj" ;
Pl => base_1+"íggið" Pl => base_1+"íggið"
} ; } ;
@@ -11541,7 +11541,7 @@ mkV085 base =
case base of { case base of {
base_1+"kja" => lin V base_1+"kja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"k" ; Sg => base_1+"k" ;
Pl => base_1+"kið" Pl => base_1+"kið"
} ; } ;
@@ -11574,7 +11574,7 @@ mkV086 base =
case base of { case base of {
base_1+"i"+base_2@?+"a" => lin V base_1+"i"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2 ; Sg => base_1+"i"+base_2 ;
Pl => base_1+"i"+base_2+"ið" Pl => base_1+"i"+base_2+"ið"
} ; } ;
@@ -11607,7 +11607,7 @@ mkV087 base =
case base of { case base of {
base_1+"i"+base_2@?+"a" => lin V base_1+"i"+base_2@?+"a" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2 ; Sg => base_1+"i"+base_2 ;
Pl => base_1+"i"+base_2+"ið" Pl => base_1+"i"+base_2+"ið"
} ; } ;
@@ -11640,7 +11640,7 @@ mkV088 base =
case base of { case base of {
base_1+"u"+base_2@?+"a" => lin V base_1+"u"+base_2@?+"a" => lin V
{ Converb = base_1+"u"+base_2+"að" ; { Converb = base_1+"u"+base_2+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -11673,7 +11673,7 @@ mkV089 base =
case base of { case base of {
base_1+"ei"+base_2@(?+?)+"ja" => lin V base_1+"ei"+base_2@(?+?)+"ja" => lin V
{ Converb = base_1+"o"+base_2+"t" ; { Converb = base_1+"o"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ei"+base_2+"j" ; Sg => base_1+"ei"+base_2+"j" ;
Pl => base_1+"ei"+base_2+"jið" Pl => base_1+"ei"+base_2+"jið"
} ; } ;
@@ -11706,7 +11706,7 @@ mkV090 base =
case base of { case base of {
base_1+"ja" => lin V base_1+"ja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"j" ; Sg => base_1+"j" ;
Pl => base_1+"jið" Pl => base_1+"jið"
} ; } ;
@@ -11739,7 +11739,7 @@ mkV091 base =
case base of { case base of {
base_1+"jó"+base_2@?+"a" => lin V base_1+"jó"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"jó"+base_2 ; Sg => base_1+"jó"+base_2 ;
Pl => base_1+"jó"+base_2+"ið" Pl => base_1+"jó"+base_2+"ið"
} ; } ;
@@ -11772,7 +11772,7 @@ mkV092 base =
case base of { case base of {
base_1+"áa" => lin V base_1+"áa" => lin V
{ Converb = base_1+"igið" ; { Converb = base_1+"igið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"á" ; Sg => base_1+"á" ;
Pl => base_1+"áið" Pl => base_1+"áið"
} ; } ;
@@ -11805,7 +11805,7 @@ mkV093 base =
case base of { case base of {
base_1+"y"+base_2@?+"ja" => lin V base_1+"y"+base_2@?+"ja" => lin V
{ Converb = base_1+"u"+base_2+"t" ; { Converb = base_1+"u"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"y"+base_2 ; Sg => base_1+"y"+base_2 ;
Pl => base_1+"y"+base_2+"ið" Pl => base_1+"y"+base_2+"ið"
} ; } ;
@@ -11838,7 +11838,7 @@ mkV094 base =
case base of { case base of {
base_1+"i"+base_2@?+"na" => lin V base_1+"i"+base_2@?+"na" => lin V
{ Converb = base_1+"u"+base_2+"nið" ; { Converb = base_1+"u"+base_2+"nið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2+"n" ; Sg => base_1+"i"+base_2+"n" ;
Pl => base_1+"i"+base_2+"nið" Pl => base_1+"i"+base_2+"nið"
} ; } ;
@@ -11871,7 +11871,7 @@ mkV095 base =
case base of { case base of {
base_1+"anda" => lin V base_1+"anda" => lin V
{ Converb = base_1+"aðið" ; { Converb = base_1+"aðið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"att" ; Sg => base_1+"att" ;
Pl => base_1+"andið" Pl => base_1+"andið"
} ; } ;
@@ -11904,7 +11904,7 @@ mkV096 base =
case base of { case base of {
base_1+"ei"+base_2@?+"ja" => lin V base_1+"ei"+base_2@?+"ja" => lin V
{ Converb = base_1+"o"+base_2+"t" ; { Converb = base_1+"o"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ei"+base_2 ; Sg => base_1+"ei"+base_2 ;
Pl => base_1+"ei"+base_2+"ið" Pl => base_1+"ei"+base_2+"ið"
} ; } ;
@@ -11937,7 +11937,7 @@ mkV097 base =
case base of { case base of {
base_1+"inga" => lin V base_1+"inga" => lin V
{ Converb = base_1+"ungið" ; { Converb = base_1+"ungið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ikk" ; Sg => base_1+"ikk" ;
Pl => base_1+"ingið" Pl => base_1+"ingið"
} ; } ;
@@ -11970,7 +11970,7 @@ mkV098 base =
case base of { case base of {
base_1+"ja"+base_2@?+"a" => lin V base_1+"ja"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ja"+base_2 ; Sg => base_1+"ja"+base_2 ;
Pl => base_1+"ja"+base_2+"ið" Pl => base_1+"ja"+base_2+"ið"
} ; } ;
@@ -12003,7 +12003,7 @@ mkV099 base =
case base of { case base of {
base_1+"o"+base_2@?+"a" => lin V base_1+"o"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"o"+base_2 ; Sg => base_1+"o"+base_2 ;
Pl => base_1+"o"+base_2+"ið" Pl => base_1+"o"+base_2+"ið"
} ; } ;
@@ -12036,7 +12036,7 @@ mkV100 base =
case base of { case base of {
base_1+"í"+base_2@?+"ja" => lin V base_1+"í"+base_2@?+"ja" => lin V
{ Converb = base_1+"i"+base_2+"ið" ; { Converb = base_1+"i"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"í"+base_2+"j" ; Sg => base_1+"í"+base_2+"j" ;
Pl => base_1+"í"+base_2+"jið" Pl => base_1+"í"+base_2+"jið"
} ; } ;
@@ -12069,7 +12069,7 @@ mkV101 base =
case base of { case base of {
base_1+"i"+base_2@?+"ja" => lin V base_1+"i"+base_2@?+"ja" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2 ; Sg => base_1+"i"+base_2 ;
Pl => base_1+"i"+base_2+"jið" Pl => base_1+"i"+base_2+"jið"
} ; } ;
@@ -12102,7 +12102,7 @@ mkV102 base =
case base of { case base of {
base_1+"ja" => lin V base_1+"ja" => lin V
{ Converb = base_1+"t" ; { Converb = base_1+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1 ; Sg => base_1 ;
Pl => base_1+"ið" Pl => base_1+"ið"
} ; } ;
@@ -12135,7 +12135,7 @@ mkV103 base =
case base of { case base of {
base_1+"ø"+base_2@?+"ja" => lin V base_1+"ø"+base_2@?+"ja" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"ø"+base_2+"j" ; Sg => base_1+"ø"+base_2+"j" ;
Pl => base_1+"ø"+base_2+"jið" Pl => base_1+"ø"+base_2+"jið"
} ; } ;
@@ -12168,7 +12168,7 @@ mkV104 base =
case base of { case base of {
base_1+"y"+base_2@(?+?)+"ja" => lin V base_1+"y"+base_2@(?+?)+"ja" => lin V
{ Converb = base_1+"u"+base_2+"ið" ; { Converb = base_1+"u"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"y"+base_2+"j" ; Sg => base_1+"y"+base_2+"j" ;
Pl => base_1+"y"+base_2+"jið" Pl => base_1+"y"+base_2+"jið"
} ; } ;
@@ -12201,7 +12201,7 @@ mkV105 base =
case base of { case base of {
base_1+"i"+base_2@?+"a" => lin V base_1+"i"+base_2@?+"a" => lin V
{ Converb = base_1+"a"+base_2+"t" ; { Converb = base_1+"a"+base_2+"t" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"i"+base_2 ; Sg => base_1+"i"+base_2 ;
Pl => base_1+"i"+base_2+"ið" Pl => base_1+"i"+base_2+"ið"
} ; } ;
@@ -12234,7 +12234,7 @@ mkV106 base =
case base of { case base of {
base_1+"e"+base_2@?+"fa" => lin V base_1+"e"+base_2@?+"fa" => lin V
{ Converb = base_1+"o"+base_2+"fið" ; { Converb = base_1+"o"+base_2+"fið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2+"f" ; Sg => base_1+"e"+base_2+"f" ;
Pl => base_1+"e"+base_2+"fið" Pl => base_1+"e"+base_2+"fið"
} ; } ;
@@ -12267,7 +12267,7 @@ mkV107 base =
case base of { case base of {
base_1+"a"+base_2@(?+?)+"a" => lin V base_1+"a"+base_2@(?+?)+"a" => lin V
{ Converb = base_1+"a"+base_2+"ið" ; { Converb = base_1+"a"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"a"+base_2 ; Sg => base_1+"a"+base_2 ;
Pl => base_1+"a"+base_2+"ið" Pl => base_1+"a"+base_2+"ið"
} ; } ;
@@ -12300,7 +12300,7 @@ mkV108 base =
case base of { case base of {
base_1+"e"+base_2@(?+?)+"a" => lin V base_1+"e"+base_2@(?+?)+"a" => lin V
{ Converb = nonExist ; { Converb = nonExist ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -12333,7 +12333,7 @@ mkV109 base =
case base of { case base of {
base_1+base_2@?+base_3@?+"a" => lin V base_1+base_2@?+base_3@?+"a" => lin V
{ Converb = base_1+base_2+base_3+"að" ; { Converb = base_1+base_2+base_3+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;
@@ -12366,7 +12366,7 @@ mkV110 base =
case base of { case base of {
"d"+base_1+"finite" => lin V "d"+base_1+"finite" => lin V
{ Converb = "v"+base_1+"rð" ; { Converb = "v"+base_1+"rð" ;
imperative = table { Imperative_Jussive = table {
Sg => "v"+base_1+"rðsins" ; Sg => "v"+base_1+"rðsins" ;
Pl => "v"+base_1+"rðanna" Pl => "v"+base_1+"rðanna"
} ; } ;
@@ -12399,7 +12399,7 @@ mkV111 base =
case base of { case base of {
base_1+"e"+base_2@?+"a" => lin V base_1+"e"+base_2@?+"a" => lin V
{ Converb = base_1+"o"+base_2+"ið" ; { Converb = base_1+"o"+base_2+"ið" ;
imperative = table { Imperative_Jussive = table {
Sg => base_1+"e"+base_2 ; Sg => base_1+"e"+base_2 ;
Pl => base_1+"e"+base_2+"ið" Pl => base_1+"e"+base_2+"ið"
} ; } ;
@@ -12432,7 +12432,7 @@ mkV112 base =
case base of { case base of {
base_1+"ja" => lin V base_1+"ja" => lin V
{ Converb = base_1+"að" ; { Converb = base_1+"að" ;
imperative = table { Imperative_Jussive = table {
Sg => nonExist ; Sg => nonExist ;
Pl => nonExist Pl => nonExist
} ; } ;

View File

@@ -1,14 +0,0 @@
concrete NamesFao of Names = CatFao ** open ResFao in {
lin
GivenName gn = mkNP gn.s Masc Sg P3 ;
MaleSurname sn = mkNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkNP sn.s Fem Sg P3 ;
PlSurname sn = mkNP sn.s Masc Pl P3 ;
FullName gn sn = mkNP (gn.s ++ sn.s) Masc Sg P3 ;
UseLN ln = mkNP ln.s Neuter Sg P3 ;
PlainLN ln = mkNP ln.s Neuter Sg P3 ;
InLN ln = {s = "í" ++ ln.s} ;
AdjLN ap ln = {s = ap.s ! Neuter ! Sg ! Nom ++ ln.s} ;
}

View File

@@ -1,161 +1,4 @@
concrete NounFao of Noun = CatFao ** open ResFao, Prelude in { concrete NounFao of Noun = CatFao ** {
lin lin
UseN n = n ; UseN n = n ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
UsePN pn = mkNP pn.s Masc Sg P3 ;
UsePron p = p ;
RelNP np rs =
np ** {s = \\c => np.s ! c ++ "," ++ rs.s ! np.g ! persNum np.n np.p} ;
DetNP det = {
s = \\c => det.s ! Masc ! c ;
g = Masc ;
n = det.n ;
p = P3
} ;
PredetNP pred np = np ** {
s = \\c => pred.s ++ np.s ! c
} ;
PPartNP np v2 = np ** {
s = \\c => np.s ! c ++ v2.Participle ! Past
} ;
AdvNP np adv = np ** {
s = \\c => np.s ! c ++ adv.s
} ;
ExtAdvNP np adv = np ** {
s = \\c => np.s ! c ++ "," ++ adv.s
} ;
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.sp ! det.n ! c ;
g = cn.g ;
n = det.n ;
p = P3
} ;
DefArt = {
s = \\_,_,_,_ => [] ;
sp = Def ;
} ;
IndefArt = {
s = \\b =>
table {
Masc => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "ein" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Fem => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "eina" ; Dat => "einari" ; Gen => "einar"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Neuter => table {
Sg => case b of {
False => table {Nom => "eitt" ; Acc => "eitt" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
}
} ;
sp = Indef ;
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ;
n = num.n ;
sp = quant.sp
} ;
DetQuantOrd quant num ord = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ++ ord.s ! g ! num.n ! c ;
n = num.n ;
sp = quant.sp
} ;
NumSg = {
s = \\_,_ => [] ;
n = Sg ;
hasCard = False
} ;
NumPl = {
s = \\_,_ => [] ;
n = Pl ;
hasCard = False
} ;
NumCard card = card ** {hasCard = True} ;
NumDigits digits = {s = \\_,_ => digits.s ; n = Pl} ;
NumDecimal dec = {s = \\_,_ => dec.s ; n = Pl} ;
NumNumeral numeral = {s=numeral.s ! NCard; n=numeral.n} ;
AdNum adn card = {s = \\g,c => adn.s ++ card.s ! g ! c ; n = card.n} ;
OrdDigits digits = {s = \\_,_,_ => digits.s ++ BIND ++ "."} ;
OrdNumeral numeral = {s = \\g,n,c => numeral.s ! NOrd n ! g ! c} ;
OrdSuperl a = {s = a.s} ;
OrdNumeralSuperl numeral a = {
s = \\g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! g ! n ! c
} ;
MassNP cn = {
s = \\c => cn.s ! Indef ! Sg ! c ;
g = cn.g ;
n = Sg ;
p = P3
} ;
PossPron pron = {
s = \\_,_,_,_ => pron.s ! Gen ;
sp = Def
} ;
ComplN2 n2 np = {
s = \\sp,n,c => n2.s ! sp ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ;
g = n2.g
} ;
ComplN3 n3 np = n3 ** {
s = \\sp,n,c => n3.s ! sp ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ;
c2 = n3.c3
} ;
AdjCN ap cn = {
s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
g = cn.g
} ;
RelCN cn rs = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ rs.s ! cn.g ! persNum n P3 ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ adv.s ;
g = cn.g
} ;
SentCN cn sc = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ sc.s ;
g = cn.g
} ;
ApposCN cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Nom ;
g = cn.g
} ;
PossNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Gen ;
g = cn.g
} ;
PartNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ "av" ++ np.s ! Dat ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! np.g ! c ++ "av" ++ np.s ! Dat ;
g = np.g ;
n = det.n ;
p = P3
} ;
AdjDAP dap ap = dap ** {
s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! dap.n ! c
} ;
DetDAP det = det ;
QuantityNP dec mu = {
s = \\_ => dec.s ++ mu.s ;
g = Neuter ;
n = Pl ;
p = P3
} ;
} }

View File

@@ -1,316 +0,0 @@
concrete NumeralFao of Numeral = CatFao [Numeral, Digits, Decimal] ** open Prelude, ResFao in {
lincat
Digit = {
s,teen,ten : CardOrd => Gender => Case => Str ;
n : Number ;
} ;
Sub10 = {
s : CardOrd => Gender => Case => Str ;
hundredth, thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub100, Sub1000 = {
s : CardOrd => Gender => Case => Str ;
thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub1000000, Sub1000000000, Sub1000000000000 =
{s : CardOrd => Gender => Case => Str ; n : Number} ;
Dig = {s : Str; n : Number} ;
lin
num n = n ;
n2 = {
s = table {
NCard => table {
Masc => caseList "tveir" "tveir" "tveimum" "tveggja" ;
Fem => caseList "tvær" "tvær" "tveimum" "tveggja" ;
Neuter => caseList "tvey" "tvey" "tveimum" "tveggja"
} ;
NOrd n => table {
Masc => case n of {
Sg => caseList "annar" "annan" "øðrum" "annars" ;
Pl => caseList "aðrir" "aðrar" "øðrum" "annara"
} ;
Fem => case n of {
Sg => caseList "onnur" "aðra" "aðrari" "annarar" ;
Pl => caseList "aðrar" "aðrar" "øðrum" "annara"
} ;
Neuter => case n of {
Sg => caseList "annað" "annað" "øðrum" "annars" ;
Pl => caseList "onnur" "onnur" "øðrum" "annara"
}
}
} ;
teen = table {
NCard => \\_,_ => "tólv" ;
NOrd n => mkWeakOrd "tólvti" ! n
} ;
ten = table {
NCard => \\_,_ => "tjúgu" ;
NOrd n => mkWeakOrd "tjúgundi" ! n
} ;
n = Pl
} ;
n3 = {
s = table {
NCard => table {
Masc => caseList "tríggir" "tríggjar" "trimum" "tríggja" ;
Fem => caseList "tríggjar" "tríggjar" "trimum" "tríggja" ;
Neuter => caseList "trý" "trý" "trimum" "tríggja"
} ;
NOrd n => mkOrdForms "triði" "triðja" "triðju" ! n
} ;
teen = table {
NCard => \\_,_ => "trettan" ;
NOrd n => mkWeakOrd "trettandi" ! n
} ;
ten = table {
NCard => \\_,_ => "tríati" ;
NOrd n => mkWeakOrd "tretivundi" ! n
} ;
n = Pl
} ;
n4 = mkDigit "fýra" "fjúrtan" "fýrati" "fjórði" "fjúrtandi" "fjørutandi" ;
n5 = mkDigit "fimm" "fimtan" "fimmti" "fimti" "fimtandi" "fimtandi" ;
n6 = mkDigit "seks" "sekstan" "seksti" "sætti" "sekstandi" "sekstandi" ;
n7 = mkDigit "sjey" "seytjan" "sjeyti" "sjeyndi" "seytjandi" "sjútandi" ;
n8 = mkDigit "átta" "átjan" "áttati" "áttandi" "átjandi" "áttandi" ;
n9 = mkDigit "níggju" "nítjan" "níti" "níggjundi" "nítjandi" "nítandi" ;
pot01 = {
s = table {
NCard => table {
Masc => caseList "ein" "ein" "einum" "eins" ;
Fem => caseList "einar" "eina" "einari" "einar" ;
Neuter => caseList "eitt" "eitt" "einum" "eins"
} ;
NOrd n => mkWeakOrd "fyrsti" ! n
} ;
hundredth = mkWeakOrd "hundraðandi" ! Sg ;
thousandth = mkWeakOrd "túsundandi" ! Sg ;
millionth = mkWeakOrd "milliónandi" ! Sg ;
milliardth = mkWeakOrd "milliardandi" ! Sg ;
n = Sg
} ;
pot0 d = d ** {
hundredth = mkCompoundOrd (numBase d) "hundraðandi" ! Pl ;
thousandth = mkCompoundOrd (numBase d) "túsundandi" ! Pl ;
millionth = mkCompoundOrd (numBase d) "milliónandi" ! Pl ;
milliardth = mkCompoundOrd (numBase d) "milliardandi" ! Pl
} ;
pot0as1 n = n ;
pot110 =
let ten : Gender => Case => Str =
table {
Neuter => \\_ => "ti" ;
_ => \\_ => "tíggju"
} ;
in mkCardOrd ten
(mkWeakOrd "tíggjundi") ** {
thousandth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot111 =
mkCardOrd (\\_,_ => "ellivu")
(mkWeakOrd "ellivti") ** {
thousandth = \\g,c => "ellivu" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "ellivu" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "ellivu" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1to19 d =
mkCardOrd (d.teen ! NCard)
(\\n => d.teen ! NOrd n) ** {
thousandth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1 d =
mkCardOrd (d.ten ! NCard)
(\\n => d.ten ! NOrd n) ** {
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot1plus d e = {
s = table {
NCard => \\g,c => e.s ! NCard ! g ! c ++ "og" ++ d.ten ! NCard ! g ! Nom ;
NOrd n => \\g,c => d.ten ! NCard ! g ! c ++ "og" ++ e.s ! NOrd n ! g ! Nom
} ;
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot1as2 n = n ;
pot21 =
mkCardOrd (\\_,_ => "hundrað")
(mkWeakOrd "hundraðandi") ** {
thousandth = \\g,c => "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2 d =
mkCardOrd (\\_,_ => numBase d ++ "hundrað")
(\\_ => d.hundredth) ** {
thousandth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2plus d e = {
s = table {
NCard => \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ;
NOrd n => \\g,c => numBase d ++ "hundrað" ++ "og" ++ e.s ! NOrd n ! g ! c
} ;
thousandth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot2as3 n = n ;
pot31 = mkCardOrd (\\_,_ => "túsund")
(mkWeakOrd "túsundandi") ;
pot3 n = mkCardOrd (\\_,_ => numBase n ++ "túsund")
(\\_ => n.thousandth) ;
pot3plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "túsund" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "túsund" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot3as4 n = n ;
pot3decimal d = mkCardOrd (\\_,_ => d.s ++ "túsund")
(\\_,_,_ => d.s ++ "túsundandi") ;
pot41 = mkCardOrd (\\_,_ => "millión")
(mkWeakOrd "milliónandi") ;
pot4 n = mkCardOrd (\\_,_ => numBase n ++ "millión")
(\\_ => n.millionth) ;
pot4plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "millión" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "millión" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot4as5 n = n ;
pot4decimal d = mkCardOrd (\\_,_ => d.s ++ "millión")
(\\_,_,_ => d.s ++ "milliónandi") ;
pot51 = mkCardOrd (\\_,_ => "milliard")
(mkWeakOrd "milliardandi") ;
pot5 n = mkCardOrd (\\_,_ => numBase n ++ "milliard")
(\\_ => n.milliardth) ;
pot5plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "milliard" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "milliard" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot5decimal d = mkCardOrd (\\_,_ => d.s ++ "milliard")
(\\_,_,_ => d.s ++ "milliardandi") ;
IDig d = d ;
IIDig d ds = {s = d.s ++ BIND ++ ds.s; n = Pl} ;
D_0 = {s = "0"; n = Pl} ;
D_1 = {s = "1"; n = Sg} ;
D_2 = {s = "2"; n = Pl} ;
D_3 = {s = "3"; n = Pl} ;
D_4 = {s = "4"; n = Pl} ;
D_5 = {s = "5"; n = Pl} ;
D_6 = {s = "6"; n = Pl} ;
D_7 = {s = "7"; n = Pl} ;
D_8 = {s = "8"; n = Pl} ;
D_9 = {s = "9"; n = Pl} ;
PosDecimal d = d ** {hasDot = False} ;
NegDecimal d = {s = "-" ++ BIND ++ d.s; n = Pl; hasDot = False} ;
IFrac d i = {s = d.s ++ if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ i.s; n = Pl; hasDot = True} ;
oper
caseList : Str -> Str -> Str -> Str -> Case => Str = \nom,acc,dat,gen ->
table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
mkCardOrd :
(Gender => Case => Str) ->
(Number => Gender => Case => Str) ->
{s : CardOrd => Gender => Case => Str ; n : Number} =
\card,ord -> {
s = table {
NCard => card ;
NOrd n => ord ! n
} ;
n = Pl
} ;
mkDigit :
Str -> Str -> Str -> Str -> Str -> Str -> Digit =
\str,teen,ten,unitOrd,teenOrd,tenOrd -> lin Digit {
s = table {
NCard => \\_,_ => str ;
NOrd n => mkWeakOrd unitOrd ! n
} ;
teen = table {
NCard => \\_,_ => teen ;
NOrd n => mkWeakOrd teenOrd ! n
} ;
ten = table {
NCard => \\_,_ => ten ;
NOrd n => mkWeakOrd tenOrd ! n
} ;
n = Pl
} ;
mkOrdForms : Str -> Str -> Str -> Number => Gender => Case => Str = \masc,obl,pl ->
table {
Sg =>
table {
Masc => caseList masc obl obl obl ;
Fem => caseList obl pl pl pl ;
Neuter => \\_ => obl
} ;
Pl => \\_,_ => pl
} ;
mkWeakOrd : Str -> Number => Gender => Case => Str = \lemma ->
let stem : Str = init lemma in
mkOrdForms lemma (stem + "a") (stem + "u") ;
mkCompoundOrd : Str -> Str -> Number => Gender => Case => Str = \prefix,lemma ->
let stem : Str = init lemma in
mkOrdForms
(prefix ++ BIND ++ lemma)
(prefix ++ BIND ++ (stem + "a"))
(prefix ++ BIND ++ (stem + "u")) ;
numBase : {s : CardOrd => Gender => Case => Str} -> Str = \n ->
n.s ! NCard ! Neuter ! Nom ;
}

View File

@@ -319,19 +319,6 @@ oper
_ => regN form1 _ => regN form1
} ; } ;
mkPron : (_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen
} ;
g = g ;
n = n ;
p = p
} ;
regA : Str -> A -- s;Masc;Sg;Nom regA : Str -> A -- s;Masc;Sg;Nom
= \form -> case form of { = \form -> case form of {
_ + "dur" => mkA001 form; _ + "dur" => mkA001 form;
@@ -502,20 +489,11 @@ oper
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ; mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ; } ;
invarN : Str -> N = \s -> lin N {
s = \\_,_,_ => s ;
g = Masc
} ;
mkA = overload { mkA = overload {
mkA : Str -> A = regA; -- s;Masc;Sg;Nom mkA : Str -> A = regA; -- s;Masc;Sg;Nom
mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
} ; } ;
invarA : Str -> A = \s -> lin A {
s = \\_,_,_ => s
} ;
mkA2 = overload { mkA2 = overload {
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ; mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ; mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
@@ -524,19 +502,10 @@ oper
mkV = overload { mkV = overload {
mkV : Str -> V = regV; -- Nonfinite mkV : Str -> V = regV; -- Nonfinite
mkV : Str -> Str -> V = reg2V ; -- Nonfinite Indicative;Pres;('PSg', P2) mkV : Str -> Str -> V = reg2V ; -- Nonfinite Indicative;Pres;('PSg', P2)
mkV : V -> Str -> V -- particle verb mkV : V -> Str -> V -- particle verb
= \v,p -> v ** {particle = p} = \v,p -> v ** {particle = p}
} ; } ;
invarV : Str -> V = \s -> lin V {
Converb = s ;
imperative = \\_ => s ;
Indicative = \\_,_ => s ;
Nonfinite = s ;
Participle = \\_ => s ;
particle = []
} ;
mkVV : V -> VV = \v -> lin VV v ; mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ; mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ; mkVQ : V -> VQ = \v -> lin VQ v ;
@@ -583,15 +552,14 @@ oper
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s; n=Sg} ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s; n=Sg} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ; mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=\\_,_ => s; n=Pl} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;

View File

@@ -1,25 +1,11 @@
concrete PhraseFao of Phrase = CatFao ** open ResFao in { concrete PhraseFao of Phrase = CatFao ** {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttVP vp = {s = vp.Nonfinite} ;
UttCN cn = {s = cn.s ! Indef ! Sg ! Nom} ;
UttCard card = {s = card.s ! Neuter ! Nom} ;
UttAP ap = {s = ap.s ! Masc ! Sg ! Nom} ;
UttAdv adv = adv ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj conj = conj ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = "," ++ np.s ! Nom} ;
} }

View File

@@ -1,50 +0,0 @@
concrete QuestionFao of Question = CatFao ** open ResFao in {
lincat QVP = {s : Tense => Polarity => Str} ;
lin
QuestCl cl = {s = cl.Indicative} ;
QuestVP ip vp = {
s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3
} ;
QuestSlash ip cls = {
s = \\t,pol => ip.s ++ cls.s ! t ! pol
} ;
QuestIAdv iadv cl = {
s = \\t,pol => iadv.s ++ cl.Indicative ! t ! pol
} ;
QuestIComp icomp np = {
s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = idet.s ++ cn.s ! Indef ! idet.n ! Nom ;
n = idet.n
} ;
IdetIP idet = {
s = idet.s ;
n = idet.n
} ;
AdvIP ip adv = ip ** {s = ip.s ++ adv.s} ;
IdetQuant iquant num = {
s = iquant.s ++ num.s ! Masc ! Nom ;
n = num.n
} ;
PrepIP prep ip = {s = prep.s ++ ip.s} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s} ;
ComplSlashIP vps ip = {
s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc
} ;
AdvQVP vp iadv = {
s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s
} ;
AddAdvQVP qvp iadv = {
s = \\t,pol => qvp.s ! t ! pol ++ iadv.s
} ;
QuestQVP ip qvp = {
s = \\t,pol => ip.s ++ qvp.s ! t ! pol
} ;
}

View File

@@ -1,16 +0,0 @@
concrete RelativeFao of Relative = CatFao ** open ResFao in {
lin
IdRP = {s = "sum"} ;
RelCl cl = {
s = \\t,pol,_,_ => "sum" ++ cl.Indicative ! t ! pol
} ;
RelVP rp vp = {
s = \\t,pol,g,pn => rp.s ++ vp.Indicative ! t ! pol ! g ! pn
} ;
RelSlash rp cls = {
s = \\t,pol,_,_ => rp.s ++ cls.s ! t ! pol
} ;
FunRP prep np rp = {
s = prep.s ++ np.s ! prep.c ++ rp.s
} ;
}

View File

@@ -1,9 +1,7 @@
resource ResFao = ParamX - [Tense,Pres,Past] ** { resource ResFao = {
param
CardOrd = NCard | NOrd Number ;
param Species = Indef | Def ; param Species = Indef | Def ;
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Gen ; param Case = Nom | Acc | Dat | Gen ;
param Gender = Masc | Fem | Neuter ; param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135 oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135
@@ -92,28 +90,17 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
} }
} ; } ;
param Tense = Pres | Past ; param Tense = Past | Pres ;
param PersNum = PSg Person | PPl ; param PersNum = PSg Person | PPl ;
oper persNum : Number -> Person -> PersNum = param Person = P1 | P3 | P2 ;
\n,p -> case n of { oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596
Sg => PSg p ;
Pl => PPl
} ;
oper persNumNumber : PersNum -> Number =
\pn -> case pn of {
PSg _ => Sg ;
PPl => Pl
} ;
oper Verb = {Converb: Str; imperative: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 ->
{ Converb = f1 ; { Converb = f1 ;
imperative = table { Imperative_Jussive = table {
Sg => f2 ; Sg => f2 ;
Pl => f3 Pl => f3
} ; } ;
Indicative = table { Indicative = table {
Pres => table { Pres => table {
PSg P1 => f4 ; PSg P1 => f4 ;
@@ -142,62 +129,5 @@ oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ; oper CommonNoun = Noun ;
oper AdjPhrase = Adj ; oper AdjPhrase = Adj ;
oper VerbPhrase = {
Converb : Str ;
Indicative : Tense => Polarity => Gender => PersNum => Str ;
Nonfinite : Str ;
Participle : Tense => Str ;
} ;
oper Clause = {
Converb : Str ;
Indicative : Tense => Polarity => Str ;
Nonfinite : Str ;
Participle : Tense => Str
} ;
oper
copula : Tense => PersNum => Str =
table {
Pres => table {
PSg P1 => "eri" ;
PSg P2 => "ert" ;
PSg P3 => "er" ;
PPl => "eru"
} ;
Past => table {
PSg P1 => "var" ;
PSg P2 => "vart" ;
PSg P3 => "var" ;
PPl => "vóru"
}
} ;
oper
negStr : Polarity -> Str = \pol -> case pol of {
Pos => [] ;
Neg => "ikki"
} ;
mkNP : Str -> Gender -> Number -> Person -> {s : Case => Str ; g : Gender ; n : Number ; p : Person} =
\str,g,n,p -> {
s = \\_ => str ;
g = g ;
n = n ;
p = p
} ;
mkCN : Str -> Gender -> CommonNoun =
\str,g -> {
s = \\_,_,_ => str ;
g = g
} ;
mkVP : Str -> VerbPhrase =
\str -> {
Converb = str ;
Indicative = \\_,pol,_,_ => str ++ negStr pol ;
Nonfinite = str ;
Participle = \\_ => str
} ;
} }

View File

@@ -1,90 +0,0 @@
concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) in {
lin PredVP np vp = {Converb = np.s ! Nom ++ vp.Converb;
Indicative = \\t,pol =>
let p = persNum np.n np.p
in np.s ! Nom ++ vp.Indicative ! t ! pol ! np.g ! p;
Nonfinite = np.s ! Nom ++ vp.Nonfinite;
Participle = \\t => np.s ! Nom ++ vp.Participle ! t} ;
PredSCVP sc vp = {Converb = sc.s ++ vp.Converb;
Indicative = \\t,pol => sc.s ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3;
Nonfinite = sc.s ++ vp.Nonfinite;
Participle = \\t => sc.s ++ vp.Participle ! t} ;
SlashVP np vps = {
s = \\t,pol =>
let p = persNum np.n np.p in
np.s ! Nom ++ vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.sc ;
c2 = vps.c2
} ;
AdvSlash cls adv = cls ** {
s = \\t,pol => cls.s ! t ! pol ++ adv.s
} ;
SlashPrep cl prep = {
s = cl.Indicative ;
c2 = prep
} ;
SlashVS np vs sslash = {
s = \\t,pol =>
let p = persNum np.n np.p in
np.s ! Nom ++ vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ sslash.s ;
c2 = sslash.c2
} ;
ImpVP vp = {
s = \\pol,n => negStr pol ++ vp.Nonfinite
} ;
AdvImp adv imp = {
s = \\pol,n => adv.s ++ imp.s ! pol ! n
} ;
UseCl temp pol cl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cl.Indicative ! tense ! pol.p
} ;
UseQCl temp pol qcl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ qcl.s ! tense ! pol.p
} ;
UseRCl temp pol rcl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
}
in {
s = \\g,pn =>
temp.s ++ pol.s ++ rcl.s ! tense ! pol.p ! g ! pn
} ;
UseSlash temp pol cls =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cls.s ! tense ! pol.p ;
c2 = cls.c2
} ;
EmbedS s = {s = "at" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.Nonfinite} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ "," ++ rs.s ! Neuter ! PSg P3} ;
}

View File

@@ -1,14 +0,0 @@
concrete StructuralFao of Structural = CatFao **
open ParadigmsFao, ResFao in {
lin
i_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youSg_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
he_Pron = mkPron "hann" "hann" "honum" "hansara" Masc Sg P3 ;
she_Pron = mkPron "hon" "hana" "henni" "hennara" Fem Sg P3 ;
it_Pron = mkPron "tað" "tað" "tí" "tess" Neuter Sg P3 ;
we_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
they_Pron = mkPron "teir" "teir" "teimum" "teirra" Masc Pl P3 ;
youPol_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
}

View File

@@ -1,138 +0,0 @@
concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
lin UseV v = {Converb = v.Converb ++ v.particle;
Indicative = \\t,pol,g,p => v.Indicative ! t ! p ++ v.particle ++
negStr pol ;
Nonfinite = v.Nonfinite ++ v.particle;
Participle = \\t => v.Participle ! t ++ v.particle} ;
lin ComplVV vv vp = {Converb = vv.Converb ++ vv.particle ++ vp.Nonfinite;
Indicative = \\t,pol,g,p =>
vv.Indicative ! t ! p ++ vv.particle ++ negStr pol ++ vp.Nonfinite;
Nonfinite = vv.Nonfinite ++ vv.particle ++ vp.Nonfinite;
Participle = \\t => vv.Participle ! t ++ vv.particle ++ vp.Nonfinite} ;
lin ComplVS vs s = {Converb = vs.Converb ++ vs.particle ++ "at" ++ s.s;
Indicative = \\t,pol,g,p =>
vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ "at" ++ s.s;
Nonfinite = vs.Nonfinite ++ vs.particle ++ "at" ++ s.s;
Participle = \\t => vs.Participle ! t ++ vs.particle ++ "at" ++ s.s} ;
lin ComplVQ vq qs = {Converb = vq.Converb ++ vq.particle ++ qs.s;
Indicative = \\t,pol,g,p =>
vq.Indicative ! t ! p ++ vq.particle ++ negStr pol ++ qs.s;
Nonfinite = vq.Nonfinite ++ vq.particle ++ qs.s;
Participle = \\t => vq.Participle ! t ++ vq.particle ++ qs.s} ;
lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
Indicative = \\t,pol,g,p =>
va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! g ! persNumNumber p ! Nom;
Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom} ;
lin AdvVP vp adv = {Converb = vp.Converb ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ adv.s;
Nonfinite = vp.Nonfinite ++ adv.s;
Participle = \\t => vp.Participle ! t ++ adv.s} ;
lin ExtAdvVP vp adv = {Converb = vp.Converb ++ "," ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "," ++ adv.s;
Nonfinite = vp.Nonfinite ++ "," ++ adv.s;
Participle = \\t => vp.Participle ! t ++ "," ++ adv.s} ;
lin AdVVP adv vp = {Converb = adv.s ++ vp.Converb;
Indicative = \\t,pol,g,p => adv.s ++ vp.Indicative ! t ! pol ! g ! p;
Nonfinite = adv.s ++ vp.Nonfinite;
Participle = \\t => adv.s ++ vp.Participle ! t} ;
lin ComplSlash vps np = {Converb = vps.Converb ++ vps.particle
++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++
negStr pol ++
vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc} ;
lin UseComp comp = {
Converb = copula ! Pres ! PPl ++ comp.s ! Masc ! Sg ;
Indicative = \\t,pol,g,p => copula ! t ! p ++
negStr pol ++
comp.s ! g ! persNumNumber p ;
Nonfinite = "vera" ++ comp.s ! Masc ! Sg ;
Participle = \\t => "verið" ++ comp.s ! Masc ! Sg
} ;
lin CompAP ap = {s = \\g,n => ap.s ! g ! n ! Nom} ;
lin CompNP np = {s = \\_,_ => np.s ! Nom} ;
lin CompAdv adv = {s = \\_,_ => adv.s} ;
lin CompCN cn = {s = \\_,n => cn.s ! Indef ! n ! Nom} ;
lin UseCopula = {
Converb = "verið" ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ;
Nonfinite = "vera" ;
Participle = \\_ => "verið"
} ;
lin SlashV2a v = v ** {sc = []} ;
lin Slash2V3 v np = v ** {
Converb = v.Converb ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Indicative = \\t,p => v.Indicative ! t ! p ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Nonfinite = v.Nonfinite ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Participle = \\t => v.Participle ! t ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
particle = [] ;
c2 = v.c3 ;
sc = []
} ;
lin Slash3V3 v np = v ** {
c2 = v.c2 ;
sc = v.c3.s ++ np.s ! v.c3.c
} ;
lin SlashV2A v ap = v ** {
c2 = v.c2 ;
sc = ap.s ! Neuter ! Sg ! Nom
} ;
lin SlashV2S v s = v ** {
c2 = v.c2 ;
sc = "at" ++ s.s
} ;
lin SlashV2Q v qs = v ** {
c2 = v.c2 ;
sc = qs.s
} ;
lin SlashV2V v vp = v ** {
c2 = v.c2 ;
sc = vp.Nonfinite
} ;
lin SlashVV vv vps = vps ** {
Converb = vv.Converb ++ vv.particle ++ vps.Nonfinite ;
Indicative = \\t,p => vv.Indicative ! t ! p ++ vv.particle ++ vps.Nonfinite ;
Nonfinite = vv.Nonfinite ++ vv.particle ++ vps.Nonfinite ;
Participle = \\t => vv.Participle ! t ++ vv.particle ++ vps.Nonfinite ;
particle = []
} ;
lin SlashV2VNP v np vps = v ** {
c2 = v.c2 ;
sc = v.c3.s ++ np.s ! v.c3.c ++ vps.Nonfinite
} ;
lin ReflVP vps =
let np = mkNP "seg" Masc Sg P3 in {
Converb = vps.Converb ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc
} ;
lin PassV2 v = {
Converb = "verið" ++ v.Participle ! Past ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ v.Participle ! Past ;
Nonfinite = "vera" ++ v.Participle ! Past ;
Participle = \\_ => "verið" ++ v.Participle ! Past
} ;
lin AdvVPSlash vps adv = vps ** {sc = vps.sc ++ adv.s} ;
lin AdVVPSlash adv vps = vps ** {
Converb = adv.s ++ vps.Converb ;
Indicative = \\t,p => adv.s ++ vps.Indicative ! t ! p ;
Nonfinite = adv.s ++ vps.Nonfinite ;
Participle = \\t => adv.s ++ vps.Participle ! t
} ;
lin VPSlashPrep vp prep = {
Converb = vp.Converb ;
imperative = \\_ => vp.Nonfinite ;
Indicative = \\t,p => vp.Indicative ! t ! Pos ! Masc ! p ;
Nonfinite = vp.Nonfinite ;
Participle = vp.Participle ;
particle = [] ;
c2 = prep ;
sc = []
} ;
}

View File

@@ -66,7 +66,6 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
Predet = {s : Number => NPForm => Str} ; Predet = {s : Number => NPForm => Str} ;
Quant = {s1,sp : Number => Case => Str ; s2 : Harmony => Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ; Quant = {s1,sp : Number => Case => Str ; s2 : Harmony => Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
Card = {s : Number => Case => Str ; n : Number} ; Card = {s : Number => Case => Str ; n : Number} ;
ACard = {s : Number => Case => Str ; n : Number} ;
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ; Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
-- Numeral -- Numeral

View File

@@ -29,9 +29,6 @@ lin
is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ; is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ;
n_units_AP card cn a = mkAP (lin AdA (mkUtt (lin NP (mkNP <lin Card card : Card> (lin CN cn))))) (lin A a) ; n_units_AP card cn a = mkAP (lin AdA (mkUtt (lin NP (mkNP <lin Card card : Card> (lin CN cn))))) (lin A a) ;
n_units_of_NP card cn np =
mkNP (mkNP <lin Card card : Card> (lin CN cn))
(SyntaxFin.mkAdv part_Prep (lin NP np)) ;
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "pullo") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "pullollinen") (mkPrep partitive))) (lin NP np); bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "pullo") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "pullollinen") (mkPrep partitive))) (lin NP np);
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "kuppi") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "kupillinen") (mkPrep partitive))) (lin NP np) ; cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "kuppi") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "kupillinen") (mkPrep partitive))) (lin NP np) ;

View File

@@ -3,23 +3,15 @@
concrete ExtendFin of Extend = concrete ExtendFin of Extend =
CatFin ** ExtendFunctor - [ CatFin ** ExtendFunctor - [
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS, VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
MkVPI,BaseVPI,ConsVPI,ConjVPI,ComplVPIVV,
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
,ListComp, BaseComp, ConsComp, ConjComp
,ListImp, BaseImp, ConsImp, ConjImp
,ExistCN, ExistMassCN, ICompAP, ByVP ,ExistCN, ExistMassCN, ICompAP, ByVP
,CompoundN, CompoundAP, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash ,CompoundN, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
,PassVPSlash, PassAgentVPSlash ,PassVPSlash, PassAgentVPSlash
,CardCNCard ,CardCNCard
,UttAccNP ,UttAccNP
,AdjAsCN, AdjAsNP, GerundCN, GerundNP, GerundAdv ,AdjAsCN, AdjAsNP
,ApposNP ,ApposNP
,PresPartAP, PastPartAP, PastPartAgentAP ,PresPartAP, PastPartAP
,PositAdVAdj, ProgrVPSlash
,RNP,RNPList,ReflPron,ReflPoss,ReflVPSlash,ReflVPS2,ReflA2
,PredetRNP,AdvRNP,AdvRVP,AdvRAP,PossPronRNP
,Base_rr_RNP,Base_nr_RNP,Base_rn_RNP,Cons_rr_RNP,Cons_nr_RNP,ConjRNP
] ]
with with
(Grammar = GrammarFin) ** (Grammar = GrammarFin) **
@@ -105,24 +97,13 @@ oper
} ; } ;
BaseVPI x y = { BaseVPI = twoTable2 VVType Agr ;
s1 = x.s ; ConsVPI = consrTable2 VVType Agr comma ;
s2 = y.s ;
sc = x.sc
} ;
ConsVPI x xs = {
s1 = \\vt,agr => x.s ! vt ! agr ++ comma ;
s2 = \\vt,agr => xs.s1 ! vt ! agr ++ xs.s2 ! vt ! agr ;
sc = x.sc
} ;
ConjVPI conj xs = {
s = \\vt,agr => conj.s1 ++ xs.s1 ! vt ! agr ++ conj.s2 ++ xs.s2 ! vt ! agr ;
sc = xs.sc
} ;
MkVPI vp = mkVPI vp ; MkVPI vp = mkVPI vp ;
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
ComplVPIVV vv vpi = ComplVPIVV vv vpi =
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a) S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
(S.predV (vv ** {sc = case vpi.sc of { (S.predV (vv ** {sc = case vpi.sc of {
@@ -131,16 +112,6 @@ oper
) ; ) ;
lincat [Comp] = {s1,s2 : Agr => Str} ;
lin BaseComp = twoTable Agr ;
ConsComp = consrTable Agr comma ;
ConjComp conj xs = conjunctDistrTable Agr conj xs ;
lincat [Imp] = {s1,s2 : Polarity => Agr => Str} ;
lin BaseImp = twoTable2 Polarity Agr ;
ConsImp = consrTable2 Polarity Agr comma ;
ConjImp conj xs = conjunctDistrTable2 Polarity Agr conj xs ;
-------- two-place verb conjunction -------- two-place verb conjunction
lincat lincat
@@ -192,13 +163,6 @@ lin
h = n2.h h = n2.h
} ; } ;
CompoundAP n a =
let prefix = (S.snoun2nounBind n).s ! NCompound in {
s = \\_,af => prefix ++ BIND ++ sAdjFull2nforms Posit a ! af ;
p = [] ;
hasPrefix = True
} ;
---- copied from VerbFin.CompAP, should be shared ---- copied from VerbFin.CompAP, should be shared
ICompAP ap = { ICompAP ap = {
s = \\agr => s = \\agr =>
@@ -298,145 +262,6 @@ lin PastPartAP vps = {
p = vps.c2.s.p1 ; p = vps.c2.s.p1 ;
hasPrefix = False hasPrefix = False
} ; } ;
PastPartAgentAP vps np = {
s = \\_,nf => np.s ! NPCase Gen ++ preCompVP (lin VP vps) (AgentPart (AN nf)) ;
p = vps.c2.s.p1 ;
hasPrefix = False
} ;
lin GerundCN vp = {
s = \\nf => let infForm : InfForm =
case nf of {
NCase _ Part => Inf4Part ;
_ => Inf4Nom
}
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
postmod = \\_ => [] ;
h = Back
} ;
GerundNP vp =
MassNP {
s = \\nf => let infForm : InfForm =
case nf of {
NCase _ Part => Inf4Part ;
_ => Inf4Nom
}
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
postmod = \\_ => [] ;
h = Back
} ;
GerundAdv vp = {
s = infVP vp.s.sc Pos (agrP3 Sg) vp Inf3Adess
} ;
PositAdVAdj a = {s = a.s ! Posit ! sAAdv} ;
lin ProgrVPSlash vp =
let
inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ;
on = predV olla
in vp ** {
s = on.s ;
s2 = \\b,p,a => inf ++ vp.s2 ! b ! p ! a ;
} ;
lincat
RNP = {s : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
RNPList = {s1,s2 : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
lin ReflPron = {
s = \\agr,npf => (reflPron agr).s ! npf ;
isPron = True ;
isNeg = False
} ;
ReflPoss num cn = {
s = \\agr, npf =>
let
quant : Quant = lin Quant { -- possessive pronoun with suffix only
s2 : Harmony => Str = \\harm => possSuffixGen harm agr ;
s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True
}
in (DetCN (DetQuant quant num) cn).s ! npf ;
isPron = False ;
isNeg = False
} ;
ReflVPS2 vps rnp = {
s = \\agr => vps.s ! agr ++ appCompl True vps.p vps.c2 (rnp2np agr rnp) ;
sc = vps.sc ;
h = vps.h
} ;
PredetRNP pred rnp = {
s = \\agr,npf => pred.s ! complNumAgr agr ! npf ++ rnp.s ! agr ! npf ;
isPron = False ;
isNeg = rnp.isNeg
} ;
AdvRNP np prep rnp = {
s = \\agr,npf => np.s ! npf ++ appCompl True Pos prep (rnp2np agr rnp) ;
isPron = False ;
isNeg = orB np.isNeg rnp.isNeg
} ;
AdvRVP vp prep rnp =
insertObj (\\_,b,agr => appCompl True b prep (rnp2np agr rnp)) vp ;
AdvRAP ap prep rnp = ap ** {
s = \\isMod,af => ap.s ! isMod ! af ++ appCompl True Pos prep (rnp2np (agrP3 Sg) rnp) ;
hasPrefix = False
} ;
PossPronRNP p num cn rnp =
let np = DetCN (DetQuant (PossPron p) num) cn in
np ** {
s = \\npf => np.s ! npf ++ rnp.s ! p.a ! NPCase Gen ;
isNeg = orB np.isNeg rnp.isNeg
} ;
Base_rr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Base_nr_RNP x y = {
s1 = \\_,npf => x.s ! npf ;
s2 = y.s ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Base_rn_RNP x y = {
s1 = x.s ;
s2 = \\_,npf => y.s ! npf ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Cons_rr_RNP x xs = {
s1 = \\agr,npf => x.s ! agr ! npf ++ comma ;
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
isPron = False ;
isNeg = orB x.isNeg xs.isNeg
} ;
Cons_nr_RNP x xs = {
s1 = \\_,npf => x.s ! npf ++ comma ;
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
isPron = False ;
isNeg = orB x.isNeg xs.isNeg
} ;
ConjRNP conj xs = {
s = \\agr,npf => conj.s1 ++ xs.s1 ! agr ! npf ++ conj.s2 ++ xs.s2 ! agr ! npf ;
isPron = xs.isPron ;
isNeg = xs.isNeg
} ;
oper oper
-- ruohoa syövä, Ranskassa valmistettu -- ruohoa syövä, Ranskassa valmistettu
@@ -446,11 +271,4 @@ oper
vp.s.s ! vform ++ vp.s.s ! vform ++
vp.ext ; vp.ext ;
rnp2np agr rnp = {
s = \\npf => rnp.s ! agr ! npf ;
a = agr ;
isPron = rnp.isPron ;
isNeg = rnp.isNeg
} ;
} }

View File

@@ -36,8 +36,4 @@ lin InLN ln =
let c = case ln.extCase of {True => Adess ; False => Iness} let c = case ln.extCase of {True => Adess ; False => Iness}
in {s = ln.s ! c} ; in {s = ln.s ! c} ;
lin AdjLN ap ln = ln ** {
s = \\c => ap.s ! True ! NCase ln.n c ++ ln.s ! c
} ;
} }

View File

@@ -294,11 +294,6 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
isPron = False ; isNeg = det.isNeg isPron = False ; isNeg = det.isNeg
} ; } ;
AdjDAP dap ap = dap ** {
s1 = \\c => dap.s1 ! c ++ ap.s ! True ! NCase dap.n c ;
sp = \\c => dap.sp ! c ++ ap.s ! False ! NCase dap.n c
} ;
DetDAP d = d ; DetDAP d = d ;
QuantityNP n m = { QuantityNP n m = {

View File

@@ -75,24 +75,10 @@ lin
pot3as4 n = n ; pot3as4 n = n ;
pot3decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ BIND ++ tuhattaN.s ! Pl ! c} ; pot3decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ BIND ++ tuhattaN.s ! Pl ! c} ;
pot41 = {n = Pl ; s = miljoonaN.s} ;
pot4 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c} ;
pot4plus d e = {
n = Pl ;
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c ++
e.s ! c
} ;
pot4as5 n = n ; pot4as5 n = n ;
pot4decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljoonaa"} ; -- KA: case inflection missing pot4decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljoonaa"} ; -- KA: case inflection missing
pot51 = {n = Pl ; s = miljardiN.s} ; pot51 = {n = Pl ; s = \\c => "miljardi"} ; -- KA: case inflection missing
pot5 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c} ;
pot5plus d e = {
n = Pl ;
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c ++
e.s ! c
} ;
pot5decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljardia"} ; -- KA: case inflection missing
oper oper
-- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> { -- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> {
@@ -171,32 +157,6 @@ oper
} }
} ; } ;
miljoonaN = co
(snoun2nounBind (mkN "miljoona"))
(ordN "s" "miljoonas") ;
miljoonaaN = {s = table {
Sg => miljoonaN.s ;
Pl => table {
NCard (NCase Sg Nom) => "miljoonaa" ;
k => miljoonaN.s ! k
}
}
} ;
miljardiN = co
(snoun2nounBind (mkN "miljardi"))
(ordN "s" "miljardis") ;
miljardiaN = {s = table {
Sg => miljardiN.s ;
Pl => table {
NCard (NCase Sg Nom) => "miljardia" ;
k => miljardiN.s ! k
}
}
} ;
lincat lincat
Dig = TDigit ; Dig = TDigit ;

View File

@@ -18,10 +18,6 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
verb.fin ++ verb.inf ++ compl ; verb.fin ++ verb.inf ++ compl ;
} ; } ;
AdvImp adv imp = {
s = \\pol,agr => adv.s ++ imp.s ! pol ! agr
} ;
-- The object case is formed at the use site of $c2$, in $Relative$ and $Question$. -- The object case is formed at the use site of $c2$, in $Relative$ and $Question$.
SlashVP np vp = { SlashVP np vp = {

View File

@@ -83,7 +83,6 @@ concrete CatGer of Cat =
Num = {s,sp : AForm => Str ; n : Number ; isNum : Bool} ; -- Num,Card.s AForm HL 12/23 Num = {s,sp : AForm => Str ; n : Number ; isNum : Bool} ; -- Num,Card.s AForm HL 12/23
Card = {s : AForm => Str ; n : Number} ; -- inflection mainly for: einer,eine,eines Card = {s : AForm => Str ; n : Number} ; -- inflection mainly for: einer,eine,eines
ACard = {s : Str ; n : Number} ;
Ord = {s : AForm => Str} ; Ord = {s : AForm => Str} ;
-- Numeral -- Numeral

View File

@@ -46,10 +46,6 @@ lin
is_wrong_VP = mkVP have_V2 (mkNP (P.mkN "Unrecht")) ; is_wrong_VP = mkVP have_V2 (mkNP (P.mkN "Unrecht")) ;
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ; n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ;
n_units_of_NP card cn np =
G.AdvNP
(mkNP <lin Card card : Card> (lin CN cn))
(SyntaxGer.mkAdv P.von_Prep (lin NP np)) ;
n_unit_CN card unit cn = mkCN (invarA (mkUtt (mkNP <lin Card card : Card> (lin CN unit))).s) cn ; n_unit_CN card unit cn = mkCN (invarA (mkUtt (mkNP <lin Card card : Card> (lin CN unit))).s) cn ;
bottle_of_CN np = N.ApposCN (mkCN (P.mkN "Flasche")) np ; bottle_of_CN np = N.ApposCN (mkCN (P.mkN "Flasche")) np ;

View File

@@ -6,17 +6,15 @@ concrete ExtendGer of Extend =
GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP, GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP,
VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
ListComp, BaseComp, ConsComp, ConjComp,
ListImp, BaseImp, ConsImp, ConjImp,
ICompAP, IAdvAdv, CompIQuant, PrepCN, ICompAP, IAdvAdv, CompIQuant, PrepCN,
PresPartAP, PastPartAP, PastPartAgentAP, PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash, PassVPSlash, PassAgentVPSlash,
ProgrVPSlash, AdvIsNP, AdvRVP, AdvIsNP,
RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP, RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP,
ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP, ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP,
CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem, CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem,
CardCNCard, CompoundAP, GerundCN, GerundNP, GerundAdv, ByVP, ApposNP, CardCNCard,
InOrderToVP, PositAdVAdj InOrderToVP
] ]
with with
(Grammar = GrammarGer) ** (Grammar = GrammarGer) **
@@ -190,30 +188,8 @@ concrete ExtendGer of Extend =
-- Conjunction of copula complements -- Conjunction of copula complements
lincat
[Comp] = {s1,s2 : Agr => Str} ;
lin
BaseComp x y =
twoTable Agr
{s = \\a => x.s ! a ++ x.ext ! numberAgr a}
{s = \\a => y.s ! a ++ y.ext ! numberAgr a} ;
ConsComp x xs =
consrTable Agr comma
{s = \\a => x.s ! a ++ x.ext ! numberAgr a}
xs ;
ConjComp conj xs = (conjunctDistrTable Agr conj xs) ** {ext = \\_ => []} ;
-- Conjunction of imperatives -- Conjunction of imperatives
lincat
ListImp = {s1,s2 : Polarity => ImpForm => Str} ;
lin
BaseImp = twoTable2 Polarity ImpForm ;
ConsImp = consrTable2 Polarity ImpForm comma ;
ConjImp conj xs = conjunctDistrTable2 Polarity ImpForm conj xs ;
ICompAP ap = { ICompAP ap = {
s = \\_ => "wie" ++ ap.s ! APred ; s = \\_ => "wie" ++ ap.s ! APred ;
ext = ap.c.p1 ++ ap.c.p2 ++ ap.ext ext = ap.c.p1 ++ ap.c.p2 ++ ap.ext
@@ -233,16 +209,6 @@ concrete ExtendGer of Extend =
-- participle constructions -- participle constructions
PresPartAP vp =
let a = agrP3 Sg in {
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj
++ vp.inf.inpl.p2 ++ (vp.inf.extr ! a) ++ vp.s.s ! VPresPart af ;
s2 = \\_ => [] ;
isPre = True ;
c = <[],[]> ;
ext = vp.ext
} ;
PastPartAP vp = PastPartAP vp =
let a = agrP3 Sg in { let a = agrP3 Sg in {
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj
@@ -280,23 +246,8 @@ concrete ExtendGer of Extend =
-- publishing of the document -- publishing of the document
GerundCN vp = {
s = \\_,_,_ => useInfVP False vp ;
rc = \\_ => [] ;
ext, adv = [] ;
g = Neutr
} ;
GerundNP vp = MassNP (GerundCN vp) ;
GerundAdv vp = {s = useInfVP False vp} ;
ByVP vp = {s = "durch" ++ useInfVP False vp} ;
-- counterpart to ProgrVP, for VPSlash -- counterpart to ProgrVP, for VPSlash
ProgrVPSlash vp = vp ;
-- construct VPSlash from A2 and N2 -- construct VPSlash from A2 and N2
-- existential for mathematics -- existential for mathematics
@@ -386,9 +337,6 @@ concrete ExtendGer of Extend =
adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
AdvRVP vp prep rnp =
insertAdv (appPrep prep (rnp.s ! agrP3 Sg) ++ rnp.ext ++ rnp.rc) vp ;
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
let -- as we have no reflexive AP, let -- as we have no reflexive AP,
compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
@@ -487,23 +435,9 @@ concrete ExtendGer of Extend =
n = Pl n = Pl
} ; } ;
CompoundAP n a = {
s = \\af => n.co ++ Predef.BIND ++ a.s ! Posit ! af ;
s2 = \\_ => [] ;
isPre = True ;
c = <[],[]> ;
ext = []
} ;
ApposNP np app = np ** {
s = \\b,c => np.s ! b ! c ++ embedInCommas (app.s ! False ! c ++ bigNP app) ;
w = WHeavy
} ;
InOrderToVP vp = {s = "um" ++ useInfVP False vp} ; InOrderToVP vp = {s = "um" ++ useInfVP False vp} ;
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
oper oper
insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022 insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
\rnp,vp -> insertObjRNP rnp vp.c2 vp ; \rnp,vp -> insertObjRNP rnp vp.c2 vp ;

View File

@@ -68,8 +68,6 @@ oper
mkPN = overload { mkPN = overload {
mkPN : (anna : Str) -> PN mkPN : (anna : Str) -> PN
= \p -> lin PN (regName p) ; = \p -> lin PN (regName p) ;
mkPN : (anna : Str) -> Gender -> PN
= \p, g -> lin PN (regName p ** {g = g}) ;
mkPN : (nm,gm,am,vm,pn,pa : Str) -> Gender -> PN mkPN : (nm,gm,am,vm,pn,pa : Str) -> Gender -> PN
= \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ; = \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ;
} ; } ;

View File

@@ -7,7 +7,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ; -- : A -> AP ;
PositA a = emptyAP ** { PositA a = emptyAP ** {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Posit; g = NonHuman}) in let adj : Noun = (a ** {s = a.s ! Posit}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
} ; } ;
@@ -35,7 +35,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ; -- warmer -- : A -> AP ; -- warmer
UseComparA a = emptyAP ** { UseComparA a = emptyAP ** {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Compar; g = NonHuman}) in let adj : Noun = (a ** {s = a.s ! Compar}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
} ; } ;
@@ -54,9 +54,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- phrases, although the semantics is only clear for some adjectives. -- phrases, although the semantics is only clear for some adjectives.
-- : AP -> SC -> AP ; -- good that she is here -- : AP -> SC -> AP ; -- good that she is here
SentAP ap sc = ap ** { -- SentAP ap sc = ap ** {} ;
compl = \\n => ap.compl ! n ++ sc.s ;
} ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very". -- An adjectival phrase can be modified by an *adadjective*, such as "very".

View File

@@ -3,11 +3,7 @@ concrete AdverbHun of Adverb = CatHun ** open ResHun, ParamHun, ParadigmsHun, Pr
lin lin
-- : A -> Adv ; -- : A -> Adv ;
PositAdvAdj adj = { --PositAdvAdj adj = { } ;
s = let a : Str = adj.s ! Posit ! SgNom
in a ++ BIND ++ "an" ;
isPre = False ;
} ;
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John -- : CAdv -> A -> NP -> Adv ; -- more warmly than John
-- ComparAdvAdj cadv a np = { } ; -- ComparAdvAdj cadv a np = { } ;
@@ -23,18 +19,15 @@ lin
-- Adverbs can be modified by 'adadjectives', just like adjectives. -- Adverbs can be modified by 'adadjectives', just like adjectives.
--AdAdv : AdA -> Adv -> Adv ; -- very quickly --AdAdv : AdA -> Adv -> Adv ; -- very quickly
AdAdv ada adv = adv ** {s = ada.s ++ adv.s} ; -- AdAdv ada adv = adv **
-- Like adverbs, adadjectives can be produced by adjectives. -- Like adverbs, adadjectives can be produced by adjectives.
-- : A -> AdA ; -- extremely -- : A -> AdA ; -- extremely
PositAdAAdj a = {s = a.s ! Posit ! SgNom} ; -- PositAdAAdj a = { } ;
-- Subordinate clauses can function as adverbs. -- Subordinate clauses can function as adverbs.
-- : Subj -> S -> Adv ; -- : Subj -> S -> Adv ;
SubjS subj s = { -- SubjS subj s =
s = subj.s ++ s.s ;
isPre = False ;
} ;
-- Comparison adverbs also work as numeral adverbs. -- Comparison adverbs also work as numeral adverbs.

View File

@@ -2,6 +2,5 @@
concrete AllHun of AllHunAbs = concrete AllHun of AllHunAbs =
LangHun, LangHun,
IrregHun,
ExtendHun ExtendHun
** {} ; ** {} ;

View File

@@ -2,6 +2,5 @@
abstract AllHunAbs = abstract AllHunAbs =
Lang, Lang,
IrregHunAbs,
Extend Extend
** {} ; ** {} ;

View File

@@ -76,7 +76,8 @@ concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {
-- Constructed in NumeralHun. -- Constructed in NumeralHun.
Card, ACard, Numeral = ResHun.Numeral ; Card = ResHun.Numeral ;
Numeral = ResHun.Numeral ;
Digits = {s : CardOrd => Str} ; Digits = {s : CardOrd => Str} ;
Decimal = {s : CardOrd => Str; hasDot : Bool} ; Decimal = {s : CardOrd => Str; hasDot : Bool} ;
@@ -125,8 +126,5 @@ linref
NP = linNP ; NP = linNP ;
V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ; V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ;
V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ; V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ;
VP = \vp -> vp.obj ++ vp.adv ++ vp.s ! VInf ;
lindef
VP = \s -> {s = \\_=>s; obj,adv=[]; sc=SCNom; c2=Acc} ;
} }

View File

@@ -52,37 +52,22 @@ lin
in np ** {s = linTable} ; in np ** {s = linTable} ;
-- Relative sentences -- Relative sentences
lincat lincat
[RS] = {s1,s2 : Gender => Number => Case => Str} ; [RS] = {s1,s2 : Number => Case => Str} ;
lin lin
BaseRS = twoTable3 Gender Number Case ; BaseRS = twoTable2 Number Case ;
ConsRS = consrTable3 Gender Number Case comma ; ConsRS = consrTable2 Number Case comma ;
ConjRS = conjunctDistrTable3 Gender Number Case ; ConjRS = conjunctDistrTable2 Number Case ;
lincat
[CN] = {
s1,s2 : NumCaseStem => Str ;
h : Harm ;
g : Gender
} ;
lin
BaseCN x y = twoTable NumCaseStem x y ** {
h = y.h ;
g = y.g
} ;
ConsCN x xs = consrTable NumCaseStem comma x xs ** {
h = xs.h ;
g = xs.g
} ;
ConjCN co cs = conjunctDistrTable NumCaseStem co cs ** {
compl = \\_,_ => [] ;
postmod = [] ;
h = cs.h ;
g = cs.g
} ;
{- {-
lincat
[CN] = { } ;
lin
BaseCN = {} ;
ConsCN = {} ;
ConjCN co cs = conjunctDistrTable … co cs ** cs ;
lincat lincat
[DAP] = [DAP] =

View File

@@ -1,178 +1,11 @@
concrete ConstructionHun of Construction = CatHun ** open concrete ConstructionHun of Construction = CatHun ** open ParadigmsHun in {
ParadigmsHun, ResHun, NounHun, VerbHun, AdjectiveHun, Prelude in {
lincat lincat
Timeunit = N ; Timeunit = N ;
Hour = {s : Str} ;
Weekday = N ; Weekday = N ;
Monthday = NP ; Monthday = NP ;
Month = N ; Month = N ;
Year = NP ; Year = NP ;
Language = N ;
lin
hungry_VP = UseComp (CompAP (PositA (mkA "éhes"))) ;
thirsty_VP = UseComp (CompAP (PositA (mkA "szomjas"))) ;
tired_VP = UseComp (CompAP (PositA (mkA "fáradt"))) ;
scared_VP = UseComp (CompAP (PositA (mkA "ijedt"))) ;
ill_VP = UseComp (CompAP (PositA (mkA "beteg"))) ;
ready_VP = UseComp (CompAP (PositA (mkA "kész"))) ;
has_age_VP card = useV (copula ** {
s = \\vf => case vf of {
VPres P3 _ => [] ;
_ => copula.s ! vf
}
}) ** {
adv = card.s ! Indep ++ "éves"
} ;
n_units_AP card cn a =
let ap : AP = PositA a in ap ** {
s = \\n,c => card.s ! Attrib ++ cn.s ! SgNom ++ ap.s ! n ! c
} ;
n_units_of_NP card cn np = lin NP (indeclNP
(card.s ! Attrib ++ cn.s ! SgNom ++ np.s ! NoPoss ! Nom ++ np.postmod)) ;
n_unit_CN card unit cn = cn ** {
s = \\ncs => card.s ! Attrib ++ unit.s ! SgNom ++ cn.s ! ncs
} ;
bottle_of_CN np = (UseN (mkN "palack")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
cup_of_CN np = (UseN (mkN "csésze")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
glass_of_CN np = (UseN (mkN "pohár")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
timeunitAdv n time = mkAdv (n.s ! Attrib ++ time.s ! SgNom) ;
timeunitRange l u time =
mkAdv (l.s ! Attrib ++ BIND ++ "-" ++ BIND ++ u.s ! Attrib ++ time.s ! SgNom) ;
oneHour = {s = "1"} ;
twoHour = {s = "2"} ;
threeHour = {s = "3"} ;
fourHour = {s = "4"} ;
fiveHour = {s = "5"} ;
sixHour = {s = "6"} ;
sevenHour = {s = "7"} ;
eightHour = {s = "8"} ;
nineHour = {s = "9"} ;
tenHour = {s = "10"} ;
elevenHour = {s = "11"} ;
twelveHour = {s = "12"} ;
thirteenHour = {s = "13"} ;
fourteenHour = {s = "14"} ;
fifteenHour = {s = "15"} ;
sixteenHour = {s = "16"} ;
seventeenHour = {s = "17"} ;
eighteenHour = {s = "18"} ;
nineteenHour = {s = "19"} ;
twentyHour = {s = "20"} ;
twentyOneHour = {s = "21"} ;
twentyTwoHour = {s = "22"} ;
twentyThreeHour = {s = "23"} ;
twentyFourHour = {s = "24"} ;
timeHour h = mkAdv (h.s ++ "órakor") ;
timeHourMinute h m = mkAdv (h.s ++ BIND ++ ":" ++ BIND ++ m.s ! Attrib) ;
weekdayPunctualAdv w = mkAdv (caseFromStem glue w Sup Sg) ;
weekdayHabitualAdv w = mkAdv (caseFromStem glue w Sup Sg) ;
weekdayNextAdv w = mkAdv ("jövő" ++ caseFromStem glue w Sup Sg) ;
weekdayLastAdv w = mkAdv ("múlt" ++ caseFromStem glue w Sup Sg) ;
monthAdv m = mkAdv (caseFromStem glue m Ine Sg) ;
yearAdv y = mkAdv (y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
dayMonthAdv d m =
mkAdv (d.s ! NoPoss ! Nom ++ BIND ++ "." ++ m.s ! SgNom) ;
monthYearAdv m y =
mkAdv (m.s ! SgNom ++ y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
dayMonthYearAdv d m y =
mkAdv (d.s ! NoPoss ! Nom ++ BIND ++ "." ++ m.s ! SgNom ++ y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
intYear i = lin NP (indeclNP i.s) ;
intMonthday i = lin NP (indeclNP i.s) ;
InLanguage l = mkAdv (l.s ! SgNom ++ "nyelven") ;
weekdayN w = w ;
monthN m = m ;
weekdayPN w = lin PN (MassNP (UseN w)) ;
monthPN m = lin PN (MassNP (UseN m)) ;
languageCN l = UseN l ;
languageNP l = lin NP (MassNP (UseN l)) ;
second_Timeunit = mkN "másodperc" ;
minute_Timeunit = mkN "perc" ;
hour_Timeunit = mkN "óra" ;
day_Timeunit = mkN "nap" ;
week_Timeunit = mkN "hét" ;
month_Timeunit = mkN "hónap" ;
year_Timeunit = mkN "év" ;
monday_Weekday = mkN "hétfő" ;
tuesday_Weekday = mkN "kedd" ;
wednesday_Weekday = mkN "szerda" ;
thursday_Weekday = mkN "csütörtök" ;
friday_Weekday = mkN "péntek" ;
saturday_Weekday = mkN "szombat" ;
sunday_Weekday = mkN "vasárnap" ;
january_Month = mkN "január" ;
february_Month = mkN "február" ;
march_Month = mkN "március" ;
april_Month = mkN "április" ;
may_Month = mkN "május" ;
june_Month = mkN "június" ;
july_Month = mkN "július" ;
august_Month = mkN "augusztus" ;
september_Month = mkN "szeptember" ;
october_Month = mkN "október" ;
november_Month = mkN "november" ;
december_Month = mkN "december" ;
afrikaans_Language = mkN "afrikaans" ;
amharic_Language = mkN "amhara" ;
arabic_Language = mkN "arab" ;
bulgarian_Language = mkN "bolgár" ;
catalan_Language = mkN "katalán" ;
chinese_Language = mkN "kínai" ;
danish_Language = mkN "dán" ;
dutch_Language = mkN "holland" ;
english_Language = mkN "angol" ;
estonian_Language = mkN "észt" ;
finnish_Language = mkN "finn" ;
french_Language = mkN "francia" ;
german_Language = mkN "német" ;
greek_Language = mkN "görög" ;
hebrew_Language = mkN "héber" ;
hindi_Language = mkN "hindi" ;
japanese_Language = mkN "japán" ;
italian_Language = mkN "olasz" ;
latin_Language = mkN "latin" ;
latvian_Language = mkN "lett" ;
maltese_Language = mkN "máltai" ;
nepali_Language = mkN "nepáli" ;
norwegian_Language = mkN "norvég" ;
persian_Language = mkN "perzsa" ;
polish_Language = mkN "lengyel" ;
punjabi_Language = mkN "pandzsábi" ;
romanian_Language = mkN "román" ;
russian_Language = mkN "orosz" ;
sindhi_Language = mkN "szindhi" ;
spanish_Language = mkN "spanyol" ;
swahili_Language = mkN "szuahéli" ;
swedish_Language = mkN "svéd" ;
thai_Language = mkN "thai" ;
turkish_Language = mkN "török" ;
urdu_Language = mkN "urdu" ;
{- {-
lin lin

View File

@@ -1,206 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete DocumentationHun of Documentation = CatHun ** open
ResHun, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN = \noun -> nounInflection "n" "Főnév" noun ;
InflectionN2 = \noun -> nounInflection "n2" "Kétargumentumú főnév" noun ;
InflectionN3 = \noun -> nounInflection "n3" "Háromargumentumú főnév" noun ;
InflectionPN = \pn -> nameInflection "pn" "Tulajdonnév" pn ;
InflectionLN = \ln -> nameInflection "ln" "Helynév" ln ;
InflectionGN = \gn -> nameInflection "gn" "Keresztnév" gn ;
InflectionSN = \sn -> nameInflection "sn" "Vezetéknév" sn ;
InflectionA = \adj -> adjectiveInflection "a" "Melléknév" adj ;
InflectionA2 = \adj -> adjectiveInflection "a2" "Vonzatos melléknév" adj ;
InflectionV = \v -> verbInflection "v" "Ige" v ;
InflectionVS = \v -> verbInflection "vs" "Mondatvonzatú ige" v ;
InflectionVQ = \v -> verbInflection "vq" "Kérdő mondatvonzatú ige" v ;
InflectionVA = \v -> verbInflection "va" "Melléknévi vonzatú ige" v ;
InflectionV2 = \v -> verb2Inflection "v2" "Tárgyas ige" v ;
InflectionVV = \v -> verb2Inflection "vv" "Igenévi vonzatú ige" v ;
InflectionV3 = \v -> verb2Inflection "v3" "Háromargumentumú ige" v ;
InflectionV2V = \v -> verb2Inflection "v2v" "Tárgyas és igenévi vonzatú ige" v ;
InflectionV2S = \v -> verb2Inflection "v2s" "Tárgyas és mondatvonzatú ige" v ;
InflectionV2Q = \v -> verb2Inflection "v2q" "Tárgyas és kérdő mondatvonzatú ige" v ;
InflectionV2A = \v -> verb2Inflection "v2a" "Tárgyas és melléknévi vonzatú ige" v ;
InflectionAdv = \adv -> adverbInflection "adv" "Határozószó" adv.s ;
InflectionAdV = \adv -> adverbInflection "adv" "Igei határozószó" adv.s ;
InflectionAdA = \adv -> adverbInflection "adv" "Melléknévi határozószó" adv.s ;
InflectionAdN = \adv -> adverbInflection "adv" "Főnévi határozószó" adv.s ;
InflectionPrep = \prep -> {
t = "prep" ;
s1 = heading1 "Névutó" ;
s2 = frameTable (
tr (th "előtag" ++ td prep.pr) ++
tr (th "eset" ++ td (caseName prep.c)) ++
tr (th "névutó" ++ td prep.s))
} ;
lin
NoDefinition t = {s = t.s} ;
MkDefinition t d = {s = "<p><b>Meghatározás:</b>" ++ t.s ++ d.s ++ "</p>"} ;
MkDefinitionEx t d e =
{s = "<p><b>Meghatározás:</b>" ++ t.s ++ d.s ++
"</p><p><b>Példa:</b>" ++ e.s ++ "</p>"} ;
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ paragraph e.s} ;
MkTag i = {s = i.t} ;
oper
nounInflection : Str -> Str -> Noun -> {t : Str; s1,s2 : Str} =
\tag,title,noun -> {
t = tag ;
s1 = heading1 title ;
s2 = caseTable2 (\n,c -> nounCase noun n c) ++
heading2 "Birtokos alakok" ++
possTable noun
} ;
nameInflection : Str -> Str -> NounPhrase -> {t : Str; s1,s2 : Str} =
\tag,title,np -> {
t = tag ;
s1 = heading1 title ;
s2 = frameTable (
tr (th "alanyeset" ++ td (np.s ! NoPoss ! Nom)) ++
tr (th "tárgyeset" ++ td (np.s ! NoPoss ! Acc)) ++
tr (th "részes eset" ++ td (np.s ! NoPoss ! Dat)) ++
tr (th "inessivus" ++ td (np.s ! NoPoss ! Ine)) ++
tr (th "elativus" ++ td (np.s ! NoPoss ! Ela)) ++
tr (th "allativus" ++ td (np.s ! NoPoss ! All)) ++
tr (th "adessivus" ++ td (np.s ! NoPoss ! Ade)) ++
tr (th "ablativus" ++ td (np.s ! NoPoss ! Abl)) ++
tr (th "superessivus" ++ td (np.s ! NoPoss ! Sup)) ++
tr (th "instrumentalis" ++ td (np.s ! NoPoss ! Ins)) ++
tr (th "translativus" ++ td (np.s ! NoPoss ! Tra)))
} ;
adjectiveInflection : Str -> Str -> Adjective -> {t : Str; s1,s2 : Str} =
\tag,title,adj -> {
t = tag ;
s1 = heading1 title ;
s2 = heading2 "Alapfok" ++
caseTable2 (\n,c -> adjCase adj Posit n c) ++
heading2 "Középfok" ++
caseTable2 (\n,c -> adjCase adj Compar n c) ++
heading2 "Felsőfok" ++
caseTable2 (\n,c -> adjCase adj Superl n c)
} ;
adverbInflection : Str -> Str -> Str -> {t : Str; s1,s2 : Str} =
\tag,title,s -> {
t = tag ;
s1 = heading1 title ;
s2 = paragraph s
} ;
verbInflection : Str -> Str -> Verb -> {t : Str; s1,s2 : Str} =
\tag,title,v -> {
t = tag ;
s1 = heading1 title ;
s2 = verbTable (\vf -> v.s ! vf)
} ;
verb2Inflection : Str -> Str -> Verb2 -> {t : Str; s1,s2 : Str} =
\tag,title,v -> {
t = tag ;
s1 = heading1 title ;
s2 = paragraph ("vonzat esete: " ++ caseName v.c2) ++
heading2 "Határozatlan ragozás" ++
verbTable (\vf -> v.s ! Indef ! vf) ++
heading2 "Határozott ragozás" ++
verbTable (\vf -> v.s ! Def ! vf)
} ;
caseTable2 : (Number -> Case -> Str) -> Str =
\forms -> frameTable (
tr (th "" ++ th "egyes szám" ++ th "többes szám") ++
tr (th "alanyeset" ++ td (forms Sg Nom) ++ td (forms Pl Nom)) ++
tr (th "tárgyeset" ++ td (forms Sg Acc) ++ td (forms Pl Acc)) ++
tr (th "részes eset" ++ td (forms Sg Dat) ++ td (forms Pl Dat)) ++
tr (th "inessivus" ++ td (forms Sg Ine) ++ td (forms Pl Ine)) ++
tr (th "elativus" ++ td (forms Sg Ela) ++ td (forms Pl Ela)) ++
tr (th "allativus" ++ td (forms Sg All) ++ td (forms Pl All)) ++
tr (th "adessivus" ++ td (forms Sg Ade) ++ td (forms Pl Ade)) ++
tr (th "ablativus" ++ td (forms Sg Abl) ++ td (forms Pl Abl)) ++
tr (th "superessivus" ++ td (forms Sg Sup) ++ td (forms Pl Sup)) ++
tr (th "instrumentalis" ++ td (forms Sg Ins) ++ td (forms Pl Ins)) ++
tr (th "translativus" ++ td (forms Sg Tra) ++ td (forms Pl Tra)))
;
possTable : Noun -> Str =
\noun -> frameTable (
tr (th "" ++ th "birtok egyes szám" ++ th "birtok többes szám") ++
tr (th "1. személy egyes szám" ++ td (possForm noun Sg P1 Sg) ++ td (possForm noun Pl P1 Sg)) ++
tr (th "2. személy egyes szám" ++ td (possForm noun Sg P2 Sg) ++ td (possForm noun Pl P2 Sg)) ++
tr (th "3. személy egyes szám" ++ td (possForm noun Sg P3 Sg) ++ td (possForm noun Pl P3 Sg)) ++
tr (th "1. személy többes szám" ++ td (possForm noun Sg P1 Pl) ++ td (possForm noun Pl P1 Pl)) ++
tr (th "2. személy többes szám" ++ td (possForm noun Sg P2 Pl) ++ td (possForm noun Pl P2 Pl)) ++
tr (th "3. személy többes szám" ++ td (possForm noun Sg P3 Pl) ++ td (possForm noun Pl P3 Pl)))
;
verbTable : (VForm -> Str) -> Str =
\forms ->
heading2 "Főnévi igenév" ++
paragraph (forms VInf) ++
heading2 "Jelen idő" ++
personNumberTable (\p,n -> forms (VPres p n)) ++
heading2 "Múlt idő" ++
personNumberTable (\p,n -> forms (VPast p n)) ;
personNumberTable : (Person -> Number -> Str) -> Str =
\forms -> frameTable (
tr (th "" ++ th "egyes szám" ++ th "többes szám") ++
tr (th "1. személy" ++ td (forms P1 Sg) ++ td (forms P1 Pl)) ++
tr (th "2. személy" ++ td (forms P2 Sg) ++ td (forms P2 Pl)) ++
tr (th "3. személy" ++ td (forms P3 Sg) ++ td (forms P3 Pl)))
;
nounCase : Noun -> Number -> Case -> Str =
\noun,n,c -> caseFromStem glue noun c n ;
adjCase : Adjective -> Degree -> Number -> Case -> Str =
\adj,d,n,c -> caseFromStem glue {s = adj.s ! d ; h = adj.h ; g = NonHuman} c n ;
possForm : Noun -> Number -> Person -> Number -> Str =
\noun,possd,person,possr ->
let det : Determiner = {
s = \\_ => [] ;
sp = \\_ => [] ;
n = possd ;
dt = DetPoss (agr2pstem <person,possr>) ;
poss = possForms ! <person,possr> ;
caseagr = False
} ;
cn : CNoun = noun ** {compl = \\_,_ => [] ; postmod = []} ;
in caseFromPossStem cn det Nom ;
caseName : Case -> Str = \c ->
case c of {
Nom => "alanyeset" ;
Acc => "tárgyeset" ;
Dat => "részes eset" ;
Ine => "inessivus" ;
Ela => "elativus" ;
All => "allativus" ;
Ade => "adessivus" ;
Abl => "ablativus" ;
Sup => "superessivus" ;
Ins => "instrumentalis" ;
Tra => "translativus" ;
_ => case2str c
} ;
}

View File

@@ -3,362 +3,9 @@
concrete ExtendHun of Extend = CatHun concrete ExtendHun of Extend = CatHun
-- ** ExtendFunctor - [] -- ** ExtendFunctor - []
-- with (Grammar=GrammarHun) -- with (Grammar=GrammarHun)
** open Prelude, ResHun, NounHun, VerbHun, AdjectiveHun in { ** open Prelude, ResHun, NounHun in {
lincat
VPS = {s : Person => Number => Str} ;
[VPS] = {s1,s2 : Person => Number => Str} ;
VPI = SS ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : ObjDef => Person => Number => Str ; c2 : Case} ;
[VPS2] = {s1,s2 : ObjDef => Person => Number => Str ; c2 : Case} ;
VPI2 = {s : ObjDef => Str ; c2 : Case} ;
[VPI2] = {s1,s2 : ObjDef => Str ; c2 : Case} ;
[Comp] = {s1,s2 : VForm => Str} ;
[Imp] = {s1,s2 : Number => Polarity => Str} ;
RNP = NounPhrase ;
RNPList = {s1,s2 : Possessor => Case => Str ; agr : Person*Number ; g : Gender ; postmod : Str} ;
lin lin
TPastSimple = {s = []} ** {t = Past} ; --# notpresent TPastSimple = {s = []} ** {t = Past} ; --# notpresent
CompoundN n1 n2 =
n2 ** {s = \\nc => n1.s ! SgNom ++ BIND ++ n2.s ! nc} ;
GenModNP num np cn =
let det : Determiner = DetQuant DefArt num ;
pron : Pronoun = pronTable ! np.agr ;
in emptyNP ** cn ** det ** {
s = \\_,c =>
np.s ! NoPoss ! Nom
++ np.postmod
++ caseFromPossStem cn (DetQuant (PossPron pron) num) c
++ cn.compl ! det.n ! c ;
agr = <P3,det.n> ;
objdef = Def ;
} ;
EmptyRelSlash cls = relSlash {s = \\_,_,_ => []} cls ;
UseDAP = DetNP ;
UseDAPMasc,
UseDAPFem = \dap -> DetNP dap ** {g = Human} ;
MkVPS t pol vp = {
s = \\p,n =>
t.s ++ pol.s ++ if_then_Pol pol.p [] "nem" ++
case t.t of {
Past => vp.s ! VPast p n ;
Fut => futureAux Indef p n ++ vp.s ! VInf ;
_ => vp.s ! VPres p n
} ++ vp.obj ++ vp.adv
} ;
BaseVPS x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsVPS x xs = {
s1 = \\p,n => x.s ! p ! n ++ bindComma ++ xs.s1 ! p ! n ;
s2 = xs.s2
} ;
ConjVPS conj xs = {
s = \\p,n => xs.s1 ! p ! n ++ conj.s2 ++ xs.s2 ! p ! n
} ;
PredVPS np vps = {
s = linNP np ++ vps.s ! np.agr.p1 ! np.agr.p2
} ;
MkVPI vp = {s = infVP vp} ;
BaseVPI x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsVPI x xs = {
s1 = x.s ++ bindComma ++ xs.s1 ;
s2 = xs.s2
} ;
ConjVPI conj xs = {
s = xs.s1 ++ conj.s2 ++ xs.s2
} ;
ComplVPIVV vv vpi =
useV (vv ** {s = vv.s ! Indef}) ** {
adv = vpi.s
} ;
MkVPS2 t pol vps = {
s = \\od,p,n =>
t.s ++ pol.s ++ if_then_Pol pol.p [] "nem" ++
case t.t of {
Past => vps.s ! od ! VPast p n ;
Fut => futureAux od p n ++ vps.s ! od ! VInf ;
_ => vps.s ! od ! VPres p n
} ++ vps.adv ;
c2 = vps.c2
} ;
ComplVPS2 vps np = {
s = \\p,n => vps.s ! np.objdef ! p ! n ++ np.s ! NoPoss ! vps.c2 ++ np.postmod
} ;
ReflVPS2 vps rnp = {
s = \\p,n => vps.s ! rnp.objdef ! p ! n ++ rnp.s ! NoPoss ! vps.c2 ++ rnp.postmod
} ;
BaseVPS2 x y = {
s1 = x.s ;
s2 = y.s ;
c2 = y.c2
} ;
ConsVPS2 x xs = {
s1 = \\od,p,n => x.s ! od ! p ! n ++ bindComma ++ xs.s1 ! od ! p ! n ;
s2 = xs.s2 ;
c2 = xs.c2
} ;
ConjVPS2 conj xs = {
s = \\od,p,n => xs.s1 ! od ! p ! n ++ conj.s2 ++ xs.s2 ! od ! p ! n ;
c2 = xs.c2
} ;
MkVPI2 vps = {
s = \\_ => infVPSlash vps ;
c2 = vps.c2
} ;
ComplVPI2 vpi np = {
s = vpi.s ! np.objdef ++ np.s ! NoPoss ! vpi.c2 ++ np.postmod
} ;
BaseVPI2 x y = {
s1 = x.s ;
s2 = y.s ;
c2 = y.c2
} ;
ConsVPI2 x xs = {
s1 = \\od => x.s ! od ++ bindComma ++ xs.s1 ! od ;
s2 = xs.s2 ;
c2 = xs.c2
} ;
ConjVPI2 conj xs = {
s = \\od => xs.s1 ! od ++ conj.s2 ++ xs.s2 ! od ;
c2 = xs.c2
} ;
BaseComp x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsComp x xs = {
s1 = \\vf => x.s ! vf ++ bindComma ++ xs.s1 ! vf ;
s2 = xs.s2
} ;
ConjComp conj xs = UseCopula ** {
s = \\vf => xs.s1 ! vf ++ conj.s2 ++ xs.s2 ! vf
} ;
BaseImp x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsImp x xs = {
s1 = \\n,p => x.s ! n ! p ++ bindComma ++ xs.s1 ! n ! p ;
s2 = xs.s2
} ;
ConjImp conj xs = {
s = \\n,p => xs.s1 ! n ! p ++ conj.s2 ++ xs.s2 ! n ! p
} ;
PresPartAP vp = emptyAP ** {
s = \\_,_ => vp.obj ++ vp.adv ++ vp.s ! VPresPart
} ;
EmbedPresPart vp = {s = infVP vp} ;
PastPartAP vps = emptyAP ** {
s = \\_,_ => vps.adv ++ vps.s ! Indef ! VAdvPart
} ;
PastPartAgentAP vps np = emptyAP ** {
s = \\_,_ =>
vps.adv ++ vps.s ! Indef ! VAdvPart
++ applyAdp (caseAdp Nom "által") np
} ;
PassVPSlash vps = passiveVP vps [] ;
PassAgentVPSlash vps np =
passiveVP vps (applyAdp (caseAdp Nom "által") np) ;
ProgrVPSlash vps = vps ;
ComplBareVS vs s = useV vs ** {
adv = s.s
} ;
ReflRNP vps rnp = insertObj vps rnp ;
ReflPron = indeclNP "magát" ** {objdef = Def ; g = Human} ;
ReflPoss num cn = DetCN (DetQuant DefArt num) cn ;
PredetRNP predet rnp = rnp ** {
s = \\p,c => predet.s ++ rnp.s ! p ! c
} ;
AdvRNP np prep rnp = np ** {
s = \\p,c => np.s ! p ! c ++ applyAdp prep rnp ;
postmod = []
} ;
AdvRVP vp prep rnp = insertAdv vp {
s = applyAdp prep rnp
} ;
AdvRAP ap prep rnp = ap ** {
compl = \\n => ap.compl ! n ++ applyAdp prep rnp
} ;
ReflA2RNP a2 rnp =
let ap : AP = ComplA2 a2 rnp in ap ;
PossPronRNP pron num cn rnp =
let det : Determiner = DetQuant (PossPron pron) num
in emptyNP ** cn ** det ** {
s = \\_,c =>
rnp.s ! NoPoss ! Nom
++ caseFromPossStem cn det c
++ cn.compl ! det.n ! c ;
agr = <P3,det.n> ;
objdef = Def ;
g = NonHuman
} ;
Base_rr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
Base_nr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
Base_rn_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
ConjRNP conj xs = emptyNP ** {
s = \\p,c => xs.s1 ! p ! c ++ conj.s2 ++ xs.s2 ! p ! c ;
agr = <P3,conj.n> ;
objdef = Def ;
g = xs.g ;
postmod = [] ;
empty = []
} ;
GerundCN vp =
let gn : Str = infVP vp
in {
s = \\_ => gn ;
h = H_a ;
g = NonHuman ;
compl = \\_,_ => [] ;
postmod = []
} ;
GerundNP vp = MassNP (GerundCN vp) ;
GerundAdv vp = {
s = infVP vp ;
isPre = False
} ;
CompoundAP n a = emptyAP ** {
s = \\_,_ => n.s ! SgNom ++ a.s ! Posit ! SgNom
} ;
WithoutVP vp = {
s = infVP vp ++ "nélkül" ;
isPre = False
} ;
ByVP vp = {
s = infVP vp ++ "által" ;
isPre = False
} ;
InOrderToVP vp = {
s = infVP vp ++ "céljából" ;
isPre = False
} ;
ApposNP np1 np2 = np1 ** {
s = \\p,c => np1.s ! p ! c ++ bindComma ++ np2.s ! NoPoss ! Nom ;
postmod = []
} ;
AdAdV ada adv = {
s = ada.s ++ adv.s
} ;
UttAdV adv = {
s = adv.s
} ;
PositAdVAdj adj = {
s = adj.s ! Posit ! SgNom
} ;
UttVPShort vp = {
s = infVP vp
} ;
ComplSlashPartLast vps np = insertObj vps np ;
iFem_Pron = pronTable ! <P1,Sg> ** {g = Human} ;
theyFem_Pron = pronTable ! <P3,Pl> ** {g = Human} ;
theyNeutr_Pron = pronTable ! <P3,Pl> ;
weFem_Pron = pronTable ! <P1,Pl> ** {g = Human} ;
youFem_Pron = pronTable ! <P2,Sg> ** {g = Human} ;
youPlFem_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
youPolFem_Pron = pronTable ! <P2,Sg> ** {g = Human} ;
youPolPlFem_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
youPolPl_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
oper
passiveVP : VPSlash -> Str -> VP = \vps,agent ->
lin VP (useV (copula ** {
s = \\vf => case vf of {
VPres P3 _ => [] ;
_ => copula.s ! vf
}
}) ** {
adv = vps.adv ++ vps.s ! Indef ! VAdvPart ++ agent
}) ;
} ; } ;

View File

@@ -12,8 +12,7 @@ concrete GrammarHun of Grammar =
TextX - [Adv], TextX - [Adv],
StructuralHun, StructuralHun,
IdiomHun, IdiomHun,
TenseX - [Adv], TenseX - [Adv]
NamesHun
** { ** {
flags startcat = Phr ; unlexer = text ; lexer = text ; flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -44,51 +44,4 @@ concrete IdiomHun of Idiom = CatHun ** open Prelude, ResHun, VerbHun, NounHun, S
SelfNP : NP -> NP ; -- the president himself (is at home) SelfNP : NP -> NP ; -- the president himself (is at home)
-} -}
lin
ImpersCl vp = predVP emptyNP vp ;
ExistNP np = existNP np [] ;
ExistNPAdv np adv = existNP np adv.s ;
ExistIP ip = {
s = \\t,a,p =>
ip.s ! NoPoss ! Nom
++ if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 ip.agr.p2 ;
_ => VPres P3 ip.agr.p2
}
} ;
ExistIPAdv ip adv = {
s = \\t,a,p =>
ip.s ! NoPoss ! Nom
++ adv.s
++ if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 ip.agr.p2 ;
_ => VPres P3 ip.agr.p2
}
} ;
ProgrVP vp = vp ;
ImpPl1 vp = {
s = "próbáljunk" ++ infVP vp
} ;
oper
existNP : NounPhrase -> Str -> ResHun.ClSlash = \np,adv -> {
s = \\t,_,p =>
if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 np.agr.p2 ;
_ => VPres P3 np.agr.p2
}
++ linNP np
++ adv ;
c2 = Acc
} ;
} }

View File

@@ -1,46 +0,0 @@
--# -path=.:prelude:../abstract:../common
concrete IrregHun of IrregHunAbs = CatHun ** open ParadigmsHun in {
lin
áll_V = mkV "állok" "állsz" "áll" "állunk" "álltok" "állnak"
"álltam" "álltál" "állt" "álltunk" "álltatok" "álltak"
"állni" "álló" "állva" ;
átugrik_V = mkV "átugrom" "átugrasz" "átugrik" "átugrunk" "átugrotok" "átugranak"
"átugrottam" "átugrottál" "átugrott" "átugrottunk" "átugrottatok" "átugrottak"
"átugrani" "átugrikó" "átugrikva" ;
bovelkedik_V = mkV "bővelkedem" "bővelkedsz" "bővelkedik" "bővelkedünk" "bővelkedtek" "bővelkednek"
"bővelkedtem" "bővelkedtél" "bővelkedett" "bővelkedtünk" "bővelkedtetek" "bővelkedtek"
"bővelkedni" "bővelkedő" "bővelkedve" ;
csatlakozik_V = mkV "csatlakozom" "csatlakozol" "csatlakozik" "csatlakozunk" "csatlakoztok" "csatlakoznak"
"csatlakoztam" "csatlakoztál" "csatlakozott" "csatlakoztunk" "csatlakoztatok" "csatlakoztak"
"csatlakozni" "csatlakozó" "csatlakozva" ;
csökken_V = mkV "csökkenek" "csökkensz" "csökken" "csökkenünk" "csökkentek" "csökkennek"
"csökkentem" "csökkentél" "csökkent" "csökkentünk" "csökkentetek" "csökkentek"
"csökkenni" "csökkenő" "csökkenve" ;
dolgozik_V = mkV "dolgozom" "dolgozol" "dolgozik" "dolgozunk" "dolgoztok" "dolgoznak"
"dolgoztam" "dolgoztál" "dolgozott" "dolgoztunk" "dolgoztatok" "dolgoztak"
"dolgozni" "dolgozó" "dolgozva" ;
elvet_V = mkV "elvetek" "elvetsz" "elvet" "elvetünk" "elvettek" "elvetnek"
"elvetettem" "elvetettél" "elvetett" "elvetettünk" "elvetettetek" "elvetettek"
"elvetni" "elvető" "elvetve" ;
eszik_V = mkV "eszem" "eszel" "eszik" "eszünk" "esztek" "esznek"
"ettem" "ettél" "evett" "ettünk" "ettetek" "ettek"
"enni" "evő" "éve" ;
fut_V = mkV "futok" "futsz" "fut" "futunk" "futtok" "futnak"
"futottam" "futottál" "futott" "futottunk" "futottatok" "futottak"
"futni" "futó" "futva" ;
jár_V = mkV "járok" "jársz" "jár" "járunk" "jártok" "járnak"
"jártam" "jártál" "járt" "jártunk" "jártatok" "jártak"
"járni" "járó" "járva" ;
küld_V = mkV "küldök" "küldesz" "küld" "küldünk" "küldötök" "küldenek"
"küldtem" "küldtél" "küldött" "küldtünk" "küldtetek" "küldtek"
"küldeni" "küldő" "küldve" ;
meglátogat_V = mkV "meglátogatok" "meglátogatsz" "meglátogat" "meglátogatunk" "meglátogattok" "meglátogatnak"
"meglátogattam" "meglátogattál" "meglátogatott" "meglátogattunk" "meglátogattatok" "meglátogattak"
"meglátogatni" "meglátogató" "meglátogatva" ;
tud_V = mkV "tudok" "tudsz" "tud" "tudunk" "tudtok" "tudnak"
"tudtam" "tudtál" "tudott" "tudtunk" "tudtatok" "tudtak"
"tudni" "tudó" "tudva" ;
úszik_V = mkV "úszom" "úszol" "úszik" "úszunk" "úsztok" "úsznak"
"úsztam" "úsztál" "úszott" "úsztunk" "úsztatok" "úsztak"
"úszni" "úszó" "úszva" ;
}

View File

@@ -1,17 +0,0 @@
abstract IrregHunAbs = Cat ** {
fun
áll_V : V ;
átugrik_V : V ;
bovelkedik_V : V ;
csatlakozik_V : V ;
csökken_V : V ;
dolgozik_V : V ;
elvet_V : V ;
eszik_V : V ;
fut_V : V ;
jár_V : V ;
küld_V : V ;
meglátogat_V : V ;
tud_V : V ;
úszik_V : V ;
}

View File

@@ -1,6 +1,4 @@
concrete LangHun of Lang = concrete LangHun of Lang =
GrammarHun, GrammarHun,
LexiconHun, LexiconHun,
ConstructionHun, ConstructionHun ;
DocumentationHun --# notpresent
;

View File

@@ -1,5 +1,5 @@
concrete LexiconHun of Lexicon = CatHun ** concrete LexiconHun of Lexicon = CatHun **
open ParadigmsHun, ParamHun, IrregHun, Prelude in { open ParadigmsHun, ParamHun, Prelude in {
---- ----
-- A -- A
@@ -19,7 +19,7 @@ lin art_N = mkN "művészet" "művészetet" ;
---- ----
-- B -- B
lin baby_N = humanN (mkN "bébi" "bébit") ; lin baby_N = mkN "bébi" "bébit" ;
-- lin back_N = mkN "" ; -- lin back_N = mkN "" ;
lin bad_A = mkA "rossz" ; lin bad_A = mkA "rossz" ;
lin bank_N = mkN "bank" "bankot" ; lin bank_N = mkN "bank" "bankot" ;
@@ -65,7 +65,7 @@ lin cat_N = mkN "macska" "macskát";
lin ceiling_N = roof_N ; lin ceiling_N = roof_N ;
lin chair_N = mkN "szék" "széket"; lin chair_N = mkN "szék" "széket";
lin cheese_N = mkN "sajt" "sajtot" ; lin cheese_N = mkN "sajt" "sajtot" ;
lin child_N = humanN (mkN "gyerek" "gyereket") ; lin child_N = mkN "gyerek" "gyereket" ;
lin church_N = mkN "templom" "templomot" ; lin church_N = mkN "templom" "templomot" ;
lin city_N = mkN "város" "várost" ; lin city_N = mkN "város" "várost" ;
lin clean_A = mkA "tiszta" ; lin clean_A = mkA "tiszta" ;
@@ -92,7 +92,7 @@ lin day_N = mkN "nap" "napot" ;
-- lin dirty_A = mkA "" ; -- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN "" ; -- lin distance_N3 = mkN "" ;
-- lin do_V2 = mkV2 do_V ; -- lin do_V2 = mkV2 do_V ;
lin doctor_N = humanN (mkN "orvos" "orvost"); lin doctor_N = mkN "orvos" "orvost";
lin dog_N = mkN "kutya" "kutyát"; lin dog_N = mkN "kutya" "kutyát";
lin door_N = mkN "ajtó" "ajtót" ; lin door_N = mkN "ajtó" "ajtót" ;
-- lin drink_V2 = mkV2 "" ; -- lin drink_V2 = mkV2 "" ;
@@ -105,7 +105,7 @@ lin door_N = mkN "ajtó" "ajtót" ;
lin ear_N = mkN "fül" "fület"; lin ear_N = mkN "fül" "fület";
lin earth_N = mkN "föld" "földet"; lin earth_N = mkN "föld" "földet";
lin eat_V2 = mkV2 eszik_V ; -- lin eat_V2 = mkV2 "" ;
lin egg_N = mkN "tojás" "tojást" ; lin egg_N = mkN "tojás" "tojást" ;
lin empty_A = mkA "üres" ; lin empty_A = mkA "üres" ;
lin enemy_N = mkN "ellenség" "ellenséget" ; lin enemy_N = mkN "ellenség" "ellenséget" ;
@@ -139,7 +139,7 @@ lin forest_N = mkN "erdő" "erdőt" ;
-- lin forget_V2 = mkV2 "" ; -- lin forget_V2 = mkV2 "" ;
-- lin freeze_V = mkV "" ; -- lin freeze_V = mkV "" ;
lin fridge_N = mkN "hűtő" "hűtőt" ; lin fridge_N = mkN "hűtő" "hűtőt" ;
lin friend_N = humanN (mkN "barát" "barátot") ; lin friend_N = mkN "barát" "barátot" ;
lin fruit_N = mkN "gyümölcs" "gyümölcsöt" "gyümölcsök" "gyümölcse" ; --TODO: plural PossPl2 fails "gyümölcseitek" instead of "gyümölcseitök", wovel harmony changing? lin fruit_N = mkN "gyümölcs" "gyümölcsöt" "gyümölcsök" "gyümölcse" ; --TODO: plural PossPl2 fails "gyümölcseitek" instead of "gyümölcseitök", wovel harmony changing?
lin full_A = mkA "tele" ; lin full_A = mkA "tele" ;
-- --lin fun_AV -- --lin fun_AV
@@ -148,7 +148,7 @@ lin full_A = mkA "tele" ;
-- G -- G
lin garden_N = mkN "kert" "kertet" ; lin garden_N = mkN "kert" "kertet" ;
lin girl_N = humanN (mkN "lány" "lányt"); lin girl_N = mkN "lány" "lányt";
-- lin give_V3 = mkV3 "" ; -- lin give_V3 = mkV3 "" ;
lin glove_N = mkN "kesztyű" "kesztyűt" ; lin glove_N = mkN "kesztyű" "kesztyűt" ;
-- lin go_V = mkV "" ; -- lin go_V = mkV "" ;
@@ -179,7 +179,7 @@ lin horse_N = mkN "ló" "lovat";
lin hot_A = mkA "forró" ; lin hot_A = mkA "forró" ;
lin house_N = mkN "ház" "házat" ; lin house_N = mkN "ház" "házat" ;
-- lin hunt_V2 = mkV2 "" ; -- lin hunt_V2 = mkV2 "" ;
lin husband_N = humanN (mkN "férj" "férjet"); lin husband_N = mkN "férj" "férjet";
-------- --------
-- I - K -- I - K
@@ -190,7 +190,7 @@ lin iron_N = mkN "vas" "vasat" ;
-- lin john_PN = mkPN "" ; -- lin john_PN = mkPN "" ;
-- lin jump_V = mkV "" ; -- lin jump_V = mkV "" ;
-- lin kill_V2 = mkV2 "" ; -- lin kill_V2 = mkV2 "" ;
lin king_N = humanN (mkN "király" "királyt") ; lin king_N = mkN "király" "királyt" ;
lin knee_N = mkN "térd" "térdet"; lin knee_N = mkN "térd" "térdet";
-- lin know_V2 = mkV2 "" ; -- lin know_V2 = mkV2 "" ;
-- lin know_VQ = mkVQ "" ; -- lin know_VQ = mkVQ "" ;
@@ -223,12 +223,12 @@ lin love_N = mkN "szerelem" "szerelmet";
---- ----
-- M -- M
lin man_N = humanN (mkN "férfi" "ak" harmA) ; -- force plural allomorph and a-harmony lin man_N = mkN "férfi" "ak" harmA ; -- force plural allomorph and a-harmony
lin married_A2 = mkA2 "házas" Ins ; lin married_A2 = mkA2 "házas" Ins ;
lin meat_N = mkN "hús" "húst"; lin meat_N = mkN "hús" "húst";
lin milk_N = mkN "tej" "tejet" ; lin milk_N = mkN "tej" "tejet" ;
lin moon_N = mkN "hold" "holdat" ; lin moon_N = mkN "hold" "holdat" ;
lin mother_N2 = mkN2 (humanN (mkN "anya" "anyát")) ; lin mother_N2 = mkN2 (mkN "anya" "anyát") ;
lin mountain_N = mkN "hegy" "hegyet"; lin mountain_N = mkN "hegy" "hegyet";
lin mouth_N = mkN "száj" "szájat" ; lin mouth_N = mkN "száj" "szájat" ;
lin music_N = mkN "zene" "zenét"; lin music_N = mkN "zene" "zenét";
@@ -259,12 +259,12 @@ lin paper_N = mkN "papír" "papírt" "papírok" "papírja" ;
-- lin paris_PN = mkPN "Paris" ; -- lin paris_PN = mkPN "Paris" ;
lin peace_N = mkN "béke" "békét"; lin peace_N = mkN "béke" "békét";
lin pen_N = mkN "toll" "tollat" ; lin pen_N = mkN "toll" "tollat" ;
lin person_N = humanN (mkN "ember" "embert"); lin person_N = mkN "ember" "embert";
lin planet_N = mkN "bolygó" "bolygót" ; lin planet_N = mkN "bolygó" "bolygót" ;
lin plastic_N = mkN "műanyag" "műanyagot" "műanyagok" "műanyaga" ; lin plastic_N = mkN "műanyag" "műanyagot" "műanyagok" "műanyaga" ;
-- lin play_V = mkV "" ; -- lin play_V = mkV "" ;
lin policeman_N = humanN (mkN "rendőr" "rendőrt"); --the police "rendőrség" lin policeman_N = mkN "rendőr" "rendőrt"; --the police "rendőrség"
lin priest_N = humanN (mkN "pap" "papot" "papok" "papja") ; lin priest_N = mkN "pap" "papot" "papok" "papja" ;
-- lin pull_V2 = mkV2 "" ; -- lin pull_V2 = mkV2 "" ;
-- lin push_V2 = mkV2 "" ; -- lin push_V2 = mkV2 "" ;
-- lin put_V2 = mkV2 "" ; -- lin put_V2 = mkV2 "" ;
@@ -272,12 +272,12 @@ lin priest_N = humanN (mkN "pap" "papot" "papok" "papja") ;
-- -------- -- --------
-- -- Q - R -- -- Q - R
-- --
lin queen_N = humanN (mkN "kírálynő" "kírálynőt") ; lin queen_N = mkN "kírálynő" "kírálynőt" ;
lin question_N = mkN "kérdés" "kérdést" ; lin question_N = mkN "kérdés" "kérdést" ;
lin radio_N = mkN "rádió" "rádiót" ; lin radio_N = mkN "rádió" "rádiót" ;
lin rain_N = mkN "eső" "esőt" ; lin rain_N = mkN "eső" "esőt" ;
-- lin rain_V0 = mkV "" ; -- lin rain_V0 = mkV "" ;
lin read_V2 = mkV2 "olvas" ; -- lin read_V2 = mkV2 "" ;
lin ready_A = mkA "kész" ; lin ready_A = mkA "kész" ;
lin reason_N = mkN "ok" "okot" "okok" "oka" ; lin reason_N = mkN "ok" "okot" "okok" "oka" ;
lin red_A = mkA "piros" ; lin red_A = mkA "piros" ;
@@ -363,7 +363,7 @@ lin table_N = mkN "asztal" "asztalt";
lin tail_N = mkN "farok" "farkot"; lin tail_N = mkN "farok" "farkot";
lin talk_V3 = mkV3 "beszél" ; lin talk_V3 = mkV3 "beszél" ;
-- lin teach_V2 = mkV2 "" ; -- lin teach_V2 = mkV2 "" ;
lin teacher_N = humanN (mkN "tanár" "tanárt") ; lin teacher_N = mkN "tanár" "tanárt" ;
lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used
lin thick_A = mkA "vastag" ; lin thick_A = mkA "vastag" ;
lin thin_A = mkA "vekony" ; lin thin_A = mkA "vekony" ;
@@ -401,14 +401,14 @@ lin water_N = mkN "víz" "vizet" ;
lin wet_A = mkA "nedves" ; lin wet_A = mkA "nedves" ;
lin white_A = mkA "fehér" ; lin white_A = mkA "fehér" ;
lin wide_A = mkA "széles" ; lin wide_A = mkA "széles" ;
lin wife_N = humanN (mkN "feleség" "feleséget") ; lin wife_N = mkN "feleség" "feleséget" ;
-- lin win_V2 = mkV2 "" ; -- lin win_V2 = mkV2 "" ;
lin wind_N = mkN "szél" "szelet" ; lin wind_N = mkN "szél" "szelet" ;
lin window_N = mkN "ablak" "ablakot" "ablakok" "ablaka" ; lin window_N = mkN "ablak" "ablakot" "ablakok" "ablaka" ;
lin wine_N = mkN "bor" "bort"; lin wine_N = mkN "bor" "bort";
lin wing_N = mkN "szárny" "szárnyat"; lin wing_N = mkN "szárny" "szárnyat";
-- lin wipe_V2 = mkV2 "" ; -- lin wipe_V2 = mkV2 "" ;
lin woman_N = humanN (mkN "nő" "nőt") ; lin woman_N = mkN "nő" "nőt" ;
-- lin wonder_VQ = mkVQ "" ; -- lin wonder_VQ = mkVQ "" ;
lin wood_N = mkN "fa" "fát"; --same as tree lin wood_N = mkN "fa" "fát"; --same as tree
lin worm_N = mkN "féreg" "férget"; --also "kukac" lin worm_N = mkN "féreg" "férget"; --also "kukac"

View File

@@ -1,30 +0,0 @@
concrete NamesHun of Names = CatHun ** open ResHun, Prelude in {
lin
GivenName gn = gn ** {g = Human ; objdef = Def} ;
MaleSurname sn = sn ** {g = Human ; objdef = Def} ;
FemaleSurname sn = sn ** {g = Human ; objdef = Def} ;
PlSurname sn = sn ** {g = Human ; objdef = Def ; agr = <P3,Pl>} ;
FullName gn sn = emptyNP ** {
s = \\p,c => gn.s ! p ! Nom ++ sn.s ! p ! c ;
agr = <P3,Sg> ;
objdef = Def ;
g = Human ;
postmod = [] ;
empty = []
} ;
UseLN ln = ln ** {objdef = Def} ;
PlainLN ln = ln ** {objdef = Def} ;
InLN ln = {
s = ln.s ! NoPoss ! Ine ;
isPre = False
} ;
AdjLN ap ln = ln ** {
s = \\p,c => ap.s ! Sg ! Nom ++ ln.s ! p ! c
} ;
}

View File

@@ -3,10 +3,6 @@ concrete NounHun of Noun = CatHun ** open
flags optimize=all_subs ; flags optimize=all_subs ;
oper
hunV : pattern Str = #("a"|"e"|"i"|"o"|"u"|"ö"|"ü"|
"á"|"é"|"í"|"ó"|"ú"|"ő"|"ű") ;
lin lin
--2 Noun phrases --2 Noun phrases
@@ -69,7 +65,7 @@ concrete NounHun of Noun = CatHun ** open
-- : NP -> RS -> NP ; -- Paris, which is here -- : NP -> RS -> NP ; -- Paris, which is here
RelNP np rs = np ** { RelNP np rs = np ** {
s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.g ! np.agr.p2 ! c ; s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.agr.p2 ! c ;
} ; } ;
-- Determiners can form noun phrases directly. -- Determiners can form noun phrases directly.
@@ -148,24 +144,22 @@ concrete NounHun of Noun = CatHun ** open
-- : Numeral -> Card ; -- : Numeral -> Card ;
NumNumeral num = num ; NumNumeral num = num ;
{-
-- : AdN -> Card -> Card ; -- : AdN -> Card -> Card ;
AdNum adn card = card ** { s = \\p => adn.s ++ card.s ! p } ; AdNum adn card = card ** { s = adn.s ++ card.s } ;
-- : Digits -> Ord ; -- : Digits -> Ord ;
OrdDigits digs = { OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
s = \\_,_ => digs.s ! NOrd ;
n = Sg
} ;
-- : Numeral -> Ord ; -- : Numeral -> Ord ;
OrdNumeral num = { OrdNumeral num = num ** {
s = \\_,_ => num.s ! Attrib ; s = \\_ => num.ord
n = Sg
} ; } ;
-}
-- : A -> Ord ; -- : A -> Ord ;
OrdSuperl a = { OrdSuperl a = {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Superl; g=NonHuman}) in let adj : Noun = (a ** {s = a.s ! Superl}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
n = Sg -- ?? is this meaningful? n = Sg -- ?? is this meaningful?
} ; } ;
@@ -178,7 +172,7 @@ concrete NounHun of Noun = CatHun ** open
-- : Quant -- : Quant
DefArt = mkQuant "a" "a" ** { DefArt = mkQuant "a" "a" ** {
s, s,
sp = \\_,_ => pre {"a" ; "az" / hunV } ; sp = \\_,_ => pre {"a" ; "az" / v } ;
dt = DefDet ; dt = DefDet ;
} ; } ;
@@ -191,10 +185,7 @@ concrete NounHun of Noun = CatHun ** open
-- : Pron -> Quant -- : Pron -> Quant
PossPron pron = pron ** { PossPron pron = pron ** {
s,sp = \\_,_ => case pron.agr of { s,sp = \\_ => pron.s ;
<P3,_> => "az" ++ pron.s ! Nom ;
_ => pre {"a" ; "az" / hunV} ++ pron.s ! Nom
} ;
dt = DetPoss (agr2pstem pron.agr) ; dt = DetPoss (agr2pstem pron.agr) ;
caseagr = False ; caseagr = False ;
} ; } ;
@@ -209,9 +200,7 @@ concrete NounHun of Noun = CatHun ** open
} ; } ;
-- : N2 -> NP -> CN ; -- : N2 -> NP -> CN ;
ComplN2 n2 np = (UseN n2) ** { -- ComplN2 n2 np =
compl = \\n,c => np.s ! NoPoss ! Dat ++ np.postmod
} ;
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris) -- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
-- ComplN3 n3 np = -- ComplN3 n3 np =
@@ -231,7 +220,7 @@ concrete NounHun of Noun = CatHun ** open
-- : CN -> RS -> CN ; -- : CN -> RS -> CN ;
RelCN cn rs = cn ** { RelCN cn rs = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! cn.g ! n ! c compl = \\n,c => cn.compl ! n ! c ++ rs.s ! n ! c
} ; } ;
-- : CN -> Adv -> CN ; -- : CN -> Adv -> CN ;
@@ -245,9 +234,7 @@ concrete NounHun of Noun = CatHun ** open
-- to decide. Sentential complements are defined in VerbHun. -- to decide. Sentential complements are defined in VerbHun.
-- : CN -> SC -> CN ; -- question where she sleeps -- : CN -> SC -> CN ; -- question where she sleeps
SentCN cn sc = cn ** { -- SentCN cn sc = cn ** { } ;
compl = \\n,c => cn.compl ! n ! c ++ sc.s
} ;
--2 Apposition --2 Apposition
@@ -261,37 +248,29 @@ concrete NounHun of Noun = CatHun ** open
--2 Possessive and partitive constructs --2 Possessive and partitive constructs
-- : PossNP : CN -> NP -> CN ; -- : PossNP : CN -> NP -> CN ;
PossNP cn np = cn ** { -- PossNP cn np = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Dat ++ np.postmod -- compl = \\n,c => cn.compl ! n ! c ++ np.s ! Poss P3 n ! c -- TODO check
} ; -- } ;
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples -- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
PartNP cn np = cn ** { -- PartNP cn np = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Nom ++ np.postmod -- } ;
} ;
-- : Det -> NP -> NP ; -- three of them, some of the boys {-
CountNP det np = emptyNP ** det ** {
s = \\_,c => det.sp ! c ++ np.s ! NoPoss ! Ela ++ np.postmod ;
agr = <P3,det.n> ;
objdef = dt2objdef det.dt
} ;
-- : Decimal -> MU -> NP ; -- This is different from the partitive, as shown by many languages.
QuantityNP dec mu = indeclNP
(case mu.isPre of { -- : Det -> NP -> NP ;
True => mu.s ++ dec.s ! NCard ; CountNP det np = np **
False => dec.s ! NCard ++ mu.s { } ; -- Nonsense for DefArt or IndefArt
}) ** {
objdef = Def
} ;
--3 Conjoinable determiners and ones with adjectives --3 Conjoinable determiners and ones with adjectives
-- : DAP -> AP -> DAP ; -- the large (one) -- : DAP -> AP -> DAP ; -- the large (one)
AdjDAP dap ap = dap ; AdjDAP dap ap = dap ** { } ;
-- : Det -> DAP ; -- this (or that) -- : Det -> DAP ; -- this (or that)
DetDAP det = det ; DetDAP det = det ;
-}
} }

View File

@@ -1,7 +1,7 @@
resource NounMorphoHun = ParamHun ** open Prelude, Predef in { resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
oper oper
Noun = {s : NumCaseStem => Str ; h : Harm ; g : Gender} ; Noun = {s : NumCaseStem => Str ; h : Harm} ;
-- Paradigm functions -- Paradigm functions
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf -- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
@@ -275,7 +275,6 @@ oper
PossdSg_PossrSg1P2 => init possdSg_PossrSg1P2 ; PossdSg_PossrSg1P2 => init possdSg_PossrSg1P2 ;
PossdPl => possdPl } ; PossdPl => possdPl } ;
h = h ; h = h ;
g = NonHuman
} ; } ;
@@ -572,7 +571,7 @@ oper
<_,_ + #v> => endCaseVow ; <_,_ + #v> => endCaseVow ;
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz" <_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz"
|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ; |"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ;
<True,_> => endCaseCons ; <True,_> => endCaseConsAccAt ;
_ => endCaseCons } ; _ => endCaseCons } ;
-- Last consonant doubles before instrumental and translative -- Last consonant doubles before instrumental and translative
@@ -594,7 +593,7 @@ oper
-- All other singular forms and stems -- All other singular forms and stems
c => w + endCaseSg c ! h } ; c => w + endCaseSg c ! h } ;
g = NonHuman
} ; } ;

View File

@@ -27,77 +27,59 @@ lin
n9 = mkNum3 "kilenc" "kilencven" "kilencedik" ; n9 = mkNum3 "kilenc" "kilencven" "kilencedik" ;
-- : Sub10 ; -- 1 -- : Sub10 ; -- 1
pot01 = mkNum3 "egy" "tíz" "első" ; pot01 = mkNum3 "egy" "tíz" "első" ** {n=Sg} ;
-- : Digit -> Sub10 ; -- d * 1 -- : Digit -> Sub10 ; -- d * 1
pot0 d = d ; pot0 d = d ;
-- : Sub100 ; -- 10 -- : Sub100 ; -- 10
pot110 = {s = table {p => "tíz"}} ; pot110 = {s = table {p => "tíz"} ; n = numNumber ; numtype = IsNum} ;
-- : Sub100 ; -- 11 -- : Sub100 ; -- 11
pot111 = {s = table {p => "tizenegy"}} ; pot111 = {s = table {p => "tizenegy"} ; n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub100 ; -- 10 + d -- : Digit -> Sub100 ; -- 10 + d
pot1to19 d = pot1to19 d =
{s = table {p => "tizen" ++ d.s ! <Unit,p>}} ; {s = table {p => "tizen" ++ d.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub10 -> Sub100 ; -- coercion of 1..9 -- : Sub10 -> Sub100 ; -- coercion of 1..9
pot0as1 n = pot0as1 n =
{s = table {p => n.s ! <Unit,p>}} ; {s = table {p => n.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub100 ; -- d * 10 -- : Digit -> Sub100 ; -- d * 10
pot1 d = pot1 d =
{s = table {p => d.s ! <Ten,p>}} ; {s = table {p => d.s ! <Ten,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n -- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
pot1plus d e = pot1plus d e =
{s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>}} ; {s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub100 -> Sub1000 ; -- coercion of 1..99 -- : Sub100 -> Sub1000 ; -- coercion of 1..99
pot1as2 n = n ; pot1as2 n = n ;
-- : Sub1000 ; -- a hundred
pot21 =
{s = table {p => "száz"}} ;
-- : Sub10 -> Sub1000 ; -- m * 100 -- : Sub10 -> Sub1000 ; -- m * 100
pot2 d = pot2 d =
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"}} ; {s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n -- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
pot2plus d e = pot2plus d e =
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p}} ; {s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999 -- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
pot2as3 n = n ; pot2as3 n = n ;
-- : Sub1000000 ; -- a thousand
pot31 =
{s = table {p => "ezer"}} ;
-- : Sub1000 -> Sub1000000 ; -- m * 1000 -- : Sub1000 -> Sub1000000 ; -- m * 1000
pot3 n = pot3 n =
{s = table {p => n.s ! Attrib ++ "ezer"}} ; {s = table {p => n.s ! Attrib ++ "ezer"} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n -- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
pot3plus n m = pot3plus n m =
{s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p}} ; {s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p} ;
pot3decimal d = n = numNumber ; numtype = IsNum} ;
{s = table {p => d.s ! NCard ++ "ezer"}} ;
pot3as4 n = n ; pot3as4 n = n ;
pot41 =
{s = table {p => "egymillió"}} ;
pot4 n =
{s = table {p => n.s ! Attrib ++ "millió"}} ;
pot4plus n m =
{s = table {p => n.s ! Attrib ++ "millió" ++ m.s ! p}} ;
pot4as5 n = n ; pot4as5 n = n ;
pot4decimal d =
{s = table {p => d.s ! NCard ++ "millió"}} ;
pot51 =
{s = table {p => "egymilliárd"}} ;
pot5 n =
{s = table {p => n.s ! Attrib ++ "milliárd"}} ;
pot5plus n m =
{s = table {p => n.s ! Attrib ++ "milliárd" ++ m.s ! p}} ;
pot5decimal d =
{s = table {p => d.s ! NCard ++ "milliárd"}} ;
oper oper
LinDigit : Type = {s : DForm*Place => Str} ; LinDigit : Type = {s : DForm*Place => Str ; n : Number} ;
mkNum3 : (x1,_,x3 : Str) -> LinDigit = \három,harminc,harmadik -> mkNum3 : (x1,_,x3 : Str) -> LinDigit = \három,harminc,harmadik ->
mkNum5 három harminc három harminc harmadik ; mkNum5 három harminc három harminc harmadik ;
@@ -107,8 +89,13 @@ oper
<Ten,Indep> => ti ; <Ten,Indep> => ti ;
<Unit,Attrib> => ua ; <Unit,Attrib> => ua ;
<Ten, Attrib> => ta } ; <Ten, Attrib> => ta } ;
-- ord = ord ; -- TODO figure out where to use ordinal
n = numNumber ;
numType = IsNum ;
} ; } ;
numNumber = Sg ;
-- numerals as sequences of digits -- numerals as sequences of digits
lincat lincat
Dig = TDigit ; Dig = TDigit ;
@@ -119,7 +106,8 @@ oper
-- : Dig -> Digits -> Digits ; -- 876 -- : Dig -> Digits -> Digits ; -- 876
IIDig d i = { IIDig d i = {
s = \\x => d.s ++ BIND ++ i.s ! x s = \\x => d.s ++ BIND ++ i.s ! x ;
n = numNumber
} ; } ;
D_0 = mkDig "0" ; D_0 = mkDig "0" ;
@@ -134,26 +122,21 @@ oper
D_9 = mkDig "9" ; D_9 = mkDig "9" ;
PosDecimal d = d ** {hasDot=False} ; PosDecimal d = d ** {hasDot=False} ;
NegDecimal d = { NegDecinal d = {
s = \\x => "-" ++ BIND ++ d.s ! x ; s = \\x => "-" ++ BIND ++ d.s ! x ;
n = numNumber ;
hasDot=False hasDot=False
} ; } ;
IFrac d i = {
s = \\x => d.s ! x ++
case d.hasDot of {
True => BIND ;
False => BIND ++ "." ++ BIND
} ++ i.s ;
hasDot=True
} ;
oper oper
mkDig : Str -> TDigit = \s -> { mkDig : Str -> TDigit = \s -> {
s = s ; s = s ;
n = numNumber
} ; } ;
TDigit = { TDigit = {
s : Str ; -- TODO add ordinals s : Str ; -- TODO add ordinals
n : Number
} ; } ;
} }

View File

@@ -25,8 +25,6 @@ oper
mkN : (unoka : Str) -> (testvér : N) -> N ; -- Compound noun. Use: `mkN "unoka" (mkN "testvér")` (would give wrong harmony with `mkN "unokatestvér"`) mkN : (unoka : Str) -> (testvér : N) -> N ; -- Compound noun. Use: `mkN "unoka" (mkN "testvér")` (would give wrong harmony with `mkN "unokatestvér"`)
} ; } ;
humanN : N -> N = \n -> n ** {g = Human} ;
mkPN : overload { mkPN : overload {
mkPN : Str -> PN ; -- Singular PN out of a string mkPN : Str -> PN ; -- Singular PN out of a string
mkPN : Str -> Number -> PN -- PN with a given number mkPN : Str -> Number -> PN -- PN with a given number
@@ -60,7 +58,6 @@ oper
-- Verbs -- Verbs
mkV : overload { mkV : overload {
mkV : (sg3 : Str) -> V ; -- Predictable verb. Takes singular P3 form in present tense. mkV : (sg3 : Str) -> V ; -- Predictable verb. Takes singular P3 form in present tense.
mkV : (x1,_,_,_,_,_,_,_,_,_,_,_,x13 : Str) -> V ; -- Full present, past, and infinitive forms.
-- mkV : (nore : Str) -> (hada : V) -> V ; -- Add a prefix to an existing verb, e.g. 노래+하다 -- mkV : (nore : Str) -> (hada : V) -> V ; -- Add a prefix to an existing verb, e.g. 노래+하다
} ; } ;
@@ -230,12 +227,7 @@ oper
-- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** { -- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
-- s = \\vf => nore + hada.s ! vf} ; -- s = \\vf => nore + hada.s ! vf} ;
mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf -> mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf ->
lin V (mkVerbPres sg1 sg2 sg3 pl1 pl2 pl3 inf) ; lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf) ;
mkV : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> V =
\sg1,sg2,sg3,pl1,pl2,pl3,pastSg1,pastSg2,pastSg3,pastPl1,pastPl2,pastPl3,inf,ppart,apart ->
lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart) ;
} ; } ;
copula = lin V ResHun.copula ; copula = lin V ResHun.copula ;
@@ -287,7 +279,6 @@ oper
mkV3 = overload { mkV3 = overload {
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ; mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
mkV3 : V -> V3 = \v -> lin V3 (v2tov3 (vtov2 v)) ;
} ; } ;
mkPrep = overload { mkPrep = overload {
@@ -301,7 +292,6 @@ oper
= \c -> lin Prep (ResHun.caseAdp c) ; = \c -> lin Prep (ResHun.caseAdp c) ;
mkInterj : Str -> Interj = \s -> lin Interj {s = s} ; mkInterj : Str -> Interj = \s -> lin Interj {s = s} ;
--------------------------------------------------------------------------------
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
} }

View File

@@ -56,7 +56,6 @@ oper
-- Nouns -- Nouns
param param
Gender = Human | NonHuman ;
NumCaseStem = NumCaseStem =
SgNom | SgAccStem | SgSup -- These may use 2-3 different stems SgNom | SgAccStem | SgSup -- These may use 2-3 different stems
@@ -74,16 +73,16 @@ param
Case = Case =
Nom | Acc | Dat Nom | Acc | Dat
| Ill -- Locatives -- | Ill -- Locatives
| Ine | Ine
| Ela | Ela
| All | All
| Ade | Ade
| Abl | Abl
| Sub -- | Sub
| Sup | Sup
| Del -- | Del
| Cau -- Causal-final 'for the purpose of, for the reason that' -- | Cau -- Causal-final 'for the purpose of, for the reason that'
| Ins -- Instrumental | Ins -- Instrumental
| Tra -- Translative | Tra -- Translative
-- | Ess | Ter | For -- | Ess | Ter | For
@@ -199,10 +198,14 @@ param
VForm = VForm =
VInf VInf
| VPres Person Number | VPres Person Number ;
| VPast Person Number
| VPresPart oper
| VAdvPart ;
agr2vf : Person*Number -> VForm = \pn ->
case <pn.p1,pn.p2> of {
<p,n> => VPres p n
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Clauses -- Clauses

View File

@@ -6,11 +6,11 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
UttS s = s ; UttS s = s ;
UttQS qs = qs ; UttQS qs = qs ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
{-
UttImpSg pol imp = UttImpSg pol imp =
{s = pol.s ++ imp.s ! Sg ! pol.p} ;
UttImpPl pol imp = UttImpPl pol imp =
{s = pol.s ++ imp.s ! Pl ! pol.p} ; UttImpPol = UttImpSg ;
UttImpPol = UttImpPl ; -}
UttIP, UttIP,
UttNP = \np -> {s = linNP np} ; UttNP = \np -> {s = linNP np} ;
UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ; UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ;
@@ -24,6 +24,6 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ; -- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = bindComma ++ linNP np} ; -- VocNP np = { s = "," ++ np.s ! … } ; -}
} }

View File

@@ -1,49 +1,40 @@
concrete QuestionHun of Question = CatHun ** open concrete QuestionHun of Question = CatHun ** open
Prelude, ResHun, ParadigmsHun, (NH=NounHun), (VH=VerbHun) in { Prelude, ResHun, ParadigmsHun, (NH=NounHun) in {
-- A question can be formed from a clause ('yes-no question') or -- A question can be formed from a clause ('yes-no question') or
-- with an interrogative. -- with an interrogative.
lincat {-
QVP = VerbPhrase ;
lin lin
-- : Cl -> QCl ; -- : Cl -> QCl ;
QuestCl cl = cl ; QuestCl =
-- : IP -> VP -> QCl ; -- : IP -> VP -> QCl ;
QuestVP ip vp = predVP ip vp ; QuestVP ip vp =
-- : IP -> ClSlash -> QCl ; -- whom does John love -- : IP -> ClSlash -> QCl ; -- whom does John love
QuestSlash ip cls = { QuestSlash ip cls =
s = \\t,a,p => ip.s ! NoPoss ! cls.c2 ++ cls.s ! t ! a ! p
} ;
-- : IAdv -> Cl -> QCl ; -- why does John walk -- : IAdv -> Cl -> QCl ; -- why does John walk
QuestIAdv iadv cls = { QuestIAdv iadv cls =
s = \\t,a,p => iadv.s ++ cls.s ! t ! a ! p
} ;
-- : IComp -> NP -> QCl ; -- where is John? -- : IComp -> NP -> QCl ; -- where is John?
QuestIComp icomp np = { QuestIComp icomp np =
s = \\_,_,p =>
icomp.s ++ if_then_Pol p [] "nem" ++ linNP np
} ;
-- Interrogative pronouns can be formed with interrogative -- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun. -- determiners, with or without a noun.
-- : IDet -> CN -> IP ; -- which five songs -- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn = NH.DetCN idet cn ; IdetCN idet cn = {…} ** NH.DetCN idet cn ;
-- : IDet -> IP ; -- which five -- : IDet -> IP ; -- which five
IdetIP idet = NH.DetNP idet ; IdetIP idet = {…} ** NH.DetNP idet ;
-- They can be modified with adverbs. -- They can be modified with adverbs.
-- : IP -> Adv -> IP ; -- who in Paris -- : IP -> Adv -> IP ; -- who in Paris
AdvIP = NH.AdvNP ; --AdvIP = NH.AdvNP ;
-- Interrogative quantifiers have number forms and can take number modifiers. -- Interrogative quantifiers have number forms and can take number modifiers.
@@ -52,14 +43,12 @@ concrete QuestionHun of Question = CatHun ** open
-- Interrogative adverbs can be formed prepositionally. -- Interrogative adverbs can be formed prepositionally.
-- : Prep -> IP -> IAdv ; -- with whom -- : Prep -> IP -> IAdv ; -- with whom
PrepIP prep ip = {s = applyAdp prep ip} ; PrepIP prep ip = ;
-- They can be modified with other adverbs. -- They can be modified with other adverbs.
-- : IAdv -> Adv -> IAdv ; -- where in Paris -- : IAdv -> Adv -> IAdv ; -- where in Paris
AdvIAdv iadv adv = { -- AdvIAdv iadv adv =
s = iadv.s ++ adv.s
} ;
-- Interrogative complements to copulas can be both adverbs and -- Interrogative complements to copulas can be both adverbs and
-- pronouns. -- pronouns.
@@ -68,16 +57,21 @@ concrete QuestionHun of Question = CatHun ** open
CompIAdv iadv = iadv ; -- where (is it) CompIAdv iadv = iadv ; -- where (is it)
-- : IP -> IComp ; -- : IP -> IComp ;
CompIP ip = {s = ip.s ! NoPoss ! Nom} ; -- who (is it) CompIP ip = {s = ip.s ! Abs} ; -- who (is it)
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$. -- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
-- Wh questions with two or more question words require a new, special category. -- Wh questions with two or more question words require a new, special category.
ComplSlashIP vps ip = VH.insertObj vps ip ; cat
AdvQVP vp iadv = vp ** {adv = vp.adv ++ iadv.s} ; QVP ; -- buy what where
AddAdvQVP qvp iadv = qvp ** {adv = qvp.adv ++ iadv.s} ; fun
QuestQVP ip qvp = predVP ip qvp ; ComplSlashIP : VPSlash -> IP -> QVP ; -- buys what
AdvQVP : VP -> IAdv -> QVP ; -- lives where
AddAdvQVP : QVP -> IAdv -> QVP ; -- buys what where
QuestQVP : IP -> QVP -> QCl ; -- who buys what where
-}
} }

View File

@@ -13,30 +13,16 @@ lin
-- : RP ; -- : RP ;
IdRP = {s = IdRP = {s =
table { table {Sg => caseTable "ami" "amit" "aminek" -- nom, acc, dat
Human => "amibe" "amiben" "amiből" -- ill, ine, ela
table {Sg => caseTable "aki" "akit" "akinek" -- nom, acc, dat "amihez" "aminél" "amitől" -- all, ade, abl
"akibe" "akiben" "akiből" -- ill, ine, ela "amire" "amin" "amiről" -- sub, sup, del
"akihez" "akinél" "akitől" -- all, ade, abl "amiért" "amivel" "amivé" ; -- cau, ins, tra
"akire" "akin" "akiről" -- sub, sup, del Pl => caseTable "amik" "amiket" "amiknek" -- nom, acc, dat
"akiért" "akivel" "akivé" ; -- cau, ins, tra "amikbe" "amikben" "amikből" -- ill, ine, ela
Pl => caseTable "akik" "akiket" "akiknek" -- nom, acc, dat "amikhez" "amiknél" "amiktől" -- all, ade, abl
"akikbe" "akikben" "akikből" -- ill, ine, ela "amikre" "amiken" "amikről" -- sub, sup, del
"akikhez" "akikl" "akiktől" -- all, ade, abl "amikért" "amikkel" "amikké"}; -- cau, ins, tra
"akikre" "akiken" "akikről" -- sub, sup, del
"akikért" "akikkel" "akikké"} ; -- cau, ins, tra
NonHuman =>
table {Sg => caseTable "ami" "amit" "aminek" -- nom, acc, dat
"amibe" "amiben" "amiből" -- ill, ine, ela
"amihez" "aminél" "amitől" -- all, ade, abl
"amire" "amin" "amiről" -- sub, sup, del
"amiért" "amivel" "amivé" ; -- cau, ins, tra
Pl => caseTable "amik" "amiket" "amiknek" -- nom, acc, dat
"amikbe" "amikben" "amikből" -- ill, ine, ela
"amikhez" "amiknél" "amiktől" -- all, ade, abl
"amikre" "amiken" "amikről" -- sub, sup, del
"amikért" "amikkel" "amikké"} -- cau, ins, tra
} ;
} ; } ;
-- : Prep -> NP -> RP -> RP ; -- the mother of whom -- : Prep -> NP -> RP -> RP ; -- the mother of whom

View File

@@ -15,7 +15,7 @@ resource ResHun = NounMorphoHun ** open Prelude, Predef in {
oper oper
CNoun : Type = Noun ** { CNoun : Type = Noun ** {
compl : Number => Case => Str ; compl : Number => Case => Str ;
postmod : Str postmod : Str ;
} ; } ;
mkCaseNoun : Str -> Number => Case => Str = \s -> mkCaseNoun : Str -> Number => Case => Str = \s ->
@@ -75,7 +75,6 @@ oper
agr : Person*Number ; agr : Person*Number ;
objdef : ObjDef ; objdef : ObjDef ;
empty : Str ; -- standard trick for pro-drop empty : Str ; -- standard trick for pro-drop
g : Gender ;
} ; } ;
NounPhrase : Type = BaseNP ** { NounPhrase : Type = BaseNP ** {
@@ -87,7 +86,6 @@ oper
s = \\_,_ => [] ; s = \\_,_ => [] ;
agr = <P3,Sg> ; agr = <P3,Sg> ;
objdef = Indef ; objdef = Indef ;
g = NonHuman ;
postmod, empty = [] ; postmod, empty = [] ;
} ; } ;
@@ -397,24 +395,6 @@ oper
<P3,Pl> => harm "nak" "nek" -- TODO allomorphs -anak, -enek <P3,Pl> => harm "nak" "nek" -- TODO allomorphs -anak, -enek
} ; } ;
endingsPastIndef : VerbEndings = table {
<P1,Sg> => harm3 "tam" "tem" "tem" ;
<P2,Sg> => harm "tál" "tél" ;
<P3,Sg> => harm1 "t" ;
<P1,Pl> => harm "tunk" "tünk" ;
<P2,Pl> => harm3 "tatok" "tetek" "tötök" ;
<P3,Pl> => harm "tak" "tek"
} ;
endingsPastDef : VerbEndings = table {
<P1,Sg> => harm3 "tam" "tem" "tem" ;
<P2,Sg> => harm "tad" "ted" ;
<P3,Sg> => harm "ta" "te" ;
<P1,Pl> => harm "tuk" "tük" ;
<P2,Pl> => harm "tátok" "tétek" ;
<P3,Pl> => harm "ták" "ték"
} ;
BaseVerb : Type = { BaseVerb : Type = {
sc : SubjCase ; -- subject case sc : SubjCase ; -- subject case
} ; } ;
@@ -426,7 +406,7 @@ oper
c2 : Case -- object case c2 : Case -- object case
} ; } ;
Verb3 : Type = Verb2 ** { Verb3 : Type = Verb2 ** {
c3 : Case -- indirect object case -- c3 : Case -- indirect object case
} ; } ;
datV2 : Verb -> Verb2 = \v -> { datV2 : Verb -> Verb2 = \v -> {
@@ -438,44 +418,18 @@ oper
mkVerb2 : Str -> Verb2 = \sg3 -> vtov2 (mkVerb sg3) ; mkVerb2 : Str -> Verb2 = \sg3 -> vtov2 (mkVerb sg3) ;
mkVerb3 : Str -> Verb3 = \sg3 -> v2tov3 (mkVerb2 sg3) ; mkVerb3 : Str -> Verb3 = \sg3 -> v2tov3 (mkVerb2 sg3) ;
futureAux : ObjDef -> Person -> Number -> Str = \od,p,n ->
case <od,p,n> of {
<Indef,P1,Sg> => "fogok" ;
<Indef,P2,Sg> => "fogsz" ;
<Indef,P3,Sg> => "fog" ;
<Indef,P1,Pl> => "fogunk" ;
<Indef,P2,Pl> => "fogtok" ;
<Indef,P3,Pl> => "fognak" ;
<Def,P1,Sg> => "fogom" ;
<Def,P2,Sg> => "fogod" ;
<Def,P3,Sg> => "fogja" ;
<Def,P1,Pl> => "fogjuk" ;
<Def,P2,Pl> => "fogjátok" ;
<Def,P3,Pl> => "fogják"
} ;
vtov2 : Verb -> Verb2 = \v -> v ** { vtov2 : Verb -> Verb2 = \v -> v ** {
s = table { s = table {
Def => let vDef : Verb = mkVerbRegPast endingsDef endingsPastDef Def => let vDef : Verb = mkVerbReg endingsDef (v.s ! VInf) (v.s ! VPres P3 Sg)
(v.s ! VInf) (v.s ! VPres P3 Sg)
in vDef.s ; in vDef.s ;
Indef => v.s } ; Indef => v.s } ;
c2 = Acc c2 = Acc
} ; } ;
v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Dat} ; v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Dat} ;
mkVerb : (sg3 : Str) -> Verb = \sg3 -> mkVerb : (sg3 : Str) -> Verb = mkVerbReg endingsIndef "TODO:infinitive" ; -- TODO
let inf : Str
= case sg3 of {
_ + ("ít" | (#c + #c)) => sg3 + harm3 "ani" "eni" "eni" ! getHarm sg3 ;
_ => sg3 + "ni"
}
in mkVerbReg endingsIndef inf sg3 ;
mkVerbReg : VerbEndings -> (inf, stem : Str) -> Verb = mkVerbReg : VerbEndings -> (inf, stem : Str) -> Verb = \hf,inf,stem ->
\hf,inf,stem -> mkVerbRegPast hf endingsPastIndef inf stem ;
mkVerbRegPast : VerbEndings -> VerbEndings -> (inf, stem : Str) -> Verb = \hf,pastHf,inf,stem ->
let h : Harm = getHarm stem ; let h : Harm = getHarm stem ;
sg1 : Str = stem + hf ! <P1,Sg> ! h ; sg1 : Str = stem + hf ! <P1,Sg> ! h ;
sg2 : Str = stem + hf ! <P2,Sg> ! h ; sg2 : Str = stem + hf ! <P2,Sg> ! h ;
@@ -483,43 +437,10 @@ oper
pl1 : Str = stem + hf ! <P1,Pl> ! h ; pl1 : Str = stem + hf ! <P1,Pl> ! h ;
pl2 : Str = stem + hf ! <P2,Pl> ! h ; pl2 : Str = stem + hf ! <P2,Pl> ! h ;
pl3 : Str = stem + hf ! <P3,Pl> ! h ; pl3 : Str = stem + hf ! <P3,Pl> ! h ;
pastSg1 : Str = stem + pastHf ! <P1,Sg> ! h ; in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf ;
pastSg2 : Str = stem + pastHf ! <P2,Sg> ! h ;
pastSg3 : Str = stem + pastHf ! <P3,Sg> ! h ;
pastPl1 : Str = stem + pastHf ! <P1,Pl> ! h ;
pastPl2 : Str = stem + pastHf ! <P2,Pl> ! h ;
pastPl3 : Str = stem + pastHf ! <P3,Pl> ! h ;
ppart : Str = case sg3 of {
x + "o" + y@("g"|"l") => x+y+"ó" ;
_ + ("ér"|"éz"|"ít") => sg3 + "ő" ;
_ => sg3 + "ó"
} ;
apart : Str = sg3 + harm "va" "ve" ! h
in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart ;
mkVerbPres : (x1,_,_,_,_,_,x7 : Str) -> Verb = mkVerbFull : (x1,_,_,_,_,_,x7 : Str) -> Verb =
\sg1,sg2,sg3,pl1,pl2,pl3,inf -> \sg1,sg2,sg3,pl1,pl2,pl3,inf -> {
let h : Harm = getHarm sg3 ;
pastSg1 : Str = sg3 + endingsPastIndef ! <P1,Sg> ! h ;
pastSg2 : Str = sg3 + endingsPastIndef ! <P2,Sg> ! h ;
pastSg3 : Str = sg3 + endingsPastIndef ! <P3,Sg> ! h ;
pastPl1 : Str = sg3 + endingsPastIndef ! <P1,Pl> ! h ;
pastPl2 : Str = sg3 + endingsPastIndef ! <P2,Pl> ! h ;
pastPl3 : Str = sg3 + endingsPastIndef ! <P3,Pl> ! h ;
ppart : Str = case sg3 of {
x + "o" + y@("g"|"l") => x+y+"ó" ;
_ + ("ér"|"éz"|"ít") => sg3 + "ő" ;
_ => sg3 + "ó"
} ;
apart : Str = sg3 + harm "va" "ve" ! h
in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart ;
mkVerbFull : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb =
\sg1,sg2,sg3,pl1,pl2,pl3,pastSg1,pastSg2,pastSg3,pastPl1,pastPl2,pastPl3,inf,ppart,apart -> {
s = table { s = table {
VInf => inf ; VInf => inf ;
VPres P1 Sg => sg1 ; VPres P1 Sg => sg1 ;
@@ -527,15 +448,7 @@ oper
VPres P3 Sg => sg3 ; VPres P3 Sg => sg3 ;
VPres P1 Pl => pl1 ; VPres P1 Pl => pl1 ;
VPres P2 Pl => pl2 ; VPres P2 Pl => pl2 ;
VPres P3 Pl => pl3 ; VPres P3 Pl => pl3
VPast P1 Sg => pastSg1 ;
VPast P2 Sg => pastSg2 ;
VPast P3 Sg => pastSg3 ;
VPast P1 Pl => pastPl1 ;
VPast P2 Pl => pastPl2 ;
VPast P3 Pl => pastPl3 ;
VPresPart => ppart ;
VAdvPart => apart
} ; } ;
sc = SCNom sc = SCNom
} ; } ;
@@ -547,15 +460,7 @@ oper
"vagyunk" "vagyunk"
"vagytok" "vagytok"
"vannak" "vannak"
"voltam" "lenni" ;
"voltál"
"volt"
"voltunk"
"voltatok"
"voltak"
"lenni"
"levő"
"léve" ;
megvan : Verb = copula ** { megvan : Verb = copula ** {
s = \\vf => "meg" + copula.s ! vf ; s = \\vf => "meg" + copula.s ! vf ;
@@ -584,22 +489,8 @@ oper
adv = [] ; adv = [] ;
} ; } ;
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = vp.adv ++ adv.s} ; insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s} ;
insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = vps.adv ++ adv.s} ; insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = adv.s} ;
infVP : VerbPhrase -> Str = \vp ->
vp.obj ++ vp.adv ++ vp.s ! VInf ;
infVPSlash : VPSlash -> Str = \vps ->
vps.adv ++ vps.s ! Indef ! VInf ;
verbStemFromInf : Str -> Str = \inf ->
case inf of {
stem + "ani" => stem ;
stem + "eni" => stem ;
stem + "ni" => stem ;
_ => inf
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Cl, S -- Cl, S
@@ -624,11 +515,7 @@ oper
SCDat => Dat } SCDat => Dat }
in linNP' NoPoss subjcase np in linNP' NoPoss subjcase np
++ if_then_Pol p [] "nem" ++ if_then_Pol p [] "nem"
++ case <t,np.agr.p1,np.agr.p2> of { ++ vp.s ! agr2vf np.agr
<Past,p,n> => vp.s ! VPast p n ;
<Fut,p,n> => futureAux Indef p n ++ vp.s ! VInf ;
<_,p,n> => vp.s ! VPres p n
}
++ vp.obj -- ! np.agr ++ vp.obj -- ! np.agr
++ vp.adv ++ vp.adv
++ np.empty -- standard trick for prodrop+metavariable problem ++ np.empty -- standard trick for prodrop+metavariable problem
@@ -636,32 +523,27 @@ oper
-- Relative -- Relative
RP : Type = {s : Gender => Number => Case => Str} ; RP : Type = {s : Number => Case => Str} ;
RClause : Type = {s : Tense => Anteriority => Polarity => Gender => Number => Case => Str} ; RClause : Type = {s : Tense => Anteriority => Polarity => Number => Case => Str} ;
relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ; relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ;
relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> { relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> {
s = \\t,a,p,g,n,c => let subjcase : Case = case vp.sc of { s = \\t,a,p,n,c => let subjcase : Case = case vp.sc of {
SCNom => Nom ; SCNom => Nom ;
SCDat => Dat } SCDat => Dat }
in rp.s ! g ! n ! subjcase in rp.s ! n ! subjcase
++ if_then_Pol p [] "nem" ++ if_then_Pol p [] "nem"
++ vp.obj -- ! <rp.agr.p1,n> ++ vp.obj -- ! <rp.agr.p1,n>
++ vp.adv ++ vp.adv
++ case <t,rp.agr.p1,n> of { ++ vp.s ! VPres rp.agr.p1 n -- variable by number
<Past,p,n> => vp.s ! VPast p n ;
<Fut,p,n> => futureAux Indef p n ++ vp.s ! VInf ;
<_,p,n> => vp.s ! VPres p n
} -- variable by number
} ; } ;
relSlash : RP -> ClSlash -> RClause = \rp,cls -> { relSlash : RP -> ClSlash -> RClause = \rp,cls -> {
s = \\t,a,p,g,n,c => let objcase : Case = case cls.c2 of { s = \\t,a,p,n,c => let objcase : Case = case cls.c2 of {
Acc => c ; Acc => c ;
_ => cls.c2 _ => cls.c2 }
} in rp.s ! n ! objcase
in rp.s ! g ! n ! objcase
++ cls.s ! t ! a ! p ++ cls.s ! t ! a ! p
} ; } ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@@ -11,24 +11,16 @@ lin
PredVP = predVP ; PredVP = predVP ;
-- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94) -- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94)
PredSCVP sc vp = predVP (indeclNP sc.s) vp ; --PredSCVP sc vp = ;
--2 Clauses missing object noun phrases --2 Clauses missing object noun phrases
-- : NP -> VPSlash -> ClSlash ; -- : NP -> VPSlash -> ClSlash ;
SlashVP np vps = predVP np (vps ** {s = vps.s ! Indef ; obj = []}) ; SlashVP np vps = predVP np (vps ** {s = vps.s ! Indef ; obj = []}) ;
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** {
s = \\t,a,p => cls.s ! t ! a ! p ++ adv.s
} ;
-- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
SlashPrep cl prep = cl ** {
c2 = prep.c ;
s = \\t,a,p => cl.s ! t ! a ! p ++ prep.s
} ;
{- {-
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** insertAdv adv cls ;
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves -- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
-- SlashVS np vs ss = {} ; -- SlashVS np vs ss = {} ;
@@ -39,27 +31,21 @@ lin
} ; } ;
--2 Imperatives --2 Imperatives
-}
-- : VP -> Imp ; -- : VP -> Imp ;
ImpVP vp = { ImpVP vp = {s = \\num,pol => linVP (VImp num pol) Statement vp} ;
s = \\num,pol =>
if_then_Pol pol [] "ne"
++ vp.s ! VPres P2 num
++ vp.obj
++ vp.adv
} ;
-- : Adv -> Imp -> Imp ; --2 Embedded sentences
AdvImp adv imp = {
s = \\num,pol => adv.s ++ imp.s ! num ! pol
} ;
--2 Sentences
-- : S -> SC ; -- : S -> SC ;
EmbedS s = {s = s.s} ; EmbedS s = {s = s.s ! True} ; -- choose subordinate
-- : QS -> SC ; -- : QS -> SC ;
EmbedQS qs = {s = qs.s} ; -- EmbedQS qs = { } ;
-- : VP -> SC ;
EmbedVP vp = {s = infVP vp} ;
-}
--2 Sentences
-- : Temp -> Pol -> Cl -> S ; -- : Temp -> Pol -> Cl -> S ;
UseCl t p cl = { UseCl t p cl = {
@@ -70,7 +56,7 @@ lin
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ; UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
-- : Temp -> Pol -> RCl -> RS ; -- : Temp -> Pol -> RCl -> RS ;
UseRCl t p cl = {s = \\g,n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! g ! n ! c} ; UseRCl t p cl = {s = \\n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! n ! c} ;
-- AdvS : Adv -> S -> S ; -- then I will go home -- AdvS : Adv -> S -> S ; -- then I will go home
AdvS = advS "" ; AdvS = advS "" ;
@@ -79,9 +65,7 @@ lin
ExtAdvS = advS (SOFT_BIND ++ ","); ExtAdvS = advS (SOFT_BIND ++ ",");
-- : S -> Subj -> S -> S ; -- : S -> Subj -> S -> S ;
SSubjS s1 subj s2 = { -- SSubjS s1 subj s2 = AdvS (AK.SubjS subj s2) s1 ;
s = s1.s ++ bindComma ++ subj.s ++ s2.s
} ;
-- : S -> RS -> S ; -- she sleeps, which is good -- : S -> RS -> S ; -- she sleeps, which is good
-- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ; -- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;

View File

@@ -121,54 +121,21 @@ lin under_Prep = nomAdp "alatt" ;
-- Pron -- Pron
-- Pronouns are closed class, no constructor in ParadigmsHun. -- Pronouns are closed class, no constructor in ParadigmsHun.
i_Pron = pronTable ! <P1,Sg> ** {g = Human} ; i_Pron = pronTable ! <P1,Sg> ;
youPol_Pron, youPol_Pron,
youSg_Pron = pronTable ! <P2,Sg> ** {g = Human} ; youSg_Pron = pronTable ! <P2,Sg> ;
he_Pron, he_Pron,
she_Pron = pronTable ! <P3,Sg> ** {g = Human} ; she_Pron,
it_Pron = pronTable ! <P3,Sg> ; it_Pron = pronTable ! <P3,Sg> ;
we_Pron = pronTable ! <P1,Pl> ** {g = Human} ; we_Pron = pronTable ! <P1,Pl> ;
youPl_Pron = pronTable ! <P2,Pl> ** {g = Human} ; youPl_Pron = pronTable ! <P2,Pl> ;
they_Pron = pronTable ! <P3,Pl> ** {g = Human} ; they_Pron = pronTable ! <P3,Pl> ;
--lin whatPl_IP = ;
--lin whatSg_IP = :
--lin whoPl_IP = ;
--lin whoSg_IP = ;
lin whatPl_IP = emptyNP ** {
s = \\_ => caseTable "mi" "mit" "minek"
"mibe" "miben" "miből"
"mihez" "minél" "mitől"
"mire" "min" "miről"
"miért" "mivel" "mivé" ;
agr = <P3,Pl> ;
objdef = Def
} ;
lin whatSg_IP = emptyNP ** {
s = \\_ => caseTable "mi" "mit" "minek"
"mibe" "miben" "miből"
"mihez" "minél" "mitől"
"mire" "min" "miről"
"miért" "mivel" "mivé" ;
agr = <P3,Sg> ;
objdef = Def
} ;
lin whoPl_IP = emptyNP ** {
s = \\_ => caseTable "ki" "kit" "kinek"
"kibe" "kiben" "kiből"
"kihez" "kinél" "kitől"
"kire" "kin" "kiről"
"kiért" "kivel" "kivé" ;
agr = <P3,Pl> ;
objdef = Def ;
g = Human
} ;
lin whoSg_IP = emptyNP ** {
s = \\_ => caseTable "ki" "kit" "kinek"
"kibe" "kiben" "kiből"
"kihez" "kinél" "kitől"
"kire" "kin" "kiről"
"kiért" "kivel" "kivé" ;
agr = <P3,Pl> ;
objdef = Def ;
g = Human
} ;
------- -------
-- Subj -- Subj

View File

@@ -21,59 +21,48 @@ lin
-- } ; -- } ;
-- : VS -> S -> VP ; -- : VS -> S -> VP ;
ComplVS vs s = useV vs ** { -- ComplVS vs s =
adv = "hogy" ++ s.s -- let vps = useV vs ;
} ; -- subord = SubjS {s=""} s ;
-- in vps ** {} ;
{-
-- : VQ -> QS -> VP ; -- : VQ -> QS -> VP ;
ComplVQ vq qs = useV vq ** { ComplVQ vq qs = ;
adv = qs.s
} ;
-- : VA -> AP -> VP ; -- they become red -- : VA -> AP -> VP ; -- they become red
ComplVA va ap = useV va ** { ComplVA va ap = ResHun.insertObj (CompAP ap).s (useV va) ;
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg
} ;
-------- --------
-- Slash -- Slash
-}
-- : V2 -> VPSlash -- : V2 -> VPSlash
SlashV2a = ResHun.useVc ; SlashV2a = ResHun.useVc ;
{-
-- : V3 -> NP -> VPSlash ; -- give it (to her) -- : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v3 np = v3 ** {
adv = np.s ! NoPoss ! v3.c2 ++ np.postmod ;
c2 = v3.c3
} ;
-- : V3 -> NP -> VPSlash ; -- give (it) to her -- : V3 -> NP -> VPSlash ; -- give (it) to her
Slash3V3 v3 np = v3 ** { Slash2V3,
adv = np.s ! NoPoss ! v3.c3 ++ np.postmod ; Slash3V3 = \v3 -> insertObj (useVc3 v3) ;
c2 = v3.c2
} ;
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good -- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
SlashV2S v2s s = useVc v2s ** { SlashV2S v2s s =
adv = "hogy" ++ s.s let vps = useVc v2s ;
} ; subord = SubjS {s=""} s ;
in vps ** {obj = } ;
-- : V2V -> VP -> VPSlash ; -- beg (her) to go -- : V2V -> VP -> VPSlash ; -- beg (her) to go
SlashV2V v2v vp = useVc v2v ** { SlashV2V v2v vp = ;
adv = infVP vp
} ;
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came -- : V2Q -> QS -> VPSlash ; -- ask (him) who came
SlashV2Q v2q qs = useVc v2q ** { SlashV2Q v2q qs = ;
adv = qs.s
} ;
-- : V2A -> AP -> VPSlash ; -- paint (it) red -- : V2A -> AP -> VPSlash ; -- paint (it) red
SlashV2A v2a ap = useVc v2a ** { SlashV2A v2a ap = useVc v2a ** {
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg aComp = \\_ => (CompAP ap).aComp ! Sg3 Masc
} ; } ;
-}
-- : VPSlash -> NP -> VP -- : VPSlash -> NP -> VP
ComplSlash = insertObj ; ComplSlash = insertObj ;
{- {-
@@ -100,27 +89,19 @@ lin
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here -- : VPSlash -> Adv -> VPSlash ; -- use (it) here
AdvVPSlash = insertAdvSlash ; AdvVPSlash = insertAdvSlash ;
{-
-- : VP -> Adv -> VP ; -- sleep , even though ... -- : VP -> Adv -> VP ; -- sleep , even though ...
ExtAdvVP vp adv = vp ** { ExtAdvVP vp adv = vp ** { } ;
adv = vp.adv ++ bindComma ++ adv.s
} ;
-- : AdV -> VP -> VP ; -- always sleep -- : AdV -> VP -> VP ; -- always sleep
AdVVP adv vp = vp ** { AdVVP adv vp = vp ** { } ;
s = \\vf => adv.s ++ vp.s ! vf
} ;
-- : AdV -> VPSlash -> VPSlash ; -- always use (it) -- : AdV -> VPSlash -> VPSlash ; -- always use (it)
AdVVPSlash adv vps = vps ** { AdVVPSlash adv vps = vps ** { } ;
s = \\o,vf => adv.s ++ vps.s ! o ! vf
} ;
-- : VP -> Prep -> VPSlash ; -- live in (it) -- : VP -> Prep -> VPSlash ; -- live in (it)
VPSlashPrep vp prep = vp ** { VPSlashPrep vp prep =
s = \\_ => vp.s ; -}
adv = vp.obj ++ vp.adv ++ prep.s ;
c2 = prep.c
} ;
--2 Complements to copula --2 Complements to copula
@@ -130,10 +111,8 @@ lin
CompAP ap = UseCopula ** { CompAP ap = UseCopula ** {
s = \\vf => case vf of { s = \\vf => case vf of {
VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ; VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ;
VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ; VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ;
VPast _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ; _ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg } ;
_ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg
} ;
} ; } ;
-- : CN -> Comp ; -- : CN -> Comp ;
@@ -185,13 +164,9 @@ insertObj : ResHun.VPSlash -> NounPhrase -> VerbPhrase = \vps,np -> vps ** {
<SCDat,Nom> => <SCDat,Nom> =>
let agr : Person*Number = case vf of { let agr : Person*Number = case vf of {
VPres p n => <p,n> ; VPres p n => <p,n> ;
VPast p n => <p,n> ;
_ => <P3,Sg> } ; _ => <P3,Sg> } ;
objvf : VForm = case vf of {
VPast _ _ => VPast np.agr.p1 np.agr.p2 ;
_ => VPres np.agr.p1 np.agr.p2 } ;
in np.s ! Poss agr.p1 agr.p2 ! vps.c2 in np.s ! Poss agr.p1 agr.p2 ! vps.c2
++ vps.s ! np.objdef ! objvf ; ++ vps.s ! np.objdef ! agr2vf np.agr ;
-- Default case: Verb agrees in person and number with subject -- Default case: Verb agrees in person and number with subject
_ => vps.s ! np.objdef ! vf } ; _ => vps.s ! np.objdef ! vf } ;

View File

@@ -1,6 +1,6 @@
--# -path=.:abstract:common:prelude --# -path=.:abstract:common:prelude
concrete CatLav of Cat = CommonX - [Adv, CAdv, Voc] ** open ResLav, Prelude in { concrete CatLav of Cat = CommonX - [Adv, CAdv] ** open ResLav, Prelude in {
flags flags
@@ -110,17 +110,6 @@ lincat
N3 = Noun ** {prep1, prep2 : Preposition ; isPre1, isPre2 : Bool} ; N3 = Noun ** {prep1, prep2 : Preposition ; isPre1, isPre2 : Bool} ;
-- TODO Make most proper nouns more similar to nouns:
-- (1) given names GN should have both numbers (to fit with Tēzaurs and to be
-- able to express that there are multiple people in the room with the
-- same name)
-- (2) family names SN being inflected on gender doesn't fit neither with
-- Tēzaurs, nor with the fact that for some masc surnames there are
-- multiple legaly valid fem variants
-- (3) if PN is meant to be generic proper noun, it might also be inflected
-- in number
-- In general Latvian tends to make every noun inflectable in all cases/numbers,
-- the plural-only placenames like "Cēsis" is the one very stable exception.
PN,LN = ProperNoun ; PN,LN = ProperNoun ;
GN = {s : Case => Str ; gend : Gender} ; GN = {s : Case => Str ; gend : Gender} ;
SN = {s : Gender => Case => Str; pl : Case => Str} ; SN = {s : Gender => Case => Str; pl : Case => Str} ;

View File

@@ -80,8 +80,7 @@ oper
mkNounByDeclPal : Str -> Declension -> Bool -> Noun = \lemma,decl,pal -> mkNounByDeclPal : Str -> Declension -> Bool -> Noun = \lemma,decl,pal ->
case decl of { case decl of {
D0|D1|D2|D3 => mkNounByGendDeclPal lemma Masc decl pal ; D0|D1|D2|D3 => mkNounByGendDeclPal lemma Masc decl pal ;
D4|D5|D6|DR => mkNounByGendDeclPal lemma Fem decl pal ; D4|D5|D6|DR => mkNounByGendDeclPal lemma Fem decl pal
DG => mkNounByGendDeclPal nonExist Fem decl pal -- FIX ME REMAKE
} ; } ;
-- Specified gender and declension; default palatalization -- Specified gender and declension; default palatalization
@@ -98,8 +97,7 @@ oper
D4 => mkNoun_D4 lemma gend ; D4 => mkNoun_D4 lemma gend ;
D5 => mkNoun_D5 lemma gend pal ; D5 => mkNoun_D5 lemma gend pal ;
D6 => mkNoun_D6 lemma gend pal ; D6 => mkNoun_D6 lemma gend pal ;
DR => mkNoun_DR lemma ; DR => mkNoun_DR lemma
DG => mkNoun_DR nonExist -- FIX ME REMAKE
} ; } ;
-- Indeclinable noun -- Indeclinable noun

View File

@@ -43,15 +43,13 @@ oper
mkRegVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj -> mkRegVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj ->
case conj of { case conj of {
C2 => mkVerb_C2 lemma ; C2 => mkVerb_C2 lemma ;
C3 => mkVerb_C3 lemma ; C3 => mkVerb_C3 lemma
C1|CI => mkVerb_C3 nonExist -- FIX ME REMAKE
} ; } ;
mkReflVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj -> mkReflVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj ->
case conj of { case conj of {
C2 => mkVerb_C2_Refl lemma ; C2 => mkVerb_C2_Refl lemma ;
C3 => mkVerb_C3_Refl lemma ; C3 => mkVerb_C3_Refl lemma
C1|CI => mkVerb_C3_Refl nonExist -- FIX ME REMAKE
} ; } ;
filter_Neg : Verb_TMP -> Verb_TMP = \full -> { filter_Neg : Verb_TMP -> Verb_TMP = \full -> {

View File

@@ -1,574 +0,0 @@
--# -path=.:abstract:common:prelude
-- Contents of this file are automatically ported paradigms from
-- https://github.com/LUMII-AILab/Morphology/blob/master/src/main/resources/Lexicon_v2.xml
-- NB: Do NOT edit this without consulting lauma@ailab.lv or normundsg@ailab.lv
-- Otherwise your changes might get accidentally revoked!
resource PortedMorphoParadigmsLav = open PortedMorphoStemchangesLav, ResLav in {
flags coding = utf8 ;
oper
noun_1a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "s" ;
Voc => variants { stem + "s" ; stem + "" } ;
Gen => stem + "a"
}
} ;
gend = Masc
} ;
noun_1a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_1a_fromStems stem ;
_ => Predef.error ("noun_1a_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_1a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_1a_fromStems stem ;
_ => Predef.error ("noun_1a_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_1b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "š" ;
Voc => variants { stem + "š" ; stem + "" } ;
Gen => stem + "a"
}
} ;
gend = Masc
} ;
noun_1b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "š" => noun_1b_fromStems stem ;
_ => Predef.error ("noun_1b_fromLemma is only applicable for words that end in -š, tried to apply to" ++ lemma)
} ;
noun_1b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_1b_fromStems stem ;
_ => Predef.error ("noun_1b_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "is" ;
Voc => stem + "i" ;
Gen => stemchangeSimple 1 stem + "a"
}
} ;
gend = Masc
} ;
noun_2a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_2a_fromStems stem ;
_ => Predef.error ("noun_2a_fromLemma is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_2a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2a_fromStems stem ;
_ => Predef.error ("noun_2a_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2c_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => variants { stem + "" ; stem + "s" } ;
Gen => stem + "s"
}
} ;
gend = Masc
} ;
noun_2c_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_2c_fromStems stem ;
_ => Predef.error ("noun_2c_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_2c_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2c_fromStems stem ;
_ => Predef.error ("noun_2c_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2d_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "i" ;
Gen => stemchangeSimple 1 stem + "a"
}
} ;
gend = Masc
} ;
noun_2d_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_2d_fromStems stem ;
_ => Predef.error ("noun_2d_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_2d_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2d_fromStems stem ;
_ => Predef.error ("noun_2d_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_3m_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "um" ;
Loc => stem + "ū" ;
Nom => stem + "us" ;
Voc => variants { stem + "us" ; stem + "u" } ;
Gen => stem + "us"
}
} ;
gend = Masc
} ;
noun_3m_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3m_fromStems stem ;
_ => Predef.error ("noun_3m_fromLemma is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_3m_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_3m_fromStems stem ;
_ => Predef.error ("noun_3m_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_4f_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "as" ;
Dat => stem + "ām" ;
Loc => stem + "ās" ;
Nom => stem + "as" ;
Voc => stem + "as" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "ai" ;
Loc => stem + "ā" ;
Nom => stem + "a" ;
Voc => variants { stem + "a" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "as"
}
} ;
gend = Fem
} ;
noun_4f_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "a" => noun_4f_fromStems stem ;
_ => Predef.error ("noun_4f_fromLemma is only applicable for words that end in -a, tried to apply to" ++ lemma)
} ;
noun_4f_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "as" => noun_4f_fromStems stem ;
_ => Predef.error ("noun_4f_fromNomPl is only applicable for words that end in -as, tried to apply to" ++ lemma)
} ;
noun_4m_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "as" ;
Dat => stem + "ām" ;
Loc => stem + "ās" ;
Nom => stem + "as" ;
Voc => stem + "as" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "a" ;
Voc => stem + "a" ;
Gen => stem + "as"
}
} ;
gend = Masc
} ;
noun_4m_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "a" => noun_4m_fromStems stem ;
_ => Predef.error ("noun_4m_fromLemma is only applicable for words that end in -a, tried to apply to" ++ lemma)
} ;
noun_4m_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "as" => noun_4m_fromStems stem ;
_ => Predef.error ("noun_4m_fromNomPl is only applicable for words that end in -as, tried to apply to" ++ lemma)
} ;
noun_5fa_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ei" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => variants { stem + "e" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "es"
}
} ;
gend = Fem
} ;
noun_5fa_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5fa_fromStems stem ;
_ => Predef.error ("noun_5fa_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5fa_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5fa_fromStems stem ;
_ => Predef.error ("noun_5fa_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_5ma_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "em" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => stem + "e" ;
Gen => stem + "es"
}
} ;
gend = Masc
} ;
noun_5ma_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5ma_fromStems stem ;
_ => Predef.error ("noun_5ma_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5ma_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5ma_fromStems stem ;
_ => Predef.error ("noun_5ma_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_6a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "is" ;
Dat => stem + "īm" ;
Loc => stem + "īs" ;
Nom => stem + "is" ;
Voc => stem + "is" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ij" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "s" ;
Gen => stem + "s"
}
} ;
gend = Fem
} ;
noun_6a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_6a_fromStems stem ;
_ => Predef.error ("noun_6a_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_6a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_6a_fromStems stem ;
_ => Predef.error ("noun_6a_fromNomPl is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_3f_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "ūm" ;
Loc => stem + "ūs" ;
Nom => stem + "us" ;
Voc => stem + "us" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "ui" ;
Loc => stem + "ū" ;
Nom => stem + "us" ;
Voc => variants { stem + "us" ; stem + "u" } ;
Gen => stem + "us"
}
} ;
gend = Fem
} ;
noun_3f_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3f_fromStems stem ;
_ => Predef.error ("noun_3f_fromLemma is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_3f_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3f_fromStems stem ;
_ => Predef.error ("noun_3f_fromNomPl is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_6b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "is" ;
Dat => stem + "īm" ;
Loc => stem + "īs" ;
Nom => stem + "is" ;
Voc => stem + "is" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ij" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "s" ;
Gen => stem + "s"
}
} ;
gend = Fem
} ;
noun_6b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_6b_fromStems stem ;
_ => Predef.error ("noun_6b_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_6b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_6b_fromStems stem ;
_ => Predef.error ("noun_6b_fromNomPl is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_5fb_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ei" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => variants { stem + "e" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "es"
}
} ;
gend = Fem
} ;
noun_5fb_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5fb_fromStems stem ;
_ => Predef.error ("noun_5fb_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5fb_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5fb_fromStems stem ;
_ => Predef.error ("noun_5fb_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_5mb_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "em" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => stem + "e" ;
Gen => stem + "es"
}
} ;
gend = Masc
} ;
noun_5mb_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5mb_fromStems stem ;
_ => Predef.error ("noun_5mb_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5mb_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5mb_fromStems stem ;
_ => Predef.error ("noun_5mb_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_2b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "is" ;
Voc => stem + "i" ;
Gen => variants { stem + "a" ; stemchangeSimple 1 stem + "a" }
}
} ;
gend = Masc
} ;
noun_2b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_2b_fromStems stem ;
_ => Predef.error ("noun_2b_fromLemma is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_2b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2b_fromStems stem ;
_ => Predef.error ("noun_2b_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
}

View File

@@ -1,105 +0,0 @@
--# -path=.:abstract:common:prelude
-- Here goes manually ported stemchanges from
-- https://github.com/LUMII-AILab/Morphology/blob/master/src/main/java/lv/semti/morphology/analyzer/Mijas.java
resource PortedMorphoStemchangesLav = open Prelude, Predef, ResLav in {
flags coding = utf8 ;
oper
stemchangeSimple : Int -> Str -> Str = \parId,stem ->
case parId of {
0 => stem ;
-- For nouns we need changes 0, 1, 17
1 => case stem of { -- nouns
s + ("kst") => s + "kš" ;
s + ("nst") => s + "nš" ;
s + ("ll") => s + "ļļ" ;
s + ("sl") => s + "šļ" ;
s + ("zl") => s + "žļ" ;
s + ("ln") => s + "ļņ" ;
s + ("nn") => s + "ņņ" ;
s + ("sn") => s + "šņ" ;
s + ("zn") => s + "žņ" ;
s + ("īt") => s + "īš" ;
s + ("d") => s + "ž" ;
s + ("t") => s + "š" ;
s + ("n") => s + "ņ" ;
s + ("s") => s + "š" ;
s + ("z") => s + "ž" ;
s + ("b"|"f"|"m"|"p"|"v") => stem + "j" ;
_ => stem
} ;
17 => case <stem, countSyllables stem > of { -- shortened vocative for fem nouns
<s + ("īt"|"iņ"), _ > => stem ;
--<_, 0|1> => variants {} ;
<_, 0|1> => nonExist ; -- Exception
<_, _> => stem
} ;
-- For full adjectives we need changes 0, 3, 34, 13
_ => error ("Unsupported stemchange")
};
stemchangeForAdjAdv : Int -> Str -> Definiteness -> Degree -> Str = \parId,stem,defi,deg ->
case parId of {
3 => case stem of {
s + "āk" => case deg of {
Posit => stem ;
_ => nonExist -- TODO what should go there for nonexisting forms?
};
_ => case deg of {
Posit => stem ;
Compar => stem + "āk" ;
Superl => case defi of {
Def => "vis" + stem + "āk" ;
Indef => nonExist
}
}
} ;
34 => case deg of { -- pēdēj-ais -> pēdē-jam, zaļ-š -> zaļa-jam
Posit => case stem of {
s + "ēj" => s + "ē" ;
_ => stem + "a"
} ;
Compar => stem + "āka" ;
Superl => case defi of {
Def => "vis" + stem + "āka" ;
Indef => nonExist
}
} ;
_ => case deg of { _ => stemchangeSimple parId stem }
} ;
-- Inari's trick for counting syllables https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#cute-way-to-count-syllables
-- pattern macro for vowels
v : pattern Str = #("a"|"ā"|"e"|"ē"|"i"|"ī"|"o"|"u"|"ū") ;
-- type alias for the helper function
SylCnt : Type = Bool -> Str -> Ints 10 ;
countSyllables : Str -> Ints 10 = go count False
where { -- synonym of let
go : SylCnt -> SylCnt = \f,wasVowel,word -> -- These three arguments come from the fact that SylCnt is the abovedefined 3rd order function.
case <word,wasVowel> of {
<#v + s, False> => Predef.plus (f True s) 1 ;
<#v + s, True> => f True s ;
<? + s, _> => f False s ;
_ => 0
} ;
-- end of recursion
scBase : SylCnt = \_,_ -> 0 ;
-- the function given to countSyllables
count : SylCnt = go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go scBase)))))))))))))))))))))))))))))))))))))))
} ;
}

View File

@@ -1,53 +0,0 @@
--# -path=.:abstract:common:prelude
-- Here goes manually made utils used for automaticaly exported Tēzaurs lexicon.
resource PortedMorphoUtilsLav = open Prelude, Predef, ResLav in {
flags coding = utf8 ;
oper
changeNounForm : Number -> Case -> Str -> Noun -> Noun =
\N,C,form,noun -> noun ** {
s = \\n,c => case <n,N,c,C> of {
<Sg, Sg, Nom, Nom> |
<Sg, Sg, Gen, Gen> |
<Sg, Sg, Dat, Dat> |
<Sg, Sg, Voc, Voc> |
<Pl, Pl, Nom, Nom> |
<Pl, Pl, Gen, Gen> |
<Pl, Pl, Dat, Dat> |
<Pl, Pl, Voc, Voc> => form ;
_ => noun.s ! n ! c }
} ;
addNounForm : Number -> Case -> Str -> Noun -> Noun =
\N,C,form,noun -> noun ** {
s = \\n,c => case <n,N,c,C> of {
<Sg, Sg, Nom, Nom> |
<Sg, Sg, Gen, Gen> |
<Sg, Sg, Dat, Dat> |
<Sg, Sg, Voc, Voc> |
<Pl, Pl, Nom, Nom> |
<Pl, Pl, Gen, Gen> |
<Pl, Pl, Dat, Dat> |
<Pl, Pl, Voc, Voc> => variants {form ; noun.s ! n ! c} ;
_ => noun.s ! n ! c }
} ;
{- A note about GF restrictions as of 2025-08-27:
Following thing does not work, compiler asumes that N an C are free variables.
changeForm_ideal : Number -> Case -> Str -> Noun -> Noun ;
changeForm_ideal N C str noun = noun ** {NF N C => str} ;
Meanwhile this should work
changeForm_fixed : Str -> Noun -> Noun ;
changeForm_fixed str noun = noun ** {NF Sg Nom => str} ;
Related: https://github.com/GrammaticalFramework/gf-core/issues/198
Also Inari suggested to avoid using a function and write this thing inline:
Noun : Type = {s : NForm => Str} ;
myRegularNoun = {- … some noun …- } ;
mySpecialNoun = {s = myRegularNoun.s ** {NF Sg Acc => "special form"}} ;
-}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
# Latvian GF Resource Grammar
There is an ongoing work to develop a wide-coverage reimplementation of the Latvian RGL morphology, based on [Tezaurs.lv](https://tezaurs.lv) dictionary data. Currently, the reimplementation covers noun paradigms and lexical entries, which will be followed by other parts of speech, eventually substituting the legacy Latvian RGL morphology.
The reimplemented morphology and lexicon module consists of the following components:
- `PortedMorphoParadigmsLav.gf`: automatically converted paradigm desrciptions from the [Latvian Morphological Toolkit](https://github.com/LUMII-AILab/Morphology/); please, DO NOT EDIT.
- `PortedMorphoStemchangesLav.gf`: manually ported stemchange functions for the above mentioned paradigms; must be kept aligned with the [source code](https://github.com/LUMII-AILab/Morphology/blob/master/src/main/java/lv/semti/morphology/analyzer/Mijas.java) of the toolkit.
- `PortedTezaursDictLav.gf` and `PortedTezaursDictLavAbs.gf`: automatically exported lexicon data from [Tezaurs.lv](https://tezaurs.lv); please, DO NOT EDIT.
- `PortedMorphoUtilsLav.gf`: utility functions.
For edits and improvements, please, contact us at lauma@ailab.lv!
## Acknowledgements
The work on porting Tezaurs.lv inflectional paradigms to GF and creating a wide-coverage computational GF lexicon for Latvian was funded by the Latvian Council of Science under the grant agreement lzp-2022/1-0443 ([Advancing Latvian Computational Lexical Resources for Natural Language Understanding and Generation](https://wordnet.ailab.lv/project2)).

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