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