mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-09-22 18:26:13 -06:00
extended by Codex
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
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 ++ "да сябе"} ;
|
||||
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc; adv = "больш" ++ a.adv ++ "за" ++ np.s ! Acc; post = a.post} ;
|
||||
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np; adv = a.adv ++ prepNP a.c2 np; post = a.post} ;
|
||||
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"; adv = a.adv ++ "да сябе"; post = a.post} ;
|
||||
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} ;
|
||||
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn; adv = "больш" ++ a.adv; post = a.post} ;
|
||||
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom; adv = cadv.s ++ ap.adv ++ cadv.p ++ np.s ! Nom; post = ap.post} ;
|
||||
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} ;
|
||||
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s; adv = ap.adv ++ sc.s; post = ap.post} ;
|
||||
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn; adv = ada.s ++ ap.adv; post = ap.post} ;
|
||||
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s; adv = ap.adv ++ adv.s; post = ap.post} ;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
|
||||
|
||||
lin
|
||||
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
|
||||
PositAdvAdj a = {s = a.adv} ;
|
||||
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} ;
|
||||
ComparAdvAdj cadv a np = {s = cadv.s ++ a.adv ++ cadv.p ++ np.s ! Nom} ;
|
||||
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.adv ++ cadv.p ++ s.s} ;
|
||||
AdAdv ada adv = {s = ada.s ++ adv.s} ;
|
||||
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
|
||||
PositAdAAdj a = {s = a.adv} ;
|
||||
SubjS subj s = {s = subj.s ++ s.s} ;
|
||||
AdnCAdv cadv = {s = cadv.s} ;
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ lincat
|
||||
N3 = Noun ** {c2,c3 : Compl} ;
|
||||
CN = CommonNoun ;
|
||||
NP = NPhrase ;
|
||||
Pron = {s: Case => Str; a: Agr} ;
|
||||
Pron = {s: Case => Str; poss : Case => Gender => Number => Str; a: Agr} ;
|
||||
Det = {s : Case => Gender => Str; n : Number} ;
|
||||
Predet = {s : Case => Gender => Number => Str} ;
|
||||
Quant = {s : Case => Gender => Number => Str} ;
|
||||
@@ -47,8 +47,8 @@ lincat
|
||||
|
||||
V = Verb ;
|
||||
VV,VS,VQ,VA = Verb ;
|
||||
V2 = Verb ** {c2 : Compl} ;
|
||||
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
|
||||
V2 = Verb ** {c2 : Compl; pa : Adj} ;
|
||||
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl; pa : Adj} ;
|
||||
A = Adj ;
|
||||
A2 = Adj ** {c2 : Compl} ;
|
||||
AP = AdjPhrase ;
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
|
||||
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel, Prelude 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} ;
|
||||
ConjAP conj xs = {
|
||||
s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn;
|
||||
adv = xs.adv1 ++ conj.s ++ xs.adv2;
|
||||
post = False
|
||||
} ;
|
||||
ConjNP conj xs = {
|
||||
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
|
||||
a = {g=Masc; n=conj.n; p=P3}
|
||||
@@ -39,8 +43,13 @@ lin
|
||||
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} ;
|
||||
BaseAP x y = {s1 = x.s; s2 = y.s; adv1 = x.adv; adv2 = y.adv} ;
|
||||
ConsAP x xs = {
|
||||
s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn;
|
||||
s2 = xs.s2;
|
||||
adv1 = x.adv ++ "," ++ xs.adv1;
|
||||
adv2 = xs.adv2
|
||||
} ;
|
||||
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} ;
|
||||
@@ -53,7 +62,7 @@ lincat
|
||||
[AdV] = {s1,s2 : Str} ;
|
||||
[IAdv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : Case => Str} ;
|
||||
[AP] = {s1,s2 : Case => GenNum => Str} ;
|
||||
[AP] = {s1,s2 : Case => GenNum => Str; adv1,adv2 : Str} ;
|
||||
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
|
||||
[DAP] = {s1,s2 : Case => Gender => Str} ;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ lincat
|
||||
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 ;
|
||||
inf = \\agr => "быць" ++ a.s ! Nom ! genNum agr.g agr.n ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
|
||||
} ;
|
||||
|
||||
@@ -19,7 +19,7 @@ lin
|
||||
ready_VP = adjVP (mkA "гатовы") ;
|
||||
has_age_VP card = {
|
||||
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
|
||||
inf = card.s ++ "гадоў" ;
|
||||
inf = \\_ => card.s ++ "гадоў" ;
|
||||
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
|
||||
} ;
|
||||
|
||||
@@ -33,7 +33,7 @@ lin
|
||||
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_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn; adv = card.s ++ cn.s ! Gen ! Pl ++ a.adv; post = a.post} ;
|
||||
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 ;
|
||||
|
||||
|
||||
+49
-33
@@ -1,5 +1,5 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
|
||||
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel, Prelude in {
|
||||
|
||||
lincat
|
||||
VPS = {s : Agr => Str} ;
|
||||
@@ -31,11 +31,11 @@ lin
|
||||
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 ;
|
||||
s = \\c => cn.s ! c ! num.n ++ np.s ! Gen ;
|
||||
a = {g=cn.g; n=num.n; p=P3}
|
||||
} ;
|
||||
GenModIP num ip cn = {
|
||||
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
|
||||
s = \\c => cn.s ! c ! num.n ++ ip.s ! Gen ;
|
||||
a = {g=cn.g; n=num.n; p=P3}
|
||||
} ;
|
||||
|
||||
@@ -46,7 +46,7 @@ lin
|
||||
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} ;
|
||||
MkVPS temp pol vp = {s = \\a => vp.s ! anteriorTense temp.t temp.a ! 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} ;
|
||||
@@ -63,13 +63,13 @@ lin
|
||||
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 ;
|
||||
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} ;
|
||||
MkVPS2 temp pol vp = {s = \\a => vp.s ! anteriorTense temp.t temp.a ! 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} ;
|
||||
@@ -100,16 +100,24 @@ lin
|
||||
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
|
||||
PresPartAP vp = {
|
||||
s = \\_,gn => relativeNom gn ++ vp.s ! R.Pres ! R.Pos ! agrFromGenNum gn;
|
||||
adv = vp.inf;
|
||||
post = True
|
||||
} ;
|
||||
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
|
||||
EmbedPresPart vp = {s = vp.inf} ;
|
||||
PastPartAP vp = vp.pass ;
|
||||
PastPartAgentAP vp np = {
|
||||
s = \\c,gn => vp.pass.s ! c ! gn ++ prepNP (mkPrep instrumental) np ;
|
||||
adv = vp.pass.adv ++ prepNP (mkPrep instrumental) np;
|
||||
post = False
|
||||
} ;
|
||||
PassVPSlash vp = {
|
||||
s = \\t,p,a => copula t p a ++ vp.pass.s ! Nom ! genNum a.g a.n ;
|
||||
inf = \\a => "быць" ++ vp.pass.s ! Nom ! genNum a.g a.n ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ vp.pass.s ! Nom ! GSg Masc
|
||||
} ;
|
||||
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 = {
|
||||
@@ -117,14 +125,18 @@ lin
|
||||
inf = a.s ! Nom ! GSg Masc ;
|
||||
c = a.c2 ;
|
||||
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
|
||||
post = []
|
||||
pass = a ;
|
||||
post = [] ;
|
||||
objPost = \\_ => []
|
||||
} ;
|
||||
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 = []
|
||||
pass = adjFromStr (n.s ! Nom ! Sg) ;
|
||||
post = [] ;
|
||||
objPost = \\_ => []
|
||||
} ;
|
||||
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} ;
|
||||
@@ -135,7 +147,7 @@ lin
|
||||
PurposeVP vp = {s = "каб" ++ vp.inf} ;
|
||||
ComplBareVS vs s = {
|
||||
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
|
||||
inf = vs.infinitive ++ s.s ;
|
||||
inf = \\_ => vs.infinitive ++ s.s ;
|
||||
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
|
||||
} ;
|
||||
SlashBareV2S v s = {
|
||||
@@ -143,16 +155,18 @@ lin
|
||||
inf = v.infinitive ++ s.s ;
|
||||
c = v.c2 ;
|
||||
imp = \\p,n => neg p ++ v.imperative ! n ;
|
||||
post = s.s
|
||||
pass = v.pa ;
|
||||
post = s.s ;
|
||||
objPost = \\_ => s.s
|
||||
} ;
|
||||
ComplDirectVS vs utt = {
|
||||
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
|
||||
inf = vs.infinitive ++ 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 ;
|
||||
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} ;
|
||||
@@ -165,18 +179,20 @@ lin
|
||||
|
||||
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 ;
|
||||
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} ;
|
||||
ReflPoss num cn = {s = \\c =>
|
||||
(mkPossAdj "св").s ! (modifierCase c cn.g num.n) ! genNum cn.g num.n ++ 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} ;
|
||||
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c; adv = ap.adv ++ prep.s ++ rnp.s ! prep.c; post = ap.post} ;
|
||||
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c; adv = a.adv ++ a.c2.s ++ rnp.s ! a.c2.c; post = a.post} ;
|
||||
PossPronRNP pron num cn rnp = {
|
||||
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
|
||||
s = \\c => pron.poss ! c ! cn.g ! num.n ++ 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} ;
|
||||
@@ -188,15 +204,15 @@ lin
|
||||
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 ;
|
||||
inf = \\a => vv.infinitive ++ neg pol.p ++ vp.inf ! a ;
|
||||
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 ;
|
||||
s = \\c,n => n2.s ! c ! n ++ n1.s ! Gen ! Sg ;
|
||||
voc = n2.voc ++ n1.s ! Gen ! Sg ;
|
||||
g = n2.g
|
||||
} ;
|
||||
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
|
||||
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn; adv = n.s ! Nom ! Sg ++ a.adv; post = a.post} ;
|
||||
GerundCN vp = nounFromStr vp.inf Neuter ;
|
||||
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
|
||||
GerundAdv vp = {s = vp.inf} ;
|
||||
@@ -206,7 +222,7 @@ lin
|
||||
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} ;
|
||||
PositAdVAdj a = {s = a.adv} ;
|
||||
CompS s = {s = \\_ => s.s} ;
|
||||
CompQS qs = {s = \\_ => qs.s} ;
|
||||
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
|
||||
@@ -214,7 +230,7 @@ lin
|
||||
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 ;
|
||||
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}} ;
|
||||
@@ -222,7 +238,7 @@ lin
|
||||
UseComp_estar comp = UseComp_ser comp ;
|
||||
UseComp_ser comp = {
|
||||
s = \\t,p,a => copula t p a ++ comp.s ! a ;
|
||||
inf = "быць" ++ comp.s ! defaultAgr ;
|
||||
inf = \\a => "быць" ++ comp.s ! a ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
|
||||
} ;
|
||||
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
|
||||
|
||||
@@ -12,7 +12,7 @@ lin
|
||||
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
|
||||
|
||||
ProgrVP vp = vp ;
|
||||
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
|
||||
ImpPl1 vp = {s = "давайце" ++ vp.inf ! defaultAgr} ;
|
||||
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
|
||||
|
||||
SelfAdvVP vp = addAdvVP vp "сам" ;
|
||||
|
||||
+21
-11
@@ -1,4 +1,4 @@
|
||||
resource MorphoBel = open CatBel, ResBel, Predef in {
|
||||
resource MorphoBel = open CatBel, ResBel, Predef, Prelude in {
|
||||
|
||||
oper
|
||||
|
||||
@@ -29196,7 +29196,8 @@ mkA001 : Str -> A ;
|
||||
mkA001 base =
|
||||
case base of {
|
||||
base_1+"ы" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"ы" ;
|
||||
GSg Fem => base_1+"ая" ;
|
||||
@@ -29238,7 +29239,8 @@ mkA002 : Str -> A ;
|
||||
mkA002 base =
|
||||
case base of {
|
||||
base_1+"ы" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"ы" ;
|
||||
GSg Fem => base_1+"ая" ;
|
||||
@@ -29280,7 +29282,8 @@ mkA003 : Str -> A ;
|
||||
mkA003 base =
|
||||
case base of {
|
||||
base_1+"і" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"і" ;
|
||||
GSg Fem => base_1+"ая" ;
|
||||
@@ -29322,7 +29325,8 @@ mkA004 : Str -> A ;
|
||||
mkA004 base =
|
||||
case base of {
|
||||
base_1 => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1 ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1 ;
|
||||
GSg Fem => base_1+"яя" ;
|
||||
@@ -29364,7 +29368,8 @@ mkA005 : Str -> A ;
|
||||
mkA005 base =
|
||||
case base of {
|
||||
base_1+"і" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"і" ;
|
||||
GSg Fem => base_1+"яя" ;
|
||||
@@ -29406,7 +29411,8 @@ mkA006 : Str -> A ;
|
||||
mkA006 base =
|
||||
case base of {
|
||||
base_1+"і" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"і" ;
|
||||
GSg Fem => base_1+"ая" ;
|
||||
@@ -29448,7 +29454,8 @@ mkA007 : Str -> A ;
|
||||
mkA007 base =
|
||||
case base of {
|
||||
base_1+"ны" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"на" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"ны" ;
|
||||
GSg Fem => base_1+"ая" ;
|
||||
@@ -29490,7 +29497,8 @@ mkA008 : Str -> A ;
|
||||
mkA008 base =
|
||||
case base of {
|
||||
"м"+base_1+"ўк"+base_2@(?+?+?)+"ы" => lin A
|
||||
{ s = table {
|
||||
{ adv = "м"+base_1+"ўк"+base_2+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => "м"+base_1+"ўк"+base_2+"ы" ;
|
||||
GSg Fem => "гав"+base_1+"р"+base_2+"ая" ;
|
||||
@@ -29532,7 +29540,8 @@ mkA009 : Str -> A ;
|
||||
mkA009 base =
|
||||
case base of {
|
||||
"невым"+base_1+"ы" => lin A
|
||||
{ s = table {
|
||||
{ adv = "невым"+base_1+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => "невым"+base_1+"ы" ;
|
||||
GSg Fem => "ах"+base_1+"ая" ;
|
||||
@@ -29574,7 +29583,8 @@ mkA010 : Str -> A ;
|
||||
mkA010 base =
|
||||
case base of {
|
||||
base_1+"е"+base_2@(?+?+?)+"ы" => lin A
|
||||
{ s = table {
|
||||
{ adv = base_1+"е"+base_2+"а" ; post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => base_1+"е"+base_2+"ы" ;
|
||||
GSg Fem => base_1+"я"+base_2+"ая" ;
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in {
|
||||
|
||||
oper superlativeMarker : Case => GenNum => Str = table {
|
||||
Nom => table {GSg Masc => "самы"; GSg Fem => "самая"; GSg Neuter => "самае"; GPl => "самыя"};
|
||||
Acc => table {GSg Masc => "самага"; GSg Fem => "самую"; GSg Neuter => "самае"; GPl => "самых"};
|
||||
Dat => table {GSg Masc => "самому"; GSg Fem => "самай"; GSg Neuter => "самому"; GPl => "самым"};
|
||||
Gen => table {GSg Masc => "самага"; GSg Fem => "самай"; GSg Neuter => "самага"; GPl => "самых"};
|
||||
Loc => table {GSg Masc => "самым"; GSg Fem => "самай"; GSg Neuter => "самым"; GPl => "самых"};
|
||||
Instr => table {GSg Masc => "самым"; GSg Fem => "самай"; GSg Neuter => "самым"; GPl => "самымі"}
|
||||
};
|
||||
lin
|
||||
UseN n = n ;
|
||||
|
||||
DetCN det cn = {
|
||||
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
|
||||
s = \\c => det.s ! (modifierCase c cn.g det.n) ! cn.g ++ cn.s ! c ! det.n ;
|
||||
a = {g=cn.g; n=det.n; p=P3}
|
||||
} ;
|
||||
UsePN pn = {
|
||||
@@ -55,8 +64,12 @@ lin
|
||||
|
||||
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} ;
|
||||
OrdSuperl a = {
|
||||
s = \\c,gn => superlativeMarker ! c ! gn ++ a.s ! c ! gn;
|
||||
adv = "найбольш" ++ a.adv;
|
||||
post = False
|
||||
} ;
|
||||
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn; adv = n.s ++ a.adv; post = False} ;
|
||||
|
||||
IndefArt = {s = \\_,_,_ => []} ;
|
||||
DefArt = {s = \\_,_,_ => []} ;
|
||||
@@ -64,7 +77,7 @@ lin
|
||||
s = \\c => cn.s ! c ! Sg ;
|
||||
a = {g=cn.g; n=Sg; p=P3}
|
||||
} ;
|
||||
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
|
||||
PossPron p = {s = p.poss} ;
|
||||
|
||||
ComplN2 n np = {
|
||||
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
|
||||
@@ -77,7 +90,10 @@ lin
|
||||
Use3N3 n = n ** {c2 = n.c3} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
|
||||
s = \\c,num => case ap.post of {
|
||||
False => ap.s ! (modifierCase c cn.g num) ! genNum cn.g num ++ cn.s ! c ! num;
|
||||
True => cn.s ! c ! num ++ SOFT_BIND ++ "," ++ ap.s ! Nom ! genNum cn.g num
|
||||
} ;
|
||||
voc = cn.voc ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
@@ -1,51 +1,69 @@
|
||||
concrete NumeralBel of Numeral = CatBel ** {
|
||||
concrete NumeralBel of Numeral = CatBel ** open Prelude in {
|
||||
|
||||
lincat
|
||||
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
|
||||
Digit = {
|
||||
s, fem, teen, ten, hundred : Str ;
|
||||
form : NumForm
|
||||
} ;
|
||||
Sub10, Sub100, Sub1000 = {
|
||||
s, fem, hundred : Str ;
|
||||
form : NumForm
|
||||
} ;
|
||||
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"} ;
|
||||
n2 = mkDigit "два" "дзве" "дванаццаць" "дваццаць" "дзвесце" Few ;
|
||||
n3 = mkDigit "тры" "тры" "трынаццаць" "трыццаць" "трыста" Few ;
|
||||
n4 = mkDigit "чатыры" "чатыры" "чатырнаццаць" "сорак" "чатырыста" Few ;
|
||||
n5 = mkDigit "пяць" "пяць" "пятнаццаць" "пяцьдзясят" "пяцьсот" Many ;
|
||||
n6 = mkDigit "шэсць" "шэсць" "шаснаццаць" "шэсцьдзясят" "шэсцьсот" Many ;
|
||||
n7 = mkDigit "сем" "сем" "сямнаццаць" "семдзесят" "семсот" Many ;
|
||||
n8 = mkDigit "восем" "восем" "васямнаццаць" "восемдзесят" "восемсот" Many ;
|
||||
n9 = mkDigit "дзевяць" "дзевяць" "дзевятнаццаць" "дзевяноста" "дзевяцьсот" Many ;
|
||||
|
||||
pot01 = {s = "1"} ;
|
||||
pot01 = {s = "адзін"; fem = "адна"; hundred = "сто"; form = One} ;
|
||||
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} ;
|
||||
pot110 = mkNum "дзесяць" Many ;
|
||||
pot111 = mkNum "адзінаццаць" Many ;
|
||||
pot1to19 d = mkNum d.teen Many ;
|
||||
pot1 d = mkNum d.ten Many ;
|
||||
pot1plus d n = {
|
||||
s = d.ten ++ n.s ;
|
||||
fem = d.ten ++ n.fem ;
|
||||
hundred = [] ;
|
||||
form = n.form
|
||||
} ;
|
||||
pot1as2 n = n ;
|
||||
pot21 = {s = "100"} ;
|
||||
pot2 n = {s = n.s ++ "00"} ;
|
||||
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
|
||||
pot21 = mkNum "сто" Many ;
|
||||
pot2 n = mkNum n.hundred Many ;
|
||||
pot2plus n m = {
|
||||
s = n.hundred ++ m.s ;
|
||||
fem = n.hundred ++ m.fem ;
|
||||
hundred = [] ;
|
||||
form = m.form
|
||||
} ;
|
||||
pot2as3 n = n ;
|
||||
pot31 = {s = "1000"} ;
|
||||
pot3 n = {s = n.s ++ "000"} ;
|
||||
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
|
||||
pot31 = {s = "тысяча"} ;
|
||||
pot3 n = {s = n.fem ++ scaleForm n.form "тысяча" "тысячы" "тысяч"} ;
|
||||
pot3plus n m = {s = (pot3 n).s ++ 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} ;
|
||||
pot41 = {s = "мільён"} ;
|
||||
pot4 n = {s = n.s ++ scaleForm n.form "мільён" "мільёны" "мільёнаў"} ;
|
||||
pot4plus n m = {s = (pot4 n).s ++ 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} ;
|
||||
pot51 = {s = "мільярд"} ;
|
||||
pot5 n = {s = n.s ++ scaleForm n.form "мільярд" "мільярды" "мільярдаў"} ;
|
||||
pot5plus n m = {s = (pot5 n).s ++ m.s} ;
|
||||
pot5decimal d = {s = d.s ++ "мільярда"} ;
|
||||
|
||||
IDig d = d ;
|
||||
IIDig d ds = {s = d.s ++ ds.s} ;
|
||||
IIDig d ds = {s = d.s ++ BIND ++ ds.s} ;
|
||||
|
||||
D_0 = {s = "0"} ;
|
||||
D_1 = {s = "1"} ;
|
||||
@@ -59,7 +77,29 @@ lin
|
||||
D_9 = {s = "9"} ;
|
||||
|
||||
PosDecimal d = d ;
|
||||
NegDecimal d = {s = "-" ++ d.s} ;
|
||||
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
|
||||
NegDecimal d = {s = "-" ++ BIND ++ d.s} ;
|
||||
IFrac d dig = {s = d.s ++ "." ++ BIND ++ dig.s} ;
|
||||
|
||||
oper
|
||||
mkDigit : (unit, feminine, teen, ten, hundred : Str) -> NumForm -> {
|
||||
s, fem, teen, ten, hundred : Str ;
|
||||
form : NumForm
|
||||
} = \unit,feminine,teen,ten,hundred,form -> {
|
||||
s = unit ; fem = feminine ; teen = teen ; ten = ten ;
|
||||
hundred = hundred ; form = form
|
||||
} ;
|
||||
|
||||
mkNum : Str -> NumForm -> {s, fem, hundred : Str ; form : NumForm} =
|
||||
\s,form -> {s = s ; fem = s ; hundred = [] ; form = form} ;
|
||||
|
||||
scaleForm : NumForm -> (one, few, many : Str) -> Str =
|
||||
\form,one,few,many -> case form of {
|
||||
One => one ;
|
||||
Few => few ;
|
||||
Many => many
|
||||
} ;
|
||||
|
||||
param
|
||||
NumForm = One | Few | Many ;
|
||||
|
||||
}
|
||||
|
||||
+119
-15
@@ -669,9 +669,52 @@ oper
|
||||
Loc => loc ;
|
||||
Instr => instr
|
||||
} ;
|
||||
poss = \\c,g,n => (possessiveA nom).s ! c ! genNum g n ;
|
||||
a = {g=g; n = n; p = p}
|
||||
} ;
|
||||
|
||||
-- Personal pronouns have adjectival possessives in Belarusian. Keeping
|
||||
-- them in the pronoun record lets PossPron agree with the possessed noun
|
||||
-- instead of incorrectly using the personal genitive (мяне, цябе, ...).
|
||||
possessiveA : Str -> A = \pron -> case pron of {
|
||||
"я" => mkPossAdj "м" ;
|
||||
"ты" => mkPossAdj "тв" ;
|
||||
"мы" => mkHardPossAdj "наш" ;
|
||||
"вы" => mkHardPossAdj "ваш" ;
|
||||
"ён" => lin A (adjFromStr "яго") ;
|
||||
"яно" => lin A (adjFromStr "яго") ;
|
||||
"яна" => lin A (adjFromStr "яе") ;
|
||||
"яны" => lin A (adjFromStr "іх") ;
|
||||
_ => lin A (adjFromStr pron)
|
||||
} ;
|
||||
|
||||
mkPossAdj : Str -> A = \stem -> lin A {adv = stem+"аё"; post = False; s = table {
|
||||
Nom => table {GSg Masc => stem+"ой"; GSg Fem => stem+"ая"; GSg Neuter => stem+"аё"; GPl => stem+"ае"} ;
|
||||
Acc => table {GSg Masc => stem+"айго"; GSg Fem => stem+"аю"; GSg Neuter => stem+"аё"; GPl => stem+"аіх"} ;
|
||||
Dat => table {GSg Masc => stem+"айму"; GSg Fem => stem+"аёй"; GSg Neuter => stem+"айму"; GPl => stem+"аім"} ;
|
||||
Gen => table {GSg Masc => stem+"айго"; GSg Fem => stem+"аёй"; GSg Neuter => stem+"айго"; GPl => stem+"аіх"} ;
|
||||
Loc => table {GSg Masc => stem+"аім"; GSg Fem => stem+"аёй"; GSg Neuter => stem+"аім"; GPl => stem+"аіх"} ;
|
||||
Instr => table {GSg Masc => stem+"аім"; GSg Fem => stem+"аёй"; GSg Neuter => stem+"аім"; GPl => stem+"аімі"}
|
||||
}} ;
|
||||
|
||||
mkHardPossAdj : Str -> A = \stem -> lin A {adv = stem+"а"; post = False; s = table {
|
||||
Nom => table {GSg Masc => stem; GSg Fem => stem+"а"; GSg Neuter => stem+"а"; GPl => stem+"ы"} ;
|
||||
Acc => table {GSg Masc => stem+"ага"; GSg Fem => stem+"у"; GSg Neuter => stem+"а"; GPl => stem+"ых"} ;
|
||||
Dat => table {GSg Masc => stem+"аму"; GSg Fem => stem+"ай"; GSg Neuter => stem+"аму"; GPl => stem+"ым"} ;
|
||||
Gen => table {GSg Masc => stem+"ага"; GSg Fem => stem+"ай"; GSg Neuter => stem+"ага"; GPl => stem+"ых"} ;
|
||||
Loc => table {GSg Masc => stem+"ым"; GSg Fem => stem+"ай"; GSg Neuter => stem+"ым"; GPl => stem+"ых"} ;
|
||||
Instr => table {GSg Masc => stem+"ым"; GSg Fem => stem+"ай"; GSg Neuter => stem+"ым"; GPl => stem+"ымі"}
|
||||
}} ;
|
||||
|
||||
mkDemonstrativeA : Str -> A = \stem -> lin A {adv = stem+"ое"; post = False; s = table {
|
||||
Nom => table {GSg Masc => stem+"ой"; GSg Fem => stem+"ая"; GSg Neuter => stem+"ое"; GPl => stem+"ыя"} ;
|
||||
Acc => table {GSg Masc => stem+"аго"; GSg Fem => stem+"ую"; GSg Neuter => stem+"ое"; GPl => stem+"ых"} ;
|
||||
Dat => table {GSg Masc => stem+"аму"; GSg Fem => stem+"ой"; GSg Neuter => stem+"аму"; GPl => stem+"ым"} ;
|
||||
Gen => table {GSg Masc => stem+"аго"; GSg Fem => stem+"ой"; GSg Neuter => stem+"аго"; GPl => stem+"ых"} ;
|
||||
Loc => table {GSg Masc => stem+"ым"; GSg Fem => stem+"ой"; GSg Neuter => stem+"ым"; GPl => stem+"ых"} ;
|
||||
Instr => table {GSg Masc => stem+"ым"; GSg Fem => stem+"ой"; GSg Neuter => stem+"ым"; GPl => stem+"ымі"}
|
||||
}} ;
|
||||
|
||||
regV : Str -> V -- infinitive
|
||||
= \form -> case form of {
|
||||
_ + "агчы" => mkV021 form;
|
||||
@@ -797,6 +840,14 @@ oper
|
||||
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Acc;Pl
|
||||
} ;
|
||||
|
||||
-- Use the plural paradigm of a plural-only Belarusian noun even when the
|
||||
-- language-neutral tree carries NumSg (e.g. English "door" vs. дзверы).
|
||||
pluralOnlyN : N -> N = \noun -> lin N {
|
||||
s = \\c,_ => noun.s ! c ! Pl ;
|
||||
voc = noun.voc ;
|
||||
g = noun.g
|
||||
} ;
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
|
||||
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||
@@ -817,34 +868,69 @@ oper
|
||||
mkVQ : V -> VQ = \v -> lin VQ v ;
|
||||
mkVA : V -> VA = \v -> lin VA v ;
|
||||
|
||||
-- Productive fallback for passive constructions. Individual lexical
|
||||
-- entries can override it with mkV2Pass/mkV3Pass when the participle is
|
||||
-- irregular; importantly, the fallback is still an agreeing adjective,
|
||||
-- never the infinitive used by the old implementation.
|
||||
defaultPassiveA : Str -> A = \inf -> case inf of {
|
||||
stem + "аваць" => regA (stem + "аваны") ;
|
||||
stem + "яваць" => regA (stem + "яваны") ;
|
||||
stem + "ваць" => regA (stem + "ваны") ;
|
||||
stem + "нуць" => regA (stem + "нуты") ;
|
||||
stem + "аць" => regA (stem + "аны") ;
|
||||
stem + "яць" => regA (stem + "яны") ;
|
||||
stem + "іць" => regA (stem + "ены") ;
|
||||
stem + "ыць" => regA (stem + "аны") ;
|
||||
stem + "ці" => regA (stem + "ты") ;
|
||||
stem + "ць" => regA (stem + "ты") ;
|
||||
_ => lin A (adjFromStr inf)
|
||||
} ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
|
||||
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
|
||||
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV2Pass = overload {
|
||||
mkV2Pass : V -> A -> V2 = \v,a -> lin V2 (v ** {c2 = noPrep; pa = a}) ;
|
||||
mkV2Pass : V -> Prep -> A -> V2 = \v,p,a -> lin V2 (v ** {c2 = p; pa = a})
|
||||
} ;
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
|
||||
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
|
||||
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV3Pass : V -> Prep -> Prep -> A -> V3 = \v,p1,p2,a ->
|
||||
lin V3 (v ** {c2 = p1; c3 = p2; pa = a}) ;
|
||||
|
||||
mkV2A = overload {
|
||||
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
|
||||
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
|
||||
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV2S = overload {
|
||||
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
|
||||
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
|
||||
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV2Q = overload {
|
||||
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
|
||||
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
|
||||
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV2V = overload {
|
||||
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
|
||||
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
|
||||
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep; pa = defaultPassiveA v.infinitive}) ;
|
||||
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2; pa = defaultPassiveA v.infinitive}) ;
|
||||
} ;
|
||||
|
||||
mkV2VPass : V -> Prep -> Prep -> A -> V2V = \v,p1,p2,a ->
|
||||
lin V2V (v ** {c2 = p1; c3 = p2; pa = a}) ;
|
||||
|
||||
postA : A -> Str -> A = \a,s -> lin A {
|
||||
s = \\c,gn => a.s ! c ! gn ++ s;
|
||||
adv = a.adv ++ s;
|
||||
post = a.post
|
||||
} ;
|
||||
|
||||
mkA = overload {
|
||||
@@ -883,11 +969,29 @@ oper
|
||||
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} ;
|
||||
mkQuant = overload {
|
||||
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ;
|
||||
mkQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n}
|
||||
} ;
|
||||
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} ;
|
||||
mkPredet = overload {
|
||||
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ;
|
||||
mkPredet : A -> Predet = \a -> lin Predet {s=\\c,g,n => a.s ! c ! genNum g n}
|
||||
} ;
|
||||
allPredet : Predet = lin Predet {s = table {
|
||||
Nom => table {Masc => table {Sg => "увесь"; Pl => "усе"}; Fem => table {Sg => "уся"; Pl => "усе"}; Neuter => table {Sg => "усё"; Pl => "усе"}} ;
|
||||
Acc => table {Masc => table {Sg => "усяго"; Pl => "усіх"}; Fem => table {Sg => "усю"; Pl => "усіх"}; Neuter => table {Sg => "усё"; Pl => "усіх"}} ;
|
||||
Dat => table {Fem => table {Sg => "усёй"; Pl => "усім"}; _ => table {Sg => "усяму"; Pl => "усім"}} ;
|
||||
Gen => table {Fem => table {Sg => "усёй"; Pl => "усіх"}; _ => table {Sg => "усяго"; Pl => "усіх"}} ;
|
||||
Loc => table {Fem => table {Sg => "усёй"; Pl => "усіх"}; _ => table {Sg => "усім"; Pl => "усіх"}} ;
|
||||
Instr => table {Fem => table {Sg => "усёй"; Pl => "усімі"}; _ => table {Sg => "усім"; Pl => "усімі"}}
|
||||
}} ;
|
||||
mkDet = overload {
|
||||
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ;
|
||||
mkDet : A -> Number -> Det = \a,n -> lin Det {s=\\c,g => a.s ! c ! genNum g n; n=n}
|
||||
} ;
|
||||
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ;
|
||||
mkCardSg : Str -> Card = \s -> lin Card {s=s; n=Sg} ;
|
||||
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} ;
|
||||
|
||||
@@ -11,7 +11,7 @@ lin
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
UttAdv adv = adv ;
|
||||
UttVP vp = {s = vp.inf} ;
|
||||
UttVP vp = {s = vp.inf ! defaultAgr} ;
|
||||
UttCN cn = {s = cn.s ! Nom ! Sg} ;
|
||||
UttCard card = {s = card.s} ;
|
||||
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
|
||||
|
||||
+48
-12
@@ -116,10 +116,22 @@ oper genNum : Gender -> Number -> GenNum = \g,n ->
|
||||
Pl => GPl
|
||||
} ;
|
||||
|
||||
oper Adj = {s: Case => GenNum => Str} ; -- 704
|
||||
-- Adjectival accusatives coincide with the nominative for inanimate
|
||||
-- masculine singular and inanimate plural noun phrases. Nouns retain
|
||||
-- their own accusative paradigm; this selector is for agreeing modifiers.
|
||||
oper modifierCase : Case -> Gender -> Number -> Case = \c,g,n ->
|
||||
case <c,g,n> of {
|
||||
<Acc,Masc,Sg> => Nom;
|
||||
<Acc,_,Pl> => Nom;
|
||||
_ => c
|
||||
} ;
|
||||
|
||||
oper Adj = {s: Case => GenNum => Str; adv : Str; post : Bool} ; -- 704
|
||||
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
|
||||
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
|
||||
{ s = table {
|
||||
{ adv = f3 ;
|
||||
post = False ;
|
||||
s = table {
|
||||
Nom => table {
|
||||
GSg Masc => f1 ;
|
||||
GSg Fem => f2 ;
|
||||
@@ -185,7 +197,19 @@ oper nounFromStr : Str -> Gender -> Noun =
|
||||
} ;
|
||||
|
||||
oper adjFromStr : Str -> Adj =
|
||||
\s -> {s = \\_,_ => s} ;
|
||||
\s -> {s = \\_,_ => s; adv = s; post = False} ;
|
||||
|
||||
oper agrFromGenNum : GenNum -> Agr = \gn -> case gn of {
|
||||
GSg g => {g=g; n=Sg; p=P3};
|
||||
GPl => {g=Masc; n=Pl; p=P3}
|
||||
} ;
|
||||
|
||||
oper relativeNom : GenNum -> Str = \gn -> case gn of {
|
||||
GSg Masc => "які";
|
||||
GSg Fem => "якая";
|
||||
GSg Neuter => "якое";
|
||||
GPl => "якія"
|
||||
} ;
|
||||
|
||||
oper prepNP : Compl -> NPhrase -> Str =
|
||||
\prep,np -> prep.s ++ np.s ! prep.c ;
|
||||
@@ -222,6 +246,12 @@ oper copula : R.Tense -> R.Polarity -> Agr -> Str =
|
||||
R.Cond => neg p ++ pastBe a ++ "бы"
|
||||
} ;
|
||||
|
||||
oper anteriorTense : R.Tense -> R.Anteriority -> R.Tense = \t,a ->
|
||||
case <t,a> of {
|
||||
<R.Pres,R.Anter> => R.Past ;
|
||||
_ => t
|
||||
} ;
|
||||
|
||||
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 ;
|
||||
@@ -232,14 +262,14 @@ oper finiteVerb : Verb -> R.Tense -> R.Polarity -> Agr -> Str =
|
||||
|
||||
oper VPhrase : Type = {
|
||||
s : R.Tense => R.Polarity => Agr => Str ;
|
||||
inf : Str ;
|
||||
inf : Agr => Str ;
|
||||
imp : R.Polarity => Number => Str
|
||||
} ;
|
||||
|
||||
oper mkVPhrase : Verb -> VPhrase =
|
||||
\v -> {
|
||||
s = \\t,p,a => finiteVerb v t p a ;
|
||||
inf = v.infinitive ;
|
||||
inf = \\_ => v.infinitive ;
|
||||
imp = \\p,n => neg p ++ v.imperative ! n
|
||||
} ;
|
||||
|
||||
@@ -248,29 +278,33 @@ oper VSlash : Type = {
|
||||
inf : Str ;
|
||||
c : Compl ;
|
||||
imp : R.Polarity => Number => Str ;
|
||||
post : Str
|
||||
pass : Adj ;
|
||||
post : Str ;
|
||||
objPost : Agr => Str
|
||||
} ;
|
||||
|
||||
oper mkVSlash : Verb -> Compl -> VSlash =
|
||||
\v,c -> {
|
||||
oper mkVSlash : Verb -> Compl -> Adj -> VSlash =
|
||||
\v,c,pa -> {
|
||||
s = \\t,p,a => finiteVerb v t p a ;
|
||||
inf = v.infinitive ;
|
||||
c = c ;
|
||||
imp = \\p,n => neg p ++ v.imperative ! n ;
|
||||
post = []
|
||||
pass = pa ;
|
||||
post = [] ;
|
||||
objPost = \\_ => []
|
||||
} ;
|
||||
|
||||
oper addAdvVP : VPhrase -> Str -> VPhrase =
|
||||
\vp,adv -> {
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ adv ;
|
||||
inf = vp.inf ++ adv ;
|
||||
inf = \\a => vp.inf ! a ++ 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 ;
|
||||
inf = \\a => adv ++ vp.inf ! a ;
|
||||
imp = \\p,n => adv ++ vp.imp ! p ! n
|
||||
} ;
|
||||
|
||||
@@ -280,7 +314,9 @@ oper addAdvSlash : VSlash -> Str -> VSlash =
|
||||
inf = vp.inf ++ adv ;
|
||||
c = vp.c ;
|
||||
imp = \\p,n => vp.imp ! p ! n ;
|
||||
post = vp.post ++ adv
|
||||
pass = vp.pass ;
|
||||
post = vp.post ++ adv ;
|
||||
objPost = \\a => vp.objPost ! a ++ adv
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -30,12 +30,12 @@ lin
|
||||
|
||||
EmbedS s = {s = "што" ++ s.s} ;
|
||||
EmbedQS qs = {s = qs.s} ;
|
||||
EmbedVP vp = {s = vp.inf} ;
|
||||
EmbedVP vp = {s = vp.inf ! defaultAgr} ;
|
||||
|
||||
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} ;
|
||||
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! anteriorTense temp.t temp.a ! pol.p} ;
|
||||
UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! anteriorTense temp.t temp.a ! pol.p} ;
|
||||
UseRCl temp pol cl = {s = cl.s ! anteriorTense temp.t temp.a ! pol.p} ;
|
||||
UseSlash temp pol cl = {s = cl.s ! anteriorTense temp.t temp.a ! pol.p; c = cl.c} ;
|
||||
|
||||
AdvS adv s = {s = adv.s ++ s.s} ;
|
||||
ExtAdvS adv s = {s = adv.s ++ s.s} ;
|
||||
|
||||
@@ -3,7 +3,7 @@ concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
|
||||
lin
|
||||
above_Prep = mkPrep "над" instrumental ;
|
||||
after_Prep = mkPrep "пасля" genitive ;
|
||||
all_Predet = mkPredet "усе" ;
|
||||
all_Predet = allPredet ;
|
||||
almost_AdA = mkAdA "амаль" ;
|
||||
almost_AdN = mkAdN "амаль" ;
|
||||
although_Subj = mkSubj "хоць" ;
|
||||
@@ -15,13 +15,13 @@ lin
|
||||
between_Prep = mkPrep "паміж" instrumental ;
|
||||
both7and_DConj = mkConj "і" ;
|
||||
but_PConj = mkPConj "але" ;
|
||||
by8agent_Prep = mkPrep "кім" instrumental ;
|
||||
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} ;
|
||||
every_Det = mkDet (mkA "кожны") Sg ;
|
||||
everybody_NP = mkSimpleNP "усе" Masc Pl P3 ;
|
||||
everything_NP = mkSimpleNP "усё" Neuter Sg P3 ;
|
||||
everywhere_Adv = mkAdv "усюды" ;
|
||||
@@ -69,13 +69,13 @@ lin
|
||||
somebody_NP = mkSimpleNP "нехта" Masc Sg P3 ;
|
||||
something_NP = mkSimpleNP "нешта" Neuter Sg P3 ;
|
||||
somewhere_Adv = mkAdv "недзе" ;
|
||||
that_Quant = mkQuant "той" ;
|
||||
that_Quant = mkQuant (mkDemonstrativeA "т") ;
|
||||
that_Subj = mkSubj "што" ;
|
||||
there_Adv = mkAdv "там" ;
|
||||
there7to_Adv = mkAdv "туды" ;
|
||||
there7from_Adv = mkAdv "адтуль" ;
|
||||
therefore_PConj = mkPConj "таму" ;
|
||||
this_Quant = mkQuant "гэты" ;
|
||||
this_Quant = mkQuant (mkA "гэты") ;
|
||||
through_Prep = mkPrep "праз" accusative ;
|
||||
to_Prep = mkPrep "да" genitive ;
|
||||
too_AdA = mkAdA "занадта" ;
|
||||
@@ -95,7 +95,7 @@ lin
|
||||
without_Prep = mkPrep "без" genitive ;
|
||||
yes_Utt = {s = "так"} ;
|
||||
|
||||
no_Quant = mkQuant "ніякі" ;
|
||||
no_Quant = mkQuant (mkA "ніякі") ;
|
||||
not_Predet = mkPredet "не" ;
|
||||
if_then_Conj = mkConj "калі" ;
|
||||
at_least_AdN = mkAdN "прынамсі" ;
|
||||
|
||||
+48
-28
@@ -4,105 +4,121 @@ 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
|
||||
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ! a ;
|
||||
inf = \\a => vv.infinitive ++ vp.inf ! a ;
|
||||
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.inf ! defaultAgr
|
||||
} ;
|
||||
ComplVS vs s = {
|
||||
s = \\t,p,a => finiteVerb vs t p a ++ "што" ++ s.s ;
|
||||
inf = vs.infinitive ++ "што" ++ 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 ;
|
||||
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 ;
|
||||
inf = \\a => va.infinitive ++ ap.s ! Nom ! genNum a.g a.n ;
|
||||
imp = \\p,n => neg p ++ va.imperative ! n ++ ap.s ! Nom ! GPl
|
||||
} ;
|
||||
|
||||
SlashV2a v = mkVSlash v v.c2 ;
|
||||
SlashV2a v = mkVSlash v v.c2 v.pa ;
|
||||
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 = []
|
||||
pass = v.pa ;
|
||||
post = [] ;
|
||||
objPost = \\_ => []
|
||||
} ;
|
||||
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
|
||||
pass = v.pa ;
|
||||
post = prepNP v.c3 np ;
|
||||
objPost = \\_ => prepNP v.c3 np
|
||||
} ;
|
||||
SlashV2V v vp = {
|
||||
s = \\t,p,a => finiteVerb v t p a ;
|
||||
inf = v.infinitive ++ vp.inf ;
|
||||
inf = v.infinitive ++ vp.inf ! defaultAgr ;
|
||||
c = v.c2 ;
|
||||
imp = \\p,n => neg p ++ v.imperative ! n ;
|
||||
post = vp.inf
|
||||
pass = v.pa ;
|
||||
post = vp.inf ! defaultAgr ;
|
||||
objPost = 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
|
||||
pass = v.pa ;
|
||||
post = "што" ++ s.s ;
|
||||
objPost = \\_ => "што" ++ 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
|
||||
pass = v.pa ;
|
||||
post = qs.s ;
|
||||
objPost = \\_ => 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
|
||||
pass = v.pa ;
|
||||
post = ap.s ! Instr ! GSg Masc ;
|
||||
objPost = \\a => ap.s ! Instr ! genNum a.g a.n
|
||||
} ;
|
||||
|
||||
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
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.objPost ! np.a ;
|
||||
inf = \\_ => vp.inf ++ prepNP vp.c np ;
|
||||
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.objPost ! np.a
|
||||
} ;
|
||||
|
||||
SlashVV vv vp = {
|
||||
s = \\t,p,a => finiteVerb vv t p a ++ vp.s ! R.Pres ! R.Pos ! a ;
|
||||
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ;
|
||||
inf = vv.infinitive ++ vp.inf ;
|
||||
c = vp.c ;
|
||||
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.imp ! R.Pos ! n ;
|
||||
post = vp.post
|
||||
pass = vp.pass ;
|
||||
post = vp.post ;
|
||||
objPost = vp.objPost
|
||||
} ;
|
||||
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
|
||||
pass = vp.pass ;
|
||||
post = vp.post ;
|
||||
objPost = vp.objPost
|
||||
} ;
|
||||
|
||||
ReflVP vp = {
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.post ;
|
||||
inf = vp.inf ++ "сябе" ;
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.objPost ! a ;
|
||||
inf = \\a => vp.inf ++ "сябе" ++ vp.objPost ! a ;
|
||||
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 ;
|
||||
inf = \\a => "быць" ++ comp.s ! a ;
|
||||
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 ;
|
||||
inf = \\a => "быць" ++ v.participle ! a.g ! a.n ;
|
||||
imp = \\p,_ => neg p ++ "будзь" ++ v.participle ! Masc ! Sg
|
||||
} ;
|
||||
|
||||
@@ -115,14 +131,18 @@ lin
|
||||
inf = adv.s ++ vp.inf ;
|
||||
c = vp.c ;
|
||||
imp = \\p,n => adv.s ++ vp.imp ! p ! n ;
|
||||
post = vp.post
|
||||
pass = vp.pass ;
|
||||
post = vp.post ;
|
||||
objPost = vp.objPost
|
||||
} ;
|
||||
VPSlashPrep vp prep = {
|
||||
s = \\t,p,a => vp.s ! t ! p ! a ++ prep.s ;
|
||||
inf = vp.inf ++ prep.s ;
|
||||
inf = vp.inf ! defaultAgr ++ prep.s ;
|
||||
c = prep ;
|
||||
imp = \\p,n => vp.imp ! p ! n ++ prep.s ;
|
||||
post = []
|
||||
pass = adjFromStr "выкананы" ;
|
||||
post = [] ;
|
||||
objPost = \\_ => []
|
||||
} ;
|
||||
|
||||
CompAP ap = {s = \\a => ap.s ! Nom ! genNum a.g a.n} ;
|
||||
@@ -131,7 +151,7 @@ lin
|
||||
CompCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
|
||||
UseCopula = {
|
||||
s = \\t,p,a => copula t p a ;
|
||||
inf = "быць" ;
|
||||
inf = \\_ => "быць" ;
|
||||
imp = \\p,_ => neg p ++ "будзь"
|
||||
} ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user