mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-30 02:58:35 -06:00
Compare commits
77 Commits
fix-somali
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 98128249bd | |||
| 1e581fbd10 | |||
| f2ac424bfe | |||
| e65469ffb2 | |||
| 8458a74e25 | |||
| 7156f488dd | |||
| ff44b03344 | |||
| 4282523f2f | |||
| d8208cba24 | |||
| 0a03e037f4 | |||
| 0201d62777 | |||
| b8bb7f1d72 | |||
| fe56b729b4 | |||
| cab232a4f6 | |||
| cdeaf5a271 | |||
| 60e38122d0 | |||
| 800e2b0dda | |||
| 84bdce7cc8 | |||
| add5029b7a | |||
| 19ba581f0e | |||
| a890a1aad5 | |||
| 26a1e55cbe | |||
| 992e670c10 | |||
| eea95a6f76 | |||
| f1facac1bf | |||
| c5bb0dacb5 | |||
| 44ea945c8c | |||
| 9265270a0c | |||
| 86e2afcfc0 | |||
| 6115d44398 | |||
| cf6a376272 | |||
| 3a8527689c | |||
| 416d37eee7 | |||
| c4d578cac3 | |||
| a7341d9be1 | |||
| 57ef377e6d | |||
| 3a133d035d | |||
| 912ddd521f | |||
| 945bc086f2 | |||
| 70806027c1 | |||
| 88a3759a9e | |||
| 1910010e70 | |||
| 0cd851aa10 | |||
| 2b07314680 | |||
| a3e19ed673 | |||
| b571d86b7c | |||
| 6064e69d8e | |||
| 510abc0364 | |||
| 331a07bd35 | |||
| 34ba4cf564 | |||
| 5a9ab2cbdf | |||
| 97b8cb72aa | |||
| 09087c1944 | |||
| f497b4a63a | |||
| 56e97ebfff | |||
| 16c19eb4b0 | |||
| 35f5d9a68b | |||
| 0f78e35bed | |||
| bff00560d5 | |||
| ba922b5daa | |||
| f261b2f45b | |||
| 939e96fb6c | |||
| 3da5f0d318 | |||
| 37d915c879 | |||
| b69c3518a7 | |||
| 0896a77049 | |||
| 7225033a03 | |||
| ed27aa97fc | |||
| de3d59c7e8 | |||
| 03024d7b72 | |||
| f6187834c4 | |||
| 842747b407 | |||
| fe2dde5a2c | |||
| 2adce20f76 | |||
| b8a0e7adfe | |||
| e4cf12ee1a | |||
| 943f387a23 |
@@ -15,7 +15,7 @@ concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
|
||||
lincat Conj = {s : Str} ;
|
||||
lincat DAP = {s : Str} ;
|
||||
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
|
||||
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
|
||||
lincat Det = {s : Case => Gender => Str; sp : Species; n : Number} ;
|
||||
lincat Digits = {s : Str; n : Number; tail : DTail} ;
|
||||
lincat GN = {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 QCl = {s : Str} ;
|
||||
lincat QS = {s : Str} ;
|
||||
lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
|
||||
lincat Quant = {s : Case => Gender => Number => Str; sp : Species} ;
|
||||
lincat RCl = {s : Str} ;
|
||||
lincat RP = {s : Str} ;
|
||||
lincat RS = {s : Str} ;
|
||||
|
||||
@@ -4,7 +4,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
|
||||
|
||||
lin
|
||||
DetCN det cn = {
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ;
|
||||
a = agrgP3 cn.g det.n
|
||||
} ;
|
||||
|
||||
@@ -13,7 +13,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
|
||||
DetQuant quant num = {
|
||||
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
|
||||
n = num.n ;
|
||||
spec = quant.spec
|
||||
sp = quant.sp
|
||||
} ;
|
||||
|
||||
NumSg = {s = []; n = Sg} ;
|
||||
@@ -21,12 +21,12 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
|
||||
|
||||
DefArt = {
|
||||
s = \\c,g,n => [] ;
|
||||
spec = Def
|
||||
sp = Def
|
||||
} ;
|
||||
|
||||
IndefArt = {
|
||||
s = \\c,g => table Number ["një"; []] ;
|
||||
spec = Indef
|
||||
sp = Indef
|
||||
} ;
|
||||
|
||||
UseN n = n ;
|
||||
|
||||
@@ -1327,7 +1327,7 @@ oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
|
||||
}
|
||||
}
|
||||
} ;
|
||||
spec = Indef
|
||||
sp = Indef
|
||||
} ;
|
||||
|
||||
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
|
||||
@@ -1350,7 +1350,7 @@ oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
|
||||
Fem => f8
|
||||
}
|
||||
} ;
|
||||
spec = Indef ;
|
||||
sp = Indef ;
|
||||
n = n
|
||||
} ;
|
||||
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
concrete AdjectiveBel of Adjective = CatBel ** {
|
||||
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in {
|
||||
lin
|
||||
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} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
concrete AllBel of AllBelAbs =
|
||||
LangBel
|
||||
LangBel,
|
||||
ExtendBel
|
||||
**
|
||||
{} ;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
abstract AllBelAbs =
|
||||
Lang
|
||||
Lang,
|
||||
Extend
|
||||
** {}
|
||||
+63
-16
@@ -1,21 +1,68 @@
|
||||
concrete CatBel of Cat = CommonX ** open ResBel in {
|
||||
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in {
|
||||
|
||||
lincat N = Noun ;
|
||||
lincat N2 = Noun ** {c2 : Compl} ;
|
||||
lincat N3 = Noun ** {c2,c3 : Compl} ;
|
||||
lincat V = V ;
|
||||
lincat VV,VS,VQ,VA = V ;
|
||||
lincat V2 = V ** {c2 : Compl} ;
|
||||
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
|
||||
lincat A = A ;
|
||||
lincat A2 = A ** {c2 : Compl} ;
|
||||
lincat Prep = Compl ;
|
||||
lincat CN = CommonNoun ;
|
||||
lincat AP = AdjPhrase ;
|
||||
lincat S = {s : Str} ;
|
||||
lincat
|
||||
S = {s : Str} ;
|
||||
QS = {s : Str} ;
|
||||
RS = {s : Str} ;
|
||||
Cl = {s : R.Tense => R.Polarity => Str} ;
|
||||
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ;
|
||||
SSlash = {s : Str; c : Compl} ;
|
||||
Imp = {s : R.Polarity => Number => Str} ;
|
||||
|
||||
lincat LN,SN,GN,PN = {s : Str} ;
|
||||
QCl = {s : R.Tense => R.Polarity => Str} ;
|
||||
IP = NPhrase ;
|
||||
IComp = {s : Str} ;
|
||||
IDet = {s : Case => Gender => Str; n : Number} ;
|
||||
IQuant = {s : Case => Gender => Number => Str} ;
|
||||
|
||||
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
|
||||
RCl = {s : R.Tense => R.Polarity => Str} ;
|
||||
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 ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
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 = "урду"} ;
|
||||
|
||||
}
|
||||
@@ -29,12 +29,12 @@ lin
|
||||
paragraph (x.infinitive) ++
|
||||
heading1 "Present" ++
|
||||
frameTable (
|
||||
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 (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 (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 (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 (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 (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P3 ! Sg)) ++
|
||||
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P3 ! Pl))) ++
|
||||
heading1 "Imperative" ++
|
||||
frameTable (
|
||||
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
--# -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
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -2,5 +2,15 @@ concrete GrammarBel of Grammar =
|
||||
TenseX,
|
||||
PhraseBel,
|
||||
NounBel,
|
||||
AdjectiveBel ** {
|
||||
AdjectiveBel,
|
||||
AdverbBel,
|
||||
VerbBel,
|
||||
SentenceBel,
|
||||
QuestionBel,
|
||||
RelativeBel,
|
||||
ConjunctionBel,
|
||||
NumeralBel,
|
||||
NamesBel,
|
||||
StructuralBel,
|
||||
IdiomBel ** {
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
--# -path=.:../abstract
|
||||
concrete LangBel of Lang =
|
||||
GrammarBel,
|
||||
LexiconBel
|
||||
LexiconBel,
|
||||
ConstructionBel
|
||||
,DocumentationBel --# notpresent
|
||||
** {
|
||||
|
||||
|
||||
flags startcat = Phr ;
|
||||
|
||||
}
|
||||
+744
-744
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,19 @@
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
+123
-1
@@ -1,4 +1,126 @@
|
||||
concrete NounBel of Noun = CatBel ** {
|
||||
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in {
|
||||
lin
|
||||
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 ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -636,6 +636,42 @@ oper
|
||||
_ => 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
|
||||
= \form -> case form of {
|
||||
_ + "агчы" => mkV021 form;
|
||||
@@ -717,6 +753,16 @@ oper
|
||||
_ => 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)
|
||||
= \form -> case form of {
|
||||
_ + "які" => mkA006 form;
|
||||
@@ -819,24 +865,37 @@ oper
|
||||
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
|
||||
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||
|
||||
nominative : Case = Nom ;
|
||||
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} ;
|
||||
mkIP : Str -> IP = \s -> lin IP {s=s} ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
|
||||
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ;
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
|
||||
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
|
||||
mkDet : Str -> Det = \s -> lin Det {s=s} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=s} ;
|
||||
mkConj : Str -> Conj = \s -> lin Conj {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} ;
|
||||
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ;
|
||||
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} ;
|
||||
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
||||
|
||||
mkLN : Str -> LN = \s -> lin LN {s=s} ;
|
||||
mkGN : Str -> GN = \s -> lin GN {s=s} ;
|
||||
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ;
|
||||
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ;
|
||||
mkSN : Str -> SN = \s -> lin SN {s=s} ;
|
||||
mkPN : Str -> PN = \s -> lin PN {s=s} ;
|
||||
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
concrete PhraseBel of Phrase = CatBel ** {
|
||||
concrete PhraseBel of Phrase = CatBel ** open ResBel in {
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.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 ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = {s = conj.s} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = np.s ! Nom} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
+133
-10
@@ -1,4 +1,4 @@
|
||||
resource ResBel = {
|
||||
resource ResBel = open (R = ParamX), Prelude in {
|
||||
|
||||
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
|
||||
param Number = Sg | Pl ;
|
||||
@@ -40,12 +40,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
|
||||
param Aspect = Imperf | Perf ;
|
||||
param Person = P1 | P2 | P3 ;
|
||||
param Tense = Pres | Past ;
|
||||
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 mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
|
||||
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 mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
|
||||
\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 {
|
||||
Imperf => { Past = f1 ;
|
||||
Pres = table {
|
||||
Imperf => { past = f1 ;
|
||||
pres = table {
|
||||
P1 => table {
|
||||
Sg => f2 ;
|
||||
Pl => f3
|
||||
@@ -60,8 +60,8 @@ oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
|
||||
}
|
||||
}
|
||||
} ;
|
||||
Perf => { Past = f8 ;
|
||||
Pres = table {
|
||||
Perf => { past = f8 ;
|
||||
pres = table {
|
||||
P1 => table {
|
||||
Sg => f9 ;
|
||||
Pl => f10
|
||||
@@ -110,8 +110,14 @@ oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
|
||||
|
||||
|
||||
param GenNum = GSg Gender | GPl ;
|
||||
oper A = {s: Case => GenNum => Str} ; -- 704
|
||||
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
|
||||
oper genNum : Gender -> Number -> GenNum = \g,n ->
|
||||
case n of {
|
||||
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 ->
|
||||
{ s = table {
|
||||
Nom => table {
|
||||
@@ -158,6 +164,123 @@ oper Compl = {s : Str; c : Case} ;
|
||||
oper noPrep : Compl = {s=""; c=Acc} ;
|
||||
|
||||
oper CommonNoun = Noun ;
|
||||
oper AdjPhrase = A ;
|
||||
oper AdjPhrase = Adj ;
|
||||
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
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 = "беларуская"} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
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 ++ "будзь"
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,32 @@
|
||||
concrete AdjectiveFao of Adjective = CatFao ** {
|
||||
concrete AdjectiveFao of Adjective = CatFao ** open ResFao in {
|
||||
lin
|
||||
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
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
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} ;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
concrete AllFao of AllFaoAbs =
|
||||
LangFao
|
||||
LangFao,
|
||||
ExtendFao
|
||||
**
|
||||
{} ;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
abstract AllFaoAbs =
|
||||
Lang
|
||||
Lang,
|
||||
Extend
|
||||
** {}
|
||||
+34
-1
@@ -1,4 +1,4 @@
|
||||
concrete CatFao of Cat = CommonX ** open ResFao in {
|
||||
concrete CatFao of Cat = CommonX ** open ResFao, Prelude in {
|
||||
|
||||
lincat N = Noun ;
|
||||
lincat N2 = Noun ** {c2 : Compl} ;
|
||||
@@ -9,10 +9,43 @@ lincat V = Verb ;
|
||||
lincat VV,VS,VQ,VA = Verb ;
|
||||
lincat V2 = Verb ** {c2 : 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 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 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 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} ;
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
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} ;
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
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 ;
|
||||
}
|
||||
@@ -55,8 +55,8 @@ lin
|
||||
paragraph x.Converb ++
|
||||
heading2 "Imperative" ++
|
||||
frameTable (
|
||||
tr (th "Sg" ++ td (x.Imperative_Jussive ! Sg)) ++
|
||||
tr (th "Pl" ++ td (x.Imperative_Jussive ! Pl))) ++
|
||||
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
|
||||
tr (th "Pl" ++ td (x.imperative ! Pl))) ++
|
||||
heading2 "Indicative" ++
|
||||
frameTable (
|
||||
tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
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} ;
|
||||
|
||||
}
|
||||
@@ -2,5 +2,15 @@ concrete GrammarFao of Grammar =
|
||||
TenseX,
|
||||
PhraseFao,
|
||||
NounFao,
|
||||
AdjectiveFao ** {
|
||||
VerbFao,
|
||||
AdjectiveFao,
|
||||
AdverbFao,
|
||||
NumeralFao,
|
||||
SentenceFao,
|
||||
QuestionFao,
|
||||
RelativeFao,
|
||||
ConjunctionFao,
|
||||
StructuralFao,
|
||||
IdiomFao,
|
||||
NamesFao ** {
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
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"} ;
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
concrete LangFao of Lang =
|
||||
GrammarFao,
|
||||
LexiconFao
|
||||
,ConstructionFao
|
||||
,DocumentationFao --# notpresent
|
||||
** {
|
||||
|
||||
|
||||
@@ -1,2 +1,9 @@
|
||||
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
|
||||
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao, ResFao 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" ;
|
||||
}
|
||||
+128
-128
@@ -600,18 +600,18 @@ mkN016 base =
|
||||
Gen => base_1+"ar"
|
||||
} ;
|
||||
Pl => table {
|
||||
Nom => base_1+"urin" ;
|
||||
Acc => base_1+"in" ;
|
||||
Dat => base_1+"inum" ;
|
||||
Gen => base_1+"arins"
|
||||
}
|
||||
} ;
|
||||
Def => table {
|
||||
Sg => table {
|
||||
Nom => nonExist ;
|
||||
Acc => nonExist ;
|
||||
Dat => nonExist ;
|
||||
Gen => nonExist
|
||||
}
|
||||
} ;
|
||||
Def => table {
|
||||
Sg => table {
|
||||
Nom => base_1+"urin" ;
|
||||
Acc => base_1+"in" ;
|
||||
Dat => base_1+"inum" ;
|
||||
Gen => base_1+"arins"
|
||||
} ;
|
||||
Pl => table {
|
||||
Nom => nonExist ;
|
||||
@@ -5670,18 +5670,18 @@ mkN146 base =
|
||||
Gen => base_1+"s"
|
||||
} ;
|
||||
Pl => table {
|
||||
Nom => base_1+"kurin" ;
|
||||
Acc => base_1+"kin" ;
|
||||
Dat => base_1+"kinum" ;
|
||||
Gen => base_1+"sins"
|
||||
}
|
||||
} ;
|
||||
Def => table {
|
||||
Sg => table {
|
||||
Nom => nonExist ;
|
||||
Acc => nonExist ;
|
||||
Dat => nonExist ;
|
||||
Gen => nonExist
|
||||
}
|
||||
} ;
|
||||
Def => table {
|
||||
Sg => table {
|
||||
Nom => base_1+"kurin" ;
|
||||
Acc => base_1+"kin" ;
|
||||
Dat => base_1+"kinum" ;
|
||||
Gen => base_1+"sins"
|
||||
} ;
|
||||
Pl => table {
|
||||
Nom => nonExist ;
|
||||
@@ -8769,7 +8769,7 @@ mkV001 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a" ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -8802,7 +8802,7 @@ mkV002 base =
|
||||
case base of {
|
||||
"ei"+base_1+"a" => lin V
|
||||
{ Converb = "hi"+base_1+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "ei"+base_1 ;
|
||||
Pl => "ei"+base_1+"ið"
|
||||
} ;
|
||||
@@ -8835,7 +8835,7 @@ mkV003 base =
|
||||
case base of {
|
||||
"a"+base_1+"a" => lin V
|
||||
{ Converb = "i"+base_1+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "a"+base_1 ;
|
||||
Pl => "a"+base_1+"ið"
|
||||
} ;
|
||||
@@ -8868,7 +8868,7 @@ mkV004 base =
|
||||
case base of {
|
||||
"a"+base_1+"a" => lin V
|
||||
{ Converb = "a"+base_1+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "a"+base_1 ;
|
||||
Pl => "a"+base_1+"ið"
|
||||
} ;
|
||||
@@ -8901,7 +8901,7 @@ mkV005 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@(?+?) => lin V
|
||||
{ Converb = base_1+"a"+base_2 ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -8934,7 +8934,7 @@ mkV006 base =
|
||||
case base of {
|
||||
base_1+"ða" => lin V
|
||||
{ Converb = base_1+"tt" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ð" ;
|
||||
Pl => base_1+"ðið"
|
||||
} ;
|
||||
@@ -8967,7 +8967,7 @@ mkV007 base =
|
||||
case base of {
|
||||
"eiga" => lin V
|
||||
{ Converb = "átt" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "eig" ;
|
||||
Pl => "eigið"
|
||||
} ;
|
||||
@@ -9000,7 +9000,7 @@ mkV008 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9033,7 +9033,7 @@ mkV009 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9066,7 +9066,7 @@ mkV010 base =
|
||||
case base of {
|
||||
base_1+"da" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"d" ;
|
||||
Pl => base_1+"dið"
|
||||
} ;
|
||||
@@ -9099,7 +9099,7 @@ mkV011 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"j" ;
|
||||
Pl => base_1+"e"+base_2+"jið"
|
||||
} ;
|
||||
@@ -9132,7 +9132,7 @@ mkV012 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2 ;
|
||||
Pl => base_1+"i"+base_2+"jið"
|
||||
} ;
|
||||
@@ -9165,7 +9165,7 @@ mkV013 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"da" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"dið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2+"d" ;
|
||||
Pl => base_1+"i"+base_2+"dið"
|
||||
} ;
|
||||
@@ -9198,7 +9198,7 @@ mkV014 base =
|
||||
case base of {
|
||||
base_1+"í"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"í"+base_2 ;
|
||||
Pl => base_1+"í"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9231,7 +9231,7 @@ mkV015 base =
|
||||
case base of {
|
||||
base_1+"jó"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"jó"+base_2 ;
|
||||
Pl => base_1+"jó"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9264,7 +9264,7 @@ mkV016 base =
|
||||
case base of {
|
||||
base_1+"gja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"g" ;
|
||||
Pl => base_1+"gið"
|
||||
} ;
|
||||
@@ -9297,7 +9297,7 @@ mkV017 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"na" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"nið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"n" ;
|
||||
Pl => base_1+"e"+base_2+"nið"
|
||||
} ;
|
||||
@@ -9330,7 +9330,7 @@ mkV018 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@("m"|(?+?))+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9363,7 +9363,7 @@ mkV019 base =
|
||||
case base of {
|
||||
base_1+"ó"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ó"+base_2 ;
|
||||
Pl => base_1+"ó"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9396,7 +9396,7 @@ mkV020 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9429,7 +9429,7 @@ mkV021 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a" ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9462,7 +9462,7 @@ mkV022 base =
|
||||
case base of {
|
||||
base_1+"úgva" => lin V
|
||||
{ Converb = base_1+"úð" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"úgv" ;
|
||||
Pl => base_1+"úgvið"
|
||||
} ;
|
||||
@@ -9495,7 +9495,7 @@ mkV023 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9528,7 +9528,7 @@ mkV024 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+base_3@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+base_3+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+base_3 ;
|
||||
Pl => base_1+"e"+base_2+base_3+"ið"
|
||||
} ;
|
||||
@@ -9561,7 +9561,7 @@ mkV025 base =
|
||||
case base of {
|
||||
base_1+"ggja" => lin V
|
||||
{ Converb = base_1+"ð" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ggj" ;
|
||||
Pl => base_1+"ggið"
|
||||
} ;
|
||||
@@ -9594,7 +9594,7 @@ mkV026 base =
|
||||
case base of {
|
||||
base_1+"aga" => lin V
|
||||
{ Converb = base_1+"igið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ag" ;
|
||||
Pl => base_1+"agið"
|
||||
} ;
|
||||
@@ -9627,7 +9627,7 @@ mkV027 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"ka" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"kið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"k" ;
|
||||
Pl => base_1+"e"+base_2+"kið"
|
||||
} ;
|
||||
@@ -9660,7 +9660,7 @@ mkV028 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9693,7 +9693,7 @@ mkV029 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a" ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9726,7 +9726,7 @@ mkV030 base =
|
||||
case base of {
|
||||
"ve"+base_1+"a" => lin V
|
||||
{ Converb = "ve"+base_1+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "ve"+base_1 ;
|
||||
Pl => "ve"+base_1+"ið"
|
||||
} ;
|
||||
@@ -9759,7 +9759,7 @@ mkV031 base =
|
||||
case base of {
|
||||
base_1+"na" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"na" ;
|
||||
Pl => base_1+"nið"
|
||||
} ;
|
||||
@@ -9792,7 +9792,7 @@ mkV032 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@(?+?)+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9825,7 +9825,7 @@ mkV033 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -9858,7 +9858,7 @@ mkV034 base =
|
||||
case base of {
|
||||
base_1+"áa" => lin V
|
||||
{ Converb = base_1+"ingið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"á" ;
|
||||
Pl => base_1+"áið"
|
||||
} ;
|
||||
@@ -9891,7 +9891,7 @@ mkV035 base =
|
||||
case base of {
|
||||
base_1+"la" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"la" ;
|
||||
Pl => base_1+"lið"
|
||||
} ;
|
||||
@@ -9924,7 +9924,7 @@ mkV036 base =
|
||||
case base of {
|
||||
base_1+"ða"+base_2@(?+?) => lin V
|
||||
{ Converb = base_1+"da"+base_2 ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -9957,7 +9957,7 @@ mkV037 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1 ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -9990,7 +9990,7 @@ mkV038 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10023,7 +10023,7 @@ mkV039 base =
|
||||
case base of {
|
||||
base_1+"na" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"n" ;
|
||||
Pl => base_1+"nið"
|
||||
} ;
|
||||
@@ -10056,7 +10056,7 @@ mkV040 base =
|
||||
case base of {
|
||||
base_1+"ú"+base_2@?+"va" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ú"+base_2 ;
|
||||
Pl => base_1+"ú"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10089,7 +10089,7 @@ mkV041 base =
|
||||
case base of {
|
||||
base_1+"y"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"y"+base_2 ;
|
||||
Pl => base_1+"y"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10122,7 +10122,7 @@ mkV042 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"jið"
|
||||
} ;
|
||||
@@ -10155,7 +10155,7 @@ mkV043 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"tt" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -10188,7 +10188,7 @@ mkV044 base =
|
||||
case base of {
|
||||
base_1+"ú"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ú"+base_2 ;
|
||||
Pl => base_1+"ú"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10221,7 +10221,7 @@ mkV045 base =
|
||||
case base of {
|
||||
base_1+"la" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"l" ;
|
||||
Pl => base_1+"lið"
|
||||
} ;
|
||||
@@ -10254,7 +10254,7 @@ mkV046 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10287,7 +10287,7 @@ mkV047 base =
|
||||
case base of {
|
||||
base_1+"anga" => lin V
|
||||
{ Converb = base_1+"ingið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"akk" ;
|
||||
Pl => base_1+"angið"
|
||||
} ;
|
||||
@@ -10320,7 +10320,7 @@ mkV048 base =
|
||||
case base of {
|
||||
base_1+"ja"+base_2@?+"da" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"dið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ja"+base_2+"d" ;
|
||||
Pl => base_1+"ja"+base_2+"dið"
|
||||
} ;
|
||||
@@ -10353,7 +10353,7 @@ mkV049 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"jø"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10386,7 +10386,7 @@ mkV050 base =
|
||||
case base of {
|
||||
base_1+"jó"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"jó"+base_2 ;
|
||||
Pl => base_1+"jó"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10419,7 +10419,7 @@ mkV051 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"pa" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"pið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"p" ;
|
||||
Pl => base_1+"e"+base_2+"pið"
|
||||
} ;
|
||||
@@ -10452,7 +10452,7 @@ mkV052 base =
|
||||
case base of {
|
||||
base_1+"y"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"y"+base_2 ;
|
||||
Pl => base_1+"y"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10485,7 +10485,7 @@ mkV053 base =
|
||||
case base of {
|
||||
base_1+"á"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"á"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"á"+base_2 ;
|
||||
Pl => base_1+"á"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10518,7 +10518,7 @@ mkV054 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10551,7 +10551,7 @@ mkV055 base =
|
||||
case base of {
|
||||
base_1+"ógva" => lin V
|
||||
{ Converb = base_1+"óð" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ógv" ;
|
||||
Pl => base_1+"ógvið"
|
||||
} ;
|
||||
@@ -10584,7 +10584,7 @@ mkV056 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"da" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"dið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2+"d" ;
|
||||
Pl => base_1+"a"+base_2+"dið"
|
||||
} ;
|
||||
@@ -10617,7 +10617,7 @@ mkV057 base =
|
||||
case base of {
|
||||
base_1+"anga" => lin V
|
||||
{ Converb = base_1+"ingið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ang" ;
|
||||
Pl => base_1+"angið"
|
||||
} ;
|
||||
@@ -10650,7 +10650,7 @@ mkV058 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10683,7 +10683,7 @@ mkV059 base =
|
||||
case base of {
|
||||
base_1+"ei"+base_2@(?+?)+"ja" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ei"+base_2+"j" ;
|
||||
Pl => base_1+"ei"+base_2+"jið"
|
||||
} ;
|
||||
@@ -10716,7 +10716,7 @@ mkV060 base =
|
||||
case base of {
|
||||
base_1+"vø"+base_2@(?+?)+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"vø"+base_2 ;
|
||||
Pl => base_1+"vø"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10749,7 +10749,7 @@ mkV061 base =
|
||||
case base of {
|
||||
base_1+"y"+base_2@?+"gja" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"y"+base_2+"g" ;
|
||||
Pl => base_1+"y"+base_2+"gið"
|
||||
} ;
|
||||
@@ -10782,7 +10782,7 @@ mkV062 base =
|
||||
case base of {
|
||||
base_1+"o"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"o"+base_2 ;
|
||||
Pl => base_1+"o"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10815,7 +10815,7 @@ mkV063 base =
|
||||
case base of {
|
||||
base_1+"pa" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"p" ;
|
||||
Pl => base_1+"pið"
|
||||
} ;
|
||||
@@ -10848,7 +10848,7 @@ mkV064 base =
|
||||
case base of {
|
||||
base_1+"úgva" => lin V
|
||||
{ Converb = base_1+"ovið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"úg" ;
|
||||
Pl => base_1+"úgið"
|
||||
} ;
|
||||
@@ -10881,7 +10881,7 @@ mkV065 base =
|
||||
case base of {
|
||||
base_1+"u"+base_2@?+"na" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"nað" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -10914,7 +10914,7 @@ mkV066 base =
|
||||
case base of {
|
||||
base_1+"ø"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"ø"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ø"+base_2 ;
|
||||
Pl => base_1+"ø"+base_2+"ið"
|
||||
} ;
|
||||
@@ -10947,7 +10947,7 @@ mkV067 base =
|
||||
case base of {
|
||||
base_1+"sa" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"s" ;
|
||||
Pl => base_1+"sið"
|
||||
} ;
|
||||
@@ -10980,7 +10980,7 @@ mkV068 base =
|
||||
case base of {
|
||||
base_1+"a" => lin V
|
||||
{ Converb = base_1+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -11013,7 +11013,7 @@ mkV069 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"gja" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"gj" ;
|
||||
Pl => base_1+"e"+base_2+"gjið"
|
||||
} ;
|
||||
@@ -11046,7 +11046,7 @@ mkV070 base =
|
||||
case base of {
|
||||
base_1+"iggja" => lin V
|
||||
{ Converb = base_1+"igið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"igg" ;
|
||||
Pl => base_1+"iggið"
|
||||
} ;
|
||||
@@ -11079,7 +11079,7 @@ mkV071 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11112,7 +11112,7 @@ mkV072 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11145,7 +11145,7 @@ mkV073 base =
|
||||
case base of {
|
||||
base_1+"á"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"á"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"á"+base_2 ;
|
||||
Pl => base_1+"á"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11178,7 +11178,7 @@ mkV074 base =
|
||||
case base of {
|
||||
base_1+"ey"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ey"+base_2 ;
|
||||
Pl => base_1+"ey"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11211,7 +11211,7 @@ mkV075 base =
|
||||
case base of {
|
||||
base_1+"ega" => lin V
|
||||
{ Converb = nonExist ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -11244,7 +11244,7 @@ mkV076 base =
|
||||
case base of {
|
||||
base_1+"u"+base_2@?+"na" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"nað" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -11277,7 +11277,7 @@ mkV077 base =
|
||||
case base of {
|
||||
base_1+"ja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -11310,7 +11310,7 @@ mkV078 base =
|
||||
case base of {
|
||||
base_1+"ja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"jið"
|
||||
} ;
|
||||
@@ -11343,7 +11343,7 @@ mkV079 base =
|
||||
case base of {
|
||||
base_1+"ða" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ð" ;
|
||||
Pl => base_1+"ðið"
|
||||
} ;
|
||||
@@ -11376,7 +11376,7 @@ mkV080 base =
|
||||
case base of {
|
||||
base_1+"áa" => lin V
|
||||
{ Converb = base_1+"átt" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"á" ;
|
||||
Pl => base_1+"áið"
|
||||
} ;
|
||||
@@ -11409,7 +11409,7 @@ mkV081 base =
|
||||
case base of {
|
||||
base_1+"áða" => lin V
|
||||
{ Converb = base_1+"átt" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"áð" ;
|
||||
Pl => base_1+"áðið"
|
||||
} ;
|
||||
@@ -11442,7 +11442,7 @@ mkV082 base =
|
||||
case base of {
|
||||
base_1+"ða"+base_2@(?+?) => lin V
|
||||
{ Converb = base_1+"ð"+base_2 ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -11475,7 +11475,7 @@ mkV083 base =
|
||||
case base of {
|
||||
base_1+"ø"+base_2@?+"ka" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"kið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ø"+base_2+"k" ;
|
||||
Pl => base_1+"ø"+base_2+"kið"
|
||||
} ;
|
||||
@@ -11508,7 +11508,7 @@ mkV084 base =
|
||||
case base of {
|
||||
base_1+"íggja" => lin V
|
||||
{ Converb = base_1+"æð" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"íggj" ;
|
||||
Pl => base_1+"íggið"
|
||||
} ;
|
||||
@@ -11541,7 +11541,7 @@ mkV085 base =
|
||||
case base of {
|
||||
base_1+"kja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"k" ;
|
||||
Pl => base_1+"kið"
|
||||
} ;
|
||||
@@ -11574,7 +11574,7 @@ mkV086 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2 ;
|
||||
Pl => base_1+"i"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11607,7 +11607,7 @@ mkV087 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2 ;
|
||||
Pl => base_1+"i"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11640,7 +11640,7 @@ mkV088 base =
|
||||
case base of {
|
||||
base_1+"u"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -11673,7 +11673,7 @@ mkV089 base =
|
||||
case base of {
|
||||
base_1+"ei"+base_2@(?+?)+"ja" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ei"+base_2+"j" ;
|
||||
Pl => base_1+"ei"+base_2+"jið"
|
||||
} ;
|
||||
@@ -11706,7 +11706,7 @@ mkV090 base =
|
||||
case base of {
|
||||
base_1+"ja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"j" ;
|
||||
Pl => base_1+"jið"
|
||||
} ;
|
||||
@@ -11739,7 +11739,7 @@ mkV091 base =
|
||||
case base of {
|
||||
base_1+"jó"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"jó"+base_2 ;
|
||||
Pl => base_1+"jó"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11772,7 +11772,7 @@ mkV092 base =
|
||||
case base of {
|
||||
base_1+"áa" => lin V
|
||||
{ Converb = base_1+"igið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"á" ;
|
||||
Pl => base_1+"áið"
|
||||
} ;
|
||||
@@ -11805,7 +11805,7 @@ mkV093 base =
|
||||
case base of {
|
||||
base_1+"y"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"y"+base_2 ;
|
||||
Pl => base_1+"y"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11838,7 +11838,7 @@ mkV094 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"na" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"nið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2+"n" ;
|
||||
Pl => base_1+"i"+base_2+"nið"
|
||||
} ;
|
||||
@@ -11871,7 +11871,7 @@ mkV095 base =
|
||||
case base of {
|
||||
base_1+"anda" => lin V
|
||||
{ Converb = base_1+"aðið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"att" ;
|
||||
Pl => base_1+"andið"
|
||||
} ;
|
||||
@@ -11904,7 +11904,7 @@ mkV096 base =
|
||||
case base of {
|
||||
base_1+"ei"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ei"+base_2 ;
|
||||
Pl => base_1+"ei"+base_2+"ið"
|
||||
} ;
|
||||
@@ -11937,7 +11937,7 @@ mkV097 base =
|
||||
case base of {
|
||||
base_1+"inga" => lin V
|
||||
{ Converb = base_1+"ungið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ikk" ;
|
||||
Pl => base_1+"ingið"
|
||||
} ;
|
||||
@@ -11970,7 +11970,7 @@ mkV098 base =
|
||||
case base of {
|
||||
base_1+"ja"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ja"+base_2 ;
|
||||
Pl => base_1+"ja"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12003,7 +12003,7 @@ mkV099 base =
|
||||
case base of {
|
||||
base_1+"o"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"o"+base_2 ;
|
||||
Pl => base_1+"o"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12036,7 +12036,7 @@ mkV100 base =
|
||||
case base of {
|
||||
base_1+"í"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"i"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"í"+base_2+"j" ;
|
||||
Pl => base_1+"í"+base_2+"jið"
|
||||
} ;
|
||||
@@ -12069,7 +12069,7 @@ mkV101 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2 ;
|
||||
Pl => base_1+"i"+base_2+"jið"
|
||||
} ;
|
||||
@@ -12102,7 +12102,7 @@ mkV102 base =
|
||||
case base of {
|
||||
base_1+"ja" => lin V
|
||||
{ Converb = base_1+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1 ;
|
||||
Pl => base_1+"ið"
|
||||
} ;
|
||||
@@ -12135,7 +12135,7 @@ mkV103 base =
|
||||
case base of {
|
||||
base_1+"ø"+base_2@?+"ja" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"ø"+base_2+"j" ;
|
||||
Pl => base_1+"ø"+base_2+"jið"
|
||||
} ;
|
||||
@@ -12168,7 +12168,7 @@ mkV104 base =
|
||||
case base of {
|
||||
base_1+"y"+base_2@(?+?)+"ja" => lin V
|
||||
{ Converb = base_1+"u"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"y"+base_2+"j" ;
|
||||
Pl => base_1+"y"+base_2+"jið"
|
||||
} ;
|
||||
@@ -12201,7 +12201,7 @@ mkV105 base =
|
||||
case base of {
|
||||
base_1+"i"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"t" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"i"+base_2 ;
|
||||
Pl => base_1+"i"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12234,7 +12234,7 @@ mkV106 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"fa" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"fið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2+"f" ;
|
||||
Pl => base_1+"e"+base_2+"fið"
|
||||
} ;
|
||||
@@ -12267,7 +12267,7 @@ mkV107 base =
|
||||
case base of {
|
||||
base_1+"a"+base_2@(?+?)+"a" => lin V
|
||||
{ Converb = base_1+"a"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"a"+base_2 ;
|
||||
Pl => base_1+"a"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12300,7 +12300,7 @@ mkV108 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@(?+?)+"a" => lin V
|
||||
{ Converb = nonExist ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12333,7 +12333,7 @@ mkV109 base =
|
||||
case base of {
|
||||
base_1+base_2@?+base_3@?+"a" => lin V
|
||||
{ Converb = base_1+base_2+base_3+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
@@ -12366,7 +12366,7 @@ mkV110 base =
|
||||
case base of {
|
||||
"d"+base_1+"finite" => lin V
|
||||
{ Converb = "v"+base_1+"rð" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => "v"+base_1+"rðsins" ;
|
||||
Pl => "v"+base_1+"rðanna"
|
||||
} ;
|
||||
@@ -12399,7 +12399,7 @@ mkV111 base =
|
||||
case base of {
|
||||
base_1+"e"+base_2@?+"a" => lin V
|
||||
{ Converb = base_1+"o"+base_2+"ið" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => base_1+"e"+base_2 ;
|
||||
Pl => base_1+"e"+base_2+"ið"
|
||||
} ;
|
||||
@@ -12432,7 +12432,7 @@ mkV112 base =
|
||||
case base of {
|
||||
base_1+"ja" => lin V
|
||||
{ Converb = base_1+"að" ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => nonExist ;
|
||||
Pl => nonExist
|
||||
} ;
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
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} ;
|
||||
}
|
||||
+158
-1
@@ -1,4 +1,161 @@
|
||||
concrete NounFao of Noun = CatFao ** {
|
||||
concrete NounFao of Noun = CatFao ** open ResFao, Prelude in {
|
||||
lin
|
||||
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
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
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 ;
|
||||
}
|
||||
@@ -319,6 +319,19 @@ oper
|
||||
_ => 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
|
||||
= \form -> case form of {
|
||||
_ + "dur" => mkA001 form;
|
||||
@@ -489,11 +502,20 @@ oper
|
||||
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 : Str -> A = regA; -- s;Masc;Sg;Nom
|
||||
mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
|
||||
} ;
|
||||
|
||||
invarA : Str -> A = \s -> lin A {
|
||||
s = \\_,_,_ => s
|
||||
} ;
|
||||
|
||||
mkA2 = overload {
|
||||
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
|
||||
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
|
||||
@@ -506,6 +528,15 @@ oper
|
||||
= \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 ;
|
||||
mkVS : V -> VS = \v -> lin VS v ;
|
||||
mkVQ : V -> VQ = \v -> lin VQ v ;
|
||||
@@ -552,14 +583,15 @@ oper
|
||||
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
|
||||
|
||||
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
|
||||
mkIP : Str -> IP = \s -> lin IP {s=s} ;
|
||||
mkIP : Str -> IP = \s -> lin IP {s=s; n=Sg} ;
|
||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
|
||||
mkIDet : Str -> IDet = \s -> lin IDet {s=s; n=Sg} ;
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef} ;
|
||||
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
|
||||
mkDet : Str -> Det = \s -> lin Det {s=s} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=s} ;
|
||||
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=\\_,_ => s; n=Pl} ;
|
||||
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
|
||||
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
|
||||
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
|
||||
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
concrete PhraseFao of Phrase = CatFao ** {
|
||||
concrete PhraseFao of Phrase = CatFao ** open ResFao in {
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.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 ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = conj ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = "," ++ np.s ! Nom} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
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
|
||||
} ;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
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
|
||||
} ;
|
||||
}
|
||||
+76
-6
@@ -1,7 +1,9 @@
|
||||
resource ResFao = {
|
||||
resource ResFao = ParamX - [Tense,Pres,Past] ** {
|
||||
|
||||
param
|
||||
CardOrd = NCard | NOrd Number ;
|
||||
|
||||
param Species = Indef | Def ;
|
||||
param Number = Sg | Pl ;
|
||||
param Case = Nom | Acc | Dat | Gen ;
|
||||
param Gender = Masc | Fem | Neuter ;
|
||||
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135
|
||||
@@ -90,14 +92,25 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
|
||||
}
|
||||
} ;
|
||||
|
||||
param Tense = Past | Pres ;
|
||||
param Tense = Pres | Past ;
|
||||
|
||||
param PersNum = PSg Person | PPl ;
|
||||
param Person = P1 | P3 | P2 ;
|
||||
oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596
|
||||
oper persNum : Number -> Person -> PersNum =
|
||||
\n,p -> case n of {
|
||||
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 =
|
||||
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 ->
|
||||
{ Converb = f1 ;
|
||||
Imperative_Jussive = table {
|
||||
imperative = table {
|
||||
Sg => f2 ;
|
||||
Pl => f3
|
||||
} ;
|
||||
@@ -129,5 +142,62 @@ oper noPrep : Compl = {s=""; c=Acc} ;
|
||||
|
||||
oper CommonNoun = Noun ;
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
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} ;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
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 ;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
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 = []
|
||||
} ;
|
||||
}
|
||||
@@ -66,6 +66,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
||||
Predet = {s : Number => NPForm => Str} ;
|
||||
Quant = {s1,sp : Number => Case => Str ; s2 : Harmony => Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
|
||||
Card = {s : Number => Case => Str ; n : Number} ;
|
||||
ACard = {s : Number => Case => Str ; n : Number} ;
|
||||
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
@@ -29,6 +29,9 @@ lin
|
||||
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_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);
|
||||
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) ;
|
||||
|
||||
+188
-6
@@ -3,15 +3,23 @@
|
||||
concrete ExtendFin of Extend =
|
||||
CatFin ** ExtendFunctor - [
|
||||
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
|
||||
MkVPI,BaseVPI,ConsVPI,ConjVPI,ComplVPIVV,
|
||||
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||
,ListComp, BaseComp, ConsComp, ConjComp
|
||||
,ListImp, BaseImp, ConsImp, ConjImp
|
||||
|
||||
,ExistCN, ExistMassCN, ICompAP, ByVP
|
||||
,CompoundN, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
|
||||
,CompoundN, CompoundAP, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
|
||||
,PassVPSlash, PassAgentVPSlash
|
||||
,CardCNCard
|
||||
,UttAccNP
|
||||
,AdjAsCN, AdjAsNP
|
||||
,AdjAsCN, AdjAsNP, GerundCN, GerundNP, GerundAdv
|
||||
,ApposNP
|
||||
,PresPartAP, PastPartAP
|
||||
,PresPartAP, PastPartAP, PastPartAgentAP
|
||||
,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
|
||||
(Grammar = GrammarFin) **
|
||||
@@ -97,13 +105,24 @@ oper
|
||||
} ;
|
||||
|
||||
|
||||
BaseVPI = twoTable2 VVType Agr ;
|
||||
ConsVPI = consrTable2 VVType Agr comma ;
|
||||
BaseVPI x y = {
|
||||
s1 = x.s ;
|
||||
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 ;
|
||||
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
|
||||
ComplVPIVV vv vpi =
|
||||
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
|
||||
(S.predV (vv ** {sc = case vpi.sc of {
|
||||
@@ -112,6 +131,16 @@ 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
|
||||
|
||||
lincat
|
||||
@@ -163,6 +192,13 @@ lin
|
||||
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
|
||||
ICompAP ap = {
|
||||
s = \\agr =>
|
||||
@@ -262,6 +298,145 @@ lin PastPartAP vps = {
|
||||
p = vps.c2.s.p1 ;
|
||||
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
|
||||
-- ruohoa syövä, Ranskassa valmistettu
|
||||
@@ -271,4 +446,11 @@ oper
|
||||
vp.s.s ! vform ++
|
||||
vp.ext ;
|
||||
|
||||
rnp2np agr rnp = {
|
||||
s = \\npf => rnp.s ! agr ! npf ;
|
||||
a = agr ;
|
||||
isPron = rnp.isPron ;
|
||||
isNeg = rnp.isNeg
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -36,4 +36,8 @@ lin InLN ln =
|
||||
let c = case ln.extCase of {True => Adess ; False => Iness}
|
||||
in {s = ln.s ! c} ;
|
||||
|
||||
lin AdjLN ap ln = ln ** {
|
||||
s = \\c => ap.s ! True ! NCase ln.n c ++ ln.s ! c
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -294,6 +294,11 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
||||
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 ;
|
||||
|
||||
QuantityNP n m = {
|
||||
|
||||
@@ -75,10 +75,24 @@ lin
|
||||
pot3as4 n = n ;
|
||||
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 ;
|
||||
pot4decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljoonaa"} ; -- KA: case inflection missing
|
||||
|
||||
pot51 = {n = Pl ; s = \\c => "miljardi"} ; -- KA: case inflection missing
|
||||
pot51 = {n = Pl ; s = miljardiN.s} ;
|
||||
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
|
||||
-- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> {
|
||||
@@ -157,6 +171,32 @@ 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
|
||||
Dig = TDigit ;
|
||||
|
||||
@@ -18,6 +18,10 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
|
||||
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$.
|
||||
|
||||
SlashVP np vp = {
|
||||
|
||||
@@ -83,6 +83,7 @@ concrete CatGer of Cat =
|
||||
|
||||
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
|
||||
ACard = {s : Str ; n : Number} ;
|
||||
Ord = {s : AForm => Str} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
@@ -46,6 +46,10 @@ lin
|
||||
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_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 ;
|
||||
|
||||
bottle_of_CN np = N.ApposCN (mkCN (P.mkN "Flasche")) np ;
|
||||
|
||||
+70
-4
@@ -6,15 +6,17 @@ concrete ExtendGer of Extend =
|
||||
GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP,
|
||||
VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
|
||||
VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
ListComp, BaseComp, ConsComp, ConjComp,
|
||||
ListImp, BaseImp, ConsImp, ConjImp,
|
||||
ICompAP, IAdvAdv, CompIQuant, PrepCN,
|
||||
PastPartAP, PastPartAgentAP,
|
||||
PresPartAP, PastPartAP, PastPartAgentAP,
|
||||
PassVPSlash, PassAgentVPSlash,
|
||||
AdvIsNP,
|
||||
ProgrVPSlash, AdvIsNP, AdvRVP,
|
||||
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,
|
||||
CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem,
|
||||
CardCNCard,
|
||||
InOrderToVP
|
||||
CardCNCard, CompoundAP, GerundCN, GerundNP, GerundAdv, ByVP, ApposNP,
|
||||
InOrderToVP, PositAdVAdj
|
||||
]
|
||||
with
|
||||
(Grammar = GrammarGer) **
|
||||
@@ -188,8 +190,30 @@ concrete ExtendGer of Extend =
|
||||
|
||||
-- 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
|
||||
|
||||
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 = {
|
||||
s = \\_ => "wie" ++ ap.s ! APred ;
|
||||
ext = ap.c.p1 ++ ap.c.p2 ++ ap.ext
|
||||
@@ -209,6 +233,16 @@ concrete ExtendGer of Extend =
|
||||
|
||||
-- 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 =
|
||||
let a = agrP3 Sg in {
|
||||
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj
|
||||
@@ -246,8 +280,23 @@ concrete ExtendGer of Extend =
|
||||
|
||||
-- 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
|
||||
|
||||
ProgrVPSlash vp = vp ;
|
||||
|
||||
-- construct VPSlash from A2 and N2
|
||||
|
||||
-- existential for mathematics
|
||||
@@ -337,6 +386,9 @@ concrete ExtendGer of Extend =
|
||||
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
|
||||
|
||||
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
|
||||
let -- as we have no reflexive AP,
|
||||
compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
|
||||
@@ -435,9 +487,23 @@ concrete ExtendGer of Extend =
|
||||
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} ;
|
||||
|
||||
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
|
||||
|
||||
oper
|
||||
insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
|
||||
\rnp,vp -> insertObjRNP rnp vp.c2 vp ;
|
||||
|
||||
@@ -68,6 +68,8 @@ oper
|
||||
mkPN = overload {
|
||||
mkPN : (anna : Str) -> PN
|
||||
= \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
|
||||
= \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ;
|
||||
} ;
|
||||
|
||||
@@ -7,7 +7,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
|
||||
-- : A -> AP ;
|
||||
PositA a = emptyAP ** {
|
||||
s = \\n,c =>
|
||||
let adj : Noun = (a ** {s = a.s ! Posit}) in
|
||||
let adj : Noun = (a ** {s = a.s ! Posit; g = NonHuman}) in
|
||||
caseFromStem glue adj c n ;
|
||||
} ;
|
||||
|
||||
@@ -35,7 +35,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
|
||||
-- : A -> AP ; -- warmer
|
||||
UseComparA a = emptyAP ** {
|
||||
s = \\n,c =>
|
||||
let adj : Noun = (a ** {s = a.s ! Compar}) in
|
||||
let adj : Noun = (a ** {s = a.s ! Compar; g = NonHuman}) in
|
||||
caseFromStem glue adj c n ;
|
||||
} ;
|
||||
|
||||
@@ -54,7 +54,9 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
|
||||
-- phrases, although the semantics is only clear for some adjectives.
|
||||
|
||||
-- : 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".
|
||||
|
||||
|
||||
@@ -3,7 +3,11 @@ concrete AdverbHun of Adverb = CatHun ** open ResHun, ParamHun, ParadigmsHun, Pr
|
||||
lin
|
||||
|
||||
-- : 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
|
||||
-- ComparAdvAdj cadv a np = { } ;
|
||||
@@ -19,15 +23,18 @@ lin
|
||||
-- Adverbs can be modified by 'adadjectives', just like adjectives.
|
||||
|
||||
--AdAdv : AdA -> Adv -> Adv ; -- very quickly
|
||||
-- AdAdv ada adv = adv **
|
||||
AdAdv ada adv = adv ** {s = ada.s ++ adv.s} ;
|
||||
-- Like adverbs, adadjectives can be produced by adjectives.
|
||||
|
||||
-- : A -> AdA ; -- extremely
|
||||
-- PositAdAAdj a = { } ;
|
||||
PositAdAAdj a = {s = a.s ! Posit ! SgNom} ;
|
||||
-- Subordinate clauses can function as adverbs.
|
||||
|
||||
-- : Subj -> S -> Adv ;
|
||||
-- SubjS subj s =
|
||||
SubjS subj s = {
|
||||
s = subj.s ++ s.s ;
|
||||
isPre = False ;
|
||||
} ;
|
||||
|
||||
-- Comparison adverbs also work as numeral adverbs.
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
|
||||
concrete AllHun of AllHunAbs =
|
||||
LangHun,
|
||||
IrregHun,
|
||||
ExtendHun
|
||||
** {} ;
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
|
||||
abstract AllHunAbs =
|
||||
Lang,
|
||||
IrregHunAbs,
|
||||
Extend
|
||||
** {} ;
|
||||
|
||||
@@ -76,8 +76,7 @@ concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {
|
||||
|
||||
-- Constructed in NumeralHun.
|
||||
|
||||
Card = ResHun.Numeral ;
|
||||
Numeral = ResHun.Numeral ;
|
||||
Card, ACard, Numeral = ResHun.Numeral ;
|
||||
Digits = {s : CardOrd => Str} ;
|
||||
Decimal = {s : CardOrd => Str; hasDot : Bool} ;
|
||||
|
||||
@@ -126,5 +125,8 @@ linref
|
||||
NP = linNP ;
|
||||
V,VS,VQ,VA = \v -> v.s ! 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} ;
|
||||
}
|
||||
|
||||
@@ -52,22 +52,37 @@ lin
|
||||
in np ** {s = linTable} ;
|
||||
-- Relative sentences
|
||||
lincat
|
||||
[RS] = {s1,s2 : Number => Case => Str} ;
|
||||
[RS] = {s1,s2 : Gender => Number => Case => Str} ;
|
||||
|
||||
lin
|
||||
BaseRS = twoTable2 Number Case ;
|
||||
ConsRS = consrTable2 Number Case comma ;
|
||||
ConjRS = conjunctDistrTable2 Number Case ;
|
||||
BaseRS = twoTable3 Gender Number Case ;
|
||||
ConsRS = consrTable3 Gender Number Case comma ;
|
||||
ConjRS = conjunctDistrTable3 Gender 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
|
||||
[DAP] =
|
||||
|
||||
|
||||
@@ -1,11 +1,178 @@
|
||||
concrete ConstructionHun of Construction = CatHun ** open ParadigmsHun in {
|
||||
concrete ConstructionHun of Construction = CatHun ** open
|
||||
ParadigmsHun, ResHun, NounHun, VerbHun, AdjectiveHun, Prelude in {
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Hour = {s : Str} ;
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
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
|
||||
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
--# -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
|
||||
} ;
|
||||
}
|
||||
+354
-1
@@ -3,9 +3,362 @@
|
||||
concrete ExtendHun of Extend = CatHun
|
||||
-- ** ExtendFunctor - []
|
||||
-- with (Grammar=GrammarHun)
|
||||
** open Prelude, ResHun, NounHun in {
|
||||
** open Prelude, ResHun, NounHun, VerbHun, AdjectiveHun 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
|
||||
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
|
||||
}) ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -12,7 +12,8 @@ concrete GrammarHun of Grammar =
|
||||
TextX - [Adv],
|
||||
StructuralHun,
|
||||
IdiomHun,
|
||||
TenseX - [Adv]
|
||||
TenseX - [Adv],
|
||||
NamesHun
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
@@ -44,4 +44,51 @@ concrete IdiomHun of Idiom = CatHun ** open Prelude, ResHun, VerbHun, NounHun, S
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
--# -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" ;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
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 ;
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
concrete LangHun of Lang =
|
||||
GrammarHun,
|
||||
LexiconHun,
|
||||
ConstructionHun ;
|
||||
ConstructionHun,
|
||||
DocumentationHun --# notpresent
|
||||
;
|
||||
|
||||
+19
-19
@@ -1,5 +1,5 @@
|
||||
concrete LexiconHun of Lexicon = CatHun **
|
||||
open ParadigmsHun, ParamHun, Prelude in {
|
||||
open ParadigmsHun, ParamHun, IrregHun, Prelude in {
|
||||
|
||||
----
|
||||
-- A
|
||||
@@ -19,7 +19,7 @@ lin art_N = mkN "művészet" "művészetet" ;
|
||||
----
|
||||
-- B
|
||||
|
||||
lin baby_N = mkN "bébi" "bébit" ;
|
||||
lin baby_N = humanN (mkN "bébi" "bébit") ;
|
||||
-- lin back_N = mkN "" ;
|
||||
lin bad_A = mkA "rossz" ;
|
||||
lin bank_N = mkN "bank" "bankot" ;
|
||||
@@ -65,7 +65,7 @@ lin cat_N = mkN "macska" "macskát";
|
||||
lin ceiling_N = roof_N ;
|
||||
lin chair_N = mkN "szék" "széket";
|
||||
lin cheese_N = mkN "sajt" "sajtot" ;
|
||||
lin child_N = mkN "gyerek" "gyereket" ;
|
||||
lin child_N = humanN (mkN "gyerek" "gyereket") ;
|
||||
lin church_N = mkN "templom" "templomot" ;
|
||||
lin city_N = mkN "város" "várost" ;
|
||||
lin clean_A = mkA "tiszta" ;
|
||||
@@ -92,7 +92,7 @@ lin day_N = mkN "nap" "napot" ;
|
||||
-- lin dirty_A = mkA "" ;
|
||||
-- lin distance_N3 = mkN "" ;
|
||||
-- lin do_V2 = mkV2 do_V ;
|
||||
lin doctor_N = mkN "orvos" "orvost";
|
||||
lin doctor_N = humanN (mkN "orvos" "orvost");
|
||||
lin dog_N = mkN "kutya" "kutyát";
|
||||
lin door_N = mkN "ajtó" "ajtót" ;
|
||||
-- lin drink_V2 = mkV2 "" ;
|
||||
@@ -105,7 +105,7 @@ lin door_N = mkN "ajtó" "ajtót" ;
|
||||
|
||||
lin ear_N = mkN "fül" "fület";
|
||||
lin earth_N = mkN "föld" "földet";
|
||||
-- lin eat_V2 = mkV2 "" ;
|
||||
lin eat_V2 = mkV2 eszik_V ;
|
||||
lin egg_N = mkN "tojás" "tojást" ;
|
||||
lin empty_A = mkA "üres" ;
|
||||
lin enemy_N = mkN "ellenség" "ellenséget" ;
|
||||
@@ -139,7 +139,7 @@ lin forest_N = mkN "erdő" "erdőt" ;
|
||||
-- lin forget_V2 = mkV2 "" ;
|
||||
-- lin freeze_V = mkV "" ;
|
||||
lin fridge_N = mkN "hűtő" "hűtőt" ;
|
||||
lin friend_N = mkN "barát" "barátot" ;
|
||||
lin friend_N = humanN (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 full_A = mkA "tele" ;
|
||||
-- --lin fun_AV
|
||||
@@ -148,7 +148,7 @@ lin full_A = mkA "tele" ;
|
||||
-- G
|
||||
|
||||
lin garden_N = mkN "kert" "kertet" ;
|
||||
lin girl_N = mkN "lány" "lányt";
|
||||
lin girl_N = humanN (mkN "lány" "lányt");
|
||||
-- lin give_V3 = mkV3 "" ;
|
||||
lin glove_N = mkN "kesztyű" "kesztyűt" ;
|
||||
-- lin go_V = mkV "" ;
|
||||
@@ -179,7 +179,7 @@ lin horse_N = mkN "ló" "lovat";
|
||||
lin hot_A = mkA "forró" ;
|
||||
lin house_N = mkN "ház" "házat" ;
|
||||
-- lin hunt_V2 = mkV2 "" ;
|
||||
lin husband_N = mkN "férj" "férjet";
|
||||
lin husband_N = humanN (mkN "férj" "férjet");
|
||||
|
||||
--------
|
||||
-- I - K
|
||||
@@ -190,7 +190,7 @@ lin iron_N = mkN "vas" "vasat" ;
|
||||
-- lin john_PN = mkPN "" ;
|
||||
-- lin jump_V = mkV "" ;
|
||||
-- lin kill_V2 = mkV2 "" ;
|
||||
lin king_N = mkN "király" "királyt" ;
|
||||
lin king_N = humanN (mkN "király" "királyt") ;
|
||||
lin knee_N = mkN "térd" "térdet";
|
||||
-- lin know_V2 = mkV2 "" ;
|
||||
-- lin know_VQ = mkVQ "" ;
|
||||
@@ -223,12 +223,12 @@ lin love_N = mkN "szerelem" "szerelmet";
|
||||
----
|
||||
-- M
|
||||
|
||||
lin man_N = mkN "férfi" "ak" harmA ; -- force plural allomorph and a-harmony
|
||||
lin man_N = humanN (mkN "férfi" "ak" harmA) ; -- force plural allomorph and a-harmony
|
||||
lin married_A2 = mkA2 "házas" Ins ;
|
||||
lin meat_N = mkN "hús" "húst";
|
||||
lin milk_N = mkN "tej" "tejet" ;
|
||||
lin moon_N = mkN "hold" "holdat" ;
|
||||
lin mother_N2 = mkN2 (mkN "anya" "anyát") ;
|
||||
lin mother_N2 = mkN2 (humanN (mkN "anya" "anyát")) ;
|
||||
lin mountain_N = mkN "hegy" "hegyet";
|
||||
lin mouth_N = mkN "száj" "szájat" ;
|
||||
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 peace_N = mkN "béke" "békét";
|
||||
lin pen_N = mkN "toll" "tollat" ;
|
||||
lin person_N = mkN "ember" "embert";
|
||||
lin person_N = humanN (mkN "ember" "embert");
|
||||
lin planet_N = mkN "bolygó" "bolygót" ;
|
||||
lin plastic_N = mkN "műanyag" "műanyagot" "műanyagok" "műanyaga" ;
|
||||
-- lin play_V = mkV "" ;
|
||||
lin policeman_N = mkN "rendőr" "rendőrt"; --the police "rendőrség"
|
||||
lin priest_N = mkN "pap" "papot" "papok" "papja" ;
|
||||
lin policeman_N = humanN (mkN "rendőr" "rendőrt"); --the police "rendőrség"
|
||||
lin priest_N = humanN (mkN "pap" "papot" "papok" "papja") ;
|
||||
-- lin pull_V2 = mkV2 "" ;
|
||||
-- lin push_V2 = mkV2 "" ;
|
||||
-- lin put_V2 = mkV2 "" ;
|
||||
@@ -272,12 +272,12 @@ lin priest_N = mkN "pap" "papot" "papok" "papja" ;
|
||||
-- --------
|
||||
-- -- Q - R
|
||||
--
|
||||
lin queen_N = mkN "kírálynő" "kírálynőt" ;
|
||||
lin queen_N = humanN (mkN "kírálynő" "kírálynőt") ;
|
||||
lin question_N = mkN "kérdés" "kérdést" ;
|
||||
lin radio_N = mkN "rádió" "rádiót" ;
|
||||
lin rain_N = mkN "eső" "esőt" ;
|
||||
-- lin rain_V0 = mkV "" ;
|
||||
-- lin read_V2 = mkV2 "" ;
|
||||
lin read_V2 = mkV2 "olvas" ;
|
||||
lin ready_A = mkA "kész" ;
|
||||
lin reason_N = mkN "ok" "okot" "okok" "oka" ;
|
||||
lin red_A = mkA "piros" ;
|
||||
@@ -363,7 +363,7 @@ lin table_N = mkN "asztal" "asztalt";
|
||||
lin tail_N = mkN "farok" "farkot";
|
||||
lin talk_V3 = mkV3 "beszél" ;
|
||||
-- lin teach_V2 = mkV2 "" ;
|
||||
lin teacher_N = mkN "tanár" "tanárt" ;
|
||||
lin teacher_N = humanN (mkN "tanár" "tanárt") ;
|
||||
lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used
|
||||
lin thick_A = mkA "vastag" ;
|
||||
lin thin_A = mkA "vekony" ;
|
||||
@@ -401,14 +401,14 @@ lin water_N = mkN "víz" "vizet" ;
|
||||
lin wet_A = mkA "nedves" ;
|
||||
lin white_A = mkA "fehér" ;
|
||||
lin wide_A = mkA "széles" ;
|
||||
lin wife_N = mkN "feleség" "feleséget" ;
|
||||
lin wife_N = humanN (mkN "feleség" "feleséget") ;
|
||||
-- lin win_V2 = mkV2 "" ;
|
||||
lin wind_N = mkN "szél" "szelet" ;
|
||||
lin window_N = mkN "ablak" "ablakot" "ablakok" "ablaka" ;
|
||||
lin wine_N = mkN "bor" "bort";
|
||||
lin wing_N = mkN "szárny" "szárnyat";
|
||||
-- lin wipe_V2 = mkV2 "" ;
|
||||
lin woman_N = mkN "nő" "nőt" ;
|
||||
lin woman_N = humanN (mkN "nő" "nőt") ;
|
||||
-- lin wonder_VQ = mkVQ "" ;
|
||||
lin wood_N = mkN "fa" "fát"; --same as tree
|
||||
lin worm_N = mkN "féreg" "férget"; --also "kukac"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
+47
-26
@@ -3,6 +3,10 @@ concrete NounHun of Noun = CatHun ** open
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
oper
|
||||
hunV : pattern Str = #("a"|"e"|"i"|"o"|"u"|"ö"|"ü"|
|
||||
"á"|"é"|"í"|"ó"|"ú"|"ő"|"ű") ;
|
||||
|
||||
lin
|
||||
|
||||
--2 Noun phrases
|
||||
@@ -65,7 +69,7 @@ concrete NounHun of Noun = CatHun ** open
|
||||
|
||||
-- : NP -> RS -> NP ; -- Paris, which is here
|
||||
RelNP np rs = np ** {
|
||||
s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.agr.p2 ! c ;
|
||||
s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.g ! np.agr.p2 ! c ;
|
||||
} ;
|
||||
|
||||
-- Determiners can form noun phrases directly.
|
||||
@@ -144,22 +148,24 @@ concrete NounHun of Noun = CatHun ** open
|
||||
-- : Numeral -> Card ;
|
||||
NumNumeral num = num ;
|
||||
|
||||
{-
|
||||
-- : AdN -> Card -> Card ;
|
||||
AdNum adn card = card ** { s = adn.s ++ card.s } ;
|
||||
AdNum adn card = card ** { s = \\p => adn.s ++ card.s ! p } ;
|
||||
|
||||
-- : Digits -> Ord ;
|
||||
OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
|
||||
OrdDigits digs = {
|
||||
s = \\_,_ => digs.s ! NOrd ;
|
||||
n = Sg
|
||||
} ;
|
||||
|
||||
-- : Numeral -> Ord ;
|
||||
OrdNumeral num = num ** {
|
||||
s = \\_ => num.ord
|
||||
OrdNumeral num = {
|
||||
s = \\_,_ => num.s ! Attrib ;
|
||||
n = Sg
|
||||
} ;
|
||||
-}
|
||||
-- : A -> Ord ;
|
||||
OrdSuperl a = {
|
||||
s = \\n,c =>
|
||||
let adj : Noun = (a ** {s = a.s ! Superl}) in
|
||||
let adj : Noun = (a ** {s = a.s ! Superl; g=NonHuman}) in
|
||||
caseFromStem glue adj c n ;
|
||||
n = Sg -- ?? is this meaningful?
|
||||
} ;
|
||||
@@ -172,7 +178,7 @@ concrete NounHun of Noun = CatHun ** open
|
||||
-- : Quant
|
||||
DefArt = mkQuant "a" "a" ** {
|
||||
s,
|
||||
sp = \\_,_ => pre {"a" ; "az" / v } ;
|
||||
sp = \\_,_ => pre {"a" ; "az" / hunV } ;
|
||||
dt = DefDet ;
|
||||
} ;
|
||||
|
||||
@@ -185,7 +191,10 @@ concrete NounHun of Noun = CatHun ** open
|
||||
|
||||
-- : Pron -> Quant
|
||||
PossPron pron = pron ** {
|
||||
s,sp = \\_ => pron.s ;
|
||||
s,sp = \\_,_ => case pron.agr of {
|
||||
<P3,_> => "az" ++ pron.s ! Nom ;
|
||||
_ => pre {"a" ; "az" / hunV} ++ pron.s ! Nom
|
||||
} ;
|
||||
dt = DetPoss (agr2pstem pron.agr) ;
|
||||
caseagr = False ;
|
||||
} ;
|
||||
@@ -200,7 +209,9 @@ concrete NounHun of Noun = CatHun ** open
|
||||
} ;
|
||||
|
||||
-- : N2 -> NP -> CN ;
|
||||
-- ComplN2 n2 np =
|
||||
ComplN2 n2 np = (UseN n2) ** {
|
||||
compl = \\n,c => np.s ! NoPoss ! Dat ++ np.postmod
|
||||
} ;
|
||||
|
||||
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
|
||||
-- ComplN3 n3 np =
|
||||
@@ -220,7 +231,7 @@ concrete NounHun of Noun = CatHun ** open
|
||||
|
||||
-- : CN -> RS -> CN ;
|
||||
RelCN cn rs = cn ** {
|
||||
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! n ! c
|
||||
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! cn.g ! n ! c
|
||||
} ;
|
||||
|
||||
-- : CN -> Adv -> CN ;
|
||||
@@ -234,7 +245,9 @@ concrete NounHun of Noun = CatHun ** open
|
||||
-- to decide. Sentential complements are defined in VerbHun.
|
||||
|
||||
-- : 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
|
||||
|
||||
@@ -248,29 +261,37 @@ concrete NounHun of Noun = CatHun ** open
|
||||
--2 Possessive and partitive constructs
|
||||
|
||||
-- : PossNP : CN -> NP -> CN ;
|
||||
-- PossNP cn np = cn ** {
|
||||
-- compl = \\n,c => cn.compl ! n ! c ++ np.s ! Poss P3 n ! c -- TODO check
|
||||
-- } ;
|
||||
PossNP cn np = cn ** {
|
||||
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Dat ++ np.postmod
|
||||
} ;
|
||||
|
||||
-- : 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
|
||||
} ;
|
||||
|
||||
-- This is different from the partitive, as shown by many languages.
|
||||
|
||||
-- : Det -> NP -> NP ;
|
||||
CountNP det np = np **
|
||||
{ } ; -- Nonsense for DefArt or IndefArt
|
||||
-- : Decimal -> MU -> NP ;
|
||||
QuantityNP dec mu = indeclNP
|
||||
(case mu.isPre of {
|
||||
True => mu.s ++ dec.s ! NCard ;
|
||||
False => dec.s ! NCard ++ mu.s
|
||||
}) ** {
|
||||
objdef = Def
|
||||
} ;
|
||||
|
||||
--3 Conjoinable determiners and ones with adjectives
|
||||
|
||||
-- : DAP -> AP -> DAP ; -- the large (one)
|
||||
AdjDAP dap ap = dap ** { } ;
|
||||
AdjDAP dap ap = dap ;
|
||||
|
||||
-- : Det -> DAP ; -- this (or that)
|
||||
DetDAP det = det ;
|
||||
-}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
|
||||
|
||||
oper
|
||||
Noun = {s : NumCaseStem => Str ; h : Harm} ;
|
||||
Noun = {s : NumCaseStem => Str ; h : Harm ; g : Gender} ;
|
||||
|
||||
-- Paradigm functions
|
||||
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
|
||||
@@ -275,6 +275,7 @@ oper
|
||||
PossdSg_PossrSg1P2 => init possdSg_PossrSg1P2 ;
|
||||
PossdPl => possdPl } ;
|
||||
h = h ;
|
||||
g = NonHuman
|
||||
} ;
|
||||
|
||||
|
||||
@@ -571,7 +572,7 @@ oper
|
||||
<_,_ + #v> => endCaseVow ;
|
||||
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz"
|
||||
|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ;
|
||||
<True,_> => endCaseConsAccAt ;
|
||||
<True,_> => endCaseCons ;
|
||||
_ => endCaseCons } ;
|
||||
|
||||
-- Last consonant doubles before instrumental and translative
|
||||
@@ -593,7 +594,7 @@ oper
|
||||
|
||||
-- All other singular forms and stems
|
||||
c => w + endCaseSg c ! h } ;
|
||||
|
||||
g = NonHuman
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
+48
-31
@@ -27,59 +27,77 @@ lin
|
||||
n9 = mkNum3 "kilenc" "kilencven" "kilencedik" ;
|
||||
|
||||
-- : Sub10 ; -- 1
|
||||
pot01 = mkNum3 "egy" "tíz" "első" ** {n=Sg} ;
|
||||
pot01 = mkNum3 "egy" "tíz" "első" ;
|
||||
-- : Digit -> Sub10 ; -- d * 1
|
||||
pot0 d = d ;
|
||||
|
||||
-- : Sub100 ; -- 10
|
||||
pot110 = {s = table {p => "tíz"} ; n = numNumber ; numtype = IsNum} ;
|
||||
pot110 = {s = table {p => "tíz"}} ;
|
||||
-- : Sub100 ; -- 11
|
||||
pot111 = {s = table {p => "tizenegy"} ; n = numNumber ; numtype = IsNum} ;
|
||||
pot111 = {s = table {p => "tizenegy"}} ;
|
||||
-- : Digit -> Sub100 ; -- 10 + d
|
||||
pot1to19 d =
|
||||
{s = table {p => "tizen" ++ d.s ! <Unit,p>} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => "tizen" ++ d.s ! <Unit,p>}} ;
|
||||
-- : Sub10 -> Sub100 ; -- coercion of 1..9
|
||||
pot0as1 n =
|
||||
{s = table {p => n.s ! <Unit,p>} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => n.s ! <Unit,p>}} ;
|
||||
|
||||
-- : Digit -> Sub100 ; -- d * 10
|
||||
pot1 d =
|
||||
{s = table {p => d.s ! <Ten,p>} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => d.s ! <Ten,p>}} ;
|
||||
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
|
||||
pot1plus d e =
|
||||
{s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>}} ;
|
||||
|
||||
-- : Sub100 -> Sub1000 ; -- coercion of 1..99
|
||||
pot1as2 n = n ;
|
||||
-- : Sub1000 ; -- a hundred
|
||||
pot21 =
|
||||
{s = table {p => "száz"}} ;
|
||||
-- : Sub10 -> Sub1000 ; -- m * 100
|
||||
pot2 d =
|
||||
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"}} ;
|
||||
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
|
||||
pot2plus d e =
|
||||
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p}} ;
|
||||
|
||||
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
|
||||
pot2as3 n = n ;
|
||||
-- : Sub1000000 ; -- a thousand
|
||||
pot31 =
|
||||
{s = table {p => "ezer"}} ;
|
||||
-- : Sub1000 -> Sub1000000 ; -- m * 1000
|
||||
pot3 n =
|
||||
{s = table {p => n.s ! Attrib ++ "ezer"} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => n.s ! Attrib ++ "ezer"}} ;
|
||||
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
||||
pot3plus n m =
|
||||
{s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p} ;
|
||||
n = numNumber ; numtype = IsNum} ;
|
||||
{s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p}} ;
|
||||
pot3decimal d =
|
||||
{s = table {p => d.s ! NCard ++ "ezer"}} ;
|
||||
|
||||
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 ;
|
||||
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
|
||||
LinDigit : Type = {s : DForm*Place => Str ; n : Number} ;
|
||||
LinDigit : Type = {s : DForm*Place => Str} ;
|
||||
|
||||
mkNum3 : (x1,_,x3 : Str) -> LinDigit = \három,harminc,harmadik ->
|
||||
mkNum5 három harminc három harminc harmadik ;
|
||||
@@ -89,13 +107,8 @@ oper
|
||||
<Ten,Indep> => ti ;
|
||||
<Unit,Attrib> => ua ;
|
||||
<Ten, Attrib> => ta } ;
|
||||
-- ord = ord ; -- TODO figure out where to use ordinal
|
||||
n = numNumber ;
|
||||
numType = IsNum ;
|
||||
} ;
|
||||
|
||||
numNumber = Sg ;
|
||||
|
||||
-- numerals as sequences of digits
|
||||
lincat
|
||||
Dig = TDigit ;
|
||||
@@ -106,8 +119,7 @@ oper
|
||||
|
||||
-- : Dig -> Digits -> Digits ; -- 876
|
||||
IIDig d i = {
|
||||
s = \\x => d.s ++ BIND ++ i.s ! x ;
|
||||
n = numNumber
|
||||
s = \\x => d.s ++ BIND ++ i.s ! x
|
||||
} ;
|
||||
|
||||
D_0 = mkDig "0" ;
|
||||
@@ -122,21 +134,26 @@ oper
|
||||
D_9 = mkDig "9" ;
|
||||
|
||||
PosDecimal d = d ** {hasDot=False} ;
|
||||
NegDecinal d = {
|
||||
NegDecimal d = {
|
||||
s = \\x => "-" ++ BIND ++ d.s ! x ;
|
||||
n = numNumber ;
|
||||
hasDot=False
|
||||
} ;
|
||||
IFrac d i = {
|
||||
s = \\x => d.s ! x ++
|
||||
case d.hasDot of {
|
||||
True => BIND ;
|
||||
False => BIND ++ "." ++ BIND
|
||||
} ++ i.s ;
|
||||
hasDot=True
|
||||
} ;
|
||||
|
||||
oper
|
||||
mkDig : Str -> TDigit = \s -> {
|
||||
s = s ;
|
||||
n = numNumber
|
||||
} ;
|
||||
|
||||
TDigit = {
|
||||
s : Str ; -- TODO add ordinals
|
||||
n : Number
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ oper
|
||||
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 : Str -> PN ; -- Singular PN out of a string
|
||||
mkPN : Str -> Number -> PN -- PN with a given number
|
||||
@@ -58,6 +60,7 @@ oper
|
||||
-- Verbs
|
||||
mkV : overload {
|
||||
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. 노래+하다
|
||||
} ;
|
||||
|
||||
@@ -227,7 +230,12 @@ oper
|
||||
-- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
|
||||
-- s = \\vf => nore + hada.s ! vf} ;
|
||||
mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf ->
|
||||
lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf) ;
|
||||
lin V (mkVerbPres 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 ;
|
||||
@@ -279,6 +287,7 @@ oper
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
|
||||
mkV3 : V -> V3 = \v -> lin V3 (v2tov3 (vtov2 v)) ;
|
||||
} ;
|
||||
|
||||
mkPrep = overload {
|
||||
@@ -292,6 +301,7 @@ oper
|
||||
= \c -> lin Prep (ResHun.caseAdp c) ;
|
||||
|
||||
mkInterj : Str -> Interj = \s -> lin Interj {s = s} ;
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ oper
|
||||
-- Nouns
|
||||
|
||||
param
|
||||
Gender = Human | NonHuman ;
|
||||
|
||||
NumCaseStem =
|
||||
SgNom | SgAccStem | SgSup -- These may use 2-3 different stems
|
||||
@@ -73,16 +74,16 @@ param
|
||||
|
||||
Case =
|
||||
Nom | Acc | Dat
|
||||
-- | Ill -- Locatives
|
||||
| Ill -- Locatives
|
||||
| Ine
|
||||
| Ela
|
||||
| All
|
||||
| Ade
|
||||
| Abl
|
||||
-- | Sub
|
||||
| Sub
|
||||
| Sup
|
||||
-- | Del
|
||||
-- | Cau -- Causal-final 'for the purpose of, for the reason that'
|
||||
| Del
|
||||
| Cau -- Causal-final 'for the purpose of, for the reason that'
|
||||
| Ins -- Instrumental
|
||||
| Tra -- Translative
|
||||
-- | Ess | Ter | For
|
||||
@@ -198,14 +199,10 @@ param
|
||||
|
||||
VForm =
|
||||
VInf
|
||||
| VPres Person Number ;
|
||||
|
||||
oper
|
||||
|
||||
agr2vf : Person*Number -> VForm = \pn ->
|
||||
case <pn.p1,pn.p2> of {
|
||||
<p,n> => VPres p n
|
||||
} ;
|
||||
| VPres Person Number
|
||||
| VPast Person Number
|
||||
| VPresPart
|
||||
| VAdvPart ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Clauses
|
||||
|
||||
@@ -6,11 +6,11 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
|
||||
UttS s = s ;
|
||||
UttQS qs = qs ;
|
||||
UttIAdv iadv = iadv ;
|
||||
{-
|
||||
UttImpSg pol imp =
|
||||
{s = pol.s ++ imp.s ! Sg ! pol.p} ;
|
||||
UttImpPl pol imp =
|
||||
UttImpPol = UttImpSg ;
|
||||
-}
|
||||
{s = pol.s ++ imp.s ! Pl ! pol.p} ;
|
||||
UttImpPol = UttImpPl ;
|
||||
UttIP,
|
||||
UttNP = \np -> {s = linNP np} ;
|
||||
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 ! …} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
-- VocNP np = { s = "," ++ np.s ! … } ; -}
|
||||
VocNP np = {s = bindComma ++ linNP np} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,40 +1,49 @@
|
||||
concrete QuestionHun of Question = CatHun ** open
|
||||
Prelude, ResHun, ParadigmsHun, (NH=NounHun) in {
|
||||
Prelude, ResHun, ParadigmsHun, (NH=NounHun), (VH=VerbHun) in {
|
||||
|
||||
-- A question can be formed from a clause ('yes-no question') or
|
||||
-- with an interrogative.
|
||||
|
||||
{-
|
||||
lincat
|
||||
QVP = VerbPhrase ;
|
||||
|
||||
lin
|
||||
-- : Cl -> QCl ;
|
||||
QuestCl =
|
||||
QuestCl cl = cl ;
|
||||
|
||||
-- : IP -> VP -> QCl ;
|
||||
QuestVP ip vp =
|
||||
QuestVP ip vp = predVP ip vp ;
|
||||
|
||||
-- : 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
|
||||
QuestIAdv iadv cls =
|
||||
QuestIAdv iadv cls = {
|
||||
s = \\t,a,p => iadv.s ++ cls.s ! t ! a ! p
|
||||
} ;
|
||||
|
||||
|
||||
-- : 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
|
||||
-- determiners, with or without a noun.
|
||||
|
||||
-- : IDet -> CN -> IP ; -- which five songs
|
||||
IdetCN idet cn = {…} ** NH.DetCN idet cn ;
|
||||
IdetCN idet cn = NH.DetCN idet cn ;
|
||||
|
||||
-- : IDet -> IP ; -- which five
|
||||
IdetIP idet = {…} ** NH.DetNP idet ;
|
||||
IdetIP idet = NH.DetNP idet ;
|
||||
|
||||
-- They can be modified with adverbs.
|
||||
-- : IP -> Adv -> IP ; -- who in Paris
|
||||
--AdvIP = NH.AdvNP ;
|
||||
AdvIP = NH.AdvNP ;
|
||||
|
||||
-- Interrogative quantifiers have number forms and can take number modifiers.
|
||||
|
||||
@@ -43,12 +52,14 @@ concrete QuestionHun of Question = CatHun ** open
|
||||
|
||||
-- Interrogative adverbs can be formed prepositionally.
|
||||
-- : Prep -> IP -> IAdv ; -- with whom
|
||||
PrepIP prep ip = ;
|
||||
PrepIP prep ip = {s = applyAdp prep ip} ;
|
||||
|
||||
-- They can be modified with other adverbs.
|
||||
|
||||
-- : 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
|
||||
-- pronouns.
|
||||
@@ -57,21 +68,16 @@ concrete QuestionHun of Question = CatHun ** open
|
||||
CompIAdv iadv = iadv ; -- where (is it)
|
||||
|
||||
-- : IP -> IComp ;
|
||||
CompIP ip = {s = ip.s ! Abs} ; -- who (is it)
|
||||
CompIP ip = {s = ip.s ! NoPoss ! Nom} ; -- who (is it)
|
||||
|
||||
|
||||
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
|
||||
|
||||
-- Wh questions with two or more question words require a new, special category.
|
||||
|
||||
cat
|
||||
QVP ; -- buy what where
|
||||
fun
|
||||
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
|
||||
-}
|
||||
ComplSlashIP vps ip = VH.insertObj vps ip ;
|
||||
AdvQVP vp iadv = vp ** {adv = vp.adv ++ iadv.s} ;
|
||||
AddAdvQVP qvp iadv = qvp ** {adv = qvp.adv ++ iadv.s} ;
|
||||
QuestQVP ip qvp = predVP ip qvp ;
|
||||
|
||||
}
|
||||
|
||||
@@ -13,6 +13,19 @@ lin
|
||||
|
||||
-- : RP ;
|
||||
IdRP = {s =
|
||||
table {
|
||||
Human =>
|
||||
table {Sg => caseTable "aki" "akit" "akinek" -- nom, acc, dat
|
||||
"akibe" "akiben" "akiből" -- ill, ine, ela
|
||||
"akihez" "akinél" "akitől" -- all, ade, abl
|
||||
"akire" "akin" "akiről" -- sub, sup, del
|
||||
"akiért" "akivel" "akivé" ; -- cau, ins, tra
|
||||
Pl => caseTable "akik" "akiket" "akiknek" -- nom, acc, dat
|
||||
"akikbe" "akikben" "akikből" -- ill, ine, ela
|
||||
"akikhez" "akiknél" "akiktől" -- all, ade, abl
|
||||
"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
|
||||
@@ -22,7 +35,8 @@ lin
|
||||
"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
|
||||
"amikért" "amikkel" "amikké"} -- cau, ins, tra
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- : Prep -> NP -> RP -> RP ; -- the mother of whom
|
||||
|
||||
+139
-21
@@ -15,7 +15,7 @@ resource ResHun = NounMorphoHun ** open Prelude, Predef in {
|
||||
oper
|
||||
CNoun : Type = Noun ** {
|
||||
compl : Number => Case => Str ;
|
||||
postmod : Str ;
|
||||
postmod : Str
|
||||
} ;
|
||||
|
||||
mkCaseNoun : Str -> Number => Case => Str = \s ->
|
||||
@@ -75,6 +75,7 @@ oper
|
||||
agr : Person*Number ;
|
||||
objdef : ObjDef ;
|
||||
empty : Str ; -- standard trick for pro-drop
|
||||
g : Gender ;
|
||||
} ;
|
||||
|
||||
NounPhrase : Type = BaseNP ** {
|
||||
@@ -86,6 +87,7 @@ oper
|
||||
s = \\_,_ => [] ;
|
||||
agr = <P3,Sg> ;
|
||||
objdef = Indef ;
|
||||
g = NonHuman ;
|
||||
postmod, empty = [] ;
|
||||
} ;
|
||||
|
||||
@@ -395,6 +397,24 @@ oper
|
||||
<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 = {
|
||||
sc : SubjCase ; -- subject case
|
||||
} ;
|
||||
@@ -406,7 +426,7 @@ oper
|
||||
c2 : Case -- object case
|
||||
} ;
|
||||
Verb3 : Type = Verb2 ** {
|
||||
-- c3 : Case -- indirect object case
|
||||
c3 : Case -- indirect object case
|
||||
} ;
|
||||
|
||||
datV2 : Verb -> Verb2 = \v -> {
|
||||
@@ -418,18 +438,44 @@ oper
|
||||
mkVerb2 : Str -> Verb2 = \sg3 -> vtov2 (mkVerb 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 ** {
|
||||
s = table {
|
||||
Def => let vDef : Verb = mkVerbReg endingsDef (v.s ! VInf) (v.s ! VPres P3 Sg)
|
||||
Def => let vDef : Verb = mkVerbRegPast endingsDef endingsPastDef
|
||||
(v.s ! VInf) (v.s ! VPres P3 Sg)
|
||||
in vDef.s ;
|
||||
Indef => v.s } ;
|
||||
c2 = Acc
|
||||
} ;
|
||||
v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Dat} ;
|
||||
|
||||
mkVerb : (sg3 : Str) -> Verb = mkVerbReg endingsIndef "TODO:infinitive" ; -- TODO
|
||||
mkVerb : (sg3 : Str) -> Verb = \sg3 ->
|
||||
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 = \hf,inf,stem ->
|
||||
mkVerbReg : VerbEndings -> (inf, stem : Str) -> Verb =
|
||||
\hf,inf,stem -> mkVerbRegPast hf endingsPastIndef inf stem ;
|
||||
|
||||
mkVerbRegPast : VerbEndings -> VerbEndings -> (inf, stem : Str) -> Verb = \hf,pastHf,inf,stem ->
|
||||
let h : Harm = getHarm stem ;
|
||||
sg1 : Str = stem + hf ! <P1,Sg> ! h ;
|
||||
sg2 : Str = stem + hf ! <P2,Sg> ! h ;
|
||||
@@ -437,10 +483,43 @@ oper
|
||||
pl1 : Str = stem + hf ! <P1,Pl> ! h ;
|
||||
pl2 : Str = stem + hf ! <P2,Pl> ! h ;
|
||||
pl3 : Str = stem + hf ! <P3,Pl> ! h ;
|
||||
in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf ;
|
||||
pastSg1 : Str = stem + pastHf ! <P1,Sg> ! h ;
|
||||
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 ;
|
||||
|
||||
mkVerbFull : (x1,_,_,_,_,_,x7 : Str) -> Verb =
|
||||
\sg1,sg2,sg3,pl1,pl2,pl3,inf -> {
|
||||
mkVerbPres : (x1,_,_,_,_,_,x7 : Str) -> Verb =
|
||||
\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 {
|
||||
VInf => inf ;
|
||||
VPres P1 Sg => sg1 ;
|
||||
@@ -448,7 +527,15 @@ oper
|
||||
VPres P3 Sg => sg3 ;
|
||||
VPres P1 Pl => pl1 ;
|
||||
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
|
||||
} ;
|
||||
@@ -460,7 +547,15 @@ oper
|
||||
"vagyunk"
|
||||
"vagytok"
|
||||
"vannak"
|
||||
"lenni" ;
|
||||
"voltam"
|
||||
"voltál"
|
||||
"volt"
|
||||
"voltunk"
|
||||
"voltatok"
|
||||
"voltak"
|
||||
"lenni"
|
||||
"levő"
|
||||
"léve" ;
|
||||
|
||||
megvan : Verb = copula ** {
|
||||
s = \\vf => "meg" + copula.s ! vf ;
|
||||
@@ -489,8 +584,22 @@ oper
|
||||
adv = [] ;
|
||||
} ;
|
||||
|
||||
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s} ;
|
||||
insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = adv.s} ;
|
||||
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = vp.adv ++ adv.s} ;
|
||||
insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> 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
|
||||
@@ -515,7 +624,11 @@ oper
|
||||
SCDat => Dat }
|
||||
in linNP' NoPoss subjcase np
|
||||
++ if_then_Pol p [] "nem"
|
||||
++ vp.s ! agr2vf np.agr
|
||||
++ case <t,np.agr.p1,np.agr.p2> of {
|
||||
<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.adv
|
||||
++ np.empty -- standard trick for prodrop+metavariable problem
|
||||
@@ -523,27 +636,32 @@ oper
|
||||
|
||||
-- Relative
|
||||
|
||||
RP : Type = {s : Number => Case => Str} ;
|
||||
RClause : Type = {s : Tense => Anteriority => Polarity => Number => Case => Str} ;
|
||||
RP : Type = {s : Gender => Number => Case => Str} ;
|
||||
RClause : Type = {s : Tense => Anteriority => Polarity => Gender => Number => Case => Str} ;
|
||||
|
||||
relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ;
|
||||
|
||||
relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> {
|
||||
s = \\t,a,p,n,c => let subjcase : Case = case vp.sc of {
|
||||
s = \\t,a,p,g,n,c => let subjcase : Case = case vp.sc of {
|
||||
SCNom => Nom ;
|
||||
SCDat => Dat }
|
||||
in rp.s ! n ! subjcase
|
||||
in rp.s ! g ! n ! subjcase
|
||||
++ if_then_Pol p [] "nem"
|
||||
++ vp.obj -- ! <rp.agr.p1,n>
|
||||
++ vp.adv
|
||||
++ vp.s ! VPres rp.agr.p1 n -- variable by number
|
||||
++ case <t,rp.agr.p1,n> of {
|
||||
<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 -> {
|
||||
s = \\t,a,p,n,c => let objcase : Case = case cls.c2 of {
|
||||
s = \\t,a,p,g,n,c => let objcase : Case = case cls.c2 of {
|
||||
Acc => c ;
|
||||
_ => cls.c2 }
|
||||
in rp.s ! n ! objcase
|
||||
_ => cls.c2
|
||||
}
|
||||
in rp.s ! g ! n ! objcase
|
||||
++ cls.s ! t ! a ! p
|
||||
} ;
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@@ -11,16 +11,24 @@ lin
|
||||
PredVP = predVP ;
|
||||
|
||||
-- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94)
|
||||
--PredSCVP sc vp = ;
|
||||
PredSCVP sc vp = predVP (indeclNP sc.s) vp ;
|
||||
|
||||
--2 Clauses missing object noun phrases
|
||||
-- : NP -> VPSlash -> ClSlash ;
|
||||
SlashVP np vps = predVP np (vps ** {s = vps.s ! Indef ; obj = []}) ;
|
||||
{-
|
||||
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
|
||||
AdvSlash cls adv = cls ** insertAdv adv cls ;
|
||||
|
||||
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
|
||||
-- : 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
|
||||
} ;
|
||||
|
||||
{-
|
||||
|
||||
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
|
||||
-- SlashVS np vs ss = {} ;
|
||||
@@ -31,21 +39,27 @@ lin
|
||||
} ;
|
||||
|
||||
--2 Imperatives
|
||||
-}
|
||||
-- : VP -> Imp ;
|
||||
ImpVP vp = {s = \\num,pol => linVP (VImp num pol) Statement vp} ;
|
||||
ImpVP vp = {
|
||||
s = \\num,pol =>
|
||||
if_then_Pol pol [] "ne"
|
||||
++ vp.s ! VPres P2 num
|
||||
++ vp.obj
|
||||
++ vp.adv
|
||||
} ;
|
||||
|
||||
--2 Embedded sentences
|
||||
-- : Adv -> Imp -> Imp ;
|
||||
AdvImp adv imp = {
|
||||
s = \\num,pol => adv.s ++ imp.s ! num ! pol
|
||||
} ;
|
||||
--2 Sentences
|
||||
|
||||
-- : S -> SC ;
|
||||
EmbedS s = {s = s.s ! True} ; -- choose subordinate
|
||||
EmbedS s = {s = s.s} ;
|
||||
|
||||
-- : QS -> SC ;
|
||||
-- EmbedQS qs = { } ;
|
||||
|
||||
-- : VP -> SC ;
|
||||
EmbedVP vp = {s = infVP vp} ;
|
||||
-}
|
||||
--2 Sentences
|
||||
EmbedQS qs = {s = qs.s} ;
|
||||
|
||||
-- : Temp -> Pol -> Cl -> S ;
|
||||
UseCl t p cl = {
|
||||
@@ -56,7 +70,7 @@ lin
|
||||
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
|
||||
|
||||
-- : Temp -> Pol -> RCl -> RS ;
|
||||
UseRCl t p cl = {s = \\n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! n ! c} ;
|
||||
UseRCl t p cl = {s = \\g,n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! g ! n ! c} ;
|
||||
|
||||
-- AdvS : Adv -> S -> S ; -- then I will go home
|
||||
AdvS = advS "" ;
|
||||
@@ -65,7 +79,9 @@ lin
|
||||
ExtAdvS = advS (SOFT_BIND ++ ",");
|
||||
|
||||
-- : S -> Subj -> S -> S ;
|
||||
-- SSubjS s1 subj s2 = AdvS (AK.SubjS subj s2) s1 ;
|
||||
SSubjS s1 subj s2 = {
|
||||
s = s1.s ++ bindComma ++ subj.s ++ s2.s
|
||||
} ;
|
||||
|
||||
-- : S -> RS -> S ; -- she sleeps, which is good
|
||||
-- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;
|
||||
|
||||
@@ -121,21 +121,54 @@ lin under_Prep = nomAdp "alatt" ;
|
||||
-- Pron
|
||||
|
||||
-- Pronouns are closed class, no constructor in ParadigmsHun.
|
||||
i_Pron = pronTable ! <P1,Sg> ;
|
||||
i_Pron = pronTable ! <P1,Sg> ** {g = Human} ;
|
||||
youPol_Pron,
|
||||
youSg_Pron = pronTable ! <P2,Sg> ;
|
||||
youSg_Pron = pronTable ! <P2,Sg> ** {g = Human} ;
|
||||
he_Pron,
|
||||
she_Pron,
|
||||
she_Pron = pronTable ! <P3,Sg> ** {g = Human} ;
|
||||
it_Pron = pronTable ! <P3,Sg> ;
|
||||
we_Pron = pronTable ! <P1,Pl> ;
|
||||
youPl_Pron = pronTable ! <P2,Pl> ;
|
||||
they_Pron = pronTable ! <P3,Pl> ;
|
||||
|
||||
--lin whatPl_IP = ;
|
||||
--lin whatSg_IP = :
|
||||
--lin whoPl_IP = ;
|
||||
--lin whoSg_IP = ;
|
||||
we_Pron = pronTable ! <P1,Pl> ** {g = Human} ;
|
||||
youPl_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
|
||||
they_Pron = pronTable ! <P3,Pl> ** {g = Human} ;
|
||||
|
||||
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
|
||||
|
||||
|
||||
+52
-27
@@ -21,48 +21,59 @@ lin
|
||||
-- } ;
|
||||
|
||||
-- : VS -> S -> VP ;
|
||||
-- ComplVS vs s =
|
||||
-- let vps = useV vs ;
|
||||
-- subord = SubjS {s=""} s ;
|
||||
-- in vps ** {} ;
|
||||
ComplVS vs s = useV vs ** {
|
||||
adv = "hogy" ++ s.s
|
||||
} ;
|
||||
|
||||
{-
|
||||
-- : VQ -> QS -> VP ;
|
||||
ComplVQ vq qs = ;
|
||||
ComplVQ vq qs = useV vq ** {
|
||||
adv = qs.s
|
||||
} ;
|
||||
|
||||
-- : VA -> AP -> VP ; -- they become red
|
||||
ComplVA va ap = ResHun.insertObj (CompAP ap).s (useV va) ;
|
||||
ComplVA va ap = useV va ** {
|
||||
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg
|
||||
} ;
|
||||
|
||||
--------
|
||||
-- Slash
|
||||
-}
|
||||
|
||||
-- : V2 -> VPSlash
|
||||
SlashV2a = ResHun.useVc ;
|
||||
|
||||
{-
|
||||
-- : 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
|
||||
Slash2V3,
|
||||
Slash3V3 = \v3 -> insertObj (useVc3 v3) ;
|
||||
Slash3V3 v3 np = v3 ** {
|
||||
adv = np.s ! NoPoss ! v3.c3 ++ np.postmod ;
|
||||
c2 = v3.c2
|
||||
} ;
|
||||
|
||||
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
||||
SlashV2S v2s s =
|
||||
let vps = useVc v2s ;
|
||||
subord = SubjS {s=""} s ;
|
||||
in vps ** {obj = } ;
|
||||
SlashV2S v2s s = useVc v2s ** {
|
||||
adv = "hogy" ++ s.s
|
||||
} ;
|
||||
|
||||
|
||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||
SlashV2V v2v vp = ;
|
||||
SlashV2V v2v vp = useVc v2v ** {
|
||||
adv = infVP vp
|
||||
} ;
|
||||
|
||||
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
||||
SlashV2Q v2q qs = ;
|
||||
SlashV2Q v2q qs = useVc v2q ** {
|
||||
adv = qs.s
|
||||
} ;
|
||||
|
||||
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
||||
SlashV2A v2a ap = useVc v2a ** {
|
||||
aComp = \\_ => (CompAP ap).aComp ! Sg3 Masc
|
||||
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg
|
||||
} ;
|
||||
-}
|
||||
|
||||
-- : VPSlash -> NP -> VP
|
||||
ComplSlash = insertObj ;
|
||||
{-
|
||||
@@ -89,19 +100,27 @@ lin
|
||||
|
||||
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here
|
||||
AdvVPSlash = insertAdvSlash ;
|
||||
{-
|
||||
-- : 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
|
||||
AdVVP adv vp = vp ** { } ;
|
||||
AdVVP adv vp = vp ** {
|
||||
s = \\vf => adv.s ++ vp.s ! vf
|
||||
} ;
|
||||
|
||||
-- : 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)
|
||||
VPSlashPrep vp prep =
|
||||
-}
|
||||
VPSlashPrep vp prep = vp ** {
|
||||
s = \\_ => vp.s ;
|
||||
adv = vp.obj ++ vp.adv ++ prep.s ;
|
||||
c2 = prep.c
|
||||
} ;
|
||||
|
||||
--2 Complements to copula
|
||||
|
||||
@@ -112,7 +131,9 @@ lin
|
||||
s = \\vf => case vf of {
|
||||
VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ;
|
||||
VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ;
|
||||
_ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg } ;
|
||||
VPast _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ;
|
||||
_ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- : CN -> Comp ;
|
||||
@@ -164,9 +185,13 @@ insertObj : ResHun.VPSlash -> NounPhrase -> VerbPhrase = \vps,np -> vps ** {
|
||||
<SCDat,Nom> =>
|
||||
let agr : Person*Number = case vf of {
|
||||
VPres p n => <p,n> ;
|
||||
VPast p n => <p,n> ;
|
||||
_ => <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
|
||||
++ vps.s ! np.objdef ! agr2vf np.agr ;
|
||||
++ vps.s ! np.objdef ! objvf ;
|
||||
|
||||
-- Default case: Verb agrees in person and number with subject
|
||||
_ => vps.s ! np.objdef ! vf } ;
|
||||
|
||||
+12
-1
@@ -1,6 +1,6 @@
|
||||
--# -path=.:abstract:common:prelude
|
||||
|
||||
concrete CatLav of Cat = CommonX - [Adv, CAdv] ** open ResLav, Prelude in {
|
||||
concrete CatLav of Cat = CommonX - [Adv, CAdv, Voc] ** open ResLav, Prelude in {
|
||||
|
||||
flags
|
||||
|
||||
@@ -110,6 +110,17 @@ lincat
|
||||
|
||||
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 ;
|
||||
GN = {s : Case => Str ; gend : Gender} ;
|
||||
SN = {s : Gender => Case => Str; pl : Case => Str} ;
|
||||
|
||||
@@ -80,7 +80,8 @@ oper
|
||||
mkNounByDeclPal : Str -> Declension -> Bool -> Noun = \lemma,decl,pal ->
|
||||
case decl of {
|
||||
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
|
||||
@@ -97,7 +98,8 @@ oper
|
||||
D4 => mkNoun_D4 lemma gend ;
|
||||
D5 => mkNoun_D5 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
|
||||
|
||||
@@ -43,13 +43,15 @@ oper
|
||||
mkRegVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj ->
|
||||
case conj of {
|
||||
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 ->
|
||||
case conj of {
|
||||
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 -> {
|
||||
|
||||
@@ -0,0 +1,574 @@
|
||||
--# -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)
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
--# -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)))))))))))))))))))))))))))))))))))))))
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
--# -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
@@ -0,0 +1,16 @@
|
||||
# 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
Reference in New Issue
Block a user