mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-27 03:46:29 -06:00
first draft of a Belarusian grammar
This commit is contained in:
@@ -1,4 +1,14 @@
|
|||||||
concrete AdjectiveBel of Adjective = CatBel ** {
|
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in {
|
||||||
lin
|
lin
|
||||||
PositA a = a ;
|
PositA a = a ;
|
||||||
|
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
|
||||||
|
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
|
||||||
|
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
|
||||||
|
UseA2 a = a ;
|
||||||
|
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
|
||||||
|
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
|
||||||
|
AdjOrd ord = ord ;
|
||||||
|
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
|
||||||
|
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
|
||||||
|
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|
||||||
|
}
|
||||||
+63
-17
@@ -1,22 +1,68 @@
|
|||||||
concrete CatBel of Cat = CommonX ** open ResBel in {
|
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in {
|
||||||
|
|
||||||
lincat N = Noun ;
|
lincat
|
||||||
lincat N2 = Noun ** {c2 : Compl} ;
|
S = {s : Str} ;
|
||||||
lincat N3 = Noun ** {c2,c3 : Compl} ;
|
QS = {s : Str} ;
|
||||||
lincat Pron = {s: Case => Str; g: Gender; n : Number; p: Person} ;
|
RS = {s : Str} ;
|
||||||
lincat V = Verb ;
|
Cl = {s : R.Tense => R.Polarity => Str} ;
|
||||||
lincat VV,VS,VQ,VA = Verb ;
|
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ;
|
||||||
lincat V2 = Verb ** {c2 : Compl} ;
|
SSlash = {s : Str; c : Compl} ;
|
||||||
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
|
Imp = {s : R.Polarity => Number => Str} ;
|
||||||
lincat A = Adj ;
|
|
||||||
lincat A2 = Adj ** {c2 : Compl} ;
|
|
||||||
lincat Prep = Compl ;
|
|
||||||
lincat CN = CommonNoun ;
|
|
||||||
lincat AP = AdjPhrase ;
|
|
||||||
lincat S = {s : 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 = "урду"} ;
|
||||||
|
|
||||||
|
}
|
||||||
+234
-5
@@ -1,15 +1,244 @@
|
|||||||
--# -path=.:../abstract:../common:prelude
|
--# -path=.:../abstract:../common:prelude
|
||||||
concrete ExtendBel of Extend = CatBel ** open ResBel, ParadigmsBel in {
|
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
|
lin
|
||||||
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
|
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
|
||||||
youFem_Pron = mkPron "ты" "табе" "табе" "табе" "табе" "табой" Fem Sg P2 ;
|
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
|
||||||
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "наc" "намі" Fem Pl P1 ;
|
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
|
||||||
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||||
theyFem_Pron = mkPron "вони" "їх" "їм" "їх" "них" "ними" Fem Pl P3 ;
|
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
|
||||||
|
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
|
||||||
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||||
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
|
||||||
youPolPlFem_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
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,5 +3,14 @@ concrete GrammarBel of Grammar =
|
|||||||
PhraseBel,
|
PhraseBel,
|
||||||
NounBel,
|
NounBel,
|
||||||
AdjectiveBel,
|
AdjectiveBel,
|
||||||
StructuralBel ** {
|
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
|
--# -path=.:../abstract
|
||||||
concrete LangBel of Lang =
|
concrete LangBel of Lang =
|
||||||
GrammarBel,
|
GrammarBel,
|
||||||
LexiconBel
|
LexiconBel,
|
||||||
|
ConstructionBel
|
||||||
,DocumentationBel --# notpresent
|
,DocumentationBel --# notpresent
|
||||||
** {
|
** {
|
||||||
|
|
||||||
|
|
||||||
flags startcat = Phr ;
|
flags startcat = Phr ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
lin
|
||||||
UseN n = n ;
|
UseN n = n ;
|
||||||
|
|
||||||
|
DetCN det cn = {
|
||||||
|
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
|
||||||
|
a = {g=cn.g; n=det.n; p=P3}
|
||||||
|
} ;
|
||||||
|
UsePN pn = {
|
||||||
|
s = pn.s ;
|
||||||
|
a = {g=pn.g; n=pn.n; p=P3}
|
||||||
|
} ;
|
||||||
|
UsePron p = p ;
|
||||||
|
|
||||||
|
PredetNP pred np = {
|
||||||
|
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
|
||||||
|
a = np.a
|
||||||
|
} ;
|
||||||
|
PPartNP np v = {
|
||||||
|
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
|
||||||
|
a = np.a
|
||||||
|
} ;
|
||||||
|
AdvNP np adv = {
|
||||||
|
s = \\c => np.s ! c ++ adv.s ;
|
||||||
|
a = np.a
|
||||||
|
} ;
|
||||||
|
ExtAdvNP np adv = {
|
||||||
|
s = \\c => np.s ! c ++ adv.s ;
|
||||||
|
a = np.a
|
||||||
|
} ;
|
||||||
|
RelNP np rs = {
|
||||||
|
s = \\c => np.s ! c ++ rs.s ;
|
||||||
|
a = np.a
|
||||||
|
} ;
|
||||||
|
DetNP det = {
|
||||||
|
s = \\c => det.s ! c ! Masc ;
|
||||||
|
a = {g=Masc; n=det.n; p=P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
DetQuant q n = {
|
||||||
|
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
|
||||||
|
n = n.n
|
||||||
|
} ;
|
||||||
|
DetQuantOrd q n o = {
|
||||||
|
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
|
||||||
|
n = n.n
|
||||||
|
} ;
|
||||||
|
NumSg = {s = \\_,_ => []; n = Sg} ;
|
||||||
|
NumPl = {s = \\_,_ => []; n = Pl} ;
|
||||||
|
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
|
||||||
|
NumDigits digits = {s = digits.s; n = Pl} ;
|
||||||
|
NumDecimal dec = {s = dec.s; n = Pl} ;
|
||||||
|
NumNumeral numeral = {s = numeral.s; n = Pl} ;
|
||||||
|
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
|
||||||
|
|
||||||
|
OrdDigits d = adjFromStr d.s ;
|
||||||
|
OrdNumeral n = adjFromStr n.s ;
|
||||||
|
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
|
||||||
|
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
|
||||||
|
|
||||||
|
IndefArt = {s = \\_,_,_ => []} ;
|
||||||
|
DefArt = {s = \\_,_,_ => []} ;
|
||||||
|
MassNP cn = {
|
||||||
|
s = \\c => cn.s ! c ! Sg ;
|
||||||
|
a = {g=cn.g; n=Sg; p=P3}
|
||||||
|
} ;
|
||||||
|
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
|
||||||
|
|
||||||
|
ComplN2 n np = {
|
||||||
|
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
|
||||||
|
voc = n.voc ;
|
||||||
|
g = n.g
|
||||||
|
} ;
|
||||||
|
ComplN3 n np = n ** {c2 = n.c3} ;
|
||||||
|
UseN2 n = n ;
|
||||||
|
Use2N3 n = n ** {c2 = n.c2} ;
|
||||||
|
Use3N3 n = n ** {c2 = n.c3} ;
|
||||||
|
|
||||||
|
AdjCN ap cn = {
|
||||||
|
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
RelCN cn rs = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ rs.s ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
AdvCN cn adv = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ adv.s ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
SentCN cn sc = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ sc.s ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
ApposCN cn np = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
PossNP cn np = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
PartNP cn np = {
|
||||||
|
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
|
||||||
|
voc = cn.voc ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
CountNP det np = {
|
||||||
|
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
|
||||||
|
a = {g=Masc; n=det.n; p=P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdjDAP dap ap = {
|
||||||
|
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
|
||||||
|
n = dap.n
|
||||||
|
} ;
|
||||||
|
DetDAP det = det ;
|
||||||
|
|
||||||
|
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -669,9 +669,7 @@ oper
|
|||||||
Loc => loc ;
|
Loc => loc ;
|
||||||
Instr => instr
|
Instr => instr
|
||||||
} ;
|
} ;
|
||||||
g = g ;
|
a = {g=g; n = n; p = p}
|
||||||
n = n ;
|
|
||||||
p = p
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
regV : Str -> V -- infinitive
|
regV : Str -> V -- infinitive
|
||||||
@@ -867,24 +865,37 @@ oper
|
|||||||
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
|
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
|
||||||
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
|
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} ;
|
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
|
||||||
mkIP : Str -> IP = \s -> lin IP {s=s} ;
|
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ;
|
||||||
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
|
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} ;
|
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
|
||||||
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
|
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ;
|
||||||
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
|
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ;
|
||||||
mkDet : Str -> Det = \s -> lin Det {s=s} ;
|
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ;
|
||||||
mkCard : Str -> Card = \s -> lin Card {s=s} ;
|
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ;
|
||||||
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
|
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} ;
|
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
|
||||||
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
|
||||||
|
|
||||||
mkLN : Str -> LN = \s -> lin LN {s=s} ;
|
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ;
|
||||||
mkGN : Str -> GN = \s -> lin GN {s=s} ;
|
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ;
|
||||||
mkSN : Str -> SN = \s -> lin SN {s=s} ;
|
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
|
lin
|
||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
|
||||||
UttS s = s ;
|
UttS s = s ;
|
||||||
|
UttQS qs = qs ;
|
||||||
|
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
||||||
|
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||||
|
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||||
|
UttIP ip = {s = ip.s ! Nom} ;
|
||||||
|
UttIAdv iadv = iadv ;
|
||||||
|
UttNP np = {s = np.s ! Nom} ;
|
||||||
|
UttAdv adv = adv ;
|
||||||
|
UttVP vp = {s = vp.inf} ;
|
||||||
|
UttCN cn = {s = cn.s ! Nom ! Sg} ;
|
||||||
|
UttCard card = {s = card.s} ;
|
||||||
|
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
|
||||||
UttInterj i = i ;
|
UttInterj i = i ;
|
||||||
|
|
||||||
NoPConj = {s = []} ;
|
NoPConj = {s = []} ;
|
||||||
|
PConjConj conj = {s = conj.s} ;
|
||||||
|
|
||||||
NoVoc = {s = []} ;
|
NoVoc = {s = []} ;
|
||||||
|
VocNP np = {s = np.s ! Nom} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|
||||||
|
}
|
||||||
+118
-1
@@ -1,4 +1,4 @@
|
|||||||
resource ResBel = {
|
resource ResBel = open (R = ParamX), Prelude in {
|
||||||
|
|
||||||
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
|
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
|
||||||
param Number = Sg | Pl ;
|
param Number = Sg | Pl ;
|
||||||
@@ -166,4 +166,121 @@ oper noPrep : Compl = {s=""; c=Acc} ;
|
|||||||
oper CommonNoun = Noun ;
|
oper CommonNoun = Noun ;
|
||||||
oper AdjPhrase = Adj ;
|
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} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,12 +1,110 @@
|
|||||||
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
|
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
|
||||||
|
|
||||||
lin
|
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 ;
|
i_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Masc Sg P1 ;
|
||||||
youSg_Pron = mkPron "ты" "табе" "табе" "табе" "табе" "табой" Masc Sg P2 ;
|
youSg_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Masc Sg P2 ;
|
||||||
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
|
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
|
||||||
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
|
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
|
||||||
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
|
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
|
||||||
we_Pron = mkPron "мы" "нас" "нам" "нас" "наc" "намі" Masc Pl P1 ;
|
we_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Masc Pl P1 ;
|
||||||
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
||||||
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
||||||
they_Pron = mkPron "яны" "іх" "їм" "їх" "іх" "імі" Masc Pl P3 ;
|
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 ++ "будзь"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user