Files
gf-rgl/src/russian/SentenceRus.gf
2020-08-26 18:10:35 +03:00

140 lines
3.9 KiB
Plaintext

concrete SentenceRus of Sentence = CatRus ** open Prelude, TenseRus, ParamRus, Coordination, Maybe, (R=ResRus) in {
flags optimize=all_subs ; coding=utf8 ;
lin
-- : Adv -> S -> S ; -- then I will go home
AdvS adv s = {s=\\m => adv.s ++ s.s ! m} ;
-- : Adv -> S -> S ; -- next week, I will go home
ExtAdvS adv s = {s=\\m => adv.s ++ comma ++ s.s ! m} ;
-- : Temp -> Pol -> Cl -> S ; -- she had not slept - она не спала
UseCl temp pol cl = {
s : Mood => Str = \\m =>
temp.s
++ (R.verbEnvAgr cl.subj cl.adv cl.verb m temp.t cl.a pol)
++ cl.dep
++ cl.compl ! pol.p ;
} ;
-- : Temp -> Pol -> RCl -> RS ; -- that had not slept
UseRCl temp pol rcl = {
s = \\gn,anim,cas =>
let a : Agr = fromMaybe Agr (genNumAgrP3 gn) rcl.a in
temp.s
++ (R.verbEnvAgr (rcl.subj ! gn ! anim ! Nom) (rcl.adv ! (genNumAgrP3 gn)) rcl.verb Ind temp.t a pol)
++ rcl.dep
++ rcl.compl ! pol.p ! (genNumAgrP3 gn)
} ;
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
UseSlash temp pol cls = {
s : Mood => Str = \\m =>
temp.s
++ (R.verbEnvAgr cls.subj cls.adv cls.verb m temp.t cls.a pol)
++ cls.dep
++ cls.compl ! pol.p ;
c=cls.c
} ;
-- : NP -> VPSlash -> ClSlash ; -- (whom) he sees
SlashVP np vps = {
subj=np.s ! Nom ; -- ????????
adv=vps.adv ! np.a ; -- ??
verb=vps.verb ;
dep=vps.dep ;
compl=\\p => vps.compl ! p ! np.a ; -- ??
a=np.a ;
c=vps.c
} ;
-- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
SlashPrep cl prep = {
subj=cl.subj ;
compl=cl.compl ;
adv=cl.adv ;
verb=cl.verb ;
dep=cl.dep ;
a=cl.a ;
c=prep
} ;
-- NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
SlashVS np vs ss = {
subj=np.s ! Nom ; -- ????????
compl=\\_ => embedInCommas ("что" ++ ss.s ! Ind) ; -- ?? that?
adv=[]; -- ??
verb=vs ;
dep=[] ;
a=np.a ;
c=ss.c
} ;
-- : S -> Subj -> S -> S ; -- I go home, if she comes
SSubjS s subj s2 = {
s=\\m => s.s ! m ++ comma ++ subj.s ++ s2.s ! Ind
} ;
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** {
adv=cls.adv ++ adv.s
} ;
-- : VP -> Imp ; -- love yourselves
ImpVP vp = {
s = \\polarity, gn =>
let pol = case polarity of {Neg => PNeg; Pos => PPos} in
let a = Ag gn P2 in
(R.verbEnvAgr "" "" vp.verb Imperative Pres a pol)
++ vp.dep
++ vp.adv ! a
++ vp.compl ! pol.p ! a
} ;
-- : NP -> VP -> Cl ; -- John walks - Иван гуляет
PredVP np vp = {
subj=np.s ! Nom ;
adv=vp.adv ! np.a ;
verb=vp.verb ;
dep=vp.dep ;
compl=\\p => vp.compl ! p ! np.a ;
a=np.a
} ;
-- : SC -> VP -> Cl ; -- that she goes is good - что она идёт есть хорошо
PredSCVP sc vp = {
subj=sc.s ;
adv=vp.adv ! (Ag (GSg Neut) P3) ; -- ???
verb=vp.verb ;
dep=vp.dep ;
compl=\\p => vp.compl ! p ! Ag (GSg Neut) P3 ; -- ???
a=Ag (GSg Neut) P3 -- ???
} ;
-- : S -> SC ; -- that she goes - что она идёт
EmbedS s = {s = "что" ++ s.s ! Ind} ;
-- : Temp -> Pol -> QCl -> QS ; -- who had not slept
UseQCl temp pol cl = {
s = \\qf =>
temp.s
++ (R.verbEnvAgr cl.subj cl.adv cl.verb Ind temp.t cl.a pol)
++ cl.dep
++ cl.compl ! pol.p
} ;
-- : QS -> SC ; -- who goes
EmbedQS qs = {s = qs.s ! QIndir} ;
-- : VP -> SC ; -- to go
EmbedVP vp = {
s=vp.adv ! Ag (GSg Neut) P3
++ (R.verbInf vp.verb)
++ vp.dep
++ vp.compl ! Pos ! Ag (GSg Neut) P3 -- ???
} ;
-- : S -> RS -> S ; -- she sleeps, which is good
RelS s rs = {
s=\\m=>s.s ! m ++ comma ++ rs.s ! GSg Neut ! Inanimate ! Nom ;
} ;
}