mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-10 07:36:32 -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
|
||||
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} ;
|
||||
}
|
||||
|
||||
13
src/belarusian/AdverbBel.gf
Normal file
13
src/belarusian/AdverbBel.gf
Normal file
@@ -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,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 N2 = Noun ** {c2 : Compl} ;
|
||||
lincat N3 = Noun ** {c2,c3 : Compl} ;
|
||||
lincat Pron = {s: Case => Str; g: Gender; n : Number; p: Person} ;
|
||||
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 A = Adj ;
|
||||
lincat A2 = Adj ** {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 ;
|
||||
|
||||
}
|
||||
|
||||
60
src/belarusian/ConjunctionBel.gf
Normal file
60
src/belarusian/ConjunctionBel.gf
Normal file
@@ -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} ;
|
||||
|
||||
}
|
||||
141
src/belarusian/ConstructionBel.gf
Normal file
141
src/belarusian/ConstructionBel.gf
Normal file
@@ -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 = "урду"} ;
|
||||
|
||||
}
|
||||
@@ -1,15 +1,244 @@
|
||||
--# -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
|
||||
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
|
||||
youFem_Pron = mkPron "ты" "табе" "табе" "табе" "табе" "табой" Fem Sg P2 ;
|
||||
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "наc" "намі" Fem Pl 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 ;
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -3,5 +3,14 @@ concrete GrammarBel of Grammar =
|
||||
PhraseBel,
|
||||
NounBel,
|
||||
AdjectiveBel,
|
||||
StructuralBel ** {
|
||||
AdverbBel,
|
||||
VerbBel,
|
||||
SentenceBel,
|
||||
QuestionBel,
|
||||
RelativeBel,
|
||||
ConjunctionBel,
|
||||
NumeralBel,
|
||||
NamesBel,
|
||||
StructuralBel,
|
||||
IdiomBel ** {
|
||||
}
|
||||
|
||||
22
src/belarusian/IdiomBel.gf
Normal file
22
src/belarusian/IdiomBel.gf
Normal file
@@ -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 ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
19
src/belarusian/NamesBel.gf
Normal file
19
src/belarusian/NamesBel.gf
Normal file
@@ -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
|
||||
} ;
|
||||
|
||||
}
|
||||
@@ -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 ;
|
||||
}
|
||||
|
||||
65
src/belarusian/NumeralBel.gf
Normal file
65
src/belarusian/NumeralBel.gf
Normal file
@@ -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 ;
|
||||
Instr => instr
|
||||
} ;
|
||||
g = g ;
|
||||
n = n ;
|
||||
p = p
|
||||
a = {g=g; n = n; p = p}
|
||||
} ;
|
||||
|
||||
regV : Str -> V -- infinitive
|
||||
@@ -867,24 +865,37 @@ oper
|
||||
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
|
||||
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} ;
|
||||
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} ;
|
||||
}
|
||||
|
||||
50
src/belarusian/QuestionBel.gf
Normal file
50
src/belarusian/QuestionBel.gf
Normal file
@@ -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
|
||||
} ;
|
||||
|
||||
}
|
||||
11
src/belarusian/RelativeBel.gf
Normal file
11
src/belarusian/RelativeBel.gf
Normal file
@@ -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} ;
|
||||
|
||||
}
|
||||
@@ -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 ;
|
||||
@@ -166,4 +166,121 @@ oper noPrep : Compl = {s=""; c=Acc} ;
|
||||
oper CommonNoun = Noun ;
|
||||
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
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
45
src/belarusian/SentenceBel.gf
Normal file
45
src/belarusian/SentenceBel.gf
Normal file
@@ -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 {
|
||||
|
||||
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 "мы" "нас" "нам" "нас" "наc" "намі" Masc Pl P1 ;
|
||||
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
||||
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
|
||||
they_Pron = mkPron "яны" "іх" "їм" "їх" "іх" "імі" Masc Pl P3 ;
|
||||
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 = "беларуская"} ;
|
||||
|
||||
}
|
||||
|
||||
138
src/belarusian/VerbBel.gf
Normal file
138
src/belarusian/VerbBel.gf
Normal file
@@ -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