Files
gf-core/lib/src/translator/ExtensionsJpn.gf
2015-01-20 23:28:28 +00:00

360 lines
14 KiB
Plaintext

--# -path=.:../abstract
concrete ExtensionsJpn of Extensions =
CatJpn ** open ResJpn, ParadigmsJpn, SyntaxJpn, (G = GrammarJpn), (E = ExtraJpn), Prelude in {
lincat
VPI = E.VPI ;
VPS = E.VPS ;
[VPS] = {verbAnd, verbOr, verbIf, a_stemAnd, a_stemOr, a_stemIf,
i_stemAnd, i_stemOr, i_stemIf, teAnd, teOr, teIf,
baAnd, baOr, baIf : Speaker => Animateness => Style => Str ;
prep : Str ; obj, prepositive : Style => Str} ;
[VPI] = {verbAnd, verbOr : Speaker => Animateness => Str ;
a_stemAnd, a_stemOr, i_stemAnd, i_stemOr : Speaker => Animateness => Style => Str ;
teAnd, teOr, baAnd, baOr : Speaker => Animateness => Style => Polarity => Str ;
prep : Str ; obj, prepositive : Style => Str} ;
lin
MkVPI = E.MkVPI ;
MkVPS = E.MkVPS ;
ComplVPIVV = E.ComplVPIVV ;
PredVPS = E.PredVPS ;
ConjVPS = E.ConjVPS ;
ConjVPI = E.ConjVPI ;
BaseVPS = E.BaseVPS ;
ConsVPS = E.ConsVPS ;
BaseVPI = E.BaseVPI ;
ConsVPI = E.ConsVPI ;
GenNP = E.GenNP ;
GenIP = E.GenIP ;
GenRP = E.GenRP ;
CompoundN n1 n2 = {
s = \\n,st => n1.s ! n ! st ++ n2.s ! n ! st ;
anim = n2.anim ;
counter = n2.counter ;
counterReplace = n2.counterReplace ;
counterTsu = n2.counterTsu
} ;
CompoundAP n a = {
pred = \\st,t,p => n.s ! Sg ! st ++ "に" ++ a.pred ! st ! t ! p ;
attr = \\st => n.s ! Sg ! st ++ "に" ++ a.attr ;
adv = \\st => n.s ! Sg ! st ++ "に" ++ a.adv ! Pos ;
dropNaEnging = \\st => n.s ! Sg ! st ++ "に" ++ a.dropNaEnging ;
prepositive = \\st => "" ;
te = \\st,p => n.s ! Sg ! st ++ "に" ++ a.te ! p ;
ba = \\st,p => n.s ! Sg ! st ++ "に" ++ a.ba ! p ;
needSubject = True
} ;
GerundCN vp = {
s = \\n,st => vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ++ "の" ;
anim = Inanim ;
counter = "つ" ;
counterReplace = False ;
counterTsu = True;
object = \\st => vp.obj ! st ++ vp.prep ;
prepositive = vp.prepositive ;
hasAttr = False
} ;
GerundNP vp = {
s = \\st => vp.obj ! st ++ vp.prep ++
vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ++ "の" ;
anim = Inanim ;
changePolar = False ;
needPart = True;
meaning = SomeoneElse ;
prepositive = vp.prepositive ;
} ;
GerundAdv vp = {
s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++
vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ++ "と" ;
prepositive = True
} ;
WithoutVP vp = {
s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++
vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Neg ++ "で" ;
prepositive = True
} ;
ByVP vp = {
s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++
vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ++ "ことで" ;
prepositive = True
} ;
InOrderToVP vp = {
s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++
vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ++ "ために" ;
prepositive = True
} ;
PresPartAP vp = {
pred = \\st,t,p => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ (mkVerb "いる" Gr2).s ! st ! t ! p ;
attr = \\st => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ "いる" ;
te = \\st,p => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ mkExistV.te ! SomeoneElse ! Anim ! st ! p ;
ba = \\st,p => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ mkExistV.ba ! SomeoneElse ! Anim ! st ! p ;
adv = \\st => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ mkExistV.te ! SomeoneElse ! Anim ! st ! Pos ;
dropNaEnging = \\st => vp.te ! SomeoneElse ! Anim ! st ! Pos ++ "いる" ;
prepositive = vp. prepositive ;
needSubject = vp.needSubject
} ;
PastPartAP vpslash = {
pred = \\st,t,p => vpslash.a_stem ! SomeoneElse ++ "れた" ++ mkCopula.s ! st ! t ! p ;
-- works only for Gr1. Have to add verb group record to VPSlash
attr = \\st => vpslash.a_stem ! SomeoneElse ++ "れた" ;
te = \\st,p => vpslash.a_stem ! SomeoneElse ++ "れて" ;
ba = \\st,p => vpslash.a_stem ! SomeoneElse ++ "れば" ;
adv = \\st => vpslash.a_stem ! SomeoneElse ++ "れて" ;
dropNaEnging = \\st => vpslash.a_stem ! SomeoneElse ++ "れた" ;
prepositive = vpslash.prepositive ;
needSubject = True
} ;
PastPartAgentAP vpslash np = {
pred = \\st,t,p => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れた" ++ mkCopula.s ! st ! t ! p ;
-- works only for Gr1. Have to add verb group record to VPSlash
attr = \\st => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れた" ;
te = \\st,p => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れて" ;
ba = \\st,p => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れば" ;
adv = \\st => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れて" ;
dropNaEnging = \\st => np.s ! st ++ "に" ++ vpslash.a_stem ! SomeoneElse ++ "れた" ;
prepositive = \\st => np.prepositive ! st ++ vpslash.prepositive ! st ;
needSubject = True
} ;
ApposNP np1 np2 = {
s = \\st => np1.s ! st ++ "、" ++ np2.s ! st ;
prepositive = \\st => np1.prepositive ! st ++ np2.prepositive ! st ;
needPart = np1.needPart ;
changePolar = np1.changePolar ;
meaning = np1.meaning ;
anim = np1.anim
} ;
AdAdV = cc2 ;
UttAdV adv = {
s = \\part,st => adv.s ;
type = NoImp
} ;
DirectComplVS t np vs utt = {
s = case t.a of {
Simul => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! t.t ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! t.t ! Pos
} ;
Anter => case t.t of {
TPres => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos
} ;
TPast => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos
} ;
TFut => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPres ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPres ! Pos
}
}
} ;
te = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.te ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.te ! Pos
} ;
ba = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.ba ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
utt.s ! Wa ! st ++ "」と" ++ vs.ba ! Pos
} ;
subj = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は" ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が"
} ;
pred = case t.a of {
Simul => \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! t.t ! Pos ;
Anter => case t.t of {
TPres => \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos ;
TPast => \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPast ! Pos ;
TFut => \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.s ! st ! TPres ! Pos
}
} ;
pred_te = \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.te ! Pos ;
pred_ba = \\st => "「" ++ utt.s ! Wa ! st ++ "」と" ++ vs.ba ! Pos
} ;
DirectComplVQ t np vq qs = {
s = case t.a of {
Simul => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! t.t ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! t.t ! Pos
} ;
Anter => case t.t of {
TPres => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos
} ;
TPast => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos
} ;
TFut => table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPres ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPres ! Pos
}
}
} ;
te = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.te ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.te ! Pos
} ;
ba = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.ba ! Pos ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が「" ++
qs.s ! Wa ! st ++ "」と" ++ vq.ba ! Pos
} ;
subj = table {
Wa => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "は" ;
Ga => \\st => t.s ++ np.prepositive ! st ++ np.s ! st ++ "が"
} ;
pred = case t.a of {
Simul => \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! t.t ! Pos ;
Anter => case t.t of {
TPres => \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos ;
TPast => \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPast ! Pos ;
TFut => \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.s ! st ! TPres ! Pos
}
} ;
pred_te = \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.te ! Pos ;
pred_ba = \\st => "「" ++ qs.s ! Wa ! st ++ "」と" ++ vq.ba ! Pos
} ;
{-
FocusObjS, PastPartAgentAP,
ListVPI = E.ListVPI ;
ListVPS = E.ListVPS ;
lin
PassVPSlash = E.PassVPSlash ;
PassAgentVPSlash = E.PassAgentVPSlash ;
---- EmptyRelSlash = E.EmptyRelSlash ;
lin
that_RP = which_RP ;
-- lexical entries
-- another_Quant = mkQuantifier "otro" "otra" "otros" "otras" ;
-- some_Quant = mkQuantifier "algún" "alguna" "algunos" "algunas" ;
-- anySg_Det = mkDeterminer "algún" "alguna" Sg False ; ---- also meaning "whichever" ?
-- each_Det = SyntaxJpn.every_Det ;
-- but_Subj = {s = "pero" ; m = Indic} ; ---- strange to have this as Subj
CompoundN noun cn = {s = noun.s ++ cn.s ; c = cn.c} ; ----
CompoundAP noun adj = complexAP (noun.s ++ possessive_s ++ adj.s) ; ----
---- PastPartAP v = v ; ----
OrdCompar a = {s = \\c => a.s ! AAdj Compar c } ;
PositAdVAdj a = {s = a.s} ;
UseQuantPN q pn = {s = q.s ++ ge_s ++ pn.s} ; ---- ge
SlashV2V v a p vp =
insertObj (ResJpn.mkNP (a.s ++ p.s ++ useVerb vp.verb ! p.p ! APlain ++ vp.compl))
(predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ; ---- aspect
SlashVPIV2V v p vpi = insertObjc (\\a => p.s ++
v.c3 ++
vpi.s ! VVAux ! a)
(predVc v) ;
---- TODO: find proper expressions for OSV and OVS in Jpn
PredVPosv np vp = G.PredVP np vp ; ---- (lin NP np) (lin VP vp) ; ----
PredVPovs np vp = G.PredVP np vp ; ---- (lin NP np) (lin VP vp) ; ----
CompS s = insertObj s (predV copula []) ; ----
CompQS qs = insertObj (ss (qs.s ! False)) (predV copula []) ; ----
CompVP ant p vp = insertObj (ss (infVP vp)) (predV copula []) ; ----
VPSlashVS vs vp =
insertObj (\\a => infVP VVInf vp Simul CPos a) (predV vs []) **
{c2 = ""; gapInMiddle = False} ;
PastPartRS ant pol vp = { ---- copied from PresPartRS
s = ant.s ++ pol.s ++ vp.prePart ++ useVerb vp.verb ! pol.p ! APlain ++ vp.compl ++ which_RP.s ---- aspect
} ; ---- ??
PresPartRS ant pol vp = { ---- copied from RelVP
s = ant.s ++ pol.s ++ vp.prePart ++ useVerb vp.verb ! pol.p ! APlain ++ vp.compl ++ which_RP.s ---- aspect
} ; ---- ??
ComplVV v a p vp = {
verb = v ;
compl = a.s ++ p.s ++ vp.topic ++ vp.prePart ++ useVerb vp.verb ! p.p ! APlain ++ vp.compl ; ---- aspect
prePart, topic = []
} ;
ApposNP np1 np2 = {
s = np1.s ++ chcomma ++ np2.s
} ;
AdAdV = cc2 ;
UttAdV adv = adv;
-}
}