forked from GitHub/gf-rgl
fixed Slash functions (#458)
This commit is contained in:
committed by
GitHub
parent
bb5107fa99
commit
f85fa84ae0
@@ -37,19 +37,9 @@ lincat
|
|||||||
CN = ResRus.Noun ;
|
CN = ResRus.Noun ;
|
||||||
|
|
||||||
NP = ResRus.NounPhrase ;
|
NP = ResRus.NounPhrase ;
|
||||||
VP = {
|
VP = ResRus.VP ;
|
||||||
adv : AgrTable ; -- modals are in position of adverbials ones numgen gets fixed
|
|
||||||
verb : ResRus.VerbForms ;
|
VPSlash = ResRus.VPSlash ;
|
||||||
dep : Str ; -- dependent infinitives and such
|
|
||||||
compl : ComplTable
|
|
||||||
} ;
|
|
||||||
VPSlash = {
|
|
||||||
adv : AgrTable ; -- modals are in position of adverbials ones numgen gets fixed
|
|
||||||
verb : ResRus.VerbForms ;
|
|
||||||
dep : Str ; -- dependent infinitives and such
|
|
||||||
compl : ComplTable ;
|
|
||||||
c : ComplementCase
|
|
||||||
} ; ----
|
|
||||||
|
|
||||||
AP = ResRus.Adjective ** {isPost : Bool} ;
|
AP = ResRus.Adjective ** {isPost : Bool} ;
|
||||||
|
|
||||||
@@ -142,7 +132,13 @@ linref
|
|||||||
VP = \s -> s.adv ! Ag (GSg Neut) P3 ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ! Ag (GSg Neut) P3 ;
|
VP = \s -> s.adv ! Ag (GSg Neut) P3 ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ! Ag (GSg Neut) P3 ;
|
||||||
Comp = \s -> copula.inf ++ s.s ! Ag (GSg Neut) P3 ++ s.adv ;
|
Comp = \s -> copula.inf ++ s.s ! Ag (GSg Neut) P3 ++ s.adv ;
|
||||||
IComp = \s -> s.s ! Ag (GSg Neut) P3 ++ s.adv ++ copula.inf;
|
IComp = \s -> s.s ! Ag (GSg Neut) P3 ++ s.adv ++ copula.inf;
|
||||||
VPSlash = \s -> s.adv ! Ag (GSg Neut) P3 ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ! Ag (GSg Neut) P3 ++ s.c.s ;
|
VPSlash = \s -> let vp : VP
|
||||||
|
= {verb = s.verb ;
|
||||||
|
adv = s.adv ;
|
||||||
|
dep = s.dep ;
|
||||||
|
compl = \\p, a => s.compl1 ! p ! a ++ s.c.s ++ s.compl2 ! p ! a
|
||||||
|
}
|
||||||
|
in vp.adv ! Ag (GSg Neut) P3 ++ (verbInf vp.verb) ++ vp.dep ++ vp.compl ! Pos ! Ag (GSg Neut) P3 ;
|
||||||
Cl = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
Cl = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
||||||
ClSlash = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
ClSlash = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
||||||
QCl = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
QCl = \s -> s.subj ++ s.adv ++ (verbInf s.verb) ++ s.dep ++ s.compl ! Pos ;
|
||||||
|
|||||||
@@ -145,12 +145,14 @@ lin
|
|||||||
vps.adv ! (genNumAgrP3 gn)
|
vps.adv ! (genNumAgrP3 gn)
|
||||||
++ shortPastPassPart vps.verb gn
|
++ shortPastPassPart vps.verb gn
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ vps.compl ! Pos ! (genNumAgrP3 gn) ;
|
++ vps.compl1 ! Pos ! (genNumAgrP3 gn)
|
||||||
|
++ vps.compl2 ! Pos ! (genNumAgrP3 gn);
|
||||||
short=\\a =>
|
short=\\a =>
|
||||||
vps.adv ! a
|
vps.adv ! a
|
||||||
++ shortPastPassPart vps.verb (agrGenNum a)
|
++ shortPastPassPart vps.verb (agrGenNum a)
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ vps.compl ! Pos ! a
|
++ vps.compl1 ! Pos ! a
|
||||||
|
++ vps.compl2 ! Pos ! a
|
||||||
++ vps.c.s ; --
|
++ vps.c.s ; --
|
||||||
isPost = False ;
|
isPost = False ;
|
||||||
preferShort=PreferFull
|
preferShort=PreferFull
|
||||||
@@ -163,13 +165,15 @@ lin
|
|||||||
++ shortPastPassPart vps.verb gn
|
++ shortPastPassPart vps.verb gn
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ applyPolPrep Pos vps.c np
|
++ applyPolPrep Pos vps.c np
|
||||||
++ vps.compl ! Pos ! (genNumAgrP3 gn) ;
|
++ vps.compl1 ! Pos ! (genNumAgrP3 gn)
|
||||||
|
++ vps.compl2 ! Pos ! (genNumAgrP3 gn);
|
||||||
short=\\a =>
|
short=\\a =>
|
||||||
vps.adv ! a
|
vps.adv ! a
|
||||||
++ shortPastPassPart vps.verb (agrGenNum a)
|
++ shortPastPassPart vps.verb (agrGenNum a)
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ applyPolPrep Pos vps.c np
|
++ applyPolPrep Pos vps.c np
|
||||||
++ vps.compl ! Pos ! a ;
|
++ vps.compl1 ! Pos ! a
|
||||||
|
++ vps.compl2 ! Pos ! a ;
|
||||||
isPost = False ;
|
isPost = False ;
|
||||||
preferShort=PreferFull
|
preferShort=PreferFull
|
||||||
} ;
|
} ;
|
||||||
@@ -178,10 +182,11 @@ lin
|
|||||||
PassVPSlash vps = case vps.verb.asp of {
|
PassVPSlash vps = case vps.verb.asp of {
|
||||||
Perfective => vps ** {
|
Perfective => vps ** {
|
||||||
verb=copulaEll ;
|
verb=copulaEll ;
|
||||||
compl=\\p,a => shortPastPassPart vps.verb (agrGenNum a) ++ vps.compl ! p ! a ++ vps.c.s
|
compl=\\p,a => shortPastPassPart vps.verb (agrGenNum a) ++ vps.compl1 ! p ! a ++ vps.compl2 ! p ! a ++ vps.c.s
|
||||||
} ;
|
} ;
|
||||||
Imperfective => vps ** {
|
Imperfective => vps ** {
|
||||||
verb=(passivate vps.verb);
|
verb=(passivate vps.verb);
|
||||||
|
compl=\\p,a => shortPastPassPart vps.verb (agrGenNum a) ++ vps.compl1 ! p ! a ++ vps.compl2 ! p ! a ++ vps.c.s
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -192,11 +197,11 @@ lin
|
|||||||
PassAgentVPSlash vps np = case vps.verb.asp of {
|
PassAgentVPSlash vps np = case vps.verb.asp of {
|
||||||
Perfective => vps ** {
|
Perfective => vps ** {
|
||||||
verb=copulaEll ;
|
verb=copulaEll ;
|
||||||
compl=\\p,a => shortPastPassPart vps.verb (agrGenNum a) ++ vps.c.s ++ vps.compl ! p ! a ++ np.s ! Ins
|
compl=\\p,a => shortPastPassPart vps.verb (agrGenNum a) ++ vps.c.s ++ vps.compl1 ! p ! a ++ vps.compl2 ! p ! a ++ np.s ! Ins
|
||||||
} ;
|
} ;
|
||||||
Imperfective => vps ** {
|
Imperfective => vps ** {
|
||||||
verb=(passivate vps.verb);
|
verb=(passivate vps.verb);
|
||||||
compl=\\p,a => vps.compl ! p ! a ++ np.s ! Ins
|
compl=\\p,a => vps.compl1 ! p ! a ++ vps.compl2 ! p ! a ++ np.s ! Ins
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -144,7 +144,8 @@ lin
|
|||||||
++ verbRefl vps.verb
|
++ verbRefl vps.verb
|
||||||
++ case temp.t of {Cond => "бы" ; _ => []}
|
++ case temp.t of {Cond => "бы" ; _ => []}
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ vps.compl ! pol.p ! Ag (GSg Neut) P3
|
++ vps.compl1 ! pol.p ! Ag (GSg Neut) P3
|
||||||
|
++ vps.compl2 ! pol.p ! Ag (GSg Neut) P3
|
||||||
++ vps.c.s
|
++ vps.c.s
|
||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
@@ -157,7 +158,8 @@ lin
|
|||||||
++ verbRefl vps.verb
|
++ verbRefl vps.verb
|
||||||
++ case temp.t of {Cond => "бы" ; _ => []}
|
++ case temp.t of {Cond => "бы" ; _ => []}
|
||||||
++ vps.dep
|
++ vps.dep
|
||||||
++ vps.compl ! pol.p ! Ag (GSg Neut) P3
|
++ vps.compl1 ! pol.p ! Ag (GSg Neut) P3
|
||||||
|
++ vps.compl2 ! pol.p ! Ag (GSg Neut) P3
|
||||||
++ vps.c.s
|
++ vps.c.s
|
||||||
++ endComma
|
++ endComma
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -599,6 +599,70 @@ oper
|
|||||||
-- we can store the sya-schema and 'BIND++' as necessary.
|
-- we can store the sya-schema and 'BIND++' as necessary.
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
VP : Type = {
|
||||||
|
adv : AgrTable ; -- modals are in position of adverbials ones numgen gets fixed
|
||||||
|
verb : ResRus.VerbForms ;
|
||||||
|
dep : Str ; -- dependent infinitives and such
|
||||||
|
compl : ComplTable
|
||||||
|
} ;
|
||||||
|
|
||||||
|
VPSlash = {
|
||||||
|
adv : AgrTable ; -- modals are in position of adverbials ones numgen gets fixed
|
||||||
|
verb : VerbForms ;
|
||||||
|
dep : Str ; -- dependent infinitives and such
|
||||||
|
compl1 : ComplTable ;
|
||||||
|
compl2 : ComplTable ;
|
||||||
|
c : ComplementCase ;
|
||||||
|
} ; ----
|
||||||
|
|
||||||
|
slashV : VerbForms -> ComplementCase -> VPSlash = \verb,c -> {
|
||||||
|
verb = verb ;
|
||||||
|
adv = \\a => [];
|
||||||
|
compl1 = \\_,a => [] ;
|
||||||
|
compl2 = \\_,a => [] ;
|
||||||
|
dep = [] ;
|
||||||
|
c = c ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertSlashObjA : Adjective -> ComplementCase -> VPSlash -> VPSlash = \ap,c,slash -> {
|
||||||
|
verb = slash.verb ;
|
||||||
|
adv = slash.adv ;
|
||||||
|
compl1 = slash.compl1 ;
|
||||||
|
compl2 = \\p,a => case p of {
|
||||||
|
Pos => case ap.preferShort of {
|
||||||
|
PreferFull => slash.compl2 ! p ! a ++ ap.s ! agrGenNum a ! Animate ! slash.c.c ;
|
||||||
|
PrefShort => slash.compl2 ! p ! a ++ ap.short ! a
|
||||||
|
} ;
|
||||||
|
Neg => case ap.preferShort of {
|
||||||
|
PreferFull => case neggen slash.c of {
|
||||||
|
False => slash.compl2 ! p ! a ++ ap.s ! agrGenNum a ! Animate ! slash.c.c ;
|
||||||
|
True => slash.compl2 ! p ! a ++ ap.s ! agrGenNum a ! Animate ! Gen
|
||||||
|
} ;
|
||||||
|
PrefShort => slash.compl2 ! p ! a ++ ap.short ! a
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
c = {s="" ; c=Acc ; neggen=True ; hasPrep=False};
|
||||||
|
dep = slash.dep ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertSlashObj1 : (Polarity => Agr => Str) -> ComplementCase -> VPSlash -> VPSlash = \obj,c,slash -> {
|
||||||
|
verb = slash.verb ;
|
||||||
|
adv = slash.adv;
|
||||||
|
compl1 =\\p,a => slash.compl1 ! p ! a ++ obj ! p ! a;
|
||||||
|
compl2 = slash.compl2 ;
|
||||||
|
c = slash.c ;
|
||||||
|
dep = slash.dep ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertSlashObj2 : (Polarity => Agr => Str) -> ComplementCase -> VPSlash -> VPSlash = \obj,c,slash -> {
|
||||||
|
verb = slash.verb ;
|
||||||
|
adv = slash.adv;
|
||||||
|
compl1 = slash.compl1 ;
|
||||||
|
compl2 =\\p,a => slash.compl2 ! p ! a ++ obj ! p ! a;
|
||||||
|
c = slash.c ;
|
||||||
|
dep = slash.dep ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
guessVerbForms : Aspect -> Transitivity -> Str -> Str -> Str -> VerbForms
|
guessVerbForms : Aspect -> Transitivity -> Str -> Str -> Str -> VerbForms
|
||||||
= \asp,tran,inf,sg1,sg3 ->
|
= \asp,tran,inf,sg1,sg3 ->
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ lin
|
|||||||
adv=vps.adv ! np.a ; -- ??
|
adv=vps.adv ! np.a ; -- ??
|
||||||
verb=vps.verb ;
|
verb=vps.verb ;
|
||||||
dep=vps.dep ;
|
dep=vps.dep ;
|
||||||
compl=\\p => vps.compl ! p ! np.a ; -- ??
|
compl=\\p => vps.compl1 ! p ! np.a ++ vps.compl2 ! p ! np.a; -- ??
|
||||||
a=np.a ;
|
a=np.a ;
|
||||||
c=vps.c
|
c=vps.c
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -53,81 +53,39 @@ lin
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : V2 -> VPSlash ; -- love (it)
|
-- : V2 -> VPSlash ; -- love (it)
|
||||||
SlashV2a v2 = {
|
SlashV2a v2 = slashV v2 v2.c ;
|
||||||
adv=\\a=>[] ;
|
|
||||||
verb=v2 ;
|
|
||||||
dep=[] ;
|
|
||||||
compl=\\_,_ => [] ;
|
|
||||||
c=v2.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
||||||
Slash2V3 v3 np = {
|
Slash2V3 v3 np = insertSlashObj1 (\\p,_ => applyPolPrep p v3.c np) v3.c (slashV v3 v3.c) ;
|
||||||
adv=\\a=>[] ;
|
|
||||||
verb=v3 ;
|
|
||||||
dep=[] ;
|
|
||||||
compl=\\p,a => applyPolPrep p v3.c np ;
|
|
||||||
c=v3.c2
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
||||||
Slash3V3 v3 np = {
|
Slash3V3 v3 np = insertSlashObj2 (\\p,_ => applyPolPrep p v3.c2 np) v3.c2 (slashV v3 v3.c2) ;
|
||||||
adv=\\a=>[] ;
|
|
||||||
verb=v3 ;
|
|
||||||
dep=[] ;
|
|
||||||
compl=\\p,a => applyPolPrep p v3.c2 np ;
|
|
||||||
c=v3.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||||
SlashV2V v2v vp = vp ** {
|
SlashV2V v2v vp = insertSlashObj2 (\\_,a => verbInf vp.verb) v2v.c (slashV v2v v2v.c) ;
|
||||||
verb=v2v ;
|
|
||||||
dep=verbInf vp.verb ;
|
|
||||||
c=v2v.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
||||||
SlashV2S v2s s = {
|
SlashV2S v2s s = insertSlashObj2 (\\_,a=> embedInCommas ("что" ++ s.s ! Ind)) v2s.c (slashV v2s v2s.c) ;
|
||||||
adv=\\a=>[] ;
|
|
||||||
verb=v2s ;
|
|
||||||
dep=[] ;
|
|
||||||
compl=\\_,a=> embedInCommas ("что" ++ s.s ! Ind) ;
|
|
||||||
c=v2s.c
|
|
||||||
} ;
|
|
||||||
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
||||||
SlashV2Q v2q qs = {
|
SlashV2Q v2q qs = insertSlashObj2 (\\_,_=> qs.s ! QDir) v2q.c (slashV v2q v2q.c);
|
||||||
adv=\\a=>[] ;
|
|
||||||
verb=v2q ;
|
|
||||||
dep=[] ;
|
|
||||||
compl=\\_,a=>qs.s ! QDir;
|
|
||||||
c=v2q.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
||||||
SlashV2A v2a ap = {
|
SlashV2A v2a ap = insertSlashObjA ap v2a.c (slashV v2a v2a.c) ;
|
||||||
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
|
-- : VPSlash -> NP -> VP ; -- love it
|
||||||
ComplSlash vps np = vps ** {
|
ComplSlash vps np =
|
||||||
compl=\\p,a => applyPolPrep p vps.c np ++ vps.compl ! p ! a
|
let arg : {obj,acc,dat : Str}
|
||||||
} ;
|
= case vps.c.c of {
|
||||||
|
Dat => {obj=[]; acc=np.s ! Acc; dat=[] } ;
|
||||||
|
Acc => {obj=[]; acc=[]; dat=np.s ! Dat} ;
|
||||||
|
c => {obj=np.s ! c; acc=[]; dat=[] }
|
||||||
|
}
|
||||||
|
in {verb = vps.verb ;
|
||||||
|
adv = vps.adv ;
|
||||||
|
dep = vps.dep ;
|
||||||
|
compl = \\p,a => vps.compl1 ! p ! a ++ arg.acc ++ arg.dat ++ arg.obj ++ vps.compl2 ! p ! a ;
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : VV -> VPSlash -> VPSlash ; -- want to buy
|
-- : VV -> VPSlash -> VPSlash ; -- want to buy
|
||||||
SlashVV vv vps = vps ** {
|
SlashVV vv vps = vps ** {
|
||||||
@@ -149,7 +107,7 @@ lin
|
|||||||
|
|
||||||
-- : VPSlash -> VP ; -- love himself
|
-- : VPSlash -> VP ; -- love himself
|
||||||
ReflVP vps = vps ** {
|
ReflVP vps = vps ** {
|
||||||
compl=\\p,a => vps.compl ! p ! a ++ vps.c.s ++ sebya.s ! vps.c.c
|
compl=\\p,a => vps.compl1 ! p ! a ++ vps.c.s ++ vps.compl2 ! p ! a ++ sebya.s ! vps.c.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Comp -> VP ; -- be warm
|
-- : Comp -> VP ; -- be warm
|
||||||
@@ -180,7 +138,8 @@ lin
|
|||||||
AdVVPSlash adv vps = vps ** {adv=\\a=>adv.s ++ vps.adv ! a} ;
|
AdVVPSlash adv vps = vps ** {adv=\\a=>adv.s ++ vps.adv ! a} ;
|
||||||
|
|
||||||
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
||||||
VPSlashPrep vp prep = vp ** {c=prep} ;
|
VPSlashPrep vp prep = vp ** {c = prep ; compl1 = vp.compl ; compl2 = \\_,_ => []; dep=[]} ;
|
||||||
|
|
||||||
-- : AP -> Comp ; -- (be) small
|
-- : AP -> Comp ; -- (be) small
|
||||||
CompAP ap = case ap.preferShort of {
|
CompAP ap = case ap.preferShort of {
|
||||||
PreferFull => {s=\\a=>ap.s ! agrGenNum a ! Inanimate ! Ins ; adv=[] ; cop=InsCopula} ;
|
PreferFull => {s=\\a=>ap.s ! agrGenNum a ! Inanimate ! Ins ; adv=[] ; cop=InsCopula} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user