forked from GitHub/gf-rgl
This removes around 70k concrete categories (in PGFs compiled with --optimize-pgf.) Unsure if that is actually useful -- the number of concrete functions only went down by a couple hundred.
205 lines
5.1 KiB
Plaintext
205 lines
5.1 KiB
Plaintext
concrete VerbRus of Verb = CatRus ** open ResRus, Prelude, Coordination in {
|
|
|
|
lin
|
|
-- : V -> VP ; -- sleep
|
|
UseV v = {
|
|
adv = \\a=>[] ;
|
|
verb = v ;
|
|
dep=[] ;
|
|
compl = \\_,_ => []
|
|
} ;
|
|
|
|
-- : V2 -> VP ; -- be loved
|
|
PassV2 v2 = {
|
|
adv = \\a=>[] ;
|
|
verb = passivate v2 ;
|
|
dep=[] ;
|
|
compl = \\p,a => []
|
|
} ;
|
|
|
|
-- : VV -> VP -> VP ; -- want to run
|
|
ComplVV vv vp = vp ** {
|
|
verb=vv.v ;
|
|
dep=verbInf vp.verb ++ vp.dep ;
|
|
adv=\\a=>vv.modal ! a ++ vp.adv ! a
|
|
} ;
|
|
|
|
-- : VS -> S -> VP ; -- say that she runs
|
|
ComplVS vs s = {
|
|
verb = vs ;
|
|
dep=[] ;
|
|
adv=\\a=>[] ;
|
|
compl=\\_,_ => comma ++ "что" ++ s.s ! Ind
|
|
} ;
|
|
|
|
-- : VQ -> QS -> VP ; -- wonder who runs
|
|
ComplVQ vq qs = {
|
|
verb = vq ;
|
|
dep=[] ;
|
|
adv=\\a=>[] ;
|
|
compl=\\_,_ => comma ++ "что" ++ qs.s ! QDir
|
|
} ;
|
|
|
|
|
|
-- : VA -> AP -> VP ; -- they become red
|
|
ComplVA va ap = {
|
|
verb=va ;
|
|
dep=[] ;
|
|
adv=\\a=>[] ;
|
|
compl=\\_ => case ap.preferShort of {
|
|
PreferFull => (\\a => ap.s ! agrGenNum a ! Inanimate ! Ins) ;
|
|
PrefShort => ap.short
|
|
}
|
|
} ;
|
|
|
|
-- : V2 -> VPSlash ; -- love (it)
|
|
SlashV2a v2 = {
|
|
adv=\\a=>[] ;
|
|
verb=v2 ;
|
|
dep=[] ;
|
|
compl=\\_,_ => [] ;
|
|
c=v2.c
|
|
} ;
|
|
|
|
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
|
Slash2V3 v3 np = {
|
|
adv=\\a=>[] ;
|
|
verb=v3 ;
|
|
dep=[] ;
|
|
compl=\\p,a => applyPolPrep p v3.c np ;
|
|
c=v3.c2
|
|
} ;
|
|
|
|
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
|
Slash3V3 v3 np = {
|
|
adv=\\a=>[] ;
|
|
verb=v3 ;
|
|
dep=[] ;
|
|
compl=\\p,a => applyPolPrep p v3.c2 np ;
|
|
c=v3.c
|
|
} ;
|
|
|
|
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
|
SlashV2V v2v vp = vp ** {
|
|
verb=v2v ;
|
|
dep=verbInf vp.verb ;
|
|
c=v2v.c
|
|
} ;
|
|
|
|
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
|
SlashV2S v2s s = {
|
|
adv=\\a=>[] ;
|
|
verb=v2s ;
|
|
dep=[] ;
|
|
compl=\\_,a=> embedInCommas ("что" ++ s.s ! Ind) ;
|
|
c=v2s.c
|
|
} ;
|
|
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
|
SlashV2Q v2q qs = {
|
|
adv=\\a=>[] ;
|
|
verb=v2q ;
|
|
dep=[] ;
|
|
compl=\\_,a=>qs.s ! QDir;
|
|
c=v2q.c
|
|
} ;
|
|
|
|
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
|
SlashV2A v2a ap = {
|
|
adv=\\a=>[] ;
|
|
verb=v2a ;
|
|
dep=[] ;
|
|
compl=table {
|
|
Pos => case ap.preferShort of {
|
|
PreferFull => \\a => ap.s ! agrGenNum a ! Animate ! v2a.c.c ;
|
|
PrefShort => ap.short
|
|
} ;
|
|
Neg => case ap.preferShort of {
|
|
PreferFull => case neggen v2a.c of {
|
|
False => \\a => ap.s ! agrGenNum a ! Animate ! v2a.c.c ;
|
|
True => \\a => ap.s ! agrGenNum a ! Animate ! Gen
|
|
} ;
|
|
PrefShort => ap.short
|
|
}
|
|
} ;
|
|
c={s="" ; c=Acc ; neggen=True ; hasPrep=False}
|
|
} ;
|
|
|
|
-- : VPSlash -> NP -> VP ; -- love it
|
|
ComplSlash vps np = vps ** {
|
|
compl=\\p,a => applyPolPrep p vps.c np ++ vps.compl ! p ! a
|
|
} ;
|
|
|
|
-- : VV -> VPSlash -> VPSlash ; -- want to buy
|
|
SlashVV vv vps = vps ** {
|
|
verb=vv.v ;
|
|
dep=(verbInf vps.verb) ++ vps.dep ;
|
|
adv=\\a=>vv.modal ! a ++ vps.adv ! a
|
|
} ;
|
|
|
|
{- This is very heavy, but can be replaced (see todo.txt)
|
|
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
|
SlashV2VNP v2v np vps = vps ** {
|
|
verb=v2v ;
|
|
compl=\\p,a => vps.compl ! p ! a ++ applyPolPrep p vps.c np ;
|
|
dep=(verbInf vps.verb) ++ vps.dep ;
|
|
c=v2v.c
|
|
} ;
|
|
-}
|
|
SlashV2VNP = variants {} ;
|
|
|
|
-- : VPSlash -> VP ; -- love himself
|
|
ReflVP vps = vps ** {
|
|
compl=\\p,a => vps.compl ! p ! a ++ vps.c.s ++ sebya.s ! vps.c.c
|
|
} ;
|
|
|
|
-- : Comp -> VP ; -- be warm
|
|
UseComp comp = {
|
|
adv=\\a => comp.adv ;
|
|
verb=selectCopula comp.cop ;
|
|
dep=[] ;
|
|
compl=\\p => comp.s
|
|
} ;
|
|
|
|
-- : VP -> Adv -> VP ; -- sleep here
|
|
AdvVP vp adv = vp ** {
|
|
compl=\\p,a => vp.compl ! p ! a ++ adv.s
|
|
} ;
|
|
|
|
-- : VP -> Adv -> VP ; -- sleep , even though ...
|
|
ExtAdvVP vp adv = vp ** {
|
|
compl=\\p,a => vp.compl ! p ! a ++ embedInCommas adv.s
|
|
} ;
|
|
|
|
-- : AdV -> VP -> VP ; -- always sleep
|
|
AdVVP adv vp = vp ** {adv=\\a => adv.s ++ vp.adv ! a} ;
|
|
|
|
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here
|
|
AdvVPSlash vps adv = vps ** {compl=\\p,a => vps.compl ! p ! a ++ adv.s} ;
|
|
|
|
-- : AdV -> VPSlash -> VPSlash ; -- always use (it)
|
|
AdVVPSlash adv vps = vps ** {adv=\\a=>adv.s ++ vps.adv ! a} ;
|
|
|
|
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
|
VPSlashPrep vp prep = vp ** {c=prep} ;
|
|
-- : AP -> Comp ; -- (be) small
|
|
CompAP ap = case ap.preferShort of {
|
|
PreferFull => {s=\\a=>ap.s ! agrGenNum a ! Inanimate ! Ins ; adv=[] ; cop=InsCopula} ;
|
|
PrefShort => {s=ap.short ; adv=[] ; cop=EllCopula}
|
|
};
|
|
|
|
-- : NP -> Comp ; -- (be) the man
|
|
CompNP np = {s=\\a=>np.s ! Ins ; adv=[] ; cop=InsCopula} ;
|
|
|
|
-- : Adv -> Comp ; -- (be) here
|
|
CompAdv adv = {s=\\a=>[] ; adv=adv.s ; cop=ExplicitCopula} ;
|
|
-- : CN -> Comp ; -- (be) a man/men
|
|
CompCN cn = {
|
|
s=\\a=>cn.s ! numGenNum (agrGenNum a) ! Ins ;
|
|
adv=[] ;
|
|
cop=InsCopula
|
|
} ;
|
|
|
|
-- : VP ; -- be
|
|
UseCopula = {adv=\\a=>[] ; verb=copulaIns ; dep=[] ; compl=\\p,a=>[]} ;
|
|
}
|