From b2206f09d8f81c241b7ce00a407119f4df4963ea Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 29 May 2012 07:18:16 +0000 Subject: [PATCH] Liza's patch to Jap --- lib/src/japanese/AdjectiveJap.gf | 99 +++-- lib/src/japanese/AdverbJap.gf | 43 +- lib/src/japanese/AllJap.gf | 12 +- lib/src/japanese/AllJapAbs.gf | 8 +- lib/src/japanese/CatJap.gf | 113 +++-- lib/src/japanese/CommonJap.gf | 12 +- lib/src/japanese/ConjunctionJap.gf | 112 ++--- lib/src/japanese/GrammarJap.gf | 3 +- lib/src/japanese/IdiomJap.gf | 261 +++++------ lib/src/japanese/LangJap.gf | 2 +- lib/src/japanese/LexiconJap.gf | 264 +++++------ lib/src/japanese/NounJap.gf | 112 +++-- lib/src/japanese/NumeralJap.gf | 187 +++++--- lib/src/japanese/ParadigmsJap.gf | 33 +- lib/src/japanese/PhraseJap.gf | 51 ++- lib/src/japanese/QuestionJap.gf | 111 +++-- lib/src/japanese/RelativeJap.gf | 44 +- lib/src/japanese/ResJap.gf | 686 ++++++++++++++++++----------- lib/src/japanese/SentenceJap.gf | 302 ++++++------- lib/src/japanese/StructuralJap.gf | 111 +++-- lib/src/japanese/TextJap.gf | 2 +- lib/src/japanese/VerbJap.gf | 462 ++++++++++--------- 22 files changed, 1636 insertions(+), 1394 deletions(-) diff --git a/lib/src/japanese/AdjectiveJap.gf b/lib/src/japanese/AdjectiveJap.gf index f37527dda..ef9a7ef6e 100644 --- a/lib/src/japanese/AdjectiveJap.gf +++ b/lib/src/japanese/AdjectiveJap.gf @@ -9,42 +9,38 @@ flags coding = utf8 ; attr = \\st => adj.attr ; te = \\st => adj.te ; ba = \\st => adj.ba ; - adv = \\st => adj.adv ; - prepositive = \\st => [] ; - compar = NoCompar ; + adv = \\st => adj.adv ! Pos ; + prepositive = \\st => [] ; dropNaEnging = \\st => adj.dropNaEnging } ; ComparA adj np = { - pred = \\st,t,p => np.s ! st ++ "より" ++ adj.pred ! st ! t ! p ; + pred = \\st,t,p => np.s ! st ++ "より" ++ adj.pred ! st ! t ! p ; attr = \\st => np.s ! st ++ "より" ++ adj.attr ; - te = \\st => np.s ! st ++ "より" ++ adj.te ; - ba = \\st => np.s ! st ++ "より" ++ adj.ba ; - adv = \\st => np.s ! st ++ "より" ++ adj.adv ; + te = \\st,p => np.s ! st ++ "より" ++ adj.te ! p ; + ba = \\st,p => np.s ! st ++ "より" ++ adj.ba ! p ; + adv = \\st => np.s ! st ++ "より" ++ adj.adv ! Pos ; prepositive = np.prepositive ; - compar = More ; dropNaEnging = \\st => np.s ! st ++ "より" ++ adj.dropNaEnging ; } ; ComplA2 a2 np = { pred = \\st,t,p => np.s ! st ++ a2.prep ++ a2.pred ! st ! t ! p ; attr = \\st => np.s ! st ++ a2.prep ++ a2.attr ; - te = \\st => np.s ! st ++ a2.prep ++ a2.te ; - ba = \\st => np.s ! st ++ a2.prep ++ a2.ba ; + te = \\st,p => np.s ! st ++ a2.prep ++ a2.te ! p ; + ba = \\st,p => np.s ! st ++ a2.prep ++ a2.ba ! p ; prepositive = np.prepositive ; - adv = \\st => [] ; - compar = NoCompar ; + adv = \\st => np.s ! st ++ a2.prep ++ a2.adv ! Pos ; dropNaEnging = \\st => np.s ! st ++ a2.prep ++ a2.dropNaEnging } ; ReflA2 a2 = { pred = \\st,t,p => "自分" ++ a2.prep ++ a2.pred ! st ! t ! p ; -- "jibun" attr = \\st => "自分" ++ a2.prep ++ a2.attr ; - te = \\st => "自分" ++ a2.prep ++ a2.te ; - ba = \\st => "自分" ++ a2.prep ++ a2.ba ; - adv = \\st => [] ; + te = \\st,p => "自分" ++ a2.prep ++ a2.te ! p ; + ba = \\st,p => "自分" ++ a2.prep ++ a2.ba ! p ; + adv = \\st => "自分" ++ a2.prep ++ a2.adv ! Pos ; prepositive = \\st => [] ; - compar = NoCompar ; dropNaEnging = \\st => "自分" ++ a2.prep ++ a2.dropNaEnging } ; @@ -53,32 +49,53 @@ flags coding = utf8 ; attr = \\st => a2.attr ; te = \\st => a2.te ; ba = \\st => a2.ba ; - adv = \\st => [] ; + adv = \\st => a2.adv ! Pos ; prepositive = \\st => [] ; - compar = NoCompar ; dropNaEnging = \\st => a2.dropNaEnging } ; UseComparA adj = { pred = \\st,t,p => "もっと" ++ adj.pred ! st ! t ! p ; attr = \\st => "もっと" ++ adj.attr ; - te = \\st => "もっと" ++ adj.te ; - ba = \\st => "もっと" ++ adj.ba ; - adv = \\st => "もっと" ++ adj.adv ; + te = \\st,p => "もっと" ++ adj.te ! p ; + ba = \\st,p => "もっと" ++ adj.ba ! p ; + adv = \\st => "もっと" ++ adj.adv ! Pos ; prepositive = \\st => [] ; - compar = NoCompar ; -- "motto" does not change the main NP's particle dropNaEnging = \\st => "もっと" ++ adj.dropNaEnging } ; CAdvAP cadv ap np = { - pred = \\st,t,p => np.s ! st ++ cadv.s ++ ap.pred ! st ! t ! p ; - attr = \\st => np.s ! st ++ cadv.s ++ ap.attr ! st ; - te = \\st => np.s ! st ++ cadv.s ++ ap.te ! st ; - ba = \\st => np.s ! st ++ cadv.s ++ ap.ba ! st ; + pred = \\st,t => case cadv.less of { + True => table { + Pos => np.s ! st ++ cadv.s ++ ap.pred ! st ! t ! Neg ; + Neg => np.s ! st ++ cadv.s ++ ap.pred ! st ! t ! Pos + } ; + False => \\p => np.s ! st ++ cadv.s ++ ap.pred ! st ! t ! p + } ; + attr = \\st => case cadv.less of { + True => np.s ! st ++ cadv.s ++ ap.pred ! Plain ! TPres ! Neg ; + False => np.s ! st ++ cadv.s ++ ap.attr ! st + } ; + te = \\st => case cadv.less of { + True => table { + Pos => np.s ! st ++ cadv.s ++ ap.te ! st ! Neg ; + Neg => np.s ! st ++ cadv.s ++ ap.te ! st ! Pos + } ; + False => \\p => np.s ! st ++ cadv.s ++ ap.te ! st ! p + } ; + ba = \\st => case cadv.less of { + True => table { + Pos => np.s ! st ++ cadv.s ++ ap.ba ! st ! Neg ; + Neg => np.s ! st ++ cadv.s ++ ap.ba ! st ! Pos + } ; + False => \\p => np.s ! st ++ cadv.s ++ ap.ba ! st ! p + } ; adv = \\st => np.s ! st ++ cadv.s ++ ap.adv ! st ; prepositive = np.prepositive ; - compar = cadv.compar ; - dropNaEnging = \\st => np.s ! st ++ cadv.s ++ ap.dropNaEnging ! st + dropNaEnging = \\st => case cadv.less of { + True => np.s ! st ++ cadv.s ++ ap.pred ! Plain ! TPres ! Neg ; + False => np.s ! st ++ cadv.s ++ ap.dropNaEnging ! st + } } ; AdjOrd ord = { @@ -86,31 +103,28 @@ flags coding = utf8 ; attr = \\st => ord.attr ; te = \\st => ord.te ; ba = \\st => ord.ba ; - adv = \\st => ord.adv ; + adv = \\st => ord.adv ! Pos ; prepositive = \\st => [] ; - compar = NoCompar ; dropNaEnging = \\st => ord.dropNaEnging } ; SentAP ap sc = { - pred = \\st,t,p => sc.s ! Ga ! st ++ "ことを" ++ ap.pred ! st ! t ! p ; - attr = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.attr ! st ; - te = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.te ! st ; - ba = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.ba ! st ; - adv = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.adv ! st ; + pred = \\st,t,p => sc.s ! Wa ! st ++ "ことが" ++ ap.pred ! st ! t ! p ; + attr = \\st => sc.s ! Wa ! st ++ "ことが" ++ ap.attr ! st ; + te = \\st,p => sc.s ! Wa ! st ++ "ことが" ++ ap.te ! st ! p ; + ba = \\st,p => sc.s ! Wa ! st ++ "ことが" ++ ap.ba ! st ! p ; + adv = \\st => sc.s ! Wa ! st ++ "ことが" ++ ap.adv ! st ; prepositive = ap.prepositive ; - compar = ap.compar ; - dropNaEnging = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.dropNaEnging ! st + dropNaEnging = \\st => sc.s ! Wa ! st ++ "ことが" ++ ap.dropNaEnging ! st } ; AdAP ada ap = { pred = \\st,t,p => ada.s ++ ap.pred ! st ! t ! p ; attr = \\st => ada.s ++ ap.attr ! st ; - te = \\st => ada.s ++ ap.te ! st ; - ba = \\st => ada.s ++ ap.ba ! st ; + te = \\st,p => ada.s ++ ap.te ! st ! p ; + ba = \\st,p => ada.s ++ ap.ba ! st ! p ; adv = \\st => ada.s ++ ap.adv ! st ; prepositive = ap.prepositive ; - compar = ap.compar ; dropNaEnging = \\st => ada.s ++ ap.dropNaEnging ! st } ; @@ -125,11 +139,11 @@ flags coding = utf8 ; } ; te = \\st => case adv.prepositive of { True => ap.te ! st ; - False => adv.s ! st ++ ap.te ! st + False => \\p => adv.s ! st ++ ap.te ! st ! p } ; ba = \\st => case adv.prepositive of { True => ap.ba ! st ; - False => adv.s ! st ++ ap.ba ! st + False => \\p => adv.s ! st ++ ap.ba ! st ! p } ; adv = \\st => case adv.prepositive of { True => ap.adv ! st ; @@ -139,7 +153,6 @@ flags coding = utf8 ; True => adv.s ! st ; False => [] } ; - compar = ap.compar ; dropNaEnging = \\st => case adv.prepositive of { True => ap.dropNaEnging ! st ; False => adv.s ! st ++ ap.dropNaEnging ! st diff --git a/lib/src/japanese/AdverbJap.gf b/lib/src/japanese/AdverbJap.gf index b325d7b3f..ea634b6ae 100644 --- a/lib/src/japanese/AdverbJap.gf +++ b/lib/src/japanese/AdverbJap.gf @@ -4,37 +4,38 @@ flags coding = utf8 ; lin - PositAdvAdj a = {s = \\st => a.adv ; prepositive = False ; compar = NoCompar} ; + PositAdvAdj a = {s = \\st => a.adv ! Pos ; prepositive = False} ; PrepNP prep np = {s = \\st => np.s ! st ++ prep.s ; - prepositive = False ; compar = NoCompar} ; + prepositive = False} ; - ComparAdvAdj cadv a np = {s = \\st => np.s ! st ++ cadv.s ++ a.adv ; - prepositive = False ; compar = cadv.compar} ; + ComparAdvAdj cadv a np = { + s = \\st => case cadv.less of { + True => np.s ! st ++ cadv.s ++ a.adv ! Neg ; + False => np.s ! st ++ cadv.s ++ a.adv ! Pos + } ; + prepositive = False} ; - ComparAdvAdjS cadv a s = {s = \\st => s.s ! Ga ! Plain ++ "こと" ++ cadv.s ++ a.adv ; - prepositive = False ; compar = cadv.compar} ; + ComparAdvAdjS cadv a s = { + s = \\st => case cadv.less of { + True => s.subj ! Ga ! st ++ s.pred ! Plain ++ cadv.s ++ a.adv ! Neg ; + False => s.subj ! Ga ! st ++ s.pred ! Plain ++ cadv.s ++ a.adv ! Pos + } ; + prepositive = False} ; AdAdv ada adv = {s = \\st => ada.s ++ adv.s ! st ; - prepositive = adv.prepositive ; compar = NoCompar} ; + prepositive = adv.prepositive} ; - PositAdAAdj a = {s = a.adv} ; + PositAdAAdj a = {s = a.adv ! Pos } ; SubjS subj s = { s = \\st => case subj.type of { - If => s.ba ! (Wa | Ga) ! st ++ subj.s ; - _ => s.s ! (Wa | Ga) ! st ++ subj.s + + If => s.ba ! Wa ! st ++ subj.s ; + _ => s.s ! Wa ! st ++ subj.s } ; - prepositive = True ; - compar = NoCompar + prepositive = True } ; - AdnCAdv cadv = { - s = case cadv.compar of { - More => "以上" ; -- "ijou" - Less => "以下" ; -- "ika" ; - NoCompar => "もの" - } ; - postposition = True - } ; -} + AdnCAdv cadv = {s = cadv.s_adn ; postposition = True} ; +} \ No newline at end of file diff --git a/lib/src/japanese/AllJap.gf b/lib/src/japanese/AllJap.gf index 9573e7b56..8e3200452 100644 --- a/lib/src/japanese/AllJap.gf +++ b/lib/src/japanese/AllJap.gf @@ -1,6 +1,6 @@ ---# -path=.:../abstract:../common:../prelude - -concrete AllJap of AllJapAbs = - LangJap --- ExtraJap - ** {} ; +--# -path=.:../abstract:../common:../prelude + +concrete AllJap of AllJapAbs = + LangJap, + ExtraJap + ** {} ; diff --git a/lib/src/japanese/AllJapAbs.gf b/lib/src/japanese/AllJapAbs.gf index 773d86610..41c2a9ade 100644 --- a/lib/src/japanese/AllJapAbs.gf +++ b/lib/src/japanese/AllJapAbs.gf @@ -1,4 +1,4 @@ -abstract AllJapAbs = - Lang --- ExtraJapAbs - ** {} ; +abstract AllJapAbs = + Lang, + ExtraJapAbs + ** {} ; diff --git a/lib/src/japanese/CatJap.gf b/lib/src/japanese/CatJap.gf index 0e811b459..24e6bcb24 100644 --- a/lib/src/japanese/CatJap.gf +++ b/lib/src/japanese/CatJap.gf @@ -9,86 +9,81 @@ flags coding = utf8 ; lincat S = {s, te, ba, subj : Particle => Style => Str ; pred, pred_te, pred_ba : Style => Str} ; - QS = {s : Particle => Style => Str} ; + QS = {s : Particle => Style => Str ; s_plain_pred : Particle => Style => Str} ; RS = {s, te, pred, pred_te, pred_ba : Animateness => Style => Str ; subj : Particle => Style => Str ; missingSubj : Bool} ; - Cl = {s : Particle => Style => TTense => Polarity => Str ; - te, ba, subj : Particle => Style => Str ; - pred : Style => TTense => Polarity => Str ; - pred_te, pred_ba : Style => Str ; - changePolar : Bool} ; - ClSlash = {s : Style => TTense => Polarity => Str ; - te : Style => Str ; - subj : Particle => Style => Str ; - pred : Style => TTense => Polarity => Str ; - pred_te : Style => Str ; - pred_ba : Style => Str ; - changePolar : Bool} ; + Cl = {s : Particle => Style => TTense => Polarity => Str ; subj : Particle => Style => Str ; + te, ba : Particle => Style => Polarity => Str ; pred : Style => TTense => Polarity => Str ; + pred_te, pred_ba : Style => Polarity => Str ; changePolar : Bool} ; + ClSlash = {s, pred : Style => TTense => Polarity => Str ; subj : Particle => Style => Str ; + te, pred_te, pred_ba : Style => Polarity => Str ; changePolar : Bool} ; SSlash = {s : Style => Str ; te : Style => Str} ; Imp = {s : Style => Polarity => Str} ; - QCl = {s : Particle => Style => TTense => Polarity => Str ; changePolar : Bool} ; - IP = {s : Style => Str ; anim : Animateness ; how8many : Bool} ; - IComp = {s : Style => Str} ; + QCl = {s : Particle => Style => TTense => Polarity => Str ; + s_plain_pred : Particle => Style => TTense => Polarity => Str ; changePolar : Bool} ; + IP = {s_subj, s_obj : Style => Str ; anim : Animateness ; how8many : Bool} ; + IComp = {s : Style => Str ; wh8re : Bool} ; IDet = {s : Str ; n : Number ; how8many : Bool ; inclCard : Bool} ; IQuant = {s : Str} ; - RCl = {s : Animateness => Style => TTense => Polarity => Str ; - te : Animateness => Style => Str ; - subj : Particle => Style => Str ; - pred : Animateness => Style => TTense => Polarity => Str ; - pred_te, pred_ba : Animateness => Style => Str ; - changePolar : Bool ; - missingSubj : Bool} ; - RP = {s : Style => Str ; prep : Str} ; - VP = ResJap.VP ; -- {verb : Animateness => Style => TTense => Polarity => Str ; - -- te : Animateness => Style => Str; a_stem : Animateness => Style => Str ; - -- i_stem : Animateness => Style => Str ; ba : Animateness => Style => Str ; - -- prep : Str ; obj : Style => Str ; prepositive : Style => Str ; compar : ComparSense} ; - Comp = {verb : Animateness => Style => TTense => Polarity => Str ; - te : Animateness => Style => Str ; a_stem : Animateness => Style => Str ; - i_stem : Animateness => Style => Str ; ba : Animateness => Style => Str ; - obj : Style => Str ; prepositive : Style => Str ; compar : ComparSense} ; - VPSlash = Verb ** {prep : Str ; obj : Style => Str ; prepositive : Style => Str ; - v2vType : Bool ; compar : ComparSense} ; - AP = {pred : Style => TTense => Polarity => Str ; attr : Style => Str ; te : Style => Str ; - ba : Style => Str ; adv : Style => Str ; dropNaEnging : Style => Str ; - prepositive : Style => Str ; compar : ComparSense} ; + RCl = {s, pred : Animateness => Style => TTense => Polarity => Str ; + te, pred_te, pred_ba : Animateness => Style => Polarity => Str ; + subj : Particle => Style => Str ; changePolar : Bool ; missingSubj : Bool} ; + RP = {s : Style => Str ; null : Bool} ; + VP = ResJap.VP ; -- {verb : Speaker => Animateness => Style => TTense => Polarity => Str ; + -- a_stem, i_stem : Speaker => Animateness => Style => Str ; + -- te, ba : Speaker => Animateness => Style => Polarity => Str ; + -- prep : Str ; obj : Style => Str ; prepositive : Style => Str} ; + Comp = {verb : Animateness => Style => TTense => Polarity => Str ; a_stem, i_stem : + Animateness => Style => Str ; te, ba : Animateness => Style => Polarity => Str ; + obj : Style => Str ; prepositive : Style => Str} ; + VPSlash = {s : Speaker => Style => TTense => Polarity => Str ; + a_stem, i_stem : Speaker => Str ; te, ba : Speaker => Polarity => Str ; + prep : Str ; obj : Style => Str ; prepositive : Style => Str ; v2vType : Bool} ; + AP = {pred : Style => TTense => Polarity => Str ; attr, adv, dropNaEnging, prepositive : + Style => Str ; te, ba : Style => Polarity => Str} ; NP = ResJap.NP ; -- {s : Style => Str ; prepositive : Style => Str ; needPart : Bool ; - -- changePolar : Bool ; Pron1Sg : Bool ; anim : Animateness} ; + -- changePolar : Bool ; meaning : Speaker ; anim : Animateness} ; CN = Noun ** {object : Style => Str ; prepositive : Style => Str ; hasAttr : Bool} ; - Pron = Pronoun ; -- {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ; - Det = Determiner ; -- {quant : Style => Str ; num : Str ; postpositive : Str ; - -- n : Number ; inclCard : Bool ; sp : Style => Str ; no : Bool} ; + Pron = Pronoun ; -- {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ; + Det = Determiner ; -- {quant : Style => Str ; num : Str ; postpositive : Str ; + -- n : Number ; inclCard : Bool ; sp : Style => Str ; no : Bool ; tenPlus : Bool} ; Predet = {s : Str ; not : Bool} ; Quant = {s : Style => Str ; sp : Style => Str ; no : Bool} ; - Num = ResJap.Num ; -- {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool} ; - Card = {s : Str ; postpositive : Str ; n : Number} ; - Ord = Adj ; -- {pred : Style => TTense => Polarity => Str ; attr : Str ; - -- te : Str ; ba : Str ; adv : Str ; dropNaEnging : Str} ; - Numeral = {s : Str ; n : Number} ; - Digits = {s : Str ; n : Number} ; + Num = ResJap.Num ; -- {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool ; + -- tenPlus : Bool} ; + Card = {s : Str ; postpositive : Str ; n : Number ; tenPlus : Bool} ; + Ord = Adj ; -- {pred : Style => TTense => Polarity => Str ; attr, adv, + -- dropNaEnging : Str ; te, ba : Polarity => Str} ; + Numeral = {s : Str ; n : Number ; tenPlus : Bool} ; + Digits = {s : Str ; n : Number ; tenPlus : Bool ; tail : DTail} ; Conj = Conjunction ; -- {s : Str ; null : Str ; type : ConjType} ; Subj = Subjunction ; -- {s : Str ; type : SubjType} ; - Prep = Preposition ; -- {s : Str ; relPrep : Str} ; - V = Verb ; -- {s : Style => TTense => Polarity => Str ; te : Str ; - -- a_stem : Str ; i_stem : Str ; ba : Str} - V2 = Verb ** {pass: Style => TTense => Polarity => Str ; pass_te : Str ; pass_a_stem : Str ; - pass_i_stem : Str ; pass_ba : Str ; prep : Str} ; - V3 = Verb ** {prep1 : Str ; prep2 : Str ; give : Bool} ; -- "give" is a special case - VV = Verb ** {sense : ModSense} ; + Prep = Preposition ; -- {s : Str ; null : Str} ; + V = Verb ; -- {s : Style => TTense => Polarity => Str ; a_stem, i_stem : + -- Str ; te, ba : Polarity => Str} + V2 = Verb2 ; -- {s, pass : Style => TTense => Polarity => Str ; a_stem, i_stem, + -- pass_a_stem, pass_i_stem, prep : Str ; te, ba, pass_te, + -- pass_ba : Polarity => Str} ; + V3 = Verb3 ; -- {s : Speaker => Style => TTense => Polarity => Str ; a_stem, + -- i_stem : Speaker => Str ; te, ba : Speaker => Polarity => + -- Str ; prep1, prep2 : Str} ; + VV = ResJap.VV ; -- {s : Speaker => Style => TTense => Polarity => Str ; te, + -- a_stem, i_stem, ba, te_neg, ba_neg : Speaker => Str ; + -- sense : ModSense} ; VS = Verb ** {prep : Str} ; - VQ = Verb ** {prep : Str} ; + VQ = Verb ; VA = Verb ; V2V = Verb ; V2S = Verb ; V2Q = Verb ; V2A = Verb ; - A = Adj ; -- {pred : Style => TTense => Polarity => Str ; attr : Str; - -- te : Str ; ba : Str ; adv : Str ; dropNaEnging : Str} ; + A = Adj ; -- {pred : Style => TTense => Polarity => Str ; attr, + -- dropNaEnging : Str ; te, ba, adv : Polarity => Str} ; A2 = Adj2 ; -- Adj ** {prep : Str} ; N = Noun ; -- {s : Number => Style => Str ; anim : Animateness ; - -- counter : Str ; counterReplace : Bool} ; + -- counter : Str ; counterReplace : Bool ; counterTsu : Bool} ; N2 = Noun ** {prep : Str; object : Style => Str} ; N3 = Noun ** {prep1 : Str; prep2 : Str} ; - PN = PropNoun ; -- {s : Style => Str} ; + PN = PropNoun ; -- {s : Style => Str ; anim : Animateness} ; } \ No newline at end of file diff --git a/lib/src/japanese/CommonJap.gf b/lib/src/japanese/CommonJap.gf index f041298f2..8f150fec8 100644 --- a/lib/src/japanese/CommonJap.gf +++ b/lib/src/japanese/CommonJap.gf @@ -4,11 +4,13 @@ flags coding = utf8 ; lincat - Text, Phr, PConj, Interj, AdV, AdA = {s : Str} ; + PConj, Interj, AdV, AdA = {s : Str} ; - Utt = {s : Style => Str} ; + Phr, Text = {s : Str} ; - Voc = {s : Style => Str ; please : Bool} ; + Utt = {s : Particle => Style => Str ; type : UttType} ; + + Voc = {s : Style => Str ; type : VocType ; null : Str} ; SC = {s : Particle => Style => Str ; isVP : Bool} ; @@ -16,9 +18,9 @@ flags coding = utf8 ; AdN = {s : Str ; postposition : Bool} ; - IAdv = {s : Style => Str ; particle : Str} ; + IAdv = {s : Style => Str ; particle : Str ; wh8re : Bool} ; - CAdv = {s : Str ; compar : ComparSense} ; + CAdv = {s : Str ; less : Bool ; s_adn : Str} ; Temp = {s : Str ; t : TTense ; a : Anteriority} ; Tense = {s : Str ; t : TTense} ; diff --git a/lib/src/japanese/ConjunctionJap.gf b/lib/src/japanese/ConjunctionJap.gf index 3eb55230d..db8cfd184 100644 --- a/lib/src/japanese/ConjunctionJap.gf +++ b/lib/src/japanese/ConjunctionJap.gf @@ -48,24 +48,22 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { ConjAP conj ap = case conj.type of { (And | Both) => { - pred = \\st,t,p => conj.null ++ ap.s1and ! st ++ ap.s2pred ! st ! t ! p ; - attr = \\st => conj.null ++ ap.s1and ! st ++ ap.s2attr ! st ; - te = \\st => conj.null ++ ap.s1and ! st ++ ap.s2te ! st ; - ba = \\st => conj.null ++ ap.s1and ! st ++ ap.s2ba ! st ; - adv = \\st => conj.null ++ ap.s1and ! st ++ ap.s2adv ! st ; - dropNaEnging = \\st => conj.null ++ ap.s1and ! st ++ ap.s2dropNaEnging ! st ; - prepositive = ap.prepositive ; - compar = ap.compar + pred = \\st,t,p => conj.null ++ ap.s1and ! st ! p ++ ap.s2pred ! st ! t ! p ; + attr = \\st => conj.null ++ ap.s1and ! st ! Pos ++ ap.s2attr ! st ; + te = \\st,p => conj.null ++ ap.s1and ! st ! p ++ ap.s2te ! st ! p ; + ba = \\st,p => conj.null ++ ap.s1and ! st ! p ++ ap.s2ba ! st ! p ; + adv = \\st => conj.null ++ ap.s1and ! st ! Pos ++ ap.s2adv ! st ; + dropNaEnging = \\st => conj.null ++ ap.s1and ! st ! Pos ++ ap.s2dropNaEnging ! st ; + prepositive = ap.prepositive } ; Or => { - pred = \\st,t,p => conj.null ++ ap.s1or ! st ++ ap.s2pred ! st ! t ! p ; - attr = \\st => conj.null ++ ap.s1or ! st ++ ap.s2attr ! st ; - te = \\st => conj.null ++ ap.s1or ! st ++ ap.s2te ! st ; - ba = \\st => conj.null ++ ap.s1or ! st ++ ap.s2ba ! st ; - adv = \\st => conj.null ++ ap.s1or ! st ++ ap.s2adv ! st ; - dropNaEnging = \\st => conj.null ++ ap.s1or ! st ++ ap.s2dropNaEnging ! st ; - prepositive = ap.prepositive ; - compar = ap.compar + pred = \\st,t,p => conj.null ++ ap.s1or ! st ! p ++ ap.s2pred ! st ! t ! p ; + attr = \\st => conj.null ++ ap.s1or ! st ! Pos ++ ap.s2attr ! st ; + te = \\st,p => conj.null ++ ap.s1or ! st ! p ++ ap.s2te ! st ! p ; + ba = \\st,p => conj.null ++ ap.s1or ! st ! p ++ ap.s2ba ! st ! p ; + adv = \\st => conj.null ++ ap.s1or ! st ! Pos ++ ap.s2adv ! st ; + dropNaEnging = \\st => conj.null ++ ap.s1or ! st ! Pos ++ ap.s2dropNaEnging ! st ; + prepositive = ap.prepositive } } ; @@ -74,8 +72,7 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { (And | Both) => conj.null ++ adv.and ! st ; Or => conj.null ++ adv.or ! st } ; - prepositive = adv.prepositive ; - compar = adv.compar + prepositive = adv.prepositive } ; ConjNP conj np = { @@ -90,13 +87,14 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { Both => False } ; changePolar = np.changePolar ; - Pron1Sg = np.Pron1Sg ; + meaning = SomeoneElse ; anim = np.anim } ; ConjIAdv conj iadv = { s = \\st => conj.null ++ iadv.s ! st ; - particle = iadv.particle + particle = iadv.particle ; + wh8re = iadv.wh8re } ; ConjCN conj cn = { @@ -109,7 +107,8 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { counterReplace = cn.counterReplace ; object = cn.object ; prepositive = cn.prepositive ; - hasAttr = cn.hasAttr + hasAttr = cn.hasAttr ; + counterTsu = cn.counterTsu } ; BaseS x y = { @@ -157,7 +156,7 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { pred_teAnd = \\a,st => x.pred_te ! a ! st ++ "," ++ y.te ! a ! st ; pred_teOr = \\a,st => x.pred_te ! a ! st ++ "," ++ "あるいは" ++ y.te ! a ! st ; pred_baAnd = \\a,st => x.pred_te ! a ! st ++ "," ++ y.subj ! Ga ! st ++ - y.pred_ba ! a ! st ; + y.pred_ba ! a ! st ; pred_baOr = \\a,st => x.pred_te ! a ! st ++ "," ++ "あるいは" ++ y.subj ! Ga ! st ++ y.pred_ba ! a ! st ; subj = x.subj ; @@ -196,11 +195,6 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { prepositive = case of { => False ; _ => True - } ; - compar = case of { - => NoCompar ; - ( | <_, More>) => More ; - _ => Less } } ; @@ -210,17 +204,12 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { _ => xs.and ! st ++ "," ++ x.s ! st } ; or = \\st => case of { - => xs.or ! st ++ "か" ++ x.s ! st ; + => x.s ! st ++ "か" ++ xs.or ! st ; _ => xs.or ! st ++ "," ++ "あるいは" ++ x.s ! st } ; prepositive = case of { => False ; _ => True - } ; - compar = case of { - => NoCompar ; - ( | <_, More>) => More ; - _ => Less } } ; @@ -237,7 +226,7 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { => False ; _ => True } ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = case of { => Inanim ; _ => Anim @@ -257,47 +246,59 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { => False ; _ => True } ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = case of { => Inanim ; _ => Anim } } ; - + BaseAP x y = { s1and = x.te ; - s1or = \\st => x.dropNaEnging ! st ++ "か" ; + s1or = \\st => table { + Pos => x.dropNaEnging ! st ++ "か" ; + Neg => x.pred ! Plain ! TPres ! Neg ++ "か" + } ; s2pred = y.pred ; s2attr = y.attr ; s2te = y.te ; s2ba = y.ba ; s2adv = y.adv ; s2dropNaEnging = y.dropNaEnging ; - prepositive = \\st => x.prepositive ! st ++ y.prepositive ! st ; - compar = y.compar + prepositive = \\st => x.prepositive ! st ++ y.prepositive ! st } ; ConsAP x xs = { - s1and = \\st => xs.s1and ! st ++ xs.s2te ! st ; - s1or = \\st => xs.s1or ! st ++ xs.s2dropNaEnging ! st ++ "か" ; + s1and = \\st,p => xs.s1and ! st ! p ++ xs.s2te ! st ! p ; + s1or = \\st => table { + Pos => xs.s1or ! st ! Pos ++ xs.s2dropNaEnging ! st ++ "か" ; + Neg => xs.s1or ! st ! Neg ++ xs.s2pred ! Plain ! TPres ! Neg ++ "か" + } ; s2pred = x.pred ; s2attr = x.attr ; s2te = x.te ; s2ba = x.ba ; s2adv = x.adv ; s2dropNaEnging = x.dropNaEnging ; - prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st ; - compar = x.compar + prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st } ; BaseIAdv x y = { s = \\st => x.s ! st ++ x.particle ++ y.s ! st ; - particle = y.particle + particle = y.particle ; + wh8re = case of { + => False ; + _ => True + } } ; ConsIAdv x xs = { s = \\st => x.s ! st ++ x.particle ++ xs.s ! st ; - particle = xs.particle + particle = xs.particle ; + wh8re = case of { + => False ; + _ => True + } } ; BaseCN x y = { @@ -311,7 +312,8 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { counterReplace = y.counterReplace ; object = x.object ; prepositive = \\st => x.prepositive ! st ++ y.prepositive ! st ; - hasAttr = x.hasAttr + hasAttr = x.hasAttr ; + counterTsu = y.counterTsu } ; ConsCN x xs = { @@ -325,7 +327,8 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { counterReplace = xs.counterReplace ; object = x.object ; prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st ; - hasAttr = x.hasAttr + hasAttr = x.hasAttr ; + counterTsu = xs.counterTsu } ; lincat @@ -337,18 +340,19 @@ concrete ConjunctionJap of Conjunction = CatJap ** open ResJap, Prelude in { pred_baOr : Animateness => Style => Str ; subj : Particle => Style => Str ; missingSubj : Bool} ; - [Adv] = {and, or : Style => Str ; prepositive : Bool ; compar : ComparSense} ; + [Adv] = {and, or : Style => Str ; prepositive : Bool} ; [NP] = {and, or, both : Style => Str ; prepositive : Style => Str ; - needPart : Bool ; changePolar : Bool ; Pron1Sg : Bool ; anim : Animateness} ; + needPart : Bool ; changePolar : Bool ; meaning : Speaker ; anim : Animateness} ; - [AP] = {s1and, s1or : Style => Str ; s2pred : Style => TTense => Polarity => Str ; - s2attr, s2te, s2ba, s2adv, s2dropNaEnging, prepositive : Style => Str ; - compar : ComparSense} ; + [AP] = {s1and, s1or : Style => Polarity => Str ; s2pred : Style => TTense => Polarity => Str ; + s2attr, s2adv, s2dropNaEnging, prepositive : Style => Str ; + s2te, s2ba : Style => Polarity => Str} ; - [IAdv] = {s : Style => Str ; particle : Str} ; + [IAdv] = {s : Style => Str ; particle : Str ; wh8re : Bool} ; [CN] = {and, or : Number => Style => Str ; anim : Animateness ; counter : Str ; counterReplace : Bool ; object : Style => Str ; prepositive : Style => Str ; - hasAttr : Bool} ; + hasAttr : Bool ; counterTsu : Bool} ; + } diff --git a/lib/src/japanese/GrammarJap.gf b/lib/src/japanese/GrammarJap.gf index 2f4543a3d..2802ef0bb 100644 --- a/lib/src/japanese/GrammarJap.gf +++ b/lib/src/japanese/GrammarJap.gf @@ -12,6 +12,5 @@ concrete GrammarJap of Grammar = TextJap, StructuralJap, IdiomJap, - TenseJap --, --- TransferJap + TenseJap ; diff --git a/lib/src/japanese/IdiomJap.gf b/lib/src/japanese/IdiomJap.gf index ff8a473ba..ad0d66484 100644 --- a/lib/src/japanese/IdiomJap.gf +++ b/lib/src/japanese/IdiomJap.gf @@ -4,223 +4,158 @@ flags coding = utf8 ; lin - ImpersCl vp = case vp.compar of { - More => { - s = table { - Wa => \\st,t,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - Ga => \\st,t,p => vp.prepositive ! st ++ "これのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Inanim ! st ! t ! p - } ; - te = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st ; - Ga => \\st => vp.prepositive ! st ++ "これのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st - } ; - ba = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st ; - Ga => \\st => vp.prepositive ! st ++ "これのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st - } ; - subj = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ; - Ga => \\st => vp.prepositive ! st ++ "これのほうが" - } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Inanim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Inanim ! st ; - changePolar = False + ImpersCl vp = { + s = table { + Wa => \\st,t,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; + Ga => \\st,t,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p } ; - Less => { - s = \\part,st,t,p => vp.prepositive ! st ++ "これより" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - te = \\part,st => vp.prepositive ! st ++ "これより" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st ; - ba = \\part,st => vp.prepositive ! st ++ "これより" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st ; - subj = \\part,st => vp.prepositive ! st ++ "これより" ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Inanim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Inanim ! st ; - changePolar = False + te = table { + Wa => \\st,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + Ga => \\st,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p + } ; + ba = table { + Wa => \\st,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; + Ga => \\st,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p } ; - NoCompar => { - s = table { - Wa => \\st,t,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - Ga => \\st,t,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Inanim ! st ! t ! p - } ; - te = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st ; - Ga => \\st => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st - } ; - ba = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st ; - Ga => \\st => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st - } ; - subj = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ; - Ga => \\st => vp.prepositive ! st ++ "これが" - } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Inanim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Inanim ! st ; - changePolar = False - } + subj = table { + Wa => \\st => vp.prepositive ! st ++ "これは" ; + Ga => \\st => vp.prepositive ! st ++ "これが" + } ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; + changePolar = False } ; - GenericCl vp = case vp.compar of { - More => { - s = table { - Wa => \\st,t,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - Ga => \\st,t,p => vp.prepositive ! st ++ "誰かのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Anim ! st ! t ! p - } ; - te = table { - Wa => \\st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Anim ! st ; - Ga => \\st => vp.prepositive ! st ++ "誰かのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Anim ! st - } ; - ba = table { - Wa => \\st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Anim ! st ; - Ga => \\st => vp.prepositive ! st ++ "誰かのほうが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Anim ! st - } ; - subj = table { - Wa => \\st => vp.prepositive ! st ++ "誰か" ; - Ga => \\st => vp.prepositive ! st ++ "誰かのほうが" - } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Anim ! st ; - changePolar = False - } ; - Less => { - s = \\part,st,t,p => vp.prepositive ! st ++ "誰かより" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - te = \\part,st => vp.prepositive ! st ++ "誰かより" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Anim ! st ; - ba = \\part,st => vp.prepositive ! st ++ "誰かより" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Anim ! st ; - subj = \\part,st => vp.prepositive ! st ++ "誰かより" ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Anim ! st ; - changePolar = False - } ; - NoCompar => { - s = \\part,st,t,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - te = \\part,st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Anim ! st ; - ba = \\part,st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Anim ! st ; - subj = \\part,st => vp.prepositive ! st ++ "誰か" ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Anim ! st ; - changePolar = False - } + GenericCl vp = { + s = \\part,st,t,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ -- "dareka" + vp.prep ++ vp.verb ! SomeoneElse ! Anim ! st ! t ! p ; + te = \\part,st,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Anim ! st ! p ; + ba = \\part,st,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Anim ! st ! p ; + subj = \\part,st => vp.prepositive ! st ++ "誰か" ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Anim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Anim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Anim ! st ! p ; + changePolar = False } ; CleftNP np rs = { s = \\part,st,t,p => np.prepositive ! st ++ rs.subj ! Ga ! st ++ rs.pred ! np.anim ! Plain ++ "のは" ++ np.s ! st ++ mkCopula.s ! st ! t ! p ; - te = \\part,st => np.prepositive ! st ++ rs.subj ! Ga ! st ++ - rs.pred ! np.anim ! Plain ++ "のは" ++ np.s ! st ++ "だって" ; - ba = \\part,st => np.prepositive ! st ++ rs.subj ! Ga ! st ++ - rs.pred ! np.anim ! Plain ++ "のは" ++ np.s ! st ++ "であれば" ; + te = \\part,st,p => np.prepositive ! st ++ rs.subj ! Ga ! st ++ rs.pred ! np.anim ! Plain ++ + "のは" ++ np.s ! st ++ mkCopula.te ! p ; + ba = \\part,st,p => np.prepositive ! st ++ rs.subj ! Ga ! st ++ rs.pred ! np.anim ! Plain ++ + "のは" ++ np.s ! st ++ mkCopula.ba ! p ; subj = \\part,st => np.prepositive ! st ++ rs.subj ! Ga ! st ++ rs.pred ! np.anim ! Plain ++ "のは" ; pred = \\st,t,p => np.s ! st ++ mkCopula.s ! st ! t ! p ; - pred_te = \\st => np.s ! st ++ "だって" ; - pred_ba = \\st => np.s ! st ++ "であれば" ; + pred_te = \\st,p => np.s ! st ++ mkCopula.te ! p ; + pred_ba = \\st,p => np.s ! st ++ mkCopula.ba ! p ; changePolar = np.changePolar } ; CleftAdv adv s = { s = \\part,st,t,p => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ mkCopula.s ! st ! t ! p ; - te = \\part,st => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ - "だって" ; - ba = \\part,st => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ - "であれば" ; + te = \\part,st,p => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ + mkCopula.te ! p ; + ba = \\part,st,p => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ + mkCopula.ba ! p ; subj = \\part,st => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ; pred = \\st,t,p => adv.s ! st ++ mkCopula.s ! st ! t ! p ; - pred_te = \\st => adv.s ! st ++ "だって" ; - pred_ba = \\st => adv.s ! st ++ "であれば" ; + pred_te = \\st,p => adv.s ! st ++ mkCopula.te ! p ; + pred_ba = \\st,p => adv.s ! st ++ mkCopula.ba ! p ; changePolar = False } ; ExistNP np = case np.needPart of { True => { - s = table { + s = table { Wa => \\st,t,p => np.prepositive ! st ++ np.s ! st ++ "は" ++ - mkExistV.verb ! np.anim ! st ! t ! p ; + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; Ga => \\st,t,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ - mkExistV.verb ! np.anim ! st ! t ! p + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p } ; te = table { - Wa => \\st => np.prepositive ! st ++ np.s ! st ++ "は" ++ mkExistV.te ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ mkExistV.te ! np.anim ! st + Wa => \\st,p => np.prepositive ! st ++ np.s ! st ++ "は" ++ + mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.te ! SomeoneElse ! np.anim ! st ! p } ; ba = table { - Wa => \\st => np.prepositive ! st ++ np.s ! st ++ "は" ++ mkExistV.ba ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ mkExistV.ba ! np.anim ! st + Wa => \\st,p => np.prepositive ! st ++ np.s ! st ++ "は" ++ + mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.ba ! SomeoneElse ! np.anim ! st ! p } ; subj = table { Wa => \\st => np.prepositive ! st ++ np.s ! st ++ "は" ; Ga => \\st => np.prepositive ! st ++ np.s ! st ++ "が" } ; - pred = \\st,t,p => mkExistV.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => mkExistV.te ! np.anim ! st ; - pred_ba = \\st => mkExistV.ba ! np.anim ! st ; + pred = \\st,t,p => mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + pred_te = \\st,p => mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + pred_ba = \\st,p => mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; changePolar = np.changePolar } ; False => { s = \\part,st,t,p => np.prepositive ! st ++ np.s ! st ++ - mkExistV.verb ! np.anim ! st ! t ! p ; - te = \\part,st => np.prepositive ! st ++ np.s ! st ++ mkExistV.te ! np.anim ! st ; - ba = \\part,st => np.prepositive ! st ++ np.s ! st ++ mkExistV.ba ! np.anim ! st ; + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + te = \\part,st,p => np.prepositive ! st ++ np.s ! st ++ + mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + ba = \\part,st,p => np.prepositive ! st ++ np.s ! st ++ + mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; subj = \\part,st => np.prepositive ! st ++ np.s ! st ; - pred = \\st,t,p => mkExistV.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => mkExistV.te ! np.anim ! st ; - pred_ba = \\st => mkExistV.ba ! np.anim ! st ; + pred = \\st,t,p => mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + pred_te = \\st,p => mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + pred_ba = \\st,p => mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; changePolar = np.changePolar } } ; ExistIP ip = { - s = \\part,st,t,p => ip.s ! st ++ "が" ++ mkExistV.verb ! ip.anim ! st ! t ! p ; + s = \\part,st,t,p => case ip.how8many of { + True => ip.s_subj ! st ++ mkExistV.verb ! SomeoneElse ! ip.anim ! st ! t ! p ++ "か" ; + False => ip.s_subj ! st ++ "が" ++ mkExistV.verb ! SomeoneElse ! ip.anim ! st ! t ! p + ++ "か" + } ; + s_plain_pred = \\part,st,t,p => case ip.how8many of { + True => ip.s_subj ! st ++ mkExistV.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p ++ "か" ; + False => ip.s_subj ! st ++ "が" ++ mkExistV.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p + ++ "か" + } ; changePolar = False } ; ProgrVP vp = { - verb = \\a,st,t,p => vp.te ! a ! st ++ (mkVerb "い" "い" "いる" "いった").s ! st ! t ! p ; - te = \\a,st => vp.te ! a ! st ++ "いて" ; - a_stem = \\a,st => vp.te ! a ! st ++ "い" ; - i_stem = \\a,st => vp.te ! a ! st ++ "い" ; - ba = \\a,st => vp.te ! a ! st ++ "いれば" ; + verb = \\sp,a,st,t,p => vp.te ! sp ! a ! st ! Pos ++ (mkVerb "いる" Gr2).s ! st ! t ! p ; + te = \\sp,a,st,p => vp.te ! sp ! a ! st ! Pos ++ mkExistV.te ! SomeoneElse ! Anim ! st ! p ; + a_stem = \\sp,a,st => vp.te ! sp ! a ! st ! Pos ++ "い" ; + i_stem = \\sp,a,st => vp.te ! sp ! a ! st ! Pos ++ "い" ; + ba = \\sp,a,st,p => vp.te ! sp ! a ! st ! Pos ++ mkExistV.ba ! SomeoneElse ! Anim ! st ! p ; prep = vp.prep ; obj = vp.obj ; - prepositive = vp.prepositive ; - compar = vp.compar + prepositive = vp.prepositive } ; - ImpPl1 vp = {s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ - vp.i_stem ! Anim ! st ++ "ましょう"} ; + ImpPl1 vp = {s = \\part,st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ + vp.i_stem ! SomeoneElse ! Anim ! st ++ "ましょう" ; type = NoImp} ; - ImpP3 np vp = {s = \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "に" ++ - vp.obj ! st ++ vp.prep ++ vp.a_stem ! Anim ! st ++ "せて"} ; + ImpP3 np vp = { + s = \\part => table { + Resp => np.prepositive ! Resp ++ vp.prepositive ! Resp ++ np.s ! Resp ++ "を" ++ + vp.obj ! Resp ++ vp.prep ++ vp.a_stem ! SomeoneElse ! Anim ! Resp ++ "せて" ; + Plain => np.prepositive ! Plain ++ vp.prepositive ! Plain ++ np.s ! Plain ++ "を" ++ + vp.obj ! Plain ++ vp.prep ++ vp.a_stem ! SomeoneElse ! Anim ! Plain ++ "せなさい" + } ; + type = Imper + } ; } diff --git a/lib/src/japanese/LangJap.gf b/lib/src/japanese/LangJap.gf index 185b05ddc..f52fb9e3e 100644 --- a/lib/src/japanese/LangJap.gf +++ b/lib/src/japanese/LangJap.gf @@ -1,6 +1,6 @@ --# -path=.:../abstract:../common:../prelude - concrete LangJap of Lang = +concrete LangJap of Lang = GrammarJap, LexiconJap ; diff --git a/lib/src/japanese/LexiconJap.gf b/lib/src/japanese/LexiconJap.gf index d85280f2e..65d1f2962 100644 --- a/lib/src/japanese/LexiconJap.gf +++ b/lib/src/japanese/LexiconJap.gf @@ -4,51 +4,51 @@ flags coding = utf8 ; lin - add_V3 = mkV3 "加え" "加え" "加える" "加えた" "に" "を" False ; -- "kuwaeru" "ni" "o" + add_V3 = mkV3 "加える" "に" "を" Gr2 ; -- "kuwaeru" airplane_N = mkN "飛行機" Inanim "機" False ; -- "hikouki" "ki" alas_Interj = ss "残念です" ; -- "zannendesu" already_Adv = mkAdv "すでに" ; -- "sudeni" animal_N = mkN "動物" Anim "疋" True ; -- "doubutsu" "hiki" - answer_V2S = mkV "答え" "答え" "答える" "答えた" ; -- "kotaeru" + answer_V2S = mkV "答える" Gr2 ; -- "kotaeru" apartment_N = mkN "アパート" Inanim ; -- "apaato" apple_N = mkN "リンゴ" Inanim "個" False ; -- "ringo" "ko" art_N = mkN "芸術" Inanim ; -- "geijutsu" ashes_N = mkN "灰" Inanim ; -- "hai" - ask_V2Q = mkV "聞か" "聞き" "聞く" "聞いた" ; -- "kiku" - baby_N = mkN "赤ちゃん" Anim "人" False ; -- "akachan" "nin" + ask_V2Q = mkV "聞く" Gr1 ; -- "kiku" + baby_N = mkN "赤ちゃん" Anim "人" False "赤ちゃんたち" ; -- "akachan" back_N = mkN "背" Inanim ; -- "se" bad_A = mkA "悪い" ; -- "warui" bank_N = mkN "銀行" Inanim ; -- "ginkou" - bark_N = mkN "木皮" Inanim ; -- "kohada" Inanim ; + bark_N = mkN "木皮" Inanim ; -- "kohada" beautiful_A = mkA "美しい" ; -- "utsukushii" - become_VA = mkV "なら" "なり" "なる" "なった" ; -- "naru" + become_VA = mkV "なる" Gr1 ; -- "naru" beer_N = mkN "ビール" Inanim "杯" False ; -- "biiru" "hai" - beg_V2V = mkV "請い願わ" "請い願い" "請い願う" "請い願った" ; -- "koinegau" + beg_V2V = mkV "請い願う" Gr1 ; -- "koinegau" belly_N = mkN "お腹" "腹" Inanim ; -- "onaka" "hara" big_A = mkA "大きな" ; -- "ookina" bike_N = mkN "自転車" Inanim "台" False ; -- "jitensha" "dai" bird_N = mkN "鳥" Anim "羽" False ; -- "tori" "wa" - bite_V2 = mkV2 "噛ま" "噛み" "噛む" "噛んだ" "を" ; -- "kamu" "o" + bite_V2 = mkV2 "噛む" "を" Gr1 ; -- "kamu" black_A = mkA "黒い" ; -- "kuroi" ; blood_N = mkN "血液" Inanim ; -- "ketsueki" - blow_V = mkV "吹か" "吹き" "吹く" "吹いた" ; -- "fuku" + blow_V = mkV "吹く" Gr1 ; -- "fuku" blue_A = mkA "青い" ; -- "aoi" ; boat_N = mkN "ボート" Inanim "艘" False ; -- "bouto" "sou" bone_N = mkN "骨" Inanim ; -- "hone" book_N = mkN "本" Inanim "冊" False ; -- "hon" "satsu" boot_N = mkN "ブート" Inanim ; -- "buuto" - boss_N = mkN "社長" Anim "人" False ; -- "shachou" "nin" - boy_N = mkN "男の子" Anim "人" False ; -- "otokonoko" "nin" + boss_N = mkN "社長" Anim "人" False "社長たち" ; -- "shachou" + boy_N = mkN "男の子" Anim "人" False "男の子たち" ; -- "otokonoko" bread_N = mkN "パン" Inanim "斤" False ; -- "pan" "kin" - break_V2 = mkV2 "破ら" "破り" "破る" "破った" "を" ; -- "yaburu" "o" + break_V2 = mkV2 "破る" "を" Gr1 ; -- "yaburu" breast_N = mkN "胸" Inanim ; -- "mune" - breathe_V = mkV "息し" "息し" "息する" "息した" ; -- "ikisuru" + breathe_V = mkV "息する" Suru ; -- "ikisuru" broad_A = mkA "広い" ; -- "hiroi" - brother_N2 = mkN2 "男の兄弟" "の" Anim "人" False ; -- ("otoko" ++ "no" ++ "kyodai") "no" "nin" + brother_N2 = mkN2 "男の兄弟" Anim "人" False "男の兄弟たち" "の" ; -- "otokonokyodai" brown_A = mkA "ブラウンの" ; -- "buraunno" - burn_V = mkV "焼けら" "焼けり" "焼ける" "焼けた" ; -- "yakeru" + burn_V = mkV "焼ける" Gr2 ; -- "yakeru" butter_N = mkN "バター" Inanim ; -- "bataa" - buy_V2 = mkV2 "買わ" "買い" "買う" "買った" "を" ; -- "kau" + buy_V2 = mkV2 "買う" "を" Gr1 ; -- "kau" camera_N = mkN "カメラ" Inanim ; -- "kamera" cap_N = mkN "キャップ" Inanim ; -- "kyappu" car_N = mkN "車" Inanim "車" True ; -- "kuruma" "sha" @@ -57,140 +57,140 @@ lin ceiling_N = mkN "天井" Inanim ; -- "tenjou" chair_N = mkN "椅子" Inanim "脚" False ; -- "isu" "kyaku" cheese_N = mkN "チーズ" Inanim ; -- "chiizu" - child_N = mkN "子" Anim "人" False ; -- "ko" "nin" + child_N = mkN "子供" Anim "人" False "子供たち" ; -- "kodomo" church_N = mkN "教会" Inanim "軒" False ; -- "kyoukai" "ken" city_N = mkN "都市" Inanim ; -- "toshi" clean_A = mkA "奇麗な" ; -- "kireina" ; clever_A = mkA "賢い" ; -- "kashikoi" ; - close_V2 = mkV2 "閉め" "閉め" "閉める" "閉めた" "を" ; -- "shimeru" + close_V2 = mkV2 "閉める" "を" Gr2 ; -- "shimeru" cloud_N = mkN "雲" Inanim ; -- "kumo" coat_N = mkN "コート" Inanim ; -- "kouto" cold_A = mkA "寒い" ; -- "samui" ; - come_V = mkV "来" "来" "来る" "来た" ; -- "ko" "ki" "kuru" "kita" + come_V = mkV "来る" Kuru ; -- "ko" "ki" "kuru" "kita" computer_N = mkN "コンピュータ" Inanim ; -- "konpyuuta" correct_A = mkA "正しい" ; -- "tadashii" ; country_N = mkN "国" Inanim "ヶ国" True ; -- "kuni" "kakoku" - count_V2 = mkV2 "数え" "数え" "数える" "数えた" "を" ; -- "kazoeru" - cousin_N = mkN "いとこ" Anim "人" False ; -- "itoko" "nin" + count_V2 = mkV2 "数える" "を" Gr2 ; -- "kazoeru" + cousin_N = mkN "いとこ" Anim "人" False "いとこたち" ; -- "itoko" cow_N = mkN "牛" Anim "頭" False ; -- "ushi" "tou" - cut_V2 = mkV2 "切ら" "切り" "切る" "切った" "を" ; -- "kiru" + cut_V2 = mkV2 "切る" "を" Gr1 ; -- "kiru" day_N = mkN "日" Inanim "日" True ; -- "hi" "ka"; - die_V = mkV "死な" "死に" "死ぬ" "死んだ" ; -- "shinu" - dig_V = mkV "掘ら" "掘り" "掘る" "掘った" ; -- "horu" + die_V = mkV "死ぬ" Gr1 ; -- "shinu" + dig_V = mkV "掘る" Gr1 ; -- "horu" dirty_A = mkA "汚い" ; -- "kitanai" ; distance_N3 = mkN3 "距離" "から" "まで" Inanim ; -- "kyori" "kara" "made" - doctor_N = mkN "医者" Anim "人" False ; -- "isha" "nin" + doctor_N = mkN "医者" Anim "人" False "医者たち" ; -- "isha" dog_N = mkN "犬" Anim "匹" False ; -- "inu" "hiki" door_N = mkN "ドア" Inanim ; -- "doa" - do_V2 = mkV2 "し" "し" "する" "した" "を" ; -- "suru" - drink_V2 = mkV2 "飲ま" "飲み" "飲む" "飲んだ" "を" ; -- "nomu" + do_V2 = mkV2 "する" "を" Suru ; -- "suru" + drink_V2 = mkV2 "飲む" "を" Gr1 ; -- "nomu" dry_A = mkA "乾性の" ; -- "kanseino" ; dull_A = mkA "詰まらない" ; -- "tsumaranai" ; dust_N = mkN "塵" Inanim ; -- "chiri" ear_N = mkN "耳" Inanim ; -- "mimi" earth_N = mkN "地" Inanim ; -- "chi" easy_A2V = mkA2 "簡単な" "に" ; -- "kantanna" "ni" - eat_V2 = mkV2 "食べ" "食べ" "食べる" "食べた" "を" ; -- "taberu" + eat_V2 = mkV2 "食べる" "を" Gr2 ; -- "taberu" egg_N = mkN "卵" Inanim ; -- "tamago" empty_A = mkA "虚しい" ; -- "munashii" ; - enemy_N = mkN "敵" Anim "人" False ; -- "teki" "nin" + enemy_N = mkN "敵" Anim "人" False "敵たち" ; -- "teki" eye_N = mkN "目" Inanim ; -- "me" factory_N = mkN "工場" Inanim ; -- "koujou" - fall_V = mkV "落ち" "落ち" "落ちる" "落ちた" ; -- "ochiru" + fall_V = mkV "落ちる" Gr2 ; -- "ochiru" far_Adv = mkAdv "遠くに" ; -- "tookuni" - father_N2 = mkN2 "お父さん" "の" Anim "人" False ; -- "otousan" "no" Anim "nin" False ; + father_N2 = mkN2 "お父さん" Anim "人" False "お父さんたち" "の" ; -- "otousan" fat_N = mkN "脂" Inanim ; -- "abura" - fear_VS = mkV2 "恐れ" "恐れ" "恐れる" "恐れた" "ことを" ; -- "osoreru" ("koto" ++ "o") ; - fear_V2 = mkV2 "恐れ" "恐れ" "恐れる" "恐れた" "を" ; -- "osoreru" + fear_VS = mkV2 "恐れる" "ことを" Gr2 ; -- "osoreru" + fear_V2 = mkV2 "恐れる" "を" Gr2 ; -- "osoreru" feather_N = mkN "羽" Inanim ; -- "hane" - fight_V2 = mkV2 "戦わ" "戦い" "戦う" "戦った" "と" ; -- "tatakau" - find_V2 = mkV2 "拾わ" "拾い" "拾う" "拾った" "を" ; -- "hirou" + fight_V2 = mkV2 "戦う" "と" Gr1 ; -- "tatakau" + find_V2 = mkV2 "拾う" "を" Gr1 ; -- "hirou" fingernail_N = mkN "爪" Inanim ; -- "tsume" fire_N = mkN "火" Inanim ; -- "hi" fish_N = mkN "魚" Anim "匹" False ; -- "sakana" "hiki" - float_V = mkV "浮か" "浮き" "浮く" "浮いた" ; -- "uku" + float_V = mkV "浮く" Gr1 ; -- "uku" floor_N = mkN "床" Inanim ; -- "yuka" flower_N = mkN "花" Inanim "輪" False ; -- "sakana" "rin" - flow_V = mkV "流れ" "流れ" "流れる" "流れた" ; -- "nagareru" - fly_V = mkV "飛ば" "飛び" "飛ぶ" "飛んだ" ; -- "tobu" + flow_V = mkV "流れる" Gr2 ; -- "nagareru" + fly_V = mkV "飛ぶ" Gr1 ; -- "tobu" fog_N = mkN "霧" Inanim ; -- "kiri" foot_N = mkN "足" Inanim ; -- "ashi" forest_N = mkN "森" Inanim ; -- "mori" - forget_V2 = mkV2 "忘れ" "忘れ" "忘れる" "忘れた" "を" ; -- "wasureru" - freeze_V = mkV "凍らさ" "凍らし" "凍らす" "凍らした" ; -- "kourasu" + forget_V2 = mkV2 "忘れる" "を" Gr2 ; -- "wasureru" + freeze_V = mkV "凍らす" Gr1 ; -- "kourasu" fridge_N = mkN "冷蔵庫" Inanim ; -- "reizouko" - friend_N = mkN "友だち" Anim "人" False ; -- "tomodachi" "nin" + friend_N = mkN "友だち" Anim "人" False ; -- "tomodachi" fruit_N = mkN "果物" Inanim "個" False ; -- "kudamono" "ko" full_A = mkA "一杯の" ; -- "ippaino" ; fun_AV = mkA "可笑しい" ; -- "okashii" ; garden_N = mkN "庭" Inanim ; -- "niwa" - girl_N = mkN "女の子" Anim "人" False ; -- "onnanoko" "nin" - give_V3 = mkV3 "上げ" "上げ" "上げる" "上げた" "に" "を" True ; -- "ageru" "ni" "o" + girl_N = mkN "女の子" Anim "人" False "女の子たち" ; -- "onnanoko" + give_V3 = mkGive ; glove_N = mkN "手袋" Inanim ; -- "tebukuro" gold_N = mkN "金" Inanim ; -- "kin" good_A = mkA "良い" ; -- "ii" ; - go_V = mkV "行か" "行き" "行く" "行った" ; -- "iku" + go_V = mkV "行く" Gr1 ; -- "iku" grammar_N = mkN "文法" Inanim ; -- "bumpou" grass_N = mkN "草" Inanim ; -- "kusa" - green_A = mkA "緑の" ; -- "midorino" ; + green_A = mkA "緑色の" ; -- "midoriirono" ; guts_N = mkN "腸" Inanim ; -- "harawata" hair_N = mkN "髪" Inanim ; -- "kami" hand_N = mkN "手" Inanim ; -- "te" harbour_N = mkN "港" Inanim ; -- "minato" - hate_V2 = mkV2 "憎ま" "憎み" "憎む" "憎んだ" "を" ; -- "nikumu" + hate_V2 = mkV2 "憎む" "を" Gr1 ; -- "nikumu" hat_N = mkN "帽子" Inanim ; -- "boushi" head_N = mkN "頭" Inanim ; -- "atama" heart_N = mkN "心" Inanim ; -- "kokoro" - hear_V2 = mkV2 "聞か" "聞き" "聞く" "聞いた" "を" ; -- "kiku" + hear_V2 = mkV2 "聞く" "を" Gr1 ; -- "kiku" heavy_A = mkA "重い" ; -- "omoi" ; hill_N = mkN "丘" Inanim ; -- "oka" - hit_V2 = mkV2 "打た" "打ち" "打つ" "打った" "を" ; -- "utsu" - hold_V2 = mkV2 "持た" "持ち" "持つ" "持った" "を" ; -- "motsu" - hope_VS = mkV2 "期待し" "期待し" "期待する" "期待した" "ことを" ; -- "kitaisuru" ("koto" ++ "o") ; + hit_V2 = mkV2 "打つ" "を" Gr1 ; -- "utsu" + hold_V2 = mkV2 "持つ" "を" Gr1 ; -- "motsu" + hope_VS = mkV2 "期待する" "ことを" Suru ; -- "kitaisuru" horn_N = mkN "角" Inanim "本" False ; -- "tsuno" "hon" horse_N = mkN "馬" Anim "頭" False ; -- "uma" "tou" hot_A = mkA "熱い" ; -- "atsui" house_N = mkN "家" Inanim "軒" True ; -- "ie" "ken" - hunt_V2 = mkV2 "狩ら" "狩り" "狩る" "狩った" "を" ; -- "karu" - husband_N = mkN "夫" Anim "人" False ; -- "otto" "nin" + hunt_V2 = mkV2 "狩る" "を" Gr1 ; -- "karu" + husband_N = mkN "夫" Anim "人" False "夫たち" ; -- "otto" ice_N = mkN "氷" Inanim ; -- "kouri" important_A = mkA "重要な" ; -- "juuyouna" ; industry_N = mkN "産業" Inanim ; -- "sagyou" iron_N = mkN "鉄" Inanim ; -- "tetsu" - john_PN = mkPN "ジョン" "ジョンさん" ; -- "Jon" "Jon-san" - jump_V = mkV "躍ら" "躍り" "躍る" "躍った" ; -- "odoru" - kill_V2 = mkV2 "殺さ" "殺し" "殺す" "殺した" "を" ; -- "korosu" - king_N = mkN "王" Anim "人" False ; -- "ou" "nin" + john_PN = mkPN "ジョン" "ジョンさん" ; + jump_V = mkV "躍る" Gr1 ; -- "odoru" + kill_V2 = mkV2 "殺す" "を" Gr1 ; -- "korosu" + king_N = mkN "王" Anim "人" False "王たち" ; -- "ou" knee_N = mkN "心" Inanim ; -- "kokoro" - know_V2 = mkV2 "知ら" "知り" "知る" "知った" "を" ; -- "shiru" "o" - know_VQ = mkV2 "知ら" "知り" "知る" "知った" "を" ; -- "shiru" "o" - know_VS = mkV2 "知ら" "知り" "知る" "知った" "ことを" ; -- "shiru" ("koto" ++ "o") ; + know_V2 = mkV2 "知る" "を" Gr1 ; -- "shiru" + know_VQ = mkV2 "知る" "を" Gr1 ; -- "shiru" + know_VS = mkV2 "知る" "ことを" Gr1 ; -- "shiru" lake_N = mkN "湖" Inanim ; -- "mizuumi" lamp_N = mkN "電灯" Inanim ; -- "dentou" language_N = mkN "言語" Inanim "語" True ; -- "gengo" "go" - laugh_V = mkV "笑わ" "笑い" "笑う" "笑った" ; -- "warau" + laugh_V = mkV "笑う" Gr1 ; -- "warau" leaf_N = mkN "葉" Inanim "葉" True ; -- "ha" "ha" - learn_V2 = mkV2 "学ば" "学び" "学ぶ" "学んだ" "を" ; -- "manabu" "o" + learn_V2 = mkV2 "学ぶ" "を" Gr1 ; -- "manabu" leather_N = mkN "皮革" Inanim ; -- "hikaku" - leave_V2 = mkV2 "残さ" "残し" "残す" "残した" "を" ; -- "nokosu" "o" + leave_V2 = mkV2 "残す" "を" Gr1 ; -- "nokosu" left_Ord = mkA "左の" ; -- "hidarino" ; leg_N = mkN "足" Inanim ; -- "ashi" - lie_V = mkV "横になら" "横になり" "横になる" "横になった" ; -- "yokoninaru" - like_V2 = mkV2 "好か" "好き" "好く" "好いた" "を" ; -- "suku" "o" - listen_V2 = mkV2 "聞か" "聞き" "聞く" "聞いた" "を" ; -- "kiku" + lie_V = mkV "横になる" Gr1 ; -- "yokoninaru" + like_V2 = mkV2 "好く" "を" Gr1 ; -- "suku" + listen_V2 = mkV2 "聞く" "を" Gr1 ; -- "kiku" liver_N = mkN "肝臓" Inanim ; -- "kanzou" - live_V = mkV "生き" "生き" "生きる" "生きた" ; -- "ikiru" + live_V = mkV "生きる" Gr2 ; -- "ikiru" long_A = mkA "長い" ; -- "nagai" - lose_V2 = mkV2 "失わ" "失い" "失う" "失った" "を" ; -- "ushinau" "o" + lose_V2 = mkV2 "失う" "を" Gr1 ; -- "ushinau" louse_N = mkN "虱" Anim "匹" False ; -- "shirami" "hiki" love_N = mkN "愛" Inanim ; -- "ai" - love_V2 = mkV2 "愛し" "愛し" "愛する" "愛した" "を" ; -- "aisuru" "o" ; - man_N = mkN "男" Anim "人" False ; -- "otoko" "nin" - married_A2 = mkA2 "結婚している" "既婚の" "と" ; -- "kekkonshiteiru" "kikonno" "to" ; + love_V2 = mkV2 "愛する" "を" Suru ; -- "aisuru" + man_N = mkN "男" Anim "人" False "男たち" ; -- "otoko" + married_A2 = mkA2 "結婚している" "既婚の" "と" ; -- "kekkonshiteiru" "kikonno" meat_N = mkN "肉" Inanim ; -- "niku" milk_N = mkN "ミルク" Inanim ; -- "miruku" moon_N = mkN "月" Inanim ; -- "tsuki" - mother_N2 = mkN2 "お母さん" "の" Anim "人" False ; -- "okaasan" "no" "nin" + mother_N2 = mkN2 "お母さん" Anim "人" False "お母さんたち" "の" ; -- "okaasan" mountain_N = mkN "山" Inanim "座" False ; -- "yama" "za" mouth_N = mkN "口" Inanim ; -- "kuchi" music_N = mkN "音楽" Inanim ; -- "ongaku" @@ -206,29 +206,29 @@ lin number_N = mkN "数" Inanim "数" True ; -- "kazu" "suu" oil_N = mkN "油" Inanim ; -- "abura" old_A = mkA "古い" ; -- "furui" - open_V2 = mkV2 "開か" "開き" "開く" "開いた" "を" ; -- "hiraku" "o" - paint_V2A = mkV "塗ら" "塗り" "塗る" "塗った" ; -- "nuru" + open_V2 = mkV2 "開く" "を" Gr1 ; -- "hiraku" + paint_V2A = mkV "塗る" Gr1 ; -- "nuru" paper_N = mkN "紙" Inanim "葉" False ; -- "kami" "you" - paris_PN = mkPN "パリ" ; -- "pari" + paris_PN = mkPN "パリ" ; peace_N = mkN "平和" Inanim ; -- "heiwa" pen_N = mkN "ペン" Inanim "本" False ; -- "pen" "hon" - person_N = mkN "人" Anim "人" True ; -- "hito" "nin" + person_N = mkN "人" Anim "人" True "人たち" ; -- "hito" planet_N = mkN "惑星" Inanim ; -- "wakusei" plastic_N = mkN "プラスチック" Inanim ; -- "purasutikku" - play_V2 = mkV2 "遊ば" "遊び" "遊ぶ" "遊んだ" "を" ; -- "asobu" "o" - play_V = mkV "遊ば" "遊び" "遊ぶ" "遊んだ" ; -- "asobu" - policeman_N = mkN "警官" Anim "人" False ; -- "keikan" "nin" - priest_N = mkN "神父" Anim "人" False ; -- "shimpu" "nin" + play_V2 = mkV2 "遊ぶ" "を" Gr1 ; -- "asobu" + play_V = mkV "遊ぶ" Gr1 ; -- "asobu" + policeman_N = mkN "警官" Anim "人" False "警官たち" ; -- "keikan" "nin" + priest_N = mkN "神父" Anim "人" False "神父たち" ; -- "shimpu" "nin" probable_AS = mkA "可能な" ; -- "kanouna" - pull_V2 = mkV2 "引か" "引き" "引く" "引いた" "を" ; -- "hiku" "o" - push_V2 = mkV2 "押さ" "押し" "押す" "押した" "を" ; -- "osu" "o" - put_V2 = mkV2 "置か" "置き" "置く" "置いた" "を" ; -- "oku" "o" - queen_N = mkN "女王" Anim "人" False ; -- "joou" "nin" + pull_V2 = mkV2 "引く" "を" Gr1 ; -- "hiku" + push_V2 = mkV2 "押す" "を" Gr1 ; -- "osu" + put_V2 = mkV2 "置く" "を" Gr1 ; -- "oku" + queen_N = mkN "女王" Anim "人" False "女王たち" ; -- "joou" question_N = mkN "質問" Inanim "題" True ; -- "shitsumon" "dai" radio_N = mkN "ラジオ" Inanim ; -- "rajio" rain_N = mkN "雨" Inanim ; -- "ame" - rain_V0 = mkV "降ら" "降り" "降る" "降った" ; -- "furu" - needs "rain" as a subject! - read_V2 = mkV2 "読ま" "読み" "読む" "読んだ" "を" ; -- "yomu" "o" + rain_V0 = mkRain ; + read_V2 = mkV2 "読む" "を" Gr1 ; -- "yomu" ready_A = mkA "準備ができている" "準備ができて" ; -- "jumbigadekiteiru" reason_N = mkN "理由" Inanim ; -- "riyuu" red_A = mkA "赤い" ; -- "akai" @@ -244,22 +244,22 @@ lin rotten_A = mkA "腐っている" "腐った" ; -- "kusatteiru" round_A = mkA "丸い" ; -- "marui" rubber_N = mkN "ゴム" Inanim ; -- "gomu" - material - rub_V2 = mkV2 "摩ら" "摩り" "摩る" "摩った" "を" ; -- "suru" "o" + rub_V2 = mkV2 "摩る" "を" Gr1 ; -- "suru" rule_N = mkN "定め" Inanim "則" True ; -- "sadame" "soku" - run_V = mkV "走ら" "走り" "走る" "走った" ; -- "hashiru" + run_V = mkV "走る" Gr1 ; -- "hashiru" salt_N = mkN "塩" Inanim ; -- "shio" sand_N = mkN "砂" Inanim ; -- "suna" - say_VS = mkV2 "言わ" "言い" "言う" "言った" "と" ; -- "iu" "to" + say_VS = mkV2 "言う" "と" Gr1 ; -- "iu" school_N = mkN "学校" Inanim ; -- "gakkou" science_N = mkN "科学" Inanim ; -- "kagaku" - scratch_V2 = mkV2 "掻か" "掻き" "掻く" "掻いた" "を" ; -- "kaku" "o" + scratch_V2 = mkV2 "掻く" "を" Gr1 ; -- "kaku" sea_N = mkN "海" Inanim ; -- "umi" seed_N = mkN "種" Inanim ; -- "tane" - seek_V2 = mkV2 "探さ" "探し" "探す" "探した" "を" ; -- "sagasu" "o" - see_V2 = mkV2 "見" "見" "見る" "見た" "を" ; -- "miru" "o" - sell_V3 = mkV3 "売ら" "売り" "売る" "売った" "に" "を" False ; -- "uru" "ni" "o" - send_V3 = mkV3 "送ら" "送り" "送る" "送った" "に" "を" False ; -- "okuru" "ni" "o" - sew_V = mkV "縫わ" "縫い" "縫う" "縫った" ; -- "nuu" + seek_V2 = mkV2 "探す" "を" Gr1 ; -- "sagasu" + see_V2 = mkV2 "見る" "を" Gr2 ; -- "miru" + sell_V3 = mkV3 "売る" "に" "を" Gr1 ; -- "uru" + send_V3 = mkV3 "送る" "に" "を" Gr1 ; -- "okuru" + sew_V = mkV "縫う" Gr1 ; -- "nuu" sharp_A = mkA "鋭い" ; -- "surudoi" sheep_N = mkN "羊" Anim "頭" False ; -- "hitsuji" "tou" ship_N = mkN "船" Inanim "杯" False ; -- "fune" "hai" @@ -268,87 +268,87 @@ lin shop_N = mkN "店" Inanim "店" True ; -- "mise" "ten" short_A = mkA "短い" ; -- "mijikai" silver_N = mkN "銀" Inanim ; -- "gin" - sing_V = mkV "歌わ" "歌い" "歌う" "歌った" ; -- "utau" - sister_N = mkN "シスター" Anim "人" False ; -- "shisutaa" "nin" - sit_V = mkV "座ら" "座り" "座る" "座った" ; -- "suwaru" + sing_V = mkV "歌う" Gr1 ; -- "utau" + sister_N = mkN "シスター" Anim "人" False "シスターたち" ; -- "shisutaa" + sit_V = mkV "座る" Gr1 ; -- "suwaru" skin_N = mkN "皮膚" Inanim ; -- "hifu" sky_N = mkN "空" Inanim ; -- "sora" - sleep_V = mkV "寝" "寝" "寝る" "寝た" ; -- "neru" + sleep_V = mkV "寝る" Gr2 ; -- "neru" small_A = mkA "小さい" ; -- "chisai" - smell_V = mkV "匂わ" "匂い" "匂う" "匂った" ; -- "niou" + smell_V = mkV "匂う" Gr1 ; -- "niou" smoke_N = mkN "煙" Inanim ; -- "kemuri" smooth_A = mkA "平滑な" ; -- "heikatsuna" snake_N = mkN "蛇" Anim "匹" False ; -- "hebi" "hiki" snow_N = mkN "雪" Inanim ; -- "yuki" sock_N = mkN "靴下" Inanim ; -- "kutsushita" song_N = mkN "歌" Inanim "曲" False ; -- "uta" "kyoku" - speak_V2 = mkV2 "話さ" "話し" "話す" "話した" "について" ; -- "hanasu" "nitsuite" (=about) - spit_V = mkV "唾し" "唾し" "唾する" "唾した" ; -- "tsubakisuru" - split_V2 = mkV2 "分かた" "分かち" "分かつ" "分かった" "を" ; -- "wakatsu" "o" - squeeze_V2 = mkV2 "絞ら" "絞り" "絞る" "絞った" "を" ; -- "shiboru" "o" - stab_V2 = mkV2 "刺さ" "刺し" "刺す" "刺した" "を" ; -- "sasu" "o" - stand_V = mkV "立た" "立ち" "立つ" "立った" ; -- "tatsu" + speak_V2 = mkV2 "話す" "を" Gr1 ; -- "hanasu" + spit_V = mkV "唾する" Suru ; -- "tsubakisuru" + split_V2 = mkV2 "分かつ" "を" Gr1 ; -- "wakatsu" + squeeze_V2 = mkV2 "絞る" "を" Gr1 ; -- "shiboru" + stab_V2 = mkV2 "刺す" "を" Gr1 ; -- "sasu" + stand_V = mkV "立つ" Gr1 ; -- "tatsu" star_N = mkN "星" Inanim ; -- "hoshi" steel_N = mkN "鋼" Inanim ; -- "hagane" stick_N = mkN "棒" Inanim "本" False ; -- "bou" "hon" stone_N = mkN "石" Inanim ; -- "ishi" - stop_V = mkV "止まら" "止まり" "止まる" "止まった" ; -- "tomaru" + stop_V = mkV "止まる" Gr1 ; -- "tomaru" stove_N = mkN "ストーブ" Inanim ; -- "sutobu" straight_A = mkA "直な" ; -- "chokuna" - student_N = mkN "学生" Anim "人" False ; -- "gakusei" "nin" + student_N = mkN "学生" Anim "人" False "学生たち"; -- "gakusei" stupid_A = mkA "愚かな" ; -- "orokana" - suck_V2 = mkV2 "吸わ" "吸い" "吸う" "吸った" "を" ; -- "suu" "o" + suck_V2 = mkV2 "吸う" "を" Gr1 ; -- "suu" sun_N = mkN "太陽" Inanim ; -- "taiyou" - swell_V = mkV "膨らま" "膨らみ" "膨らむ" "膨らんだ" ; -- "fukuramu" - swim_V = mkV "泳が" "泳ぎ" "泳ぐ" "泳いだ" ; -- "oyogu" - switch8off_V2 = mkV2 "スイッチを切ら" "スイッチを切り" "スイッチを切る" "スイッチを切った" "の" ; -- "suitchiokiru" "o" - switch8on_V2 = mkV2 "スイッチを入れ" "スイッチを入れ" "スイッチを入れる" "スイッチを入れた" "の" ; -- "suitchioireru" "o" + swell_V = mkV "膨らむ" Gr1 ; -- "fukuramu" + swim_V = mkV "泳ぐ" Gr1 ; -- "oyogu" + switch8off_V2 = mkV2 "スイッチを切る" "の" Gr1 ; -- "suitchiokiru" + switch8on_V2 = mkV2 "スイッチを入れる" "の" Gr2 ; -- "suitchioireru" table_N = mkN "テーブル" Inanim "脚" False ; -- "teburu" "kyaku" tail_N = mkN "尾" Inanim ; -- "o" - talk_V3 = mkV3 "話さ" "話し" "話す" "話した" "と" "について" False ; -- "hanasu" "to" "nitsuite" - teacher_N = mkN "先生" Anim "人" False ; -- "sensei" "nin" - teach_V2 = mkV2 "教え" "教え" "教える" "教えた" "を" ; -- "oshieru" "o" + talk_V3 = mkV3 "話す" "と" "について" Gr1 ; -- "hanasu" + teacher_N = mkN "先生" Anim "人" False "先生たち" ; -- "sensei" + teach_V2 = mkV2 "教える" "を" Gr2 ; -- "oshieru" television_N = mkN "テレビ" Inanim ; -- "terebi" thick_A = mkA "厚い" ; -- "atsui" thin_A = mkA "薄い" ; -- "usui" - think_V = mkV "考え" "考え" "考える" "考えた" ; -- "kangaeru" - throw_V2 = mkV2 "投げ" "投げ" "投げる" "投げた" "を" ; -- "nageru" "o" - tie_V2 = mkV2 "結ば" "結び" "結ぶ" "結んだ" "を" ; -- "musubu" "o" + think_V = mkV "考える" Gr2 ; -- "kangaeru" + throw_V2 = mkV2 "投げる" "を" Gr2 ; -- "nageru" + tie_V2 = mkV2 "結ぶ" "を" Gr1 ; -- "musubu" today_Adv = mkAdv "今日" ; -- "kyou" ; tongue_N = mkN "舌" Inanim ; -- "shita" tooth_N = mkN "歯" Inanim ; -- "ha" train_N = mkN "電車" Inanim "列車" True ; -- "densha" "ressha" - travel_V = mkV "旅行し" "旅行し" "旅行する" "旅行した" ; -- "ryokousuru" + travel_V = mkV "旅行する" Suru ; -- "ryokousuru" tree_N = mkN "木" Inanim "樹" True ; -- "ki" "ju" - turn_V = mkV "回ら" "回り" "回る" "回った" ; -- "mawaru" + turn_V = mkV "回る" Gr1 ; -- "mawaru" ugly_A = mkA "醜い" ; -- "mnikui" uncertain_A = mkA "危なっかしい" ; -- "abunakkashii" - understand_V2 = mkV2 "理解し" "理解し" "理解する" "理解した" "を" ; -- "rikaisuru" "o" + understand_V2 = mkV2 "理解する" "を" Suru ; -- "rikaisuru" university_N = mkN "大学" Inanim ; -- "daigaku" village_N = mkN "村" Inanim "村" True ; -- "mura" "son" - vomit_V = mkV "吐か" "吐き" "吐く" "吐いた" ; -- "haku" - wait_V2 = mkV2 "待た" "待ち" "待つ" "待った" "を" ; -- "matsu" "o" - walk_V = mkV "歩か" "歩き" "歩く" "歩いた" ; -- "aruku" + vomit_V = mkV "吐く" Gr1 ; -- "haku" + wait_V2 = mkV2 "待つ" "を" Gr1 ; -- "matsu" + walk_V = mkV "歩く" Gr1 ; -- "aruku" warm_A = mkA "暖かい" ; -- "atatakai" war_N = mkN "戦争" Inanim ; -- "sensou" - wash_V2 = mkV2 "洗わ" "洗い" "洗う" "洗った" "を" ; -- "arau" "o" - watch_V2 = mkV2 "見" "見" "見る" "見た" "を" ; -- "miru" "o" + wash_V2 = mkV2 "洗う" "を" Gr1 ; -- "arau" + watch_V2 = mkV2 "見る" "を" Gr2 ; -- "miru" water_N = mkN "水" Inanim ; -- "mizu" wet_A = mkA "濡れている" "濡れた" ; -- "nureteiru" white_A = mkA "白い" ; -- "shiroi" wide_A = mkA "広い" ; -- "hiroi" - wife_N = mkN "妻" Anim "人" False ; -- "tsuma" "nin" + wife_N = mkN "妻" Anim "人" False "妻たち" ; -- "tsuma" wind_N = mkN "風" Inanim ; -- "kaze" window_N = mkN "窓" Inanim ; -- "mado" wine_N = mkN "ワイン" Inanim ; -- "wain" wing_N = mkN "翼" Inanim ; -- "tsubasa" - win_V2 = mkV2 "勝た" "勝ち" "勝つ" "勝った" "を" ; -- "katsu" "o" - wipe_V2 = mkV2 "拭か" "拭き" "拭く" "拭いた" "を" ; -- "fuku" "o" - woman_N = mkN "女" Anim "人" False ; -- "onna" "nin" - wonder_VQ = mkV2 "質問し" "質問し" "質問する" "質問した" "を" ; -- "shitsumonsuru" "o" + win_V2 = mkV2 "勝つ" "を" Gr1 ; -- "katsu" + wipe_V2 = mkV2 "拭く" "を" Gr1 ; -- "fuku" + woman_N = mkN "女" Anim "人" False "女たち" ; -- "onna" + wonder_VQ = mkV2 "質問する" "を" Suru ; -- "shitsumonsuru" wood_N = mkN "木材" Inanim ; -- "mokuzai" worm_N = mkN "ワーム" Anim "匹" False ; -- "waamu" "hiki" - write_V2 = mkV2 "書か" "書き" "書く" "書いた" "を" ; -- "kaku" "o" + write_V2 = mkV2 "書く" "を" Gr1 ; -- "kaku" year_N = mkN "年" Inanim "年" True ; -- "toshi" "nen" yellow_A = mkA "黄色の" ; -- "kiirono" young_A = mkA "若い" ; -- "wakai" diff --git a/lib/src/japanese/NounJap.gf b/lib/src/japanese/NounJap.gf index afd13346a..37b92d1a9 100644 --- a/lib/src/japanese/NounJap.gf +++ b/lib/src/japanese/NounJap.gf @@ -7,10 +7,14 @@ flags coding = utf8 ; DetCN det cn = { s = \\st => case det.inclCard of { True => case cn.counterReplace of { - True => cn.object ! st ++ det.quant ! st++ det.num ++ cn.counter ++ det.postpositive ; - False => cn.object ! st ++ det.quant ! st ++ cn.s ! det.n ! st ++ - "の" ++ det.num ++ cn.counter ++ det.postpositive - } ; + True => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.counter ++ det.postpositive ; + False => case of { + => cn.object ! st ++ det.quant ! st ++ cn.s ! det.n ! st ++ + "の" ++ det.num ++ det.postpositive ; + _ => cn.object ! st ++ det.quant ! st ++ cn.s ! det.n ! st ++ "の" ++ + det.num ++ cn.counter ++ det.postpositive + } + } ; False => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.s ! det.n ! st } ; prepositive = cn.prepositive ; @@ -19,7 +23,7 @@ flags coding = utf8 ; True => True ; False => False } ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = cn.anim } ; @@ -28,7 +32,7 @@ flags coding = utf8 ; prepositive = \\st => [] ; needPart = True ; changePolar = False ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = pn.anim } ; @@ -37,7 +41,10 @@ flags coding = utf8 ; prepositive = \\st => [] ; needPart = True ; changePolar = False ; - Pron1Sg = pron.Pron1Sg ; + meaning = case pron.Pron1Sg of { + True => Me ; + False => SomeoneElse + } ; anim = pron.anim } ; @@ -49,7 +56,7 @@ flags coding = utf8 ; True => True ; False => np.changePolar } ; - Pron1Sg = np.Pron1Sg ; + meaning = np.meaning ; anim = np.anim } ; @@ -58,7 +65,7 @@ flags coding = utf8 ; prepositive = np.prepositive ; needPart = np.needPart ; changePolar = np.changePolar ; - Pron1Sg = np.Pron1Sg ; + meaning = np.meaning ; anim = np.anim } ; @@ -73,7 +80,7 @@ flags coding = utf8 ; } ; needPart = np.needPart ; changePolar = np.changePolar ; - Pron1Sg = np.Pron1Sg ; + meaning = np.meaning ; anim = np.anim } ; @@ -82,7 +89,7 @@ flags coding = utf8 ; prepositive = np.prepositive ; needPart = np.needPart ; changePolar = np.changePolar ; - Pron1Sg = np.Pron1Sg ; + meaning = np.meaning ; anim = np.anim } ; @@ -94,7 +101,7 @@ flags coding = utf8 ; True => True ; False => False } ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = Inanim -- not always, depends on the context } ; @@ -105,10 +112,14 @@ flags coding = utf8 ; n = num.n ; inclCard = num.inclCard ; sp = \\st => case num.inclCard of { - True => quant.s ! st ++ num.s ++ "つ" ++ num.postpositive ; + True => case num.tenPlus of { + False => quant.s ! st ++ num.s ++ "つ" ++ num.postpositive ; + True => quant.s ! st ++ num.s ++ num.postpositive + } ; False => quant.sp ! st ++ num.s } ; - no = quant.no + no = quant.no ; + tenPlus = num.tenPlus } ; DetQuantOrd quant num ord = { @@ -118,15 +129,19 @@ flags coding = utf8 ; n = num.n ; inclCard = num.inclCard ; sp = \\st => case num.inclCard of { - True => quant.s ! st ++ ord.attr ++ num.s ++ "つ" ++ num.postpositive ; + True => case num.tenPlus of { + False => quant.s ! st ++ ord.attr ++ num.s ++ "つ" ++ num.postpositive ; + True => quant.s ! st ++ ord.attr ++ num.s ++ num.postpositive + } ; False => quant.s ! st ++ ord.attr ++ num.s } ; - no = quant.no + no = quant.no ; + tenPlus = num.tenPlus } ; - NumSg = mkNum "" Sg False ; + NumSg = mkNum "" Sg ; - NumPl = mkNum "" Pl False ; + NumPl = mkNum "" Pl ; NumCard card = card ** {inclCard = True} ; @@ -138,39 +153,41 @@ flags coding = utf8 ; True => { s = card.s ; postpositive = adn.s ; - n = card.n + n = card.n ; + tenPlus = card.tenPlus } ; False => { s = adn.s ++ card.s ; postpositive = [] ; - n = card.n + n = card.n ; + tenPlus = card.tenPlus } } ; OrdDigits d = { pred = \\st,t,p => d.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; -- "banme" attr = d.s ++ "番目の" ; - te = d.s ++ "番目" ++ mkCopula.te ; - ba = d.s ++ "番目" ++ mkCopula.ba ; - adv = d.s ++ "番目" ; + te = \\p => d.s ++ "番目" ++ mkCopula.te ! p ; + ba = \\p => d.s ++ "番目" ++ mkCopula.ba ! p ; + adv = \\p => d.s ++ "番目" ; dropNaEnging = d.s ++ "番目の" } ; OrdNumeral num = { pred = \\st,t,p => num.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; attr = num.s ++ "番目の" ; - te = num.s ++ "番目" ++ mkCopula.te ; - ba = num.s ++ "番目" ++ mkCopula.ba ; - adv = num.s ++ "番目" ; + te = \\p => num.s ++ "番目" ++ mkCopula.te ! p ; + ba = \\p => num.s ++ "番目" ++ mkCopula.ba ! p ; + adv = \\p => num.s ++ "番目" ; dropNaEnging = num.s ++ "番目の" } ; OrdSuperl a = { pred = \\st,t,p => "一番" ++ a.pred ! st ! t ! p ; -- "ichiban" attr = "一番" ++ a.attr ; - te = "一番" ++ a.te ; - ba = "一番" ++ a.ba ; - adv = "一番" ++ a.adv ; + te = \\p => "一番" ++ a.te ! p ; + ba = \\p => "一番" ++ a.ba ! p ; + adv = \\p => "一番" ++ a.adv ! p ; dropNaEnging = "一番" ++ a.dropNaEnging } ; @@ -183,7 +200,7 @@ flags coding = utf8 ; prepositive = cn.prepositive ; needPart = True ; changePolar = False ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = cn.anim } ; @@ -199,7 +216,8 @@ flags coding = utf8 ; hasAttr = False ; anim = n.anim ; counter = n.counter ; - counterReplace = n.counterReplace + counterReplace = n.counterReplace ; + counterTsu = n.counterTsu } ; ComplN2 n2 np = { @@ -209,7 +227,8 @@ flags coding = utf8 ; hasAttr = False ; anim = n2.anim ; counter = n2.counter ; - counterReplace = n2.counterReplace + counterReplace = n2.counterReplace ; + counterTsu = n2.counterTsu } ; ComplN3 n3 np = { @@ -219,7 +238,8 @@ flags coding = utf8 ; prep = n3.prep2 ; anim = n3.anim ; counter = n3.counter ; - counterReplace = n3.counterReplace + counterReplace = n3.counterReplace ; + counterTsu = n3.counterTsu } ; UseN2 n2 = { @@ -229,7 +249,8 @@ flags coding = utf8 ; hasAttr = False ; anim = n2.anim ; counter = n2.counter ; - counterReplace = n2.counterReplace + counterReplace = n2.counterReplace ; + counterTsu = n2.counterTsu } ; Use2N3 n3 = { @@ -238,7 +259,8 @@ flags coding = utf8 ; prep = n3.prep1 ; anim = n3.anim ; counter = n3.counter ; - counterReplace = n3.counterReplace + counterReplace = n3.counterReplace; + counterTsu = n3.counterTsu } ; Use3N3 n3 = { @@ -247,20 +269,22 @@ flags coding = utf8 ; prep = n3.prep2 ; anim = n3.anim ; counter = n3.counter ; - counterReplace = n3.counterReplace + counterReplace = n3.counterReplace; + counterTsu = n3.counterTsu } ; AdjCN ap cn = { s = \\n,st => case cn.hasAttr of { False => ap.attr ! st ++ cn.s ! n ! st ; - True => ap.te ! st ++ cn.s ! n ! st + True => ap.te ! st ! Pos ++ cn.s ! n ! st } ; object = cn.object ; prepositive = cn.prepositive ; hasAttr = True ; anim = cn.anim ; counter = cn.counter ; - counterReplace = cn.counterReplace + counterReplace = cn.counterReplace ; + counterTsu = cn.counterTsu } ; RelCN cn rs = { @@ -270,7 +294,8 @@ flags coding = utf8 ; counterReplace = cn.counterReplace ; object = \\st => rs.s ! cn.anim ! st ++ cn.object ! st ; prepositive = cn.prepositive ; - hasAttr = cn.hasAttr + hasAttr = cn.hasAttr ; + counterTsu = cn.counterTsu } ; AdvCN cn adv = { @@ -286,7 +311,8 @@ flags coding = utf8 ; hasAttr = cn.hasAttr ; anim = cn.anim ; counter = cn.counter ; - counterReplace = cn.counterReplace + counterReplace = cn.counterReplace ; + counterTsu = cn.counterTsu } ; SentCN cn sc = { @@ -296,7 +322,8 @@ flags coding = utf8 ; hasAttr = cn.hasAttr ; anim = cn.anim ; counter = cn.counter ; - counterReplace = cn.counterReplace + counterReplace = cn.counterReplace; + counterTsu = cn.counterTsu } ; ApposCN cn np = { @@ -306,6 +333,7 @@ flags coding = utf8 ; hasAttr = cn.hasAttr ; anim = cn.anim ; counter = cn.counter ; - counterReplace = cn.counterReplace + counterReplace = cn.counterReplace ; + counterTsu = cn.counterTsu } ; } diff --git a/lib/src/japanese/NumeralJap.gf b/lib/src/japanese/NumeralJap.gf index 59b81fb4a..b31e154af 100644 --- a/lib/src/japanese/NumeralJap.gf +++ b/lib/src/japanese/NumeralJap.gf @@ -3,10 +3,13 @@ concrete NumeralJap of Numeral = CatJap ** open ResJap, ParadigmsJap, Prelude in flags coding = utf8 ; lincat - Digit, Sub1000000 = {s : Str ; n : Number} ; - Sub10 = {s : Str ; n : Number ; is1 : Bool} ; - Sub100, Sub1000 = {s : Str ; n : Number ; numType : NumeralType ; - digit1 : Str ; digit2 : Str} ; + Digit = {s : Str ; n : Number} ; + Sub10 = {s : Str ; n : Number ; is1 : Bool ; null : Str} ; + Sub100 = {s : Str ; n : Number ; numType : NumeralType ; digit1 : Str ; digit2 : Str ; + tenPlus : Bool ; is1 : Bool} ; + Sub1000 = {s_init : Str ; s_mid : Str ; n : Number ; numType : NumeralType ; + man : Str ; sen : Str ; tenPlus : Bool ; is1 : Bool ; null : Str} ; + Sub1000000 = {s : Str ; n : Number ; tenPlus : Bool} ; lin num dig = dig ; @@ -20,121 +23,195 @@ flags coding = utf8 ; n8 = {s = "八" ; n = Pl} ; -- "hachi" n9 = {s = "九" ; n = Pl} ; -- "kyuu" - pot01 = {s = "一" ; n = Sg ; is1 = True} ; -- "ichi" + pot01 = {s = "一" ; n = Sg ; is1 = True ; null = ""} ; - pot0 d = d ** {is1 = False} ; + pot0 d = d ** {is1 = False ; null = ""} ; pot110 = { s = "十" ; -- "juu" n = Pl ; - numType = Tens ; - digit1 = "1" ; - digit2 = "0" + numType = EndZero ; + digit1 = "一" ; + digit2 = "0" ; + tenPlus = True ; + is1 = False } ; pot111 = { s = "十一" ; n = Pl ; - numType = TensPlus ; - digit1 = "1" ; - digit2 = "1" + numType = EndNotZero ; + digit1 = "一" ; + digit2 = "一" ; + tenPlus = True ; + is1 = False } ; pot1to19 d = { s = "十" ++ d.s ; n = Pl ; - numType = TensPlus ; - digit1 = "1" ; - digit2 = d.s + numType = EndNotZero ; + digit1 = "一" ; + digit2 = d.s ; + tenPlus = True ; + is1 = False } ; pot0as1 d = { s = d.s ; n = Pl ; - numType = Other ; + numType = SingleDigit ; digit1 = [] ; - digit2 = [] + digit2 = d.s ; + tenPlus = False ; + is1 = d.is1 } ; pot1 d = { s = d.s ++ "十" ; n = Pl ; - numType = Tens ; + numType = EndZero ; digit1 = d.s ; - digit2 = "0" + digit2 = "0" ; + tenPlus = True ; + is1 = False } ; pot1plus d n = { s = d.s ++ "十" ++ n.s ; n = Pl ; - numType = TensPlus ; + numType = EndNotZero ; digit1 = d.s ; - digit2 = n.s + digit2 = n.s ; + tenPlus = True ; + is1 = False } ; - pot1as2 d = d ; + pot1as2 d = { + s_init = d.s ; + s_mid = d.s ; + n = d.n ; + numType = d.numType ; + man = d.digit1 ; + sen = d.digit2 ; + tenPlus = d.tenPlus ; + is1 = d.is1 ; + null = "" + } ; pot2 d = { - s = case d.is1 of { - True => "百" ; -- "hyaku" + s_init = case d.is1 of { + True => d.null ++ "百" ; -- "hyaku" False => d.s ++ "百" } ; + s_mid = d.s ++ "百" ; n = Pl ; - numType = Other ; - digit1 = [] ; - digit2 = [] + numType = EndZero ; + man = case d.is1 of { + True => d.null ++ "十" ; + False => d.s ++ "十" + } ; + sen = [] ; + tenPlus = True ; + is1 = False ; + null = "" } ; pot2plus d n = { - s = case d.is1 of { - True => "百" ++ n.s ; + s_init = case d.is1 of { + True => d.null ++ "百" ++ n.s ; False => d.s ++ "百" ++ n.s } ; + s_mid = d.s ++ "百" ++ n.s ; n = Pl ; - numType = Other ; - digit1 = [] ; - digit2 = [] + numType = case n.numType of { + EndZero => EndZero ; + _ => EndNotZero + } ; + man = case d.is1 of { + True => d.null ++ "十" ++ n.digit1 ; + False => d.s ++ "十" ++ n.digit1 + } ; + sen = n.digit2 ; + tenPlus = True ; + is1 = False ; + null = "" } ; - pot2as3 d = d ; + pot2as3 d = { + s = d.s_init ; + n = d.n ; + tenPlus = d.tenPlus + } ; pot3 d = { s = case d.numType of { - Tens => d.digit1 ++ "万" ; -- "man" - TensPlus => d.digit1 ++ "万" ++ d.digit2 ++ "千" ; -- "sen" - Other => d.s ++ "千" + EndZero => d.man ++ "万" ; -- "man" + EndNotZero => d.man ++ "万" ++ d.sen ++ "千" ; -- "sen" + SingleDigit => case d.is1 of { + True => d.null ++ "千" ; + False => d.s_init ++ "千" + } } ; - n = Pl + n = Pl; + tenPlus = True } ; pot3plus d n = { s = case d.numType of { - Tens => d.digit1 ++ "万" ++ n.s ; - TensPlus => d.digit1 ++ "万" ++ d.digit2 ++ "千" ++ n.s ; - Other => d.s ++ "千" ++ n.s + EndZero => d.man ++ "万" ++ n.s_mid ; + EndNotZero => d.man ++ "万" ++ d.sen ++ "千" ++ n.s_mid ; + SingleDigit => case d.is1 of { + True => d.null ++ "千" ++ n.s_mid ; + False => d.s_init ++ "千" ++ n.s_mid + } } ; - n = Pl + n = Pl; + tenPlus = True } ; lincat - Dig = {s : Str ; n : Number} ; + Dig = {s : Str ; n : Number ; is0 : Bool} ; lin - IDig d = d ; + IDig d = { + s = d.s ; + n = d.n ; + tenPlus = False ; + tail = T1 + } ; IIDig d n = { - s = d.s ++ n.s ; - n = Pl + s = d.s ++ commaIf n.tail ++ n.s ; + n = Pl ; + tenPlus = case of { + <_, True> => True ; + => False ; + _ => True + } ; + tail = inc n.tail } ; - D_0 = {s = "0" ; n = Sg} ; - D_1 = {s = "1" ; n = Sg} ; - D_2 = {s = "2" ; n = Pl} ; - D_3 = {s = "3" ; n = Pl} ; - D_4 = {s = "4" ; n = Pl} ; - D_5 = {s = "5" ; n = Pl} ; - D_6 = {s = "6" ; n = Pl} ; - D_7 = {s = "7" ; n = Pl} ; - D_8 = {s = "8" ; n = Pl} ; - D_9 = {s = "9" ; n = Pl} ; + D_0 = {s = "0" ; n = Sg ; is0 = True} ; + D_1 = {s = "1" ; n = Sg ; is0 = False} ; + D_2 = {s = "2" ; n = Pl ; is0 = False} ; + D_3 = {s = "3" ; n = Pl ; is0 = False} ; + D_4 = {s = "4" ; n = Pl ; is0 = False} ; + D_5 = {s = "5" ; n = Pl ; is0 = False} ; + D_6 = {s = "6" ; n = Pl ; is0 = False} ; + D_7 = {s = "7" ; n = Pl ; is0 = False} ; + D_8 = {s = "8" ; n = Pl ; is0 = False} ; + D_9 = {s = "9" ; n = Pl ; is0 = False} ; + + oper + commaIf : DTail -> Str = \t -> case t of { + T3 => "," ; + _ => [] + } ; + + inc : DTail -> DTail = \t -> case t of { + T1 => T2 ; + T2 => T3 ; + T3 => T1 + } ; } diff --git a/lib/src/japanese/ParadigmsJap.gf b/lib/src/japanese/ParadigmsJap.gf index a0c0e64ba..171469cae 100644 --- a/lib/src/japanese/ParadigmsJap.gf +++ b/lib/src/japanese/ParadigmsJap.gf @@ -7,22 +7,24 @@ oper mkN = overload { mkN : (man : Str) -> (anim : Animateness) -> N - = \n,a -> lin N (regNoun n a "つ" False) ; + = \n,a -> lin N (regNoun n a "つ" False True) ; mkN : (kane,okane : Str) -> (anim : Animateness) -> N - = \kane,okane,a -> lin N (styleNoun kane okane a "つ" False) ; + = \kane,okane,a -> lin N (styleNoun kane okane a "つ" False True) ; mkN : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> N - = \n,a,c,b -> lin N (regNoun n a c b) ; + = \n,a,c,b -> lin N (regNoun n a c b False) ; + mkN : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> + (men : Str) -> N = \n,a,c,b,pl -> lin N (numberNoun n a c b pl False) ; mkN : (kane,okane : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> N - = \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b) + = \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b False) } ; - mkN2 : (mother : Str) -> (prep: Str) -> (anim : Animateness) -> (counter : Str) -> - (counterReplace : Bool) -> N2 = \n,p,a,c,b -> - lin N2 (regNoun n a c b) ** {prep = p; object = \\st => []} ; + mkN2 : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> + (men : Str) -> (prep : Str) -> N2 = \n,a,c,b,pl,pr -> + lin N2 (numberNoun n a c b pl False) ** {prep = pr ; object = \\st => []} ; mkN3 : (distance : Str) -> (prep1: Str) -> (prep2: Str) -> (anim : Animateness) -> N3 - = \n,p1,p2,a -> lin N3 (regNoun n a "つ" False) ** {prep1 = p1; prep2 = p2} ; + = \n,p1,p2,a -> lin N3 (regNoun n a "つ" False True) ** {prep1 = p1; prep2 = p2} ; mkPN = overload { mkPN : (paris : Str) -> PN @@ -49,16 +51,15 @@ oper \pred,attr,pr -> lin A2 (VerbalA pred attr) ** {prep = pr} } ; - mkV : (yoma, yomi, yomu, yonda : Str) -> V - = \yoma,yomi,yomu,yonda -> lin V (mkVerb yoma yomi yomu yonda) ; + mkV : (yomu : Str) -> (group : VerbGroup) -> V + = \yomu,gr -> lin V (mkVerb yomu gr) ; - mkV2 : (yoma, yomi, yomu, yonda, prep : Str) -> V2 - = \yoma,yomi,yomu,yonda,p -> - lin V2 (mkVerb2 yoma yomi yomu yonda p) ; + mkV2 : (yomu, prep : Str) -> (group : VerbGroup) -> V2 + = \yomu,p,gr -> + lin V2 (mkVerb2 yomu p gr) ; - mkV3 : (yoma, yomi, yomu, yonda, p1, p2 : Str) -> (give: Bool) -> V3 - = \yoma,yomi,yomu,yonda,p1,p2,b -> - lin V3 (mkVerb yoma yomi yomu yonda) ** {prep1 = p1 ; prep2 = p2 ; give = b} ; + mkV3 : (uru, p1, p2 : Str) -> (group : VerbGroup) -> V3 = \uru,p1,p2,gr -> + lin V3 (mkVerb3 uru p1 p2 gr) ; } diff --git a/lib/src/japanese/PhraseJap.gf b/lib/src/japanese/PhraseJap.gf index 6ccc094d4..e425edf23 100644 --- a/lib/src/japanese/PhraseJap.gf +++ b/lib/src/japanese/PhraseJap.gf @@ -6,47 +6,58 @@ flags coding = utf8 ; lin PhrUtt pconj utt voc = { - s = case voc.please of { - True => pconj.s ++ utt.s ! Resp ++ voc.s ! Resp ; - False => (voc.s ! Resp ++ pconj.s ++ utt.s ! Resp | - voc.s ! Plain ++ pconj.s ++ utt.s ! Plain) + s = case voc.type of { + Please => case utt.type of { + ImpPolite => pconj.s ++ utt.s ! Wa ! Resp ++ voc.null ; + (Imper|NoImp) => pconj.s ++ utt.s ! Wa ! Resp ++ voc.s ! Resp + } ; + VocPres => case utt.type of { + ImpPolite => voc.s ! Resp ++ "," ++ pconj.s ++ utt.s ! Wa ! Resp ; + Imper => voc.s ! Plain ++ "," ++ pconj.s ++ utt.s ! Wa ! Plain ; + NoImp => voc.s ! Plain ++ "," ++ pconj.s ++ utt.s ! Wa ! Plain + } ; + VocAbs => case utt.type of { + (Imper|ImpPolite) => voc.s ! Plain ++ pconj.s ++ utt.s ! Wa ! Plain ; + NoImp => voc.s ! Plain ++ pconj.s ++ utt.s ! Wa ! Plain + } } } ; - UttS sent = {s = \\st => sent.s ! (Wa|Ga) ! st} ; + UttS sent = {s = \\part,st => sent.s ! part ! st ; type = NoImp} ; - UttQS s = {s = \\st => s.s ! (Wa | Ga) ! st ++ "か"} ; + UttQS s = {s = \\part,st => s.s ! part ! st ; type = NoImp} ; - UttImpSg p imp = {s = \\st => p.s ++ imp.s ! st ! p.b} ; + UttImpSg p imp = {s = \\part,st => p.s ++ imp.s ! st ! p.b ; type = Imper} ; UttImpPl = UttImpSg ; - UttImpPol p imp = {s = \\st => p.s ++ imp.s ! Resp ! p.b} ; + UttImpPol p imp = {s = \\part,st => p.s ++ imp.s ! Resp ! p.b ++ "ください" ; type = ImpPolite} ; - UttIP ip = {s = \\st => ip.s ! st ++ "ですか"} ; + UttIP ip = {s = \\part,st => ip.s_subj ! st ; type = NoImp} ; - UttIAdv iadv = {s = \\st => iadv.s ! st ++ "ですか"} ; + UttIAdv iadv = {s = \\part,st => iadv.s ! st ; type = NoImp} ; - UttNP np = {s = \\st => np.prepositive ! st ++ np.s ! st} ; + UttNP np = {s = \\part,st => np.prepositive ! st ++ np.s ! st ; type = NoImp} ; - UttAdv adv = {s = \\st => adv.s ! st} ; + UttAdv adv = {s = \\part,st => adv.s ! st ; type = NoImp} ; - UttVP vp = {s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! (Anim | Inanim) ! st ! (TPres | TPast | TFut) ! (Pos | Neg)} ; + UttVP vp = {s = \\part,st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! Inanim ! st ! TPres ! Pos ; type = NoImp} ; - UttCN cn = {s = \\st => cn.prepositive ! st ++ cn.object ! st ++ cn.s ! (Sg | Pl) ! st} ; + UttCN cn = {s = \\part,st => cn.prepositive ! st ++ cn.object ! st ++ cn.s ! Sg ! st ; + type = NoImp} ; - UttCard card = {s = \\st => card.s ++ card.postpositive} ; + UttCard card = {s = \\part,st => card.s ++ card.postpositive ; type = NoImp} ; - UttAP ap = {s = \\st => ap.prepositive ! st ++ ap.attr ! st} ; + UttAP ap = {s = \\part,st => ap.prepositive ! st ++ ap.attr ! st ; type = NoImp} ; - UttInterj interj = {s = \\st => interj.s} ; + UttInterj interj = {s = \\part,st => interj.s ; type = NoImp} ; NoPConj = ss "" ; PConjConj conj = {s = conj.s} ; - NoVoc = {s = \\st => [] ; please = False} ; + NoVoc = {s = \\st => [] ; type = VocAbs ; null = ""} ; - VocNP np = {s = \\st => np.prepositive ! st ++ np.s ! st ; please = False} ; + VocNP np = {s = \\st => np.prepositive ! st ++ np.s ! st ; type = VocPres ; null = ""} ; } diff --git a/lib/src/japanese/QuestionJap.gf b/lib/src/japanese/QuestionJap.gf index 1b4fb7d6e..70af91b1a 100644 --- a/lib/src/japanese/QuestionJap.gf +++ b/lib/src/japanese/QuestionJap.gf @@ -5,57 +5,107 @@ flags coding = utf8 ; lin - QuestCl cl = { -- ending "ka" is added at the utterance level - s = cl.s ; + QuestCl cl = { + s = \\part,st,t,p => cl.s ! part ! st ! t ! p ++ "か" ; + s_plain_pred = \\part,st,t,p => cl.subj ! part ! st ++ cl.pred ! Plain ! t ! p ++ "か" ; changePolar = cl.changePolar } ; QuestVP ip vp = { s = \\part,st,t,p => case ip.how8many of { - True => ip.s ! st ++ vp.obj ! st ++ vp.prep ++ vp.verb ! ip.anim ! st ! t ! p ; - False => ip.s ! st ++ "が" ++ vp.obj ! st ++ vp.prep ++ vp.verb ! ip.anim ! st ! t ! p + True => ip.s_subj ! st ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! ip.anim ! st ! t ! p ++ "か" ; + False => ip.s_subj ! st ++ "が" ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! ip.anim ! st ! t ! p ++ "か" + } ; + s_plain_pred = \\part,st,t,p => case ip.how8many of { + True => ip.s_subj ! st ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p ++ "か" ; + False => ip.s_subj ! st ++ "が" ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p ++ "か" } ; changePolar = False } ; QuestSlash ip clslash = { - s = \\part,st,t,p => clslash.subj ! part ! st ++ ip.s ! st ++ clslash.pred ! st ! t ! p ; + s = \\part,st,t,p => clslash.subj ! part ! st ++ ip.s_obj ! st ++ clslash.pred ! st ! t ! p + ++ "か" ; + s_plain_pred = \\part,st,t,p => clslash.subj ! part ! st ++ ip.s_obj ! st ++ + clslash.pred ! Plain ! t ! p ++ "か" ; changePolar = False } ; QuestIAdv iadv cl = { s = \\part,st,t,p => cl.subj ! part ! st ++ iadv.s ! st ++ iadv.particle ++ - cl.pred ! st ! t ! p ; + cl.pred ! st ! t ! p ++ "か" ; + s_plain_pred = \\part,st,t,p => cl.subj ! part ! st ++ iadv.s ! st ++ iadv.particle ++ + cl.pred ! Plain ! t ! p ++ "か" ; changePolar = cl.changePolar } ; QuestIComp icomp np = { s = table { - Wa => \\st,t,p => case np.needPart of { - True => np.prepositive ! st ++ np.s ! st ++ "は" ++ icomp.s ! st ++ - mkCopula.s ! st ! t ! p ; - False => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ mkCopula.s ! st ! t ! p + Wa => \\st,t,p => case of { + => np.prepositive ! st ++ np.s ! st ++ "は" ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ "は" ++ icomp.s ! st ++ + mkCopula.s ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ + mkCopula.s ! st ! t ! p ++ "か" } ; - Ga => \\st,t,p => case np.needPart of { - True => np.prepositive ! st ++ np.s ! st ++ "が" ++ icomp.s ! st ++ - mkCopula.s ! st ! t ! p ; - False => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ mkCopula.s ! st ! t ! p + Ga => \\st,t,p => case of { + => np.prepositive ! st ++ np.s ! st ++ "が" ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ "が" ++ icomp.s ! st ++ + mkCopula.s ! st ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ + mkCopula.s ! st ! t ! p ++ "か" + } + } ; + s_plain_pred = table { + Wa => \\st,t,p => case of { + => np.prepositive ! st ++ np.s ! st ++ "は" ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ "は" ++ icomp.s ! st ++ + mkCopula.s ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ + mkCopula.s ! Plain ! t ! p ++ "か" + } ; + Ga => \\st,t,p => case of { + => np.prepositive ! st ++ np.s ! st ++ "が" ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ "に" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ "が" ++ icomp.s ! st ++ + mkCopula.s ! Plain ! t ! p ++ "か" ; + => np.prepositive ! st ++ np.s ! st ++ icomp.s ! st ++ + mkCopula.s ! Plain ! t ! p ++ "か" } } ; changePolar = np.changePolar } ; IdetCN idet cn = { - s = \\st => case idet.how8many of { + s_subj = \\st => case idet.how8many of { True => cn.prepositive ! st ++ cn.object ! st ++ cn.s ! idet.n ! st ++ "が" ++ idet.s ; False => cn.prepositive ! st ++ cn.object ! st ++ idet.s ++ cn.s ! idet.n ! st } ; + s_obj = \\st => case idet.how8many of { + True => cn.prepositive ! st ++ cn.object ! st ++ idet.s ++ "の" ++ cn.s ! idet.n ! st ; + False => cn.prepositive ! st ++ cn.object ! st ++ idet.s ++ cn.s ! idet.n ! st + } ; anim = cn.anim ; how8many = idet.how8many } ; IdetIP idet = { - s = \\st => case idet.inclCard of { + s_subj, s_obj = \\st => case idet.inclCard of { True => idet.s ++ "つ" ; False => idet.s } ; @@ -64,7 +114,8 @@ flags coding = utf8 ; } ; AdvIP ip adv = { - s = \\st => adv.s ! st ++ ip.s ! st ; + s_subj = \\st => adv.s ! st ++ ip.s_subj ! st ; + s_obj = \\st => adv.s ! st ++ ip.s_obj ! st ; anim = ip.anim ; how8many = ip.how8many } ; @@ -76,13 +127,14 @@ flags coding = utf8 ; inclCard = num.inclCard } ; - PrepIP prep ip = {s = \\st => ip.s ! st ++ prep.s ; particle = ""} ; + PrepIP prep ip = {s = \\st => ip.s_obj ! st ++ prep.s ; particle = "" ; wh8re = False} ; - AdvIAdv iadv adv = {s = \\st => adv.s ! st ++ iadv.s ! st ; particle = iadv.particle} ; + AdvIAdv iadv adv = {s = \\st => adv.s ! st ++ iadv.s ! st ; + particle = iadv.particle ; wh8re = iadv.wh8re} ; - CompIAdv iadv = {s = iadv.s} ; + CompIAdv iadv = {s = iadv.s ; wh8re = iadv.wh8re} ; - CompIP ip = {s = ip.s} ; + CompIP ip = {s = ip.s_obj ; wh8re = False} ; lincat @@ -91,13 +143,14 @@ flags coding = utf8 ; lin ComplSlashIP vpslash ip = { - s = \\a,st,t,p => vpslash.obj ! st ++ ip.s ! st ++ vpslash.prep ++ vpslash.s ! st ! t ! p ; + s = \\a,st,t,p => vpslash.obj ! st ++ ip.s_obj ! st ++ vpslash.prep ++ + vpslash.s ! SomeoneElse ! st ! t ! p ; prepositive = vpslash.prepositive } ; AdvQVP vp iadv = { s = \\a,st,t,p => iadv.s ! st ++ iadv.particle ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! a ! st ! t ! p ; + vp.verb ! SomeoneElse ! a ! st ! t ! p ; prepositive = vp.prepositive } ; @@ -107,8 +160,16 @@ flags coding = utf8 ; } ; QuestQVP ip qvp = { - s = \\part,st,t,p => qvp.prepositive ! st ++ ip.s ! st ++ "が" ++ - qvp.s ! ip.anim ! st ! t ! p ; + s = \\part,st,t,p => case ip.how8many of { + True => qvp.prepositive ! st ++ ip.s_subj ! st ++ qvp.s ! ip.anim ! st ! t ! p ++ "か" ; + False => qvp.prepositive ! st ++ ip.s_subj ! st ++ "が" ++ qvp.s ! ip.anim ! st ! t ! p + ++ "か" + } ; + s_plain_pred = \\part,st,t,p => case ip.how8many of { + True => qvp.prepositive ! st ++ ip.s_subj ! st ++ qvp.s ! ip.anim ! Plain ! t ! p ++ "か" ; + False => qvp.prepositive ! st ++ ip.s_subj ! st ++ "が" ++ qvp.s ! ip.anim ! Plain ! t ! p + ++ "か" + } ; changePolar = False } ; } diff --git a/lib/src/japanese/RelativeJap.gf b/lib/src/japanese/RelativeJap.gf index af935b3ad..ada707d8e 100644 --- a/lib/src/japanese/RelativeJap.gf +++ b/lib/src/japanese/RelativeJap.gf @@ -6,43 +6,47 @@ flags coding = utf8 ; RelCl cl = { s = \\_,st,t,p => cl.s ! Ga ! st ! t ! p ; - te = \\_,st => cl.te ! Ga ! st ; + te = \\_ => cl.te ! Ga ; changePolar = cl.changePolar ; subj = cl.subj ; pred = \\_,st,t,p => cl.pred ! st ! t ! p ; - pred_te = \\a,st => cl.pred_te ! st ; - pred_ba = \\a,st => cl.pred_ba ! st ; + pred_te = \\a => cl.pred_te ; + pred_ba = \\a => cl.pred_ba ; missingSubj = False } ; RelVP rp vp = { s = \\a,st,t,p => vp.prepositive ! st ++ rp.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.verb ! a ! Plain ! t ! p ++ rp.prep ; - te = \\a,st => vp.prepositive ! st ++ rp.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.te ! a ! st ++ rp.prep ; + vp.prep ++ vp.verb ! SomeoneElse ! a ! Plain ! t ! p ; + te = \\a,st,p => vp.prepositive ! st ++ rp.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! a ! st ! p ; changePolar = False ; subj = \\part,st => vp.prepositive ! st ++ rp.s ! st ; - pred = \\a,st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! a ! st ! t ! p ++ rp.prep ; - pred_te = \\a,st => vp.obj ! st ++ vp.prep ++ vp.te ! a ! st ++ rp.prep ; - pred_ba = \\a,st => vp.obj ! st ++ vp.prep ++ vp.ba ! a ! st ++ rp.prep ; + pred = \\a,st,t,p => vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! a ! st ! t ! p ; + pred_te = \\a,st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! a ! st ! p ; + pred_ba = \\a,st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! a ! st ! p ; missingSubj = True } ; RelSlash rp clslash = { - s = \\_,st,t,p => rp.s ! st ++ clslash.s ! st ! t ! p ++ rp.prep ; - te = \\_,st => rp.s ! st ++ clslash.te ! st ; + s = \\_,st,t,p => case rp.null of { + True => rp.s ! st ++ clslash.s ! st ! t ! p ; + False => clslash.subj ! Ga ! st ++ rp.s ! st ++ clslash.pred ! Plain ! t ! p + } ; + te = \\_,st,p => case rp.null of { + True => rp.s ! st ++ clslash.te ! st ! p ; + False => clslash.subj ! Ga ! st ++ rp.s ! st ++ clslash.pred_te ! st ! p + } ; changePolar = clslash.changePolar ; subj = \\part,st => rp.s ! st ++ clslash.subj ! part ! st ; - pred = \\_,st,t,p => clslash.pred ! st ! t ! p ++ rp.prep ; - pred_te = \\a,st => clslash.pred_te ! st ++ rp.prep ; - pred_ba = \\a,st => clslash.pred_ba ! st ++ rp.prep ; + pred = \\_,st,t,p => clslash.pred ! st ! t ! p ; + pred_te = \\a => clslash.pred_te ; + pred_ba = \\a => clslash.pred_ba ; missingSubj = False } ; - IdRP = {s = \\st => [] ; prep = []} ; + IdRP = {s = \\st => [] ; null = True} ; - FunRP prep np rp = { - s = \\st => np.prepositive ! st ++ np.s ! st ; - prep = prep.relPrep - } ; -} + FunRP prep np rp = {s = \\st => np.prepositive ! st ++ np.s ! st ; null = False} ; +} \ No newline at end of file diff --git a/lib/src/japanese/ResJap.gf b/lib/src/japanese/ResJap.gf index f4f537e77..dd79e6cec 100644 --- a/lib/src/japanese/ResJap.gf +++ b/lib/src/japanese/ResJap.gf @@ -9,49 +9,54 @@ param Mood = Ind | Con ; TTense = TPres | TPast | TFut ; Polarity = Pos | Neg ; + VerbGroup = Gr1 | Gr2 | Suru | Kuru ; ModSense = Abil | Oblig | Wish ; + Speaker = Me | SomeoneElse ; Particle = Wa | Ga ; Anteriority = Simul | Anter ; - NumeralType = Tens | TensPlus | Other ; - ComparSense = Less | More | NoCompar ; + NumeralType = EndZero | EndNotZero | SingleDigit ; + DTail = T1 | T2 | T3 ; ConjType = And | Or | Both ; SubjType = That | If | OtherSubj ; + VocType = VocPres | Please | VocAbs ; + UttType = Imper | ImpPolite | NoImp ; oper NP : Type = {s : Style => Str ; prepositive : Style => Str ; needPart : Bool ; - changePolar : Bool ; Pron1Sg : Bool ; anim : Animateness} ; - VP : Type = {verb : Animateness => Style => TTense => Polarity => Str ; - te : Animateness => Style => Str; a_stem : Animateness => Style => Str ; - i_stem : Animateness => Style => Str ; ba : Animateness => Style => Str ; - prep : Str ; obj : Style => Str ; prepositive : Style => Str ; - compar : ComparSense} ; + changePolar : Bool ; meaning : Speaker ; anim : Animateness} ; + VP : Type = {verb : Speaker => Animateness => Style => TTense => Polarity => Str ; + a_stem, i_stem : Speaker => Animateness => Style => Str ; + te, ba : Speaker => Animateness => Style => Polarity => Str ; + prep : Str ; obj : Style => Str ; prepositive : Style => Str} ; Noun : Type = {s : Number => Style => Str ; anim : Animateness ; - counter : Str ; counterReplace : Bool} ; + counter : Str ; counterReplace : Bool ; counterTsu : Bool} ; PropNoun : Type = {s : Style => Str ; anim : Animateness} ; - Adj : Type = {pred : Style => TTense => Polarity => Str; - attr : Str; te : Str ; ba : Str ; adv : Str ; dropNaEnging : Str} ; - Adj2 : Type = {pred : Style => TTense => Polarity => Str ; attr : Str; - te : Str ; ba : Str ; adv : Str ; prep : Str ; dropNaEnging : Str} ; - Adverb : Type = {s : Style => Str ; prepositive : Bool ; compar : ComparSense} ; + Adj : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging : Str ; + te, ba, adv : Polarity => Str} ; + Adj2 : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging, + prep : Str ; te, ba, adv : Polarity => Str} ; + Adverb : Type = {s : Style => Str ; prepositive : Bool} ; Pronoun : Type = {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ; - Determiner : Type = {quant : Style => Str ; postpositive : Str ; num : Str ; - n : Number ; inclCard : Bool ; sp : Style => Str ; no : Bool} ; - Num : Type = {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool} ; - Preposition : Type = {s : Str ; relPrep : Str} ; - Verb : Type = {s : Style => TTense => Polarity => Str ; te : Str ; - a_stem : Str ; i_stem : Str ; ba : Str} ; - Verb2 : Type = {s : Style => TTense => Polarity => Str ; te : Str ; - a_stem : Str ; i_stem : Str ; ba : Str ; - pass : Style => TTense => Polarity => Str ; pass_te : Str ; - pass_a_stem : Str ; pass_i_stem : Str ; pass_ba : Str ; - prep : Str} ; + Determiner : Type = {quant : Style => Str ; postpositive : Str ; num : Str ; n : Number ; + inclCard : Bool ; sp : Style => Str ; no : Bool ; tenPlus : Bool} ; + Num : Type = {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool ; + tenPlus : Bool} ; + Preposition : Type = {s : Str ; null : Str} ; + Verb : Type = {s : Style => TTense => Polarity => Str ; a_stem, i_stem : Str ; + te, ba : Polarity => Str} ; + Verb2 : Type = {s, pass : Style => TTense => Polarity => Str ; a_stem, i_stem, pass_a_stem, + pass_i_stem, prep : Str ; te, ba, pass_te, pass_ba : Polarity => Str} ; + Verb3 : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem : + Speaker => Str ; te, ba : Speaker => Polarity => Str ; prep1, prep2 : Str} ; + VV : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem : + Speaker => Str ; te, ba : Speaker => Polarity => Str ; sense : ModSense} ; Conjunction : Type = {s : Str ; null : Str ; type : ConjType} ; Subjunction : Type = {s : Str ; type : SubjType} ; - mkNoun : Str -> Str -> Str -> Str -> Animateness -> Str -> Bool -> Noun = - \man1,man2,man3,man4,a,c,b -> { + mkNoun : Str -> Str -> Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun = + \man1,man2,man3,man4,a,c,b1,b2 -> { s = table { Sg => table { Plain => man1 ; @@ -64,13 +69,18 @@ oper } ; anim = a ; counter = c ; - counterReplace = b + counterReplace = b1 ; + counterTsu = b2 } ; - regNoun : Str -> Animateness -> Str -> Bool -> Noun = \s,a,c,b -> mkNoun s s s s a c b ; + regNoun : Str -> Animateness -> Str -> Bool -> Bool -> Noun = \s,a,c,b1,b2 -> + mkNoun s s s s a c b1 b2 ; - styleNoun : Str -> Str -> Animateness -> Str -> Bool -> Noun = \kane,okane,a,c,b -> - mkNoun kane okane kane okane a c b ; + styleNoun : Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun = \kane,okane,a,c,b1,b2 -> + mkNoun kane okane kane okane a c b1 b2 ; + + numberNoun : Str -> Animateness -> Str -> Bool -> Str -> Bool -> Noun = \n,a,c,b1,pl,b2 -> + mkNoun n n pl pl a c b1 b2 ; regAdj : Str -> Adj = \a -> case a of { chiisa + "い" => i_mkAdj a ; @@ -83,329 +93,422 @@ oper in { pred = table { Resp => table { - TPres => table { + (TPres|TFut) => table { Pos => chiisai ++ "です" ; - Neg => (chiisa + "くありません" | - chiisa + "くないです") + Neg => chiisa + "くありません" } ; TPast => table { Pos => chiisa + "かったです" ; - Neg => (chiisa + "くありませんでした" | - chiisa + "くなかったです") - } ; - TFut => table { - Pos => chiisai ++ "です" ; - Neg => (chiisa + "くありません" | - chiisa + "くないです") + Neg => chiisa + "くありませんでした" } } ; Plain => table { - TPres => table { + (TPres|TFut) => table { Pos => chiisai ; Neg => chiisa + "くない" } ; TPast => table { Pos => chiisa + "かった" ; Neg => chiisa + "くなかった" - } ; - TFut => table { - Pos => chiisai ; - Neg => chiisa + "くない" } } } ; attr = chiisai ; - te = chiisa + "くて" ; - ba = chiisa + "ければ" ; - adv = chiisa + "く" ; + te = table { + Pos => chiisa + "くて" ; + Neg => chiisa + "くなくて" + } ; + ba = table { + Pos => chiisa + "ければ" ; + Neg => chiisa + "くなければ" + } ; + adv = table { + Pos => chiisa + "く" ; + Neg => chiisa + "くなく" + } ; dropNaEnging = chiisai } ; na_mkAdj : Str -> Adj = \ookina -> let - ooki = init ookina + ooki = init ookina in { - pred = table { - Resp => table { - TPres => table { - Pos => ooki ++ "です" ; - Neg => ooki ++ "ではありません" - } ; - TPast => table { - Pos => ooki ++ "でした" ; - Neg => ooki ++ "ではありませんでした" - } ; - TFut => table { - Pos => ooki ++ "です" ; - Neg => ooki ++ "ではありません" - } - } ; - Plain => table { - TPres => table { - Pos => ooki ++ "だ" ; - Neg => ooki ++ "ではない" - } ; - TPast => table { - Pos => ooki ++ "だった" ; - Neg => ooki ++ "ではなかった" - } ; - TFut => table { - Pos => ooki ++ "だ" ; - Neg => ooki ++ "ではない" - } - } - } ; + pred = \\st,t,p => ooki ++ mkCopula.s ! st ! t ! p ; attr = ookina ; - te = ooki + "で" ; - ba = ooki + "であれば" ; - adv = ooki + "に" ; + te = table { + Pos => ooki + "で" ; + Neg => ooki + "ではなくて" + } ; + ba = \\p => ooki ++ mkCopula.ba ! p ; + adv = table { + Pos => ooki + "に" ; + Neg => ooki + "ではなく" + } ; dropNaEnging = ooki } ; VerbalA : Str -> Str -> Adj = \kekkonshiteiru,kikonno -> let - kekkonshite = Predef.tk 2 kekkonshiteiru + kekkonshite = Predef.tk 2 kekkonshiteiru in { - pred = table { - Resp => table { - TPres => table { - Pos => kekkonshite + "います" ; - Neg => kekkonshite + "いません" - } ; - TPast => table { - Pos => kekkonshite + "いました" ; - Neg => kekkonshite + "いませんでした" - } ; - TFut => table { - Pos => kekkonshite + "います" ; - Neg => kekkonshite + "いません" - } - } ; - Plain => table { - TPres => table { - Pos => kekkonshite + "いる" ; - Neg => kekkonshite + "いない" - } ; - TPast => table { - Pos => kekkonshite + "いた" ; - Neg => kekkonshite + "いなかった" - } ; - TFut => table { - Pos => kekkonshite + "いる" ; - Neg => kekkonshite + "いない" - } - } - } ; + pred = \\st,t,p => kekkonshite ++ mkExistV.verb ! SomeoneElse ! Anim ! st ! t ! p ; attr = kikonno ; - te = kekkonshite + "いて" ; - ba = kekkonshite + "いれば" ; - adv = init kikonno + "で" ; + te = \\p => kekkonshite ++ mkExistV.te ! SomeoneElse ! Anim ! Resp ! p ; + ba = \\p => kekkonshite ++ mkExistV.ba ! SomeoneElse ! Anim ! Resp ! p ; + adv = table { + Pos => init kikonno + "で" ; + Neg => init kikonno + "ではなく" + } ; dropNaEnging = init kikonno } ; - mkVerb : Str -> Str -> Str -> Str -> Verb = - \yoma,yomi,yomu,yonda -> - let yon = init yonda ; + mkVerb : Str -> VerbGroup -> Verb = + \yomu,gr -> + let + yoma = mk_a_stem yomu gr ; + yomi = mk_i_stem yomu gr ; + yonda = mk_plain_past yomu gr ; in { s = table { Resp => table { - TPres => table { + (TPres|TFut) => table { Pos => yomi + "ます" ; Neg => yomi + "ません" } ; TPast => table { Pos => yomi + "ました" ; Neg => yomi + "ませんでした" - } ; - TFut => table { - Pos => yomi + "ます" ; - Neg => yomi + "ません" } } ; Plain => table { - TPres => table { + (TPres|TFut) => table { Pos => yomu ; Neg => yoma + "ない" } ; TPast => table { Pos => yonda ; Neg => yoma + "なかった" - } ; - TFut => table { - Pos => yomu ; - Neg => yoma + "ない" } } } ; - te = case yonda of { + te = table { + Pos => case yonda of { yon + "だ" => yon + "で" ; yon + "た" => yon + "て" } ; - a_stem = yoma ; - i_stem = yomi ; - ba = mkBaForm yomu + Neg => yoma + "ないで" + } ; + a_stem = yoma ; + i_stem = yomi ; + ba = table { + Pos => mkBaForm yomu gr ; + Neg => yoma + "なければ" + } } ; - - mkVerb2 : Str -> Str -> Str -> Str -> Str -> Verb2 = - \yoma,yomi,yomu,yonda,p -> { - s = (mkVerb yoma yomi yomu yonda).s ; - te = (mkVerb yoma yomi yomu yonda).te ; + + mkVerb2 : Str -> Str -> VerbGroup -> Verb2 = + \yomu,p,gr -> + let + yoma = mk_a_stem yomu gr ; + in { + s = (mkVerb yomu gr).s ; + te = (mkVerb yomu gr).te ; a_stem = yoma ; - i_stem = yomi ; - ba = mkBaForm yomu ; + i_stem = mk_i_stem yomu gr ; + ba = (mkVerb yomu gr).ba ; prep = p ; pass = table { Resp => table { - TPres => table { - Pos => case yomu of { - x + "する" => x + "されます" ; - _ => yoma + "れます" + (TPres|TFut) => table { + Pos => case gr of { + Gr1 => yoma + "れます" ; + Gr2 => yoma + "られます" ; + Suru => Predef.tk 2 yomu + "されます" ; + Kuru => "来られます" + } ; + Neg => case gr of { + Gr1 => yoma + "れません" ; + Gr2 => yoma + "られません" ; + Suru => Predef.tk 2 yomu + "されません" ; + Kuru => "来られません" + } } ; - Neg => case yomu of { - x + "する" => x + "されません" ; - _ => yoma + "れません" + TPast => table { + Pos => case gr of { + Gr1 => yoma + "れました" ; + Gr2 => yoma + "られました" ; + Suru => Predef.tk 2 yomu + "されました" ; + Kuru => "来られました" + } ; + Neg => case gr of { + Gr1 => yoma + "れませんでした" ; + Gr2 => yoma + "られませんでした" ; + Suru => Predef.tk 2 yomu + "されませんでした" ; + Kuru => "来られませんでした" + } } } ; - TPast => table { - Pos => case yomu of { - x + "する" => x + "されました" ; - _ => yoma + "れました" + Plain => table { + (TPres|TFut) => table { + Pos => case gr of { + Gr1 => yoma + "れる" ; + Gr2 => yoma + "られる" ; + Suru => Predef.tk 2 yomu + "される" ; + Kuru => "来られる" + } ; + Neg => case gr of { + Gr1 => yoma + "れない" ; + Gr2 => yoma + "られない" ; + Suru => Predef.tk 2 yomu + "されない" ; + Kuru => "来られない" + } } ; - Neg => case yomu of { - x + "する" => x + "されませんでした" ; - _ => yoma + "れませんでした" - } - } ; - TFut => table { - Pos => case yomu of { - x + "する" => x + "されます" ; - _ => yoma + "れます" - } ; - Neg => case yomu of { - x + "する" => x + "されません" ; - _ => yoma + "れません" + TPast => table { + Pos => case gr of { + Gr1 => yoma + "れた" ; + Gr2 => yoma + "られた" ; + Suru => Predef.tk 2 yomu + "された" ; + Kuru => "来られた" + } ; + Neg => case gr of { + Gr1 => yoma + "れなかった" ; + Gr2 => yoma + "られなかった" ; + Suru => Predef.tk 2 yomu + "されなかった" ; + Kuru => "来られなかった" + } } } } ; - Plain => table { - TPres => table { - Pos => case yomu of { - x + "する" => x + "される" ; - _ => yoma + "れる" - } ; - Neg => case yomu of { - x + "する" => x + "されない" ; - _ => yoma + "れない" - } + pass_te = table { + Pos => case gr of { + Gr1 => yoma + "れて" ; + Gr2 => yoma + "られて" ; + Suru => Predef.tk 2 yomu + "されて" ; + Kuru => "来られて" } ; - TPast => table { - Pos => case yomu of { - x + "する" => x + "された" ; - _ => yoma + "れた" - } ; - Neg => case yomu of { - x + "する" => x + "されなかった" ; - _ => yoma + "れなかった" - } + Neg => case gr of { + Gr1 => yoma + "れないで" ; + Gr2 => yoma + "られないで" ; + Suru => Predef.tk 2 yomu + "されないで" ; + Kuru => "来られないで" + } + } ; + pass_a_stem = case gr of { + Gr1 => yoma + "れ" ; + Gr2 => yoma + "られ" ; + Suru => Predef.tk 2 yomu + "され" ; + Kuru => "来られ" + } ; + pass_i_stem = case gr of { + Gr1 => yoma + "れ" ; + Gr2 => yoma + "られ" ; + Suru => Predef.tk 2 yomu + "され" ; + Kuru => "来られ" + } ; + pass_ba = table { + Pos => case gr of { + Gr1 => yoma + "れれば" ; + Gr2 => yoma + "られれば" ; + Suru => Predef.tk 2 yomu + "されれば" ; + Kuru => "来られれば" } ; - TFut => table { - Pos => case yomu of { - x + "する" => x + "される" ; - _ => yoma + "れる" - } ; - Neg => case yomu of { - x + "する" => x + "されない" ; - _ => yoma + "れない" - } - } + Neg => case gr of { + Gr1 => yoma + "れなければ" ; + Gr2 => yoma + "られなければ" ; + Suru => Predef.tk 2 yomu + "されなければ" ; + Kuru => "来られなければ" + } } } ; - pass_te = case yomu of { - x + "する" => x + "されて" ; - _ => yoma + "れて" - } ; - pass_a_stem = case yomu of { - x + "する" => x + "され" ; - _ => yoma + "れ" - } ; - pass_i_stem = case yomu of { - x + "する" => x + "され" ; - _ => yoma + "れ" - } ; - pass_ba = case yomu of { - x + "する" => x + "されれば" ; - _ => yoma + "れれば" - } + + mkVerb3 : Str -> Str -> Str -> VerbGroup -> Verb3 = + \uru,p1,p2,gr -> { + s = \\sp => (mkVerb uru gr).s ; + te = \\sp => (mkVerb uru gr).te ; + a_stem = \\sp => mk_a_stem uru gr ; + i_stem = \\sp => mk_i_stem uru gr ; + ba = \\sp => (mkVerb uru gr).ba ; + prep1 = p1 ; + prep2 = p2 } ; - mkCopula : Verb = { + mkCopula = { s = table { Resp => table { - TPres => table { + (TPres|TFut) => table { Pos => "です" ; Neg => "ではありません" } ; TPast => table { Pos => "でした" ; Neg => "ではありませんでした" - } ; - TFut => table { - Pos => "です" ; - Neg => "ではありません" } } ; Plain => table { - TPres => table { + (TPres|TFut) => table { Pos => "だ" ; Neg => "ではない" } ; TPast => table { Pos => "だった" ; Neg => "ではなかった" - } ; - TFut => table { - Pos => "だ" ; - Neg => "ではない" } } + } ; + te = table { + Pos => "だって" ; + Neg => "ではなくて" } ; - te = "だって" ; - a_stem = "で" ; - i_stem = "で" ; - ba = "であれば" + ba = table { + Pos => "であれば" ; + Neg => "でなければ" + } } ; mkExistV : VP = { - verb = table { - Anim => \\st,t,p => (mkVerb "い" "い" "いる" "いた").s ! st ! t ! p ; - Inanim => \\st,t,p => (mkVerb "" "あり" "ある" "あった").s ! st ! t ! p + verb = \\sp => table { + Anim => \\st,t,p => (mkVerb "いる" Gr2).s ! st ! t ! p ; + Inanim => table { + Resp => table { + (TPres|TFut) => table { + Pos => "あります" ; + Neg => "ありません" + } ; + TPast => table { + Pos => "ありました" ; + Neg => "ありませんでした" + } + } ; + Plain => table { + (TPres|TFut) => table { + Pos => "ある" ; + Neg => "ない" + } ; + TPast => table { + Pos => "あった" ; + Neg => "なかった" + } + } + } } ; - te = table { - Anim => \\st => "いて" ; - Inanim => \\st => "あって" + te = \\sp => table { + Anim => \\st => table { + Pos => "いて" ; + Neg => "いないで" + } ; + Inanim => \\st => table { + Pos => "あって" ; + Neg => "ないで" + } } ; - a_stem = table { + a_stem = \\sp => table { Anim => \\st => "い" ; Inanim => \\st => "" } ; - i_stem = table { + i_stem = \\sp => table { Anim => \\st => "い" ; Inanim => \\st => "あり" } ; - ba = table { - Anim => \\st => "いれば" ; - Inanim => \\st => "あれば" + ba = \\sp => table { + Anim => \\st => table { + Pos => "いれば" ; + Neg => "いなければ" + } ; + Inanim => \\st => table { + Pos => "あれば" ; + Neg => "なければ" + } } ; prep = [] ; - prepositive, obj = \\st => [] ; - compar = NoCompar + prepositive, obj = \\st => [] } ; - - mkNum : Str -> Number -> Bool -> Num = \s,n,b -> { + + mkWant : VV = { + s = table { + Me => \\st,t,p => (i_mkAdj "たい").pred ! st ! t ! p ; + SomeoneElse => \\st,t,p => "たがって" ++ (mkVerb "いる" Gr2).s ! st ! t ! p + } ; + te = table { + Me => table { + Pos => "たくて" ; + Neg => "たくなくて" + } ; + SomeoneElse => table { + Pos => "たがっていて" ; + Neg => "たがっていないで" + } + } ; + a_stem = table { + Me => "たいで" ; + SomeoneElse => "たがってい" + } ; + i_stem = table { + Me => "たいで" ; + SomeoneElse => "たがってい" + } ; + ba = table { + Me => table { + Pos => "たければ" ; + Neg => "たくなければ" + } ; + SomeoneElse => table { + Pos => "たがっていれば" ; + Neg => "たがっていなければ" + } + } ; + sense = Wish + } ; + + mkCan : VV = { + s = \\sp,st,t,p => (mkVerb "できる" Gr2).s ! st ! t ! p ; + te = \\sp => table { + Pos => "できて" ; + Neg => "できないで" + } ; + a_stem, i_stem = \\sp => "でき" ; + ba = \\sp => table { + Pos => "できれば" ; + Neg => "できなければ" + } ; + sense = Abil + } ; + + mkMust : VV = { + s = \\sp,st,t,p => (mkVerb "なる" Gr1).s ! st ! t ! Neg ; + te = \\sp,p => "ならなくて" ; + a_stem = \\sp => "なら" ; + i_stem = \\sp => "なり" ; + ba = \\sp,p => "ならなければ" ; + sense = Oblig + } ; + + mkGive : Verb3 = { + s = table { + Me => \\st,t,p => (mkVerb "呉れる" Gr2).s ! st ! t ! p ; -- "kureru" + SomeoneElse => \\st,t,p => (mkVerb "上げる" Gr2).s ! st ! t ! p -- "ageru" + } ; + te = table { + Me => (mkVerb "呉れる" Gr2).te ; + SomeoneElse => (mkVerb "上げる" Gr2).te + } ; + a_stem, i_stem = table { + Me => "呉れ" ; + SomeoneElse => "上げ" + } ; + ba = table { + Me => (mkVerb "呉れる" Gr2).ba ; + SomeoneElse => (mkVerb "上げる" Gr2).ba + } ; + prep1 = "に" ; + prep2 = "を" + } ; + + mkNum : Str -> Number -> Num = \s,n -> { s = s ; postpositive = [] ; n = n ; - inclCard = b + inclCard = False ; + tenPlus = False } ; regPron : Str -> Bool -> Animateness -> Pronoun = \kare,b,a -> { @@ -421,7 +524,8 @@ oper n = n ; inclCard = False ; sp = \\st => sp ; - no = False + no = False ; + tenPlus = False } ; stylePron : Str -> Str -> Bool -> Animateness -> Pronoun = \boku,watashi,b,a -> { @@ -451,8 +555,7 @@ oper mkAdv : Str -> Adverb = \adv -> { s = \\st => adv ; - prepositive = False ; - compar = NoCompar + prepositive = False } ; mkNP : Str -> Bool -> Bool -> Animateness -> NP = \np,b1,b2,a -> { @@ -460,7 +563,7 @@ oper prepositive = \\st => [] ; needPart = b1 ; changePolar = b2 ; - Pron1Sg = False ; + meaning = SomeoneElse ; anim = a } ; @@ -470,27 +573,104 @@ oper type = t } ; - mkPrep : Str -> Str -> Preposition = \p,r -> { + mkPrep : Str -> Preposition = \p -> { s = p ; - relPrep = r ; + null = "" ; } ; mkSubj : Str -> SubjType -> Subjunction = \s,t -> { s = s ; type = t ; } ; - - mkBaForm : Str -> Str = \neru -> - case last neru of { + + mk_a_stem : Str -> VerbGroup -> Str = \neru,gr -> + case gr of { + Gr1 => case last neru of { + "る" => init neru + "ら" ; + "す" => init neru + "さ" ; + "く" => init neru + "か" ; + "ぐ" => init neru + "が" ; + "む" => init neru + "ま" ; + "ぬ" => init neru + "な" ; + "ぶ" => init neru + "ば" ; + "つ" => init neru + "た" ; + _ => init neru + "わ" + } ; + (Gr2 | Kuru) => init neru ; + Suru => Predef.tk 2 neru + "し" + } ; + + mk_i_stem : Str -> VerbGroup -> Str = \neru,gr -> + case gr of { + Gr1 => case last neru of { + "る" => init neru + "り" ; + "す" => init neru + "し" ; + "く" => init neru + "き" ; + "ぐ" => init neru + "ぎ" ; + "む" => init neru + "み" ; + "ぬ" => init neru + "に" ; + "ぶ" => init neru + "び" ; + "つ" => init neru + "ち" ; + _ => init neru + "い" + } ; + (Gr2 | Kuru) => init neru ; + Suru => Predef.tk 2 neru + "し" + } ; + + mk_plain_past : Str -> VerbGroup -> Str = \neru,gr -> + case gr of { + Gr1 => case last neru of { + "る" => init neru + "った" ; + "す" => init neru + "した" ; + "く" => init neru + "いた" ; + "ぐ" => init neru + "いだ" ; + "む" => init neru + "んだ" ; + "ぬ" => init neru + "んだ" ; + "ぶ" => init neru + "んだ" ; + "つ" => init neru + "った" ; + _ => init neru + "った" + } ; + (Gr2 | Kuru) => init neru + "た" ; + Suru => Predef.tk 2 neru + "した" + } ; + + mkBaForm : Str -> VerbGroup -> Str = \neru,gr -> + case last neru of { "る" => init neru + "れば" ; "す" => init neru + "せば" ; "く" => init neru + "けば" ; "ぐ" => init neru + "げば" ; - "む" => init neru + "めば" ; + "む" => init neru + "めば" ; "ぬ" => init neru + "ねば" ; "ぶ" => init neru + "べば" ; - "つ" => init neru + "てば" ; - _ => init neru + "えば" + "つ" => init neru + "てば" ; + _ => init neru + "えば" + } ; + + mkFirst : Adj = { + pred = \\st,t,p => "一番目" ++ mkCopula.s ! st ! t ! p ; + attr = "一番目の" ; + te = \\p => "一番目" ++ mkCopula.te ! p ; + ba = \\p => "一番目" ++ mkCopula.ba ! p ; + adv = table { + Pos => "一番目" ; + Neg => "一番目ではなく" } ; + dropNaEnging = "一番目" + } ; + + mkRain : Verb = { + s = \\st,t,p => "雨が" ++ (mkVerb "降る" Gr1).s ! st ! t ! p ; -- "ame ga furu" + te = table { + Pos => "雨が降って" ; + Neg => "雨が降らないで" + } ; + a_stem = "雨が降ら" ; + i_stem = "雨が降り" ; + ba = table { + Pos => "雨が降れば" ; + Neg => "雨が降らなければ" + } + } ; } diff --git a/lib/src/japanese/SentenceJap.gf b/lib/src/japanese/SentenceJap.gf index f9dd73ca0..6fb4870ee 100644 --- a/lib/src/japanese/SentenceJap.gf +++ b/lib/src/japanese/SentenceJap.gf @@ -5,102 +5,59 @@ flags coding = utf8 ; lin - PredVP np vp = case vp.compar of { - More => { + PredVP np vp = case np.needPart of { + True => { s = table { Wa => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - Ga => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ - "のほうが" ++ vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p + vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p ; + Ga => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ + vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p } ; te = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "のほうが" ++ - vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st + Wa => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ + vp.obj ! st ++ vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ + vp.obj ! st ++ vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p } ; ba = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "のほうが" ++ - vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st + Wa => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ + vp.obj ! st ++ vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ + vp.obj ! st ++ vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p } ; subj = table { Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "のほうが" + Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p ; changePolar = np.changePolar } ; - Less => { - s = \\part,st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ - "より" ++ vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - te = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "より" - ++ vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - ba = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ - "より" ++ vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - subj = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "より" ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - changePolar = np.changePolar - } ; - NoCompar => case np.needPart of { - True => { - s = table { - Wa => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - Ga => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ - vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p - } ; - te = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ - vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st - } ; - ba = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ - vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ - vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st - } ; - subj = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" - } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - changePolar = np.changePolar + False => { + s = table { + Wa => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ + vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p ; + Ga => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ + vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p + } ; + te = table { + Wa => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p } ; - False => { - s = table { - Wa => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ - vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - Ga => \\st,t,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ - vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p - } ; - te = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.te ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.te ! np.anim ! st - } ; - ba = table { - Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! np.anim ! st ; - Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! np.anim ! st - } ; - subj = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.anim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! np.anim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! np.anim ! st ; - changePolar = np.changePolar - } + ba = table { + Wa => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p ; + Ga => \\st,p => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p + } ; + subj = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! np.meaning ! np.anim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! np.meaning ! np.anim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! np.meaning ! np.anim ! st ! p ; + changePolar = np.changePolar } } ; @@ -108,82 +65,67 @@ flags coding = utf8 ; True => { s = table { Wa => \\st,t,p => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! Inanim ! st ! t ! p ; + vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; Ga => \\st,t,p => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! Inanim ! st ! t ! p + vp.verb ! SomeoneElse ! Inanim ! st ! t ! p } ; te = table { - Wa => \\st => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st ; - Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st + Wa => \\st,p => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + Ga => \\st,p => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p } ; ba = table { - Wa => \\st => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st ; - Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st + Wa => \\st,p => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; + Ga => \\st,p => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p } ; subj = table { Wa => \\st => sc.s ! Wa ! st ++ "ことは" ; Ga => \\st => sc.s ! Ga ! st ++ "ことが" } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Inanim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Inanim ! st ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; changePolar = False } ; False => { - s = table { - Wa => \\st,t,p => sc.s ! Wa ! st ++ "ことが" ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! Inanim ! st ! t ! p ; - Ga => \\st,t,p => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ vp.prep ++ - vp.verb ! Inanim ! st ! t ! p - } ; - te = table { - Wa => \\st => sc.s ! Wa ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st ; - Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.te ! Inanim ! st - } ; - ba = table { - Wa => \\st => sc.s ! Wa ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st ; - Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ - vp.prep ++ vp.ba ! Inanim ! st - } ; - subj = table { - Wa => \\st => sc.s ! Wa ! st ++ "ことが" ; - Ga => \\st => sc.s ! Ga ! st ++ "ことが" - } ; - pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! Inanim ! st ! t ! p ; - pred_te = \\st => vp.obj ! st ++ vp.prep ++ vp.te ! Inanim ! st ; - pred_ba = \\st => vp.obj ! st ++ vp.prep ++ vp.ba ! Inanim ! st ; + s = \\part,st,t,p => sc.s ! part ! st ++ "ことが" ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; + te = \\part,st,p => sc.s ! part ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + ba = \\part,st,p => sc.s ! part ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; + subj = \\part,st => sc.s ! part ! st ++ "ことが" ; + pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; + pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; + pred_ba = \\st,p => vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; changePolar = False } } ; SlashVP np vpslash = { s = \\st,t,p => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ - vpslash.obj ! st ++ vpslash.prep ++ vpslash.s ! Plain ! t ! p ; - te = \\st => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ - vpslash.obj ! st ++ vpslash.prep ++ vpslash.te ; - ba = \\st => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ - vpslash.obj ! st ++ vpslash.prep ++ vpslash.ba ; + vpslash.obj ! st ++ vpslash.s ! np.meaning ! Plain ! t ! p ; + te = \\st,p => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + vpslash.obj ! st ++ vpslash.te ! np.meaning ! p ; + ba = \\st,p => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + vpslash.obj ! st ++ vpslash.ba ! np.meaning ! p ; subj = table { Wa => \\st => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "は" ; Ga => \\st => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" } ; - pred = \\st,t,p => vpslash.obj ! st ++ vpslash.prep ++ vpslash.s ! st ! t ! p ; - pred_te = \\st => vpslash.obj ! st ++ vpslash.prep ++ vpslash.te ; - pred_ba = \\st => vpslash.obj ! st ++ vpslash.ba ; + pred = \\st,t,p => vpslash.obj ! st ++ vpslash.prep ++ vpslash.s ! np.meaning ! st ! t ! p ; + pred_te = \\st,p => vpslash.obj ! st ++ vpslash.prep ++ vpslash.te ! np.meaning ! p ; + pred_ba = \\st,p => vpslash.obj ! st ++ vpslash.prep ++ vpslash.ba ! np.meaning ! p ; changePolar = np.changePolar } ; AdvSlash clslash adv = { s = \\st,t,p => adv.s ! st ++ clslash.s ! st ! t ! p ; - te = \\st => adv.s ! st ++ clslash.te ! st ; - ba = \\st => adv.s ! st ++ clslash.ba ! st ; + te = \\st,p => adv.s ! st ++ clslash.te ! st ! p ; + ba = \\st,p => adv.s ! st ++ clslash.ba ! st ! p ; subj = \\part,st => adv.s ! st ++ clslash.subj ! part ! st ; pred = clslash.pred ; pred_te = clslash.pred_te ; @@ -192,29 +134,30 @@ flags coding = utf8 ; } ; SlashPrep cl prep = { - s = \\st,t,p => cl.s ! Ga ! st ! t ! p ++ prep.relPrep ; - te = \\st => cl.te ! Ga ! st ++ prep.relPrep ; - ba = \\st => cl.ba ! Ga ! st ++ prep.relPrep ; + s = \\st,t,p => cl.s ! Ga ! st ! t ! p ++ prep.null ; + te = \\st,p => cl.te ! Ga ! st ! p ++ prep.null ; + ba = \\st,p => cl.ba ! Ga ! st ! p ++ prep.null ; subj = cl.subj ; - pred = \\st,t,p => cl.pred ! st ! t ! p ++ prep.relPrep ; - pred_te = \\st => cl.pred_te ! st ++ prep.relPrep ; - pred_ba = \\st => cl.pred_ba ! st ++ prep.relPrep ; + pred = \\st,t,p => cl.pred ! st ! t ! p ++ prep.null ; + pred_te = \\st,p => cl.pred_te ! st ! p ++ prep.null ; + pred_ba = \\st,p => cl.pred_ba ! st ! p ++ prep.null ; changePolar = cl.changePolar } ; SlashVS np vs sslash = { s = \\st,t,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ vs.prep ++ vs.s ! Plain ! t ! p ; - te = \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ vs.prep ++ vs.te ; - ba = \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ - vs.prep ++ vs.ba ; + te = \\st,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ vs.prep ++ + vs.te ! p ; + ba = \\st,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ + vs.prep ++ vs.ba ! p ; subj = table { Wa => \\st => np.prepositive ! st ++ np.s ! st ++ "は" ; Ga => \\st => np.prepositive ! st ++ np.s ! st ++ "が" } ; pred = \\st,t,p => sslash.s ! st ++ vs.prep ++ vs.s ! st ! t ! p ; - pred_te = \\st => sslash.s ! st ++ vs.prep ++ vs.te ; - pred_ba = \\st => sslash.s ! st ++ vs.prep ++ vs.ba ; + pred_te = \\st,p => sslash.s ! st ++ vs.prep ++ vs.te ! p ; + pred_ba = \\st,p => sslash.s ! st ++ vs.prep ++ vs.ba ! p ; changePolar = np.changePolar } ; @@ -222,15 +165,15 @@ flags coding = utf8 ; s = table { Resp => table { Pos => vp.prepositive ! Resp ++ vp.obj ! Resp ++ vp.prep ++ - vp.te ! Anim ! Resp ; + vp.te ! SomeoneElse ! Anim ! Resp ! Pos ; Neg => vp.prepositive ! Resp ++ vp.obj ! Resp ++ vp.prep ++ - vp.verb ! Anim ! Plain ! TPres ! Neg ++ "で" + vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! Neg ++ "で" } ; Plain => table { Pos => vp.prepositive ! Plain ++ vp.obj ! Plain ++ vp.prep ++ - vp.i_stem ! Anim ! Plain ++ "なさい" ; + vp.i_stem ! SomeoneElse ! Anim ! Plain ++ "nasai" ; Neg => vp.prepositive ! Plain ++ vp.obj ! Plain ++ vp.prep ++ - vp.verb ! Anim ! Plain ! TPres ! Pos ++ "な" + vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! Pos ++ "な" } } } ; @@ -239,7 +182,8 @@ flags coding = utf8 ; EmbedQS qs = {s = \\part,st => qs.s ! part ! Plain ; isVP = False} ; - EmbedVP vp = {s = \\part,st => vp.verb ! Inanim ! Plain ! TPres ! Pos ; isVP = True} ; + EmbedVP vp = {s = \\part,st => vp.verb ! SomeoneElse ! Inanim ! Plain ! TPres ! Pos ; + isVP = True} ; UseCl t p cl = { s = \\part,st => case t.a of { @@ -262,8 +206,8 @@ flags coding = utf8 ; } } } ; - te = \\part,st => t.s ++ p.s ++ cl.te ! part ! st ; - ba = \\part,st => t.s ++ p.s ++ cl.ba ! part ! st ; + te = \\part,st => t.s ++ p.s ++ cl.te ! part ! st ! p.b ; + ba = \\part,st => t.s ++ p.s ++ cl.ba ! part ! st ! p.b ; subj = cl.subj ; pred = \\st => case t.a of { Simul => case cl.changePolar of { @@ -285,8 +229,8 @@ flags coding = utf8 ; } } } ; - pred_te = cl.pred_te ; - pred_ba = cl.pred_ba + pred_te = \\st => cl.pred_te ! st ! p.b ; + pred_ba = \\st => cl.pred_ba ! st ! p.b } ; UseQCl t p cl = { @@ -309,7 +253,27 @@ flags coding = utf8 ; True => t.s ++ p.s ++ cl.s ! part ! st ! TPres ! Neg } } - } + } ; + s_plain_pred = \\part,st => case t.a of { + Simul => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPast ! Neg + } ; + TPast => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPast ! Neg + } ; + TFut => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ cl.s_plain_pred ! part ! st ! TPres ! Neg + } + } + } } ; UseRCl t p rcl = { @@ -333,7 +297,7 @@ flags coding = utf8 ; } } } ; - te = \\a,st => t.s ++ p.s ++ rcl.te ! a ! st ; + te = \\a,st => t.s ++ p.s ++ rcl.te ! a ! st ! p.b ; subj = rcl.subj ; pred = \\a,st => case t.a of { Simul => case rcl.changePolar of { @@ -355,8 +319,8 @@ flags coding = utf8 ; } } } ; - pred_te = \\a,st => t.s ++ p.s ++ rcl.pred_te ! a ! st ; - pred_ba = \\a,st => t.s ++ p.s ++ rcl.pred_ba ! a ! st ; + pred_te = \\a,st => t.s ++ p.s ++ rcl.pred_te ! a ! st ! p.b ; + pred_ba = \\a,st => t.s ++ p.s ++ rcl.pred_ba ! a ! st ! p.b ; missingSubj = rcl.missingSubj } ; @@ -381,7 +345,7 @@ flags coding = utf8 ; } } } ; - te = \\st => clslash.te ! st + te = \\st => clslash.te ! st ! p.b } ; AdvS adv s = { @@ -444,7 +408,7 @@ flags coding = utf8 ; te = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ "ことが" ++ rs.pred_te ! Inanim ! st ; ba = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことが" ++ rs.pred_ba ! Inanim ! st ; + "ことが" ++ rs.pred_ba ! Inanim ! st ; subj = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ "ことが" ; pred = \\st => rs.pred ! Inanim ! st ; @@ -452,24 +416,12 @@ flags coding = utf8 ; pred_ba = \\st => rs.pred_ba ! Inanim ! st } ; False => { - s = table { - Wa => \\st => rs.subj ! Wa ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred ! Inanim ! st ; - Ga => \\st => rs.subj ! Ga ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred ! Inanim ! st - } ; - te = table { - Wa => \\st => rs.subj ! Wa ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred_te ! Inanim ! st ; - Ga => \\st => rs.subj ! Ga ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred_te ! Inanim ! st - } ; - ba = table { - Wa => \\st => rs.subj ! Wa ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred_ba ! Inanim ! st ; - Ga => \\st => rs.subj ! Ga ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ - "ことを" ++ rs.pred_ba ! Inanim ! st - } ; + s = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことを" ++ rs.pred ! Inanim ! st ; + te = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことを" ++ rs.pred_te ! Inanim ! st ; + ba = \\part,st => rs.subj ! Wa ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことを" ++ rs.pred_ba ! Inanim ! st ; subj = \\part,st => rs.subj ! part ! st ; pred = \\st => sent.subj ! Ga ! st ++ sent.pred ! Plain ++ "ことを" ++ rs.pred ! Inanim ! st ; diff --git a/lib/src/japanese/StructuralJap.gf b/lib/src/japanese/StructuralJap.gf index 71dfeb450..30b423207 100644 --- a/lib/src/japanese/StructuralJap.gf +++ b/lib/src/japanese/StructuralJap.gf @@ -4,8 +4,8 @@ flags coding = utf8 ; lin - above_Prep = mkPrep "の上に" "上に" ; -- "noueni" "ueni" - after_Prep = mkPrep "の後に" "後" ; -- "noatoni" "ato" + above_Prep = mkPrep "の上に" ; -- "noueni" + after_Prep = mkPrep "の後に" ; -- "noatoni" all_Predet = {s = "全部" ; not = False} ; almost_AdA = ss "殆ど" ; -- "hotondo" almost_AdN = {s = "殆ど" ; postposition = False} ; @@ -13,56 +13,52 @@ flags coding = utf8 ; always_AdV = ss "いつも" ; and_Conj = mkConj "そして" And ; because_Subj = mkSubj "から" OtherSubj ; - before_Prep = mkPrep "の前に" "前に" ; -- "nomaeni" "maeni" - behind_Prep = mkPrep "後ろに" "後ろに" ; -- "ushironi" "ushironi" - between_Prep = mkPrep "の間に" "間に" ; -- "noaidani" "aidani" + before_Prep = mkPrep "の前に" ; -- "nomaeni" + behind_Prep = mkPrep "後ろに" ; -- "ushironi" + between_Prep = mkPrep "の間に" ; -- "noaidani" both7and_DConj = mkConj "そして" Both ; - by8agent_Prep = mkPrep "に" "" ; - by8means_Prep = mkPrep "によって" "" ; + by8agent_Prep = mkPrep "に" ; + by8means_Prep = mkPrep "によって" ; but_PConj = ss "けれども" ; - can8know_VV = mkVerb "でき" "でき" "できる" "できた" ** {sense = Abil} ; + can8know_VV = mkCan ; can_VV = can8know_VV ; - during_Prep = mkPrep "の間に" "" ; -- "noaidani" + during_Prep = mkPrep "の間に" ; -- "noaidani" either7or_DConj = mkConj "それとも" Or ; every_Det = mkDet "全ての" "全て" Sg ; -- "subeteno" everybody_NP = mkNP "皆" True False Anim ; -- "minna" everything_NP = mkNP "全て" True False Inanim ; -- "subete" - everywhere_Adv = mkAdv "どこでも" ; -- "dokodemo" ; - first_Ord = {pred = \\st,t,p => "一番目" ++ mkCopula.s ! st ! t ! p ; - attr = "一番目の" ; te = "一番目" ++ mkCopula.te ; - ba = "一番目" ++ mkCopula.ba ; adv = "一番目" ; - dropNaEnging = "一番目"} ; + everywhere_Adv = mkAdv "どこでも" ; -- "dokodemo" + first_Ord = mkFirst ; few_Det = mkDet "少数の" "少数" Pl ; -- "shoosuuno" - for_Prep = mkPrep "のために" "" ; - from_Prep = mkPrep "から" "" ; + for_Prep = mkPrep "のために" ; + from_Prep = mkPrep "から" ; he_Pron = mkPron "彼" False Anim ; -- "kare" here_Adv = mkAdv "ここで" ; here7to_Adv = mkAdv "ここに" ; here7from_Adv = mkAdv "ここから" ; - how_IAdv = {s = \\st => "どのように" ; particle = ""} ; + how_IAdv = {s = \\st => "どのように" ; particle = "" ; wh8re = False} ; how8many_IDet = {s = "いくつ" ; n = Pl ; how8many = True ; inclCard = False} ; - how8much_IAdv = {s = \\st => "いくら" ; particle = ""} ; - i_Pron = mkPron ("僕"|"私") "私" True Anim ; -- "boku"|"watashi" + how8much_IAdv = {s = \\st => "いくら" ; particle = "" ; wh8re = False} ; + i_Pron = mkPron "私" "私" True Anim ; -- "watashi" if_Subj = mkSubj "" If ; - in8front_Prep = mkPrep "の前に" "前に" ; -- "nomaeni" "maeni" - in_Prep = mkPrep "に" "" ; + in8front_Prep = mkPrep "の前に" ; -- "nomaeni" + in_Prep = mkPrep "に" ; it_Pron = mkPron "それ" False Inanim ; - less_CAdv = {s = "のほうが" ; compar = Less} ; + less_CAdv = {s = "より" ; less = True ; s_adn = "以下"} ; -- "ika" many_Det = mkDet "多くの" "多く" Pl ; -- "ookuno" - more_CAdv = {s = "より" ; compar = More} ; + more_CAdv = {s = "より" ; less = False ; s_adn = "以上"} ; -- "ijou" most_Predet = {s = "ほとんどの" ; not = False} ; much_Det = mkDet "多くの" "多量" Sg ; -- "ookuno" "taryou" - must_VV = {s = (mkVerb "なら" "なり" "なる" "なった").s ; te = "ならなくて" ; - ba = "ならなければ" ; a_stem = "なら" ; i_stem = "なり" ; sense = Oblig} ; - no_Phr = ss "いいえ" ; - no_Utt = {s = \\st => "いいえ"} ; - on_Prep = mkPrep "の上に" "" ; + must_VV = mkMust ; + no_Phr = {s = "いいえ"} ; + no_Utt = {s = \\part,st => "いいえ" ; type = NoImp} ; + on_Prep = mkPrep "の上に" ; -- "noueni" only_Predet = {s = "ほんの" ; not = False} ; or_Conj = mkConj "それとも" Or ; otherwise_PConj = ss "そうしなければ" ; - part_Prep = mkPrep "の" "" ; - please_Voc = {s = table {Resp => "ください" ; Plain => "" } ; please = True} ; - possess_Prep = mkPrep "の" "" ; + part_Prep = mkPrep "の" ; + please_Voc = {s = \\st => "ください" ; type = Please ; null = ""} ; + possess_Prep = mkPrep "の" ; quite_Adv = ss "可成" ; -- "kanari" she_Pron = mkPron "彼女" False Anim ; -- "kanojo" so_AdA = ss "非常に" ; -- "hijooni" @@ -73,48 +69,47 @@ flags coding = utf8 ; somewhere_Adv = mkAdv "どこかに" ; that_Quant = {s = \\st => "その" ; sp = \\st => "それ" ; no = False} ; that_Subj = mkSubj "ことを" That ; - there_Adv = mkAdv "そこに" ; + there_Adv = mkAdv "そこで" ; there7to_Adv = mkAdv "そこに" ; there7from_Adv = mkAdv "そこから" ; therefore_PConj = ss "それで" ; they_Pron = mkPron "彼ら" "あの人達" False Anim ; -- "karera" "ano hito-tachi" this_Quant = {s = \\st => "この" ; sp = \\st => "これ" ; no = False} ; - through_Prep = mkPrep "を通じて" "通じて" ; -- "otsuujite" - to_Prep = mkPrep "に" "" ; + through_Prep = mkPrep "を通じて" ; -- "otsuujite" + to_Prep = mkPrep "に" ; too_AdA = ss "あまりにも" ; - under_Prep = mkPrep "の下に" "下に" ; -- "noshitani" + under_Prep = mkPrep "の下に" ; -- "noshitani" very_AdA = ss "とても" ; - want_VV = {s = (mkVerb "い" "い" "いる" "いった").s ; te = "いって" ; - ba = "いれば" ; a_stem = "い" ; i_stem = "い" ; sense = Wish} ; + want_VV = mkWant ; we_Pron = mkPron "私達" False Anim ; -- "watashitachi" - whatPl_IP = {s = \\st => "何" ; anim = Inanim ; how8many = False} ; -- "nani" - whatSg_IP = {s = \\st => "何" ; anim = Inanim ; how8many = False} ; - when_IAdv = {s = \\st => "いつ" ; particle = ""} ; + whatPl_IP = {s_subj, s_obj = \\st => "何" ; anim = Inanim ; how8many = False} ; -- "nani" + whatSg_IP = {s_subj, s_obj = \\st => "何" ; anim = Inanim ; how8many = False} ; + when_IAdv = {s = \\st => "いつ" ; particle = "" ; wh8re = False} ; when_Subj = mkSubj "と" OtherSubj ; - where_IAdv = {s = \\st => "どこ" ; particle = "で"} ; + where_IAdv = {s = \\st => "どこ" ; particle = "で" ; wh8re = True} ; which_IQuant = ss "どの" ; - whoPl_IP = {s = \\st => "誰" ; anim = Anim ; how8many = False} ; - whoSg_IP = {s = \\st => "誰" ; anim = Anim ; how8many = False} ; - why_IAdv = {s = \\st => "どうして" ; particle = ""} ; - with_Prep = mkPrep "と" "" ; - without_Prep = mkPrep "無しで" "無しで" ; -- "nashide" - yes_Phr = ss "はい" ; - yes_Utt = {s = \\st => "はい"} ; - youSg_Pron = mkPron ("あなた"|"君") "あなた" False Anim ; -- ("anata"|"kimi") + whoPl_IP = {s_subj, s_obj = \\st => "誰" ; anim = Anim ; how8many = False} ; -- "dare" + whoSg_IP = {s_subj, s_obj = \\st => "誰" ; anim = Anim ; how8many = False} ; + why_IAdv = {s = \\st => "どうして" ; particle = "" ; wh8re = False} ; + with_Prep = mkPrep "と" ; + without_Prep = mkPrep "無しで" ; -- "nashide" + yes_Phr = {s = "はい"} ; + yes_Utt = {s = \\part,st => "はい" ; type = NoImp} ; + youSg_Pron = mkPron "あなた" "あなた" False Anim ; youPl_Pron = mkPron "あなた達" "あなた方" False Anim ; -- "anatatachi" "anatagata" youPol_Pron = mkPron "あなた" False Anim ; - no_Quant = {s = \\st => "" ; sp = \\st => "何も" ; no = True} ; + no_Quant = {s = \\st => "" ; sp = \\st => "何も" ; no = True} ; -- "nanimo" not_Predet = {s = "" ; not = True} ; at_least_AdN = {s = "少なくとも" ; postposition = False} ; -- "sukunakutomo" at_most_AdN = {s = "せいぜい" ; postposition = False} ; - nobody_NP = mkNP "誰も" False True Anim ; - nothing_NP = mkNP "何も" False True Inanim ; - except_Prep = mkPrep "を除いて" "を除いて" ; -- "onozoite" - - as_CAdv = {s = "と同じぐらい" ; compar = NoCompar} ; -- "toonajigurai" - - have_V2 = mkV2 "持ってい" "持ってい" "持っている" "持っていた" "を" ; + nobody_NP = mkNP "誰も" False True Anim ; -- "daremo" + nothing_NP = mkNP "何も" False True Inanim ; -- "nanimo" + except_Prep = mkPrep "を除いて" ; - language_title_Utt = {s = \\st => "日本語"} ; -- "nihongo" + as_CAdv = {s = "と同じぐらい" ; less = False ; s_adn = "もの"} ; + + have_V2 = mkV2 "持っている" "を" Gr2 ; + + language_title_Utt = {s = \\part,st => "日本語" ; type = NoImp} ; -- "nihongo" } diff --git a/lib/src/japanese/TextJap.gf b/lib/src/japanese/TextJap.gf index b20555998..38addace7 100644 --- a/lib/src/japanese/TextJap.gf +++ b/lib/src/japanese/TextJap.gf @@ -4,7 +4,7 @@ flags coding = utf8 ; lin - TEmpty = ss "" ; + TEmpty = {s = ""} ; TFullStop phr txt = {s = phr.s ++ "." ++ txt.s} ; diff --git a/lib/src/japanese/VerbJap.gf b/lib/src/japanese/VerbJap.gf index 904a8dc67..0a9d49552 100644 --- a/lib/src/japanese/VerbJap.gf +++ b/lib/src/japanese/VerbJap.gf @@ -5,208 +5,183 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { lin UseV v = { - verb = \\a,st,t,p => v.s ! st ! t ! p ; - te = \\a,st => v.te ; - a_stem = \\a,st => v.a_stem ; - i_stem = \\a,st => v.i_stem ; - ba = \\a,st => v.ba ; + verb = \\sp,a,st,t,p => v.s ! st ! t ! p ; + te = \\sp,a,st => v.te ; + a_stem = \\sp,a,st => v.a_stem ; + i_stem = \\sp,a,st => v.i_stem ; + ba = \\sp,a,st => v.ba ; prep = [] ; obj = \\st => [] ; - prepositive = \\st => [] ; - compar = NoCompar + prepositive = \\st => [] } ; ComplVV v vp = case v.sense of { Abil => { - verb = \\a,st,t,p => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ - "ことが" ++ v.s ! st ! t ! p ; - te = \\a,st => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.te ; - a_stem = \\a,st => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.a_stem ; - i_stem = \\a,st => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.i_stem ; - ba = \\a,st => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.ba ; + verb = \\sp,a,st,t,p => vp.verb ! sp ! a ! Plain ! TPres ! ResJap.Pos ++ + "ことが" ++ v.s ! sp ! st ! t ! p ; + te = \\sp,a,st,p => vp.verb ! sp ! a ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.te ! sp ! p ; + a_stem = \\sp,a,st => vp.verb ! sp ! a ! Plain ! TPres ! ResJap.Pos ++ + "ことが" ++ v.a_stem ! sp ; + i_stem = \\sp,a,st => vp.verb ! sp ! a ! Plain ! TPres ! ResJap.Pos ++ + "ことが" ++ v.i_stem ! sp ; + ba = \\sp,a,st,p => vp.verb ! sp ! a ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.ba ! sp ! p ; prep = vp.prep ; obj = \\st => vp.obj ! st ; - prepositive = vp.prepositive ; - compar = NoCompar + prepositive = vp.prepositive } ; Oblig => { - verb = \\a,st,t,p => vp.a_stem ! Anim ! st ++ "なければ" ++ v.s ! st ! t ! Neg ; - te = \\a,st => vp.a_stem ! Anim ! st ++ "なければ" ++ v.te ; - a_stem = \\a,st => vp.a_stem ! Anim ! st ++ "なければ" ++ v.a_stem ; - i_stem = \\a,st => vp.a_stem ! Anim ! st ++ "なければ" ++ v.i_stem ; - ba = \\a,st => vp.a_stem ! Anim ! st ++ "なければ" ++ v.ba ; + verb = \\sp,a,st,t => table { + Pos => vp.a_stem ! sp ! a ! st ++ "なければ" ++ v.s ! sp ! st ! t ! Neg ; + Neg => vp.te ! sp ! a ! st ! Pos ++ "は" ++ v.s ! sp ! st ! t ! Neg + } ; + te = \\sp,a,st => table { + Pos => vp.a_stem ! sp ! a ! st ++ "なければ" ++ v.te ! sp ! Pos ; + Neg => vp.te ! sp ! a ! st ! Pos ++ "は" ++ v.te ! sp ! Pos + } ; + a_stem = \\sp,a,st => vp.a_stem ! sp ! a ! st ++ "なければ" ++ v.a_stem ! sp ; + i_stem = \\sp,a,st => vp.a_stem ! sp ! a ! st ++ "なければ" ++ v.i_stem ! sp ; + ba = \\sp,a,st => table { + Pos => vp.a_stem ! sp ! a ! st ++ "なければ" ++ v.ba ! sp ! Pos ; + Neg => vp.te ! sp ! a ! st ! Pos ++ "は" ++ v.ba ! sp ! Pos + } ; prep = vp.prep ; obj = \\st => vp.obj ! st ; - prepositive = vp.prepositive ; - compar = NoCompar + prepositive = vp.prepositive } ; Wish => { - verb = \\a,st,t,p => vp.i_stem ! Anim ! st ++ "たがって" ++ v.s ! st ! t ! p ; - te = \\a,st => vp.i_stem ! Anim ! st ++ "たがって" ++ v.te ; - a_stem = \\a,st => vp.i_stem ! Anim ! st ++ "たがって" ++ v.a_stem ; - i_stem = \\a,st => vp.i_stem ! Anim ! st ++ "たがって" ++ v.i_stem ; - ba = \\a,st => vp.i_stem ! Anim ! st ++ "たがって" ++ v.ba ; + verb = \\sp,a,st,t,p => vp.i_stem ! sp ! a ! st ++ v.s ! sp ! st ! t ! p ; + te = \\sp,a,st,p => vp.i_stem ! sp ! a ! st ++ v.te ! sp ! p ; + a_stem = \\sp,a,st => vp.i_stem ! sp ! a ! st ++ v.a_stem ! sp ; + i_stem = \\sp,a,st => vp.i_stem ! sp ! a ! st ++ v.i_stem ! sp ; + ba = \\sp,a,st,p => vp.i_stem ! sp ! a ! st ++ v.ba ! sp ! p ; prep = vp.prep ; obj = \\st => vp.obj ! st ; - prepositive = vp.prepositive ; - compar = NoCompar + prepositive = vp.prepositive } } ; ComplVS vs sent = { - verb = \\a,st,t,p => vs.s ! st ! t ! p ; - te = \\a,st => vs.te ; - a_stem = \\a,st => vs.a_stem ; - i_stem = \\a,st => vs.i_stem ; - ba = \\a,st => vs.ba ; + verb = \\sp,a,st,t,p => vs.s ! st ! t ! p ; + te = \\sp,a,st => vs.te ; + a_stem = \\sp,a,st => vs.a_stem ; + i_stem = \\sp,a,st => vs.i_stem ; + ba = \\sp,a,st => vs.ba ; prep = vs.prep ; - obj = \\st => sent.s ! Ga ! Plain ; - prepositive = \\st => [] ; - compar = NoCompar + obj = \\st => sent.subj ! Ga ! st ++ sent.pred ! Plain ; + prepositive = \\st => [] } ; ComplVQ vq qs = { - verb = \\a,st,t,p => vq.s ! st ! t ! p ; - te = \\a,st => vq.te ; - a_stem = \\a,st => vq.a_stem ; - i_stem = \\a,st => vq.i_stem ; - ba = \\a,st => vq.ba ; - prep = vq.prep ; - obj = \\st => qs.s ! Ga ! Plain ++ "こと" ; - prepositive = \\st => [] ; - compar = NoCompar + verb = \\sp,a,st,t,p => vq.s ! st ! t ! p ; + te = \\sp,a,st => vq.te ; + a_stem = \\sp,a,st => vq.a_stem ; + i_stem = \\sp,a,st => vq.i_stem ; + ba = \\sp,a,st => vq.ba ; + prep = "" ; + obj = \\st => qs.s_plain_pred ! Ga ! st ; + prepositive = \\st => [] } ; ComplVA va ap = { - verb = \\a,st,t,p => va.s ! st ! t ! p ; - te = \\a,st => va.te ; - a_stem = \\a,st => va.a_stem ; - i_stem = \\a,st => va.i_stem ; - ba = \\a,st => va.ba ; + verb = \\sp,a,st,t,p => va.s ! st ! t ! p ; + te = \\sp,a,st => va.te ; + a_stem = \\sp,a,st => va.a_stem ; + i_stem = \\sp,a,st => va.i_stem ; + ba = \\sp,a,st => va.ba ; prep = [] ; obj = \\st => ap.adv ! st ; - prepositive = ap.prepositive ; - compar = NoCompar + prepositive = ap.prepositive } ; SlashV2a v2 = { - s = \\st,t,p => v2.s ! st ! t ! p ; - a_stem = v2.a_stem ; - i_stem = v2.i_stem ; - ba = v2.ba ; + s = \\sp,st,t,p => v2.s ! st ! t ! p ; + a_stem = \\sp => v2.a_stem ; + i_stem = \\sp => v2.i_stem ; + ba = \\sp => v2.ba ; prep = v2.prep ; obj = \\st => [] ; prepositive = \\st => [] ; - te = v2.te ; - v2vType = False ; - compar = NoCompar + te = \\sp => v2.te ; + v2vType = False } ; - Slash2V3 v3 np = case v3.give of { - True => { - s = \\st,t,p => case np.Pron1Sg of { - True => (mkVerb "呉れ" "呉れ" "呉れる" "呉れた").s ! st ! t ! p ; -- "kureru" - False => v3.s ! st ! t ! p - } ; - a_stem = case np.Pron1Sg of { - True => "呉れ" ; - False => "上げ" - } ; - i_stem = case np.Pron1Sg of { - True => "呉れ" ; - False => "上げ" - } ; - ba = case np.Pron1Sg of { - True => "呉れれば" ; - False => "上げれば" - } ; + Slash2V3 v3 np = { + s = \\sp,st,t,p => v3.s ! np.meaning ! st ! t ! p ; + a_stem = \\sp => v3.a_stem ! np.meaning ; + i_stem = \\sp => v3.i_stem ! np.meaning ; + ba = \\sp,p => v3.ba ! np.meaning ! p ; prep = v3.prep2 ; obj = \\st => np.s ! st ++ v3.prep1 ; prepositive = np.prepositive ; - te = case np.Pron1Sg of { - True => "呉れて" ; - False => "上げて" - } ; - v2vType = False ; - compar = NoCompar - } ; - False => { - s = \\st,t,p => v3.s ! st ! t ! p ; - a_stem = v3.a_stem ; - i_stem = v3.i_stem ; - ba = v3.ba ; - prep = v3.prep2 ; - obj = \\st => np.s ! st ++ v3.prep1 ; - prepositive = np.prepositive ; - te = v3.te ; - v2vType = False ; - compar = NoCompar - } + te = \\sp,p => v3.te ! np.meaning ! p ; + v2vType = False } ; Slash3V3 = Slash2V3 ; SlashV2V v2v vp = { - s = \\st,t,p => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" - ++ v2v.s ! st ! t ! p ; - a_stem = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.a_stem ; - i_stem = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.i_stem ; - ba = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.ba ; + s = \\sp,st,t,p => vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" + ++ v2v.s ! st ! t ! p ; + a_stem = \\sp => vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! ResJap.Pos ++ + "ように" ++ v2v.a_stem ; + i_stem = \\sp => vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! ResJap.Pos ++ + "ように" ++ v2v.i_stem ; + ba = \\sp,p => vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ + v2v.ba ! p ; prep = "に" ; obj = \\st => vp.obj ! st ++ vp.prep ; - te = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.te ; + te = \\sp,p => vp.verb ! SomeoneElse ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ + v2v.te ! p ; prepositive = vp.prepositive ; - v2vType = True ; - compar = NoCompar + v2vType = True } ; SlashV2S v2s s = { - s = v2s.s ; - a_stem = v2s.a_stem ; - i_stem = v2s.i_stem ; - ba = v2s.ba ; + s = \\sp,st,t,p => v2s.s ! st ! t ! p ; + a_stem = \\sp => v2s.a_stem ; + i_stem = \\sp => v2s.i_stem ; + ba = \\sp => v2s.ba ; prep = "に" ; - obj = \\st => s.s ! Ga ! Plain ++ "と" ; + obj = \\st => s.subj ! Ga ! st ++ s.pred ! Plain ++ "と" ; prepositive = \\st => [] ; - te = v2s.te ; - v2vType = False ; - compar = NoCompar + te = \\sp => v2s.te ; + v2vType = False } ; SlashV2Q v2q qs = { - s = v2q.s ; - a_stem = v2q.a_stem ; - i_stem = v2q.i_stem ; - ba = v2q.ba ; + s = \\sp,st,t,p => v2q.s ! st ! t ! p ; + a_stem = \\sp => v2q.a_stem ; + i_stem = \\sp => v2q.i_stem ; + ba = \\sp => v2q.ba ; prep = "に" ; - obj = \\st => qs.s ! Ga ! Plain ++ "ことを" ; + obj = \\st => qs.s_plain_pred ! Ga ! st ; prepositive = \\st => [] ; - te = v2q.te ; - v2vType = True ; - compar = NoCompar + te = \\sp => v2q.te ; + v2vType = True } ; SlashV2A v2a ap = { - s = v2a.s ; - a_stem = v2a.a_stem ; - i_stem = v2a.i_stem ; - ba = v2a.ba ; + s = \\sp,st,t,p => v2a.s ! st ! t ! p ; + a_stem = \\sp => v2a.a_stem ; + i_stem = \\sp => v2a.i_stem ; + ba = \\sp => v2a.ba ; prep = "を" ; obj = ap.adv ; prepositive = ap.prepositive ; - te = v2a.te ; - v2vType = True ; - compar = NoCompar + te = \\sp => v2a.te ; + v2vType = True } ; ComplSlash vpslash np = { - verb = \\a,st,t,p => case np.changePolar of { - True => vpslash.s ! st ! t ! Neg ; - False => vpslash.s ! st ! t ! p + verb = \\sp,a,st,t,p => case np.changePolar of { + True => vpslash.s ! sp ! st ! t ! Neg ; + False => vpslash.s ! sp ! st ! t ! p } ; - a_stem = \\a,st => vpslash.a_stem ; - i_stem = \\a,st => vpslash.i_stem ; - ba = \\a,st => vpslash.ba ; + a_stem = \\sp,a,st => vpslash.a_stem ! sp ; + i_stem = \\sp,a,st => vpslash.i_stem ! sp ; + ba = \\sp,a,st,p => vpslash.ba ! sp ! p ; prep = case np.needPart of { True => case vpslash.v2vType of { True => [] ; @@ -218,85 +193,104 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { True => np.s ! st ++ vpslash.prep ++ vpslash.obj ! st ; False => vpslash.obj ! st ++ np.s ! st } ; - te = \\a,st => vpslash.te ; - prepositive = \\st => np.prepositive ! st ++ vpslash.prepositive ! st ; - compar = vpslash.compar + te = \\sp,a,st,p => vpslash.te ! sp ! p ; + prepositive = \\st => np.prepositive ! st ++ vpslash.prepositive ! st } ; - SlashVV v vpslash = { - s = \\st,t,p => case v.sense of { - Abil => vpslash.s ! Plain ! TPres ! ResJap.Pos ++ - "ことが" ++ v.s ! st ! t ! p ; - Oblig => vpslash.a_stem ++ "なければ" ++ v.s ! st ! t ! p ; - Wish => vpslash.i_stem ++ "たがって" ++ v.s ! st ! t ! p + SlashVV v vpslash = case v.sense of { + Abil => { + s = \\sp,st,t,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ + "ことが" ++ v.s ! sp ! st ! t ! p ; + te = \\sp,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.te ! sp ! p ; + a_stem = \\sp => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.a_stem ! sp ; + i_stem = \\sp => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.i_stem ! sp ; + ba = \\sp,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ + v.ba ! sp ! p ; + prep = vpslash.prep ; + obj = vpslash.obj ; + prepositive = vpslash.prepositive ; + v2vType = False } ; - te = case v.sense of { - Abil => vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.te ; - Oblig => vpslash.a_stem ++ "なければ" ++ v.te ; - Wish => vpslash.i_stem ++ "たがって" ++ v.te + Oblig => { + s = \\sp,st,t => table { + Pos => vpslash.a_stem ! sp ++ "なければ" ++ v.s ! sp ! st ! t ! Neg ; + Neg => vpslash.te ! sp ! Pos ++ "は" ++ v.s ! sp ! st ! t ! Neg + } ; + te = \\sp => table { + Pos => vpslash.a_stem ! sp ++ "なければ" ++ v.te ! sp ! Pos ; + Neg => vpslash.te ! sp ! Pos ++ "は" ++ v.te ! sp ! Pos + } ; + a_stem = \\sp => vpslash.a_stem ! sp ++ "なければ" ++ v.a_stem ! sp ; + i_stem = \\sp => vpslash.a_stem ! sp ++ "なければ" ++ v.i_stem ! sp ; + ba = \\sp => table { + Pos => vpslash.a_stem ! sp ++ "なければ" ++ v.ba ! sp ! Pos ; + Neg => vpslash.te ! sp ! Pos ++ "は" ++ v.ba ! sp ! Pos + } ; + prep = vpslash.prep ; + obj = vpslash.obj ; + prepositive = vpslash.prepositive ; + v2vType = False } ; - a_stem = [] ; - i_stem = [] ; - ba = case v.sense of { - Abil => vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.ba ; - Oblig => vpslash.a_stem ++ "なければ" ++ v.ba ; - Wish => vpslash.i_stem ++ "たがって" ++ v.ba - } ; - prep = vpslash.prep ; - obj = vpslash.obj ; - prepositive = vpslash.prepositive ; - v2vType = False ; - compar = vpslash.compar - } ; + Wish => { + s = \\sp,st,t,p => vpslash.i_stem ! sp ++ v.s ! sp ! st ! t ! p ; + te = \\sp,p => vpslash.i_stem ! sp ++ v.te ! sp ! p ; + a_stem = \\sp => vpslash.i_stem ! sp ++ v.a_stem ! sp ; + i_stem = \\sp => vpslash.i_stem ! sp ++ v.i_stem ! sp ; + ba = \\sp,p => vpslash.i_stem ! sp ++ v.ba ! sp ! p ; + prep = vpslash.prep ; + obj = vpslash.obj ; + prepositive = vpslash.prepositive ; + v2vType = False + } + } ; SlashV2VNP v2v np vpslash = { - s = \\st,t,p => vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" - ++ v2v.s ! st ! t ! p ; - a_stem = vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.a_stem ; - i_stem = vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.i_stem ; - ba = vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.ba ; + s = \\sp,st,t,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ように" + ++ v2v.s ! st ! t ! p ; + a_stem = \\sp => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.a_stem ; + i_stem = \\sp => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.i_stem ; + ba = \\sp,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.ba ! p ; prep = vpslash.prep ; - obj = \\st => np.s ! st ++ "に" ; - te = vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.te ; - prepositive = vpslash.prepositive ; - v2vType = True ; - compar = vpslash.compar + obj = \\st => np.s ! st ++ "に" ++ vpslash.obj ! st ; + te = \\sp,p => vpslash.s ! sp ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.te ! p ; + prepositive = \\st => np.prepositive ! st ++ vpslash.prepositive ! st ; + v2vType = True } ; ReflVP vpslash = { - verb = \\a,st,t,p => vpslash.s ! st ! t ! p ; - a_stem = \\a,st => vpslash.a_stem ; - i_stem = \\a,st => vpslash.i_stem ; - ba = \\a,st => vpslash.ba ; + verb = \\sp,a,st,t,p => vpslash.s ! sp ! st ! t ! p ; + a_stem = \\sp,a,st => vpslash.a_stem ! sp ; + i_stem = \\sp,a,st => vpslash.i_stem ! sp ; + ba = \\sp,a,st,p => vpslash.ba ! sp ! p ; prep = vpslash.prep ; - obj = \\st => "自分" ; -- "jibun" - te = \\a,st => vpslash.te ; - prepositive = vpslash.prepositive ; - compar = vpslash.compar + obj = \\st => vpslash.obj ! st ++ "自分" ; -- "jibun" + te = \\sp,a,st,p => vpslash.te ! sp ! p ; + prepositive = vpslash.prepositive } ; UseComp comp = { - verb = comp.verb ; - te = comp.te ; - a_stem = comp.a_stem ; - i_stem = comp.i_stem ; - ba = comp.ba ; + verb = \\sp,a,st,t,p => comp.verb ! a ! st ! t ! p; + te = \\sp => comp.te ; + a_stem = \\sp,a,st => comp.a_stem ! a ! st ; + i_stem = \\sp,a,st => comp.i_stem ! a ! st ; + ba = \\sp => comp.ba ; prep = [] ; obj = comp.obj ; - prepositive = comp.prepositive ; - compar = comp.compar + prepositive = comp.prepositive } ; PassV2 v2 = { - verb = \\a,st,t,p => v2.pass ! st ! t ! p ; - te = \\a,st => v2.pass_te ; - a_stem = \\a,st => v2.pass_a_stem ; - i_stem = \\a,st => v2.pass_i_stem ; - ba = \\a,st => v2.pass_ba ; + verb = \\sp,a,st,t,p => v2.pass ! st ! t ! p ; + te = \\sp,a,st => v2.pass_te ; + a_stem = \\sp,a,st => v2.pass_a_stem ; + i_stem = \\sp,a,st => v2.pass_i_stem ; + ba = \\sp,a,st => v2.pass_ba ; prep = [] ; obj = \\st => [] ; - prepositive = \\st => [] ; - compar = NoCompar + prepositive = \\st => [] } ; AdvVP vp adv = { @@ -311,10 +305,9 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { False => adv.s ! st ++ vp.obj ! st } ; prepositive = \\st => case adv.prepositive of { - True => adv.s ! st ; - False => [] - } ; - compar = adv.compar + True => vp.prepositive ! st ++ adv.s ! st ; + False => vp.prepositive ! st + } } ; AdVVP adv vp = { @@ -325,8 +318,7 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { ba = vp.ba ; prep = vp.prep ; obj = \\st => adv.s ++ vp.obj ! st ; - prepositive = vp.prepositive ; - compar = NoCompar + prepositive = vp.prepositive } ; AdvVPSlash vpslash adv = { @@ -341,11 +333,10 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { False => adv.s ! st ++ vpslash.obj ! st } ; prepositive = \\st => case adv.prepositive of { - True => adv.s ! st ; - False => [] + True => vpslash.prepositive ! st ++ adv.s ! st ; + False => vpslash.prepositive ! st } ; - v2vType = False ; - compar = adv.compar + v2vType = False } ; AdVVPSlash adv vpslash = { @@ -357,38 +348,35 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { prep = vpslash.prep ; obj = \\st => adv.s ++ vpslash.obj ! st ; prepositive = vpslash.prepositive ; - v2vType = False ; - compar = vpslash.compar + v2vType = False } ; CompAP ap = { verb = \\a,st,t,p => ap.pred ! st ! t ! p ; - te = \\a,st => ap.te ! st ; - a_stem = \\a,st => ap.adv ! st ; - i_stem = \\a,st => ap.adv ! st ; -- for wishes - not correct! - ba = \\a,st => ap.ba ! st ; + te = \\a => ap.te ; + a_stem = \\a,st => ap.attr ! st ++ "では" ; + i_stem = \\a,st => ap.adv ! st ++ "なり" ; + ba = \\a => ap.ba ; obj = \\st => [] ; - prepositive = ap.prepositive ; - compar = ap.compar + prepositive = ap.prepositive } ; CompNP np = { verb = \\a,st,t,p => mkCopula.s ! st ! t ! p ; - te = \\a,st => "だって" ; - ba = \\a,st => "であれば" ; - a_stem = \\a,st => "で" ; - i_stem = \\a,st => "で" ; -- for wishes - not correct! + te = \\a,st => mkCopula.te ; + ba = \\a,st => mkCopula.ba ; + a_stem = \\a,st => "では" ; + i_stem = \\a,st => "になり" ; -- "become" - for wishes obj = \\st => np.s ! st ; - prepositive = np.prepositive ; - compar = NoCompar + prepositive = np.prepositive } ; CompAdv adv = { - verb = mkExistV.verb ; - te = mkExistV.te ; - ba = mkExistV.ba ; - a_stem = mkExistV.a_stem ; - i_stem = mkExistV.i_stem ; + verb = mkExistV.verb ! SomeoneElse ; + te = mkExistV.te ! SomeoneElse ; + ba = mkExistV.ba ! SomeoneElse ; + a_stem = mkExistV.a_stem ! SomeoneElse ; + i_stem = mkExistV.i_stem ! SomeoneElse ; obj = \\st => case adv.prepositive of { True => [] ; False => adv.s ! st @@ -396,32 +384,28 @@ concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { prepositive = \\st => case adv.prepositive of { True => adv.s ! st ; False => [] - } ; - compar = NoCompar + } } ; CompCN cn = { - verb = \\a,st,t,p => mkCopula.s ! st ! t ! p ; - te = \\a,st => "だって" ; - ba = \\a,st => "であれば" ; - a_stem = \\a,st => "で" ; - i_stem = \\a,st => "で" ; -- for wishes - not correct! - obj = \\st => cn.s ! (Sg|Pl) ! st ; - prepositive = cn.prepositive ; - compar = NoCompar + verb = \\a => mkCopula.s ; + te = \\a,st => mkCopula.te ; + ba = \\a,st => mkCopula.ba ; + a_stem = \\a,st => "では" ; + i_stem = \\a,st => "になり" ; -- "become" - for wishes + obj = \\st => cn.s ! Sg ! st ; + prepositive = cn.prepositive } ; UseCopula = { - verb = \\a,st,t,p => mkCopula.s ! st ! t ! p ; - te = \\a,st => "だって" ; - ba = \\a,st => "であれば" ; - a_stem = \\a,st => "で" ; - i_stem = \\a,st => "で" ; -- for wishes - not correct! + verb = \\sp,a => mkCopula.s ; + te = \\sp,a,st => mkCopula.te ; + ba = \\sp,a,st => mkCopula.ba ; + a_stem = \\sp,a,st => "では" ; + i_stem = \\sp,a,st => "なり" ; -- "become" - for wishes obj = \\st => [] ; prepositive = \\st => [] ; - prep = [] ; - compar = NoCompar + prep = [] } ; } -