From 7b2ae9489589a7e588bd6132c1cdb5f4da4fa602 Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 18 Apr 2012 11:29:32 +0000 Subject: [PATCH] Japanese RGL by Liza Zimina - almost complete! --- lib/src/japanese/AdjectiveJap.gf | 134 ++++++++ lib/src/japanese/AdverbJap.gf | 40 +++ lib/src/japanese/CatJap.gf | 108 +++++++ lib/src/japanese/CommonJap.gf | 28 ++ lib/src/japanese/GrammarJap.gf | 17 + lib/src/japanese/IdiomJap.gf | 225 +++++++++++++ lib/src/japanese/LangJap.gf | 7 + lib/src/japanese/LexiconJap.gf | 355 +++++++++++++++++++++ lib/src/japanese/NounJap.gf | 291 +++++++++++++++++ lib/src/japanese/NumeralJap.gf | 140 +++++++++ lib/src/japanese/ParadigmsJap.gf | 64 ++++ lib/src/japanese/PhraseJap.gf | 52 +++ lib/src/japanese/QuestionJap.gf | 114 +++++++ lib/src/japanese/RelativeJap.gf | 48 +++ lib/src/japanese/ResJap.gf | 505 ++++++++++++++++++++++++++++++ lib/src/japanese/SentenceJap.gf | 454 +++++++++++++++++++++++++++ lib/src/japanese/StructuralJap.gf | 108 +++++++ lib/src/japanese/TenseJap.gf | 23 ++ lib/src/japanese/TextJap.gf | 14 + lib/src/japanese/VerbJap.gf | 426 +++++++++++++++++++++++++ 20 files changed, 3153 insertions(+) create mode 100644 lib/src/japanese/AdjectiveJap.gf create mode 100644 lib/src/japanese/AdverbJap.gf create mode 100644 lib/src/japanese/CatJap.gf create mode 100644 lib/src/japanese/CommonJap.gf create mode 100644 lib/src/japanese/GrammarJap.gf create mode 100644 lib/src/japanese/IdiomJap.gf create mode 100644 lib/src/japanese/LangJap.gf create mode 100644 lib/src/japanese/LexiconJap.gf create mode 100644 lib/src/japanese/NounJap.gf create mode 100644 lib/src/japanese/NumeralJap.gf create mode 100644 lib/src/japanese/ParadigmsJap.gf create mode 100644 lib/src/japanese/PhraseJap.gf create mode 100644 lib/src/japanese/QuestionJap.gf create mode 100644 lib/src/japanese/RelativeJap.gf create mode 100644 lib/src/japanese/ResJap.gf create mode 100644 lib/src/japanese/SentenceJap.gf create mode 100644 lib/src/japanese/StructuralJap.gf create mode 100644 lib/src/japanese/TenseJap.gf create mode 100644 lib/src/japanese/TextJap.gf create mode 100644 lib/src/japanese/VerbJap.gf diff --git a/lib/src/japanese/AdjectiveJap.gf b/lib/src/japanese/AdjectiveJap.gf new file mode 100644 index 000000000..9a4ec2e25 --- /dev/null +++ b/lib/src/japanese/AdjectiveJap.gf @@ -0,0 +1,134 @@ +concrete AdjectiveJap of Adjective = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + PositA adj = { + pred = adj.pred ; + attr = \\st => adj.attr ; + te = \\st => adj.te ; + tara = \\st => adj.tara ; + adv = \\st => adj.adv ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + ComparA adj np = { + 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 ; + tara = \\st => np.s ! st ++ "より" ++ adj.tara ; + adv = \\st => np.s ! st ++ "より" ++ adj.adv ; + prepositive = np.prepositive ; + compar = More + } ; + + 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 ; + tara = \\st => np.s ! st ++ a2.prep ++ a2.tara ; + prepositive = np.prepositive ; + adv = \\st => [] ; + compar = NoCompar + } ; + + 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 ; + tara = \\st => "自分" ++ a2.prep ++ a2.tara ; + adv = \\st => [] ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + UseA2 a2 = { + pred = a2.pred ; + attr = \\st => a2.attr ; + te = \\st => a2.te ; + tara = \\st => a2.tara ; + adv = \\st => [] ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + UseComparA adj = { + pred = \\st,t,p => "もっと" ++ adj.pred ! st ! t ! p ; + attr = \\st => "もっと" ++ adj.attr ; + te = \\st => "もっと" ++ adj.te ; + tara = \\st => "もっと" ++ adj.tara ; + adv = \\st => "もっと" ++ adj.adv ; + prepositive = \\st => [] ; + compar = NoCompar -- "motto" does not change the main NP's particle + } ; + + 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 ; + tara = \\st => np.s ! st ++ cadv.s ++ ap.tara ! st ; + adv = \\st => np.s ! st ++ cadv.s ++ ap.adv ! st ; + prepositive = np.prepositive ; + compar = cadv.compar + } ; + + AdjOrd ord = { + pred = ord.pred ; + attr = \\st => ord.attr ; + te = \\st => ord.te ; + tara = \\st => ord.tara ; + adv = \\st => ord.adv ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + 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 ; + tara = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.tara ! st ; + adv = \\st => sc.s ! Ga ! st ++ "ことを" ++ ap.adv ! st ; + prepositive = ap.prepositive ; + compar = ap.compar + } ; + + 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 ; + tara = \\st => ada.s ++ ap.tara ! st ; + adv = \\st => ada.s ++ ap.adv ! st ; + prepositive = ap.prepositive ; + compar = ap.compar + } ; + + AdvAP ap adv = { + pred = \\st,t,p => case adv.prepositive of { + True => ap.pred ! st ! t ! p ; + False => adv.s ! st ++ ap.pred ! st ! t ! p + } ; + attr = \\st => case adv.prepositive of { + True => ap.attr ! st ; + False => adv.s ! st ++ ap.attr ! st + } ; + te = \\st => case adv.prepositive of { + True => ap.te ! st ; + False => adv.s ! st ++ ap.te ! st + } ; + tara = \\st => case adv.prepositive of { + True => ap.tara ! st ; + False => adv.s ! st ++ ap.tara ! st + } ; + adv = \\st => case adv.prepositive of { + True => ap.adv ! st ; + False => adv.s ! st ++ ap.adv ! st + } ; + prepositive = \\st => case adv.prepositive of { + True => adv.s ! st ; + False => [] + } ; + compar = ap.compar + } ; +} diff --git a/lib/src/japanese/AdverbJap.gf b/lib/src/japanese/AdverbJap.gf new file mode 100644 index 000000000..e60e88019 --- /dev/null +++ b/lib/src/japanese/AdverbJap.gf @@ -0,0 +1,40 @@ +concrete AdverbJap of Adverb = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + PositAdvAdj a = {s = \\st => a.adv ; prepositive = False ; compar = NoCompar} ; + + PrepNP prep np = {s = \\st => np.s ! st ++ prep.s ; + prepositive = False ; compar = NoCompar} ; + + ComparAdvAdj cadv a np = {s = \\st => np.s ! st ++ cadv.s ++ a.adv ; + prepositive = False ; compar = cadv.compar} ; + + ComparAdvAdjS cadv a s = {s = \\st => s.s ! Ga ! Plain ++ "こと" ++ cadv.s ++ a.adv ; + prepositive = False ; compar = cadv.compar} ; + + AdAdv ada adv = {s = \\st => ada.s ++ adv.s ! st ; + prepositive = adv.prepositive ; compar = NoCompar} ; + + PositAdAAdj a = {s = a.adv} ; + + SubjS subj s = { + s = \\st => case subj.when of { + True => s.tara ! (Wa | Ga) ! st ; + False => s.s ! (Wa | Ga) ! st ++ subj.s + } ; + prepositive = True ; + compar = NoCompar + } ; + + AdnCAdv cadv = { + s = case cadv.compar of { + More => "以上" ; -- "ijou" + Less => "以下" ; -- "ika" ; + NoCompar => "もの" + } ; + postposition = True + } ; +} diff --git a/lib/src/japanese/CatJap.gf b/lib/src/japanese/CatJap.gf new file mode 100644 index 000000000..6a2f8b8bf --- /dev/null +++ b/lib/src/japanese/CatJap.gf @@ -0,0 +1,108 @@ +concrete CatJap of Cat = CommonJap ** open ResJap, Prelude in { + + + +flags coding = utf8 ; + + + + lincat + + S = {s : Particle => Style => Str ; + te : Particle => Style => Str ; + tara : Particle => Style => Str ; + subj : Particle => Style => Str ; + pred : Style => Str ; + } ; + QS = {s : Particle => Style => Str} ; + RS = {s : Animateness => Style => Str ; + te : Animateness => Style => Str ; + subj : Particle => Style => Str ; + pred : Animateness => Style => Str ; + pred_te : Animateness => Style => Str ; + pred_tara : Animateness => Style => Str ; + missingSubj : Bool} ; + Cl = {s : Particle => Style => TTense => Polarity => Str ; + te : Particle => Style => Str ; + tara : Particle => Style => Str ; + subj : Particle => Style => Str ; + pred : Style => TTense => Polarity => Str ; + pred_te : Style => Str ; + pred_tara : 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_tara : Style => 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} ; + 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 : Animateness => Style => Str ; + pred_tara : 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 ; tara : 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 ; tara : 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 ; + tara : Style => Str ; adv : Style => Str ; prepositive : Style => Str ; + compar : ComparSense} ; + NP = ResJap.NP ; -- {s : Style => Str ; prepositive : Style => Str ; needPart : Bool ; + -- changePolar : Bool ; Pron1Sg : Bool ; 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} ; + Predet = {s : Str} ; + Quant = {s : Style => Str} ; + 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 ; tara : Str ; adv : Str} ; + Numeral = {s : Str ; n : Number} ; + Digits = {s : Str ; n : Number} ; + Conj = Conjunction ; + Subj = {s : Str ; when : Bool} ; + Prep = Preposition ; -- {s : Str ; relPrep : Str} ; + V = Verb ; -- {s : Style => TTense => Polarity => Str ; te : Str ; + -- a_stem : Str ; i_stem : Str ; tara : Str} + V2 = Verb ** {pass: Style => TTense => Polarity => Str ; pass_te : Str ; pass_a_stem : Str ; + pass_i_stem : Str ; pass_tara : Str ; prep : Str} ; + V3 = Verb ** {prep1 : Str ; prep2 : Str ; give : Bool} ; -- "give" is a special case + VV = Verb ** {sense : ModSense} ; + VS = Verb ** {prep : Str} ; + VQ = Verb ** {prep : Str} ; + VA = Verb ; + V2V = Verb ; + V2S = Verb ; + V2Q = Verb ; + V2A = Verb ; + A = Adj ; -- {pred : Style => TTense => Polarity => Str ; + -- attr : Str; te : Str ; tara : Str ; adv : Str} ; + A2 = Adj2 ; -- Adj ** {prep : Str} ; + N = Noun ; -- {s : Number => Style => Str ; anim : Animateness ; + -- counter : Str ; counterReplace : Bool} ; + N2 = Noun ** {prep : Str; object : Style => Str} ; + N3 = Noun ** {prep1 : Str; prep2 : Str} ; + PN = PropNoun ; -- {s : Style => Str} ; + +} \ No newline at end of file diff --git a/lib/src/japanese/CommonJap.gf b/lib/src/japanese/CommonJap.gf new file mode 100644 index 000000000..f041298f2 --- /dev/null +++ b/lib/src/japanese/CommonJap.gf @@ -0,0 +1,28 @@ +concrete CommonJap of Common = open ResJap, Prelude in { + +flags coding = utf8 ; + + lincat + + Text, Phr, PConj, Interj, AdV, AdA = {s : Str} ; + + Utt = {s : Style => Str} ; + + Voc = {s : Style => Str ; please : Bool} ; + + SC = {s : Particle => Style => Str ; isVP : Bool} ; + + Adv = Adverb ; -- {s : Style => Str ; prepositive : Bool ; compar : ComparSense} ; + + AdN = {s : Str ; postposition : Bool} ; + + IAdv = {s : Style => Str ; particle : Str} ; + + CAdv = {s : Str ; compar : ComparSense} ; + + Temp = {s : Str ; t : TTense ; a : Anteriority} ; + Tense = {s : Str ; t : TTense} ; + Pol = {s : Str ; b : Polarity} ; + Ant = {s : Str ; a : Anteriority} ; + +} \ No newline at end of file diff --git a/lib/src/japanese/GrammarJap.gf b/lib/src/japanese/GrammarJap.gf new file mode 100644 index 000000000..5319cd03a --- /dev/null +++ b/lib/src/japanese/GrammarJap.gf @@ -0,0 +1,17 @@ +concrete GrammarJap of Grammar = + NounJap, + VerbJap, + AdjectiveJap, + AdverbJap, + NumeralJap, + SentenceJap, + QuestionJap, + RelativeJap, +-- ConjunctionJap, + PhraseJap, + TextJap, + StructuralJap, + IdiomJap, + TenseJap --, +-- TransferJap + ; diff --git a/lib/src/japanese/IdiomJap.gf b/lib/src/japanese/IdiomJap.gf new file mode 100644 index 000000000..50fb5021a --- /dev/null +++ b/lib/src/japanese/IdiomJap.gf @@ -0,0 +1,225 @@ +concrete IdiomJap of Idiom = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +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 + } ; + tara = table { + Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! Inanim ! st ; + Ga => \\st => vp.prepositive ! st ++ "これのほうが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Inanim ! st ; + changePolar = False + } ; + 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 ; + tara = \\part,st => vp.prepositive ! st ++ "これより" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Inanim ! st ; + changePolar = False + } ; + 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 + } ; + tara = table { + Wa => \\st => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! Inanim ! st ; + Ga => \\st => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Inanim ! st ; + changePolar = False + } + } ; + + GenericCl vp = case vp.compar of { + More => { + s = table { + Wa => \\st,t,p => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ -- "dareka" + 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 + } ; + tara = table { + Wa => \\st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! Anim ! st ; + Ga => \\st => vp.prepositive ! st ++ "誰かのほうが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! 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 ; + tara = \\part,st => vp.prepositive ! st ++ "誰かより" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! 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 ; + tara = \\part,st => vp.prepositive ! st ++ "誰か" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Anim ! st ; + 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 ++ "だって" ; + tara = \\part,st => np.prepositive ! st ++ rs.subj ! Ga ! st ++ + rs.pred ! np.anim ! Plain ++ "のは" ++ np.s ! st ++ "だったら" ; + 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_tara = \\st => np.s ! st ++ "だったら" ; + 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 ++ "だって" ; + tara = \\part,st => s.subj ! Ga ! st ++ s.pred ! Plain ++ "のは" ++ adv.s ! st ++ + "だったら" ; + 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_tara = \\st => adv.s ! st ++ "だったら" ; + changePolar = False + } ; + + ExistNP np = case np.needPart of { + True => { + s = table { + Wa => \\st,t,p => np.prepositive ! st ++ np.s ! st ++ "は" ++ + mkExistV.verb ! np.anim ! st ! t ! p ; + Ga => \\st,t,p => np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.verb ! 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 + } ; + tara = table { + Wa => \\st => np.prepositive ! st ++ np.s ! st ++ "は" ++ mkExistV.tara ! np.anim ! st ; + Ga => \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ mkExistV.tara ! np.anim ! st + } ; + 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_tara = \\st => mkExistV.tara ! np.anim ! st ; + 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 ; + tara = \\part,st => np.prepositive ! st ++ np.s ! st ++ mkExistV.tara ! np.anim ! st ; + 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_tara = \\st => mkExistV.tara ! np.anim ! st ; + changePolar = np.changePolar + } + } ; + + ExistIP ip = { + s = \\part,st,t,p => ip.s ! st ++ "が" ++ mkExistV.verb ! ip.anim ! st ! 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 ++ "い" ; + tara = \\a,st => vp.te ! a ! st ++ "いたら" ; + prep = vp.prep ; + obj = vp.obj ; + prepositive = vp.prepositive ; + compar = vp.compar + } ; + + ImpPl1 vp = {s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ + vp.i_stem ! Anim ! st ++ "ましょう"} ; + + ImpP3 np vp = {s = \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "に" ++ + vp.obj ! st ++ vp.prep ++ vp.a_stem ! Anim ! st ++ "せて"} ; +} diff --git a/lib/src/japanese/LangJap.gf b/lib/src/japanese/LangJap.gf new file mode 100644 index 000000000..113a1e0c0 --- /dev/null +++ b/lib/src/japanese/LangJap.gf @@ -0,0 +1,7 @@ +--# -path=.:../common:../abstract + + concrete LangJap of Lang = + GrammarJap, + LexiconJap + ; + diff --git a/lib/src/japanese/LexiconJap.gf b/lib/src/japanese/LexiconJap.gf new file mode 100644 index 000000000..0140d5d0a --- /dev/null +++ b/lib/src/japanese/LexiconJap.gf @@ -0,0 +1,355 @@ +concrete LexiconJap of Lexicon = GrammarJap ** open ParadigmsJap, ResJap, Prelude in { + +flags coding = utf8 ; + +lin + + add_V3 = mkV3 "加え" "加え" "加える" "加えた" "に" "を" False ; -- "kuwaeru" "ni" "o" + 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" + 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" + back_N = mkN "背" Inanim ; -- "se" + bad_A = mkA "悪い" ; -- "warui" + bank_N = mkN "銀行" Inanim ; -- "ginkou" + bark_N = mkN "木皮" Inanim ; -- "kohada" Inanim ; + beautiful_A = mkA "美しい" ; -- "utsukushii" + become_VA = mkV "なら" "なり" "なる" "なった" ; -- "naru" + beer_N = mkN "ビール" Inanim "杯" False ; -- "biiru" "hai" + beg_V2V = mkV "請い願わ" "請い願い" "請い願う" "請い願った" ; -- "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" + black_A = mkA "黒い" ; -- "kuroi" ; + blood_N = mkN "血液" Inanim ; -- "ketsueki" + blow_V = mkV "吹か" "吹き" "吹く" "吹いた" ; -- "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" + bread_N = mkN "パン" Inanim "斤" False ; -- "pan" "kin" + break_V2 = mkV2 "破ら" "破り" "破る" "破った" "を" ; -- "yaburu" "o" + breast_N = mkN "胸" Inanim ; -- "mune" + breathe_V = mkV "息し" "息し" "息する" "息した" ; -- "ikisuru" + broad_A = mkA "広い" ; -- "hiroi" + brother_N2 = mkN2 "男の兄弟" "の" Anim "人" False ; -- ("otoko" ++ "no" ++ "kyodai") "no" "nin" + brown_A = mkA "ブラウンの" ; -- "buraunno" + burn_V = mkV "焼けら" "焼けり" "焼ける" "焼けた" ; -- "yakeru" + butter_N = mkN "バター" Inanim ; -- "bataa" + buy_V2 = mkV2 "買わ" "買い" "買う" "買った" "を" ; -- "kau" + camera_N = mkN "カメラ" Inanim ; -- "kamera" + cap_N = mkN "キャップ" Inanim ; -- "kyappu" + car_N = mkN "車" Inanim "車" True ; -- "kuruma" "sha" + carpet_N = mkN "絨毯" Inanim ; -- "juutan" + cat_N = mkN "猫" Anim "匹" False ; -- "neko" "hiki" + ceiling_N = mkN "天井" Inanim ; -- "tenjou" + chair_N = mkN "椅子" Inanim "脚" False ; -- "isu" "kyaku" + cheese_N = mkN "チーズ" Inanim ; -- "chiizu" + child_N = mkN "子" Anim "人" False ; -- "ko" "nin" + church_N = mkN "教会" Inanim "軒" False ; -- "kyoukai" "ken" + city_N = mkN "都市" Inanim ; -- "toshi" + clean_A = mkA "奇麗な" ; -- "kireina" ; + clever_A = mkA "賢い" ; -- "kashikoi" ; + close_V2 = mkV2 "閉め" "閉め" "閉める" "閉めた" "を" ; -- "shimeru" + cloud_N = mkN "雲" Inanim ; -- "kumo" + coat_N = mkN "コート" Inanim ; -- "kouto" + cold_A = mkA "寒い" ; -- "samui" ; + come_V = mkV "来" "来" "来る" "来た" ; -- "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" + cow_N = mkN "牛" Anim "頭" False ; -- "ushi" "tou" + cut_V2 = mkV2 "切ら" "切り" "切る" "切った" "を" ; -- "kiru" + day_N = mkN "日" Inanim "日" True ; -- "hi" "ka"; + die_V = mkV "死な" "死に" "死ぬ" "死んだ" ; -- "shinu" + dig_V = mkV "掘ら" "掘り" "掘る" "掘った" ; -- "horu" + dirty_A = mkA "汚い" ; -- "kitanai" ; + distance_N3 = mkN3 "距離" "から" "まで" Inanim ; -- "kyori" "kara" "made" + doctor_N = mkN "医者" Anim "人" False ; -- "isha" "nin" + dog_N = mkN "犬" Anim "匹" False ; -- "inu" "hiki" + door_N = mkN "ドア" Inanim ; -- "doa" + do_V2 = mkV2 "し" "し" "する" "した" "を" ; -- "suru" + drink_V2 = mkV2 "飲ま" "飲み" "飲む" "飲んだ" "を" ; -- "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" + egg_N = mkN "卵" Inanim ; -- "tamago" + empty_A = mkA "虚しい" ; -- "munashii" ; + enemy_N = mkN "敵" Anim "人" False ; -- "teki" "nin" + eye_N = mkN "目" Inanim ; -- "me" + factory_N = mkN "工場" Inanim ; -- "koujou" + fall_V = mkV "落ち" "落ち" "落ちる" "落ちた" ; -- "ochiru" + far_Adv = mkAdv "遠くに" ; -- "tookuni" + father_N2 = mkN2 "お父さん" "の" Anim "人" False ; -- "otousan" "no" Anim "nin" False ; + fat_N = mkN "脂" Inanim ; -- "abura" + fear_VS = mkV2 "恐れ" "恐れ" "恐れる" "恐れた" "ことを" ; -- "osoreru" ("koto" ++ "o") ; + fear_V2 = mkV2 "恐れ" "恐れ" "恐れる" "恐れた" "を" ; -- "osoreru" + feather_N = mkN "羽" Inanim ; -- "hane" + fight_V2 = mkV2 "戦わ" "戦い" "戦う" "戦った" "と" ; -- "tatakau" + find_V2 = mkV2 "拾わ" "拾い" "拾う" "拾った" "を" ; -- "hirou" + fingernail_N = mkN "爪" Inanim ; -- "tsume" + fire_N = mkN "火" Inanim ; -- "hi" + fish_N = mkN "魚" Anim "匹" False ; -- "sakana" "hiki" + float_V = mkV "浮か" "浮き" "浮く" "浮いた" ; -- "uku" + floor_N = mkN "床" Inanim ; -- "yuka" + flower_N = mkN "花" Inanim "輪" False ; -- "sakana" "rin" + flow_V = mkV "流れ" "流れ" "流れる" "流れた" ; -- "nagareru" + fly_V = mkV "飛ば" "飛び" "飛ぶ" "飛んだ" ; -- "tobu" + fog_N = mkN "霧" Inanim ; -- "kiri" + foot_N = mkN "足" Inanim ; -- "ashi" + forest_N = mkN "森" Inanim ; -- "mori" + forget_V2 = mkV2 "忘れ" "忘れ" "忘れる" "忘れた" "を" ; -- "wasureru" + freeze_V = mkV "凍らさ" "凍らし" "凍らす" "凍らした" ; -- "kourasu" + fridge_N = mkN "冷蔵庫" Inanim ; -- "reizouko" + friend_N = mkN "友だち" Anim "人" False ; -- "tomodachi" "nin" + 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" + glove_N = mkN "手袋" Inanim ; -- "tebukuro" + gold_N = mkN "金" Inanim ; -- "kin" + good_A = mkA "良い" ; -- "ii" ; + go_V = mkV "行か" "行き" "行く" "行った" ; -- "iku" + grammar_N = mkN "文法" Inanim ; -- "bumpou" + grass_N = mkN "草" Inanim ; -- "kusa" + green_A = mkA "緑の" ; -- "midorino" ; + guts_N = mkN "腸" Inanim ; -- "harawata" + hair_N = mkN "髪" Inanim ; -- "kami" + hand_N = mkN "手" Inanim ; -- "te" + harbour_N = mkN "港" Inanim ; -- "minato" + hate_V2 = mkV2 "憎ま" "憎み" "憎む" "憎んだ" "を" ; -- "nikumu" + hat_N = mkN "帽子" Inanim ; -- "boushi" + head_N = mkN "頭" Inanim ; -- "atama" + heart_N = mkN "心" Inanim ; -- "kokoro" + hear_V2 = mkV2 "聞か" "聞き" "聞く" "聞いた" "を" ; -- "kiku" + heavy_A = mkA "重い" ; -- "omoi" ; + hill_N = mkN "丘" Inanim ; -- "oka" + hit_V2 = mkV2 "打た" "打ち" "打つ" "打った" "を" ; -- "utsu" + hold_V2 = mkV2 "持た" "持ち" "持つ" "持った" "を" ; -- "motsu" + hope_VS = mkV2 "期待し" "期待し" "期待する" "期待した" "ことを" ; -- "kitaisuru" ("koto" ++ "o") ; + 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" + 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" + knee_N = mkN "心" Inanim ; -- "kokoro" + know_V2 = mkV2 "知ら" "知り" "知る" "知った" "を" ; -- "shiru" "o" + know_VQ = mkV2 "知ら" "知り" "知る" "知った" "を" ; -- "shiru" "o" + know_VS = mkV2 "知ら" "知り" "知る" "知った" "ことを" ; -- "shiru" ("koto" ++ "o") ; + lake_N = mkN "湖" Inanim ; -- "mizuumi" + lamp_N = mkN "電灯" Inanim ; -- "dentou" + language_N = mkN "言語" Inanim "語" True ; -- "gengo" "go" + laugh_V = mkV "笑わ" "笑い" "笑う" "笑った" ; -- "warau" + leaf_N = mkN "葉" Inanim "葉" True ; -- "ha" "ha" + learn_V2 = mkV2 "学ば" "学び" "学ぶ" "学んだ" "を" ; -- "manabu" "o" + leather_N = mkN "皮革" Inanim ; -- "hikaku" + leave_V2 = mkV2 "残さ" "残し" "残す" "残した" "を" ; -- "nokosu" "o" + left_Ord = mkA "左の" ; -- "hidarino" ; + leg_N = mkN "足" Inanim ; -- "ashi" + lie_V = mkV "横になら" "横になり" "横になる" "横になった" ; -- "yokoninaru" + like_V2 = mkV2 "好か" "好き" "好く" "好いた" "を" ; -- "suku" "o" + listen_V2 = mkV2 "聞か" "聞き" "聞く" "聞いた" "を" ; -- "kiku" + liver_N = mkN "肝臓" Inanim ; -- "kanzou" + live_V = mkV "生き" "生き" "生きる" "生きた" ; -- "ikiru" + long_A = mkA "長い" ; -- "nagai" + lose_V2 = mkV2 "失わ" "失い" "失う" "失った" "を" ; -- "ushinau" "o" + 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" ; + meat_N = mkN "肉" Inanim ; -- "niku" + milk_N = mkN "ミルク" Inanim ; -- "miruku" + moon_N = mkN "月" Inanim ; -- "tsuki" + mother_N2 = mkN2 "お母さん" "の" Anim "人" False ; -- "okaasan" "no" "nin" + mountain_N = mkN "山" Inanim "座" False ; -- "yama" "za" + mouth_N = mkN "口" Inanim ; -- "kuchi" + music_N = mkN "音楽" Inanim ; -- "ongaku" + name_N = mkN "名前" "お名前" Inanim ; -- "namae" "onamae" + narrow_A = mkA "狭い" ; -- "semai" + near_A = mkA "近い" ; -- "chikai" + neck_N = mkN "首" Inanim ; -- "kubi" + new_A = mkA "新しい" ; -- "atarashii" + newspaper_N = mkN "新聞" Inanim "部" False ; -- "shimbun" "bu" + night_N = mkN "夜" Inanim "夜" True ; -- "yoru" "ya" + nose_N = mkN "鼻" Inanim ; -- "hana" + now_Adv = mkAdv "今" ; -- "ima" + 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" + paper_N = mkN "紙" Inanim "葉" False ; -- "kami" "you" + paris_PN = mkPN "パリ" ; -- "pari" + peace_N = mkN "平和" Inanim ; -- "heiwa" + pen_N = mkN "ペン" Inanim "本" False ; -- "pen" "hon" + person_N = mkN "人" Anim "人" True ; -- "hito" "nin" + 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" + 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" + 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" + ready_A = mkA "準備ができている" "準備ができて" ; -- "jumbigadekiteiru" + reason_N = mkN "理由" Inanim ; -- "riyuu" + red_A = mkA "赤い" ; -- "akai" + religion_N = mkN "宗教" Inanim ; -- "shuukyou" + restaurant_N = mkN "レストラン" Inanim ; -- "resutoran" + right_Ord = mkA "右の" ; -- "migino" + river_N = mkN "川" Inanim "本" False ; -- "kawa" "hon" + road_N = mkN "道路" Inanim "本" False ; -- "douro" "hon" + rock_N = mkN "岩" Inanim ; -- "iwa" + roof_N = mkN "屋根" Inanim ; -- "yane" + root_N = mkN "根" Inanim ; -- "ne" + rope_N = mkN "縄" Inanim "本" False ; -- "nawa" + rotten_A = mkA "腐っている" "腐った" ; -- "kusatteiru" + round_A = mkA "丸い" ; -- "marui" + rubber_N = mkN "ゴム" Inanim ; -- "gomu" - material + rub_V2 = mkV2 "摩ら" "摩り" "摩る" "摩った" "を" ; -- "suru" "o" + rule_N = mkN "定め" Inanim "則" True ; -- "sadame" "soku" + run_V = mkV "走ら" "走り" "走る" "走った" ; -- "hashiru" + salt_N = mkN "塩" Inanim ; -- "shio" + sand_N = mkN "砂" Inanim ; -- "suna" + say_VS = mkV2 "言わ" "言い" "言う" "言った" "と" ; -- "iu" "to" + school_N = mkN "学校" Inanim ; -- "gakkou" + science_N = mkN "科学" Inanim ; -- "kagaku" + scratch_V2 = mkV2 "掻か" "掻き" "掻く" "掻いた" "を" ; -- "kaku" "o" + 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" + sharp_A = mkA "鋭い" ; -- "surudoi" + sheep_N = mkN "羊" Anim "頭" False ; -- "hitsuji" "tou" + ship_N = mkN "船" Inanim "杯" False ; -- "fune" "hai" + shirt_N = mkN "シャツ" Inanim ; -- "shatsu" + shoe_N = mkN "靴" Inanim ; -- "kutsu" + 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" + skin_N = mkN "皮膚" Inanim ; -- "hifu" + sky_N = mkN "空" Inanim ; -- "sora" + sleep_V = mkV "寝" "寝" "寝る" "寝た" ; -- "neru" + small_A = mkA "小さい" ; -- "chisai" + smell_V = mkV "匂わ" "匂い" "匂う" "匂った" ; -- "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" + 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" + stove_N = mkN "ストーブ" Inanim ; -- "sutobu" + straight_A = mkA "直な" ; -- "chokuna" + student_N = mkN "学生" Anim "人" False ; -- "gakusei" "nin" + stupid_A = mkA "愚かな" ; -- "orokana" + suck_V2 = mkV2 "吸わ" "吸い" "吸う" "吸った" "を" ; -- "suu" "o" + sun_N = mkN "太陽" Inanim ; -- "taiyou" + swell_V = mkV "膨らま" "膨らみ" "膨らむ" "膨らんだ" ; -- "fukuramu" + swim_V = mkV "泳が" "泳ぎ" "泳ぐ" "泳いだ" ; -- "oyogu" + switch8off_V2 = mkV2 "スイッチを切ら" "スイッチを切り" "スイッチを切る" "スイッチを切った" "の" ; -- "suitchiokiru" "o" + switch8on_V2 = mkV2 "スイッチを入れ" "スイッチを入れ" "スイッチを入れる" "スイッチを入れた" "の" ; -- "suitchioireru" "o" + 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" + 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" + 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" + tree_N = mkN "木" Inanim "樹" True ; -- "ki" "ju" + turn_V = mkV "回ら" "回り" "回る" "回った" ; -- "mawaru" + ugly_A = mkA "醜い" ; -- "mnikui" + uncertain_A = mkA "危なっかしい" ; -- "abunakkashii" + understand_V2 = mkV2 "理解し" "理解し" "理解する" "理解した" "を" ; -- "rikaisuru" "o" + 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" + warm_A = mkA "暖かい" ; -- "atatakai" + war_N = mkN "戦争" Inanim ; -- "sensou" + wash_V2 = mkV2 "洗わ" "洗い" "洗う" "洗った" "を" ; -- "arau" "o" + watch_V2 = mkV2 "見" "見" "見る" "見た" "を" ; -- "miru" "o" + water_N = mkN "水" Inanim ; -- "mizu" + wet_A = mkA "濡れている" "濡れた" ; -- "nureteiru" + white_A = mkA "白い" ; -- "shiroi" + wide_A = mkA "広い" ; -- "hiroi" + wife_N = mkN "妻" Anim "人" False ; -- "tsuma" "nin" + 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" + wood_N = mkN "木材" Inanim ; -- "mokuzai" + worm_N = mkN "ワーム" Anim "匹" False ; -- "waamu" "hiki" + write_V2 = mkV2 "書か" "書き" "書く" "書いた" "を" ; -- "kaku" "o" + 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 new file mode 100644 index 000000000..dfedf447e --- /dev/null +++ b/lib/src/japanese/NounJap.gf @@ -0,0 +1,291 @@ +concrete NounJap of Noun = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + 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 + } ; + False => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.s ! det.n ! st + } ; + prepositive = cn.prepositive ; + needPart = True ; + changePolar = False ; + Pron1Sg = False ; + anim = cn.anim + } ; + + UsePN pn = { + s = \\st => pn.s ! st ; + prepositive = \\st => [] ; + needPart = True ; + changePolar = False ; + Pron1Sg = False ; + anim = pn.anim + } ; + + UsePron pron = { + s = pron.s ; + prepositive = \\st => [] ; + needPart = True ; + changePolar = False ; + Pron1Sg = pron.Pron1Sg ; + anim = pron.anim + } ; + + PredetNP p np = { + s = \\st => p.s ++ np.s ! st ; + prepositive = np.prepositive ; + needPart = np.needPart ; + changePolar = np.changePolar ; + Pron1Sg = np.Pron1Sg ; + anim = np.anim + } ; + + PPartNP np v2 = { + s = \\st => v2.pass ! Plain ! TPast ! Pos ++ np.s ! st ; + prepositive = np.prepositive ; + needPart = np.needPart ; + changePolar = np.changePolar ; + Pron1Sg = np.Pron1Sg ; + anim = np.anim + } ; + + AdvNP np adv = { + s = \\st => case adv.prepositive of { + True => np.s ! st ; + False => adv.s ! st ++ np.s ! st + } ; + prepositive = \\st => case adv.prepositive of { + True => adv.s ! st ; + False => [] + } ; + needPart = np.needPart ; + changePolar = np.changePolar ; + Pron1Sg = np.Pron1Sg ; + anim = np.anim + } ; + + RelNP np rs = { + s = \\st => rs.s ! np.anim ! st ++ np.s ! st ; + prepositive = np.prepositive ; + needPart = np.needPart ; + changePolar = np.changePolar ; + Pron1Sg = np.Pron1Sg ; + anim = np.anim + } ; + + DetNP det = { + s = \\st => case det.inclCard of { + True => det.quant ! st ++ det.num ++ "つ" ++ det.postpositive ; + False => det.quant ! st ++ det.num + } ; + prepositive = \\st => [] ; + needPart = True ; + changePolar = False ; + Pron1Sg = False ; + anim = Inanim -- not always, depends on the context + } ; + + DetQuant quant num = { + quant = quant.s ; + postpositive = num.postpositive ; + num = num.s ; + n = num.n ; + inclCard = num.inclCard + } ; + + DetQuantOrd quant num ord = { + quant = \\st => quant.s ! st ++ ord.attr ; + postpositive = num.postpositive ; + num = num.s ; + n = num.n ; + inclCard = num.inclCard + } ; + + NumSg = mkNum "" Sg False ; + + NumPl = mkNum "" Pl False ; + + NumCard card = card ** {inclCard = True} ; + + NumDigits num = num ** {postpositive = []} ; + + NumNumeral num = num ** {postpositive = []} ; + + AdNum adn card = case adn.postposition of { + True => { + s = card.s ; + postpositive = adn.s ; + n = card.n + } ; + False => { + s = adn.s ++ card.s ; + postpositive = [] ; + n = card.n + } + } ; + + OrdDigits d = { + pred = \\st,t,p => d.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; -- "banme" + attr = d.s ++ "番目の" ; + te = d.s ++ "番目" ++ mkCopula.te ; + tara = d.s ++ "番目" ++ mkCopula.tara ; + adv = d.s ++ "番目" + } ; + + OrdNumeral num = { + pred = \\st,t,p => num.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; + attr = num.s ++ "番目の" ; + te = num.s ++ "番目" ++ mkCopula.te ; + tara = num.s ++ "番目" ++ mkCopula.tara ; + adv = num.s ++ "番目" + } ; + + OrdSuperl a = { + pred = \\st,t,p => "一番" ++ a.pred ! st ! t ! p ; -- "ichiban" + attr = "一番" ++ a.attr ; + te = "一番" ++ a.te ; + tara = "一番" ++ a.tara ; + adv = "一番" ++ a.adv + } ; + + IndefArt = {s = \\st => ""} ; + + DefArt = {s = \\st => ""} ; + + MassNP cn = { + s = \\st => cn.object ! st ++ cn.s ! Pl ! st ; + prepositive = cn.prepositive ; + needPart = True ; + changePolar = False ; + Pron1Sg = False ; + anim = cn.anim + } ; + + PossPron pron = { + s = \\st => pron.s ! st ++ "の" ; + } ; + + UseN n = { + s = n.s ; + object = \\st => [] ; + prepositive = \\st => [] ; + hasAttr = False ; + anim = n.anim ; + counter = n.counter ; + counterReplace = n.counterReplace + } ; + + ComplN2 n2 np = { + s = n2.s ; + object = \\st => n2.object ! st ++ np.s ! st ++ n2.prep ; + prepositive = np.prepositive ; + hasAttr = False ; + anim = n2.anim ; + counter = n2.counter ; + counterReplace = n2.counterReplace + } ; + + ComplN3 n3 np = { + s = n3.s ; + object = \\st => np.s ! st ++ n3.prep1 ; + prepositive = np.prepositive ; + prep = n3.prep2 ; + anim = n3.anim ; + counter = n3.counter ; + counterReplace = n3.counterReplace + } ; + + UseN2 n2 = { + s = n2.s ; + object = n2.object ; + prepositive = \\st => [] ; + hasAttr = False ; + anim = n2.anim ; + counter = n2.counter ; + counterReplace = n2.counterReplace + } ; + + Use2N3 n3 = { + s = n3.s ; + object = \\st => [] ; + prep = n3.prep1 ; + anim = n3.anim ; + counter = n3.counter ; + counterReplace = n3.counterReplace + } ; + + Use3N3 n3 = { + s = n3.s ; + object = \\st => [] ; + prep = n3.prep2 ; + anim = n3.anim ; + counter = n3.counter ; + counterReplace = n3.counterReplace + } ; + + 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 + } ; + object = cn.object ; + prepositive = cn.prepositive ; + hasAttr = True ; + anim = cn.anim ; + counter = cn.counter ; + counterReplace = cn.counterReplace + } ; + + RelCN cn rs = { + s = cn.s ; + anim = cn.anim ; + counter = cn.counter ; + counterReplace = cn.counterReplace ; + object = \\st => rs.s ! cn.anim ! st ++ cn.object ! st ; + prepositive = cn.prepositive ; + hasAttr = cn.hasAttr + } ; + + AdvCN cn adv = { + s = cn.s ; + object = \\st => case adv.prepositive of { + True => cn.object ! st ; + False => adv.s ! st ++ cn.object ! st + } ; + prepositive = \\st => case adv.prepositive of { + True => adv.s ! st ; + False => [] + } ; + hasAttr = cn.hasAttr ; + anim = cn.anim ; + counter = cn.counter ; + counterReplace = cn.counterReplace + } ; + + SentCN cn sc = { + s = cn.s ; + object = \\st => sc.s ! Ga ! st ++ cn.object ! st ; + prepositive = cn.prepositive ; + hasAttr = cn.hasAttr ; + anim = cn.anim ; + counter = cn.counter ; + counterReplace = cn.counterReplace + } ; + + ApposCN cn np = { + s = \\n,st => cn.s ! n ! st ++ np.s ! st ; + object = cn.object ; + prepositive = cn.prepositive ; + hasAttr = cn.hasAttr ; + anim = cn.anim ; + counter = cn.counter ; + counterReplace = cn.counterReplace + } ; +} diff --git a/lib/src/japanese/NumeralJap.gf b/lib/src/japanese/NumeralJap.gf new file mode 100644 index 000000000..59b81fb4a --- /dev/null +++ b/lib/src/japanese/NumeralJap.gf @@ -0,0 +1,140 @@ +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} ; + + lin + num dig = dig ; + + n2 = {s = "二" ; n = Pl} ; -- "ni" + n3 = {s = "三" ; n = Pl} ; -- "san" + n4 = {s = "四" ; n = Pl} ; -- "yon" + n5 = {s = "五" ; n = Pl} ; -- "go" + n6 = {s = "六" ; n = Pl} ; -- "roku" + n7 = {s = "七" ; n = Pl} ; -- "shichi" + n8 = {s = "八" ; n = Pl} ; -- "hachi" + n9 = {s = "九" ; n = Pl} ; -- "kyuu" + + pot01 = {s = "一" ; n = Sg ; is1 = True} ; -- "ichi" + + pot0 d = d ** {is1 = False} ; + + pot110 = { + s = "十" ; -- "juu" + n = Pl ; + numType = Tens ; + digit1 = "1" ; + digit2 = "0" + } ; + + pot111 = { + s = "十一" ; + n = Pl ; + numType = TensPlus ; + digit1 = "1" ; + digit2 = "1" + } ; + + pot1to19 d = { + s = "十" ++ d.s ; + n = Pl ; + numType = TensPlus ; + digit1 = "1" ; + digit2 = d.s + } ; + + pot0as1 d = { + s = d.s ; + n = Pl ; + numType = Other ; + digit1 = [] ; + digit2 = [] + } ; + + pot1 d = { + s = d.s ++ "十" ; + n = Pl ; + numType = Tens ; + digit1 = d.s ; + digit2 = "0" + } ; + + pot1plus d n = { + s = d.s ++ "十" ++ n.s ; + n = Pl ; + numType = TensPlus ; + digit1 = d.s ; + digit2 = n.s + } ; + + pot1as2 d = d ; + + pot2 d = { + s = case d.is1 of { + True => "百" ; -- "hyaku" + False => d.s ++ "百" + } ; + n = Pl ; + numType = Other ; + digit1 = [] ; + digit2 = [] + } ; + + pot2plus d n = { + s = case d.is1 of { + True => "百" ++ n.s ; + False => d.s ++ "百" ++ n.s + } ; + n = Pl ; + numType = Other ; + digit1 = [] ; + digit2 = [] + } ; + + pot2as3 d = d ; + + pot3 d = { + s = case d.numType of { + Tens => d.digit1 ++ "万" ; -- "man" + TensPlus => d.digit1 ++ "万" ++ d.digit2 ++ "千" ; -- "sen" + Other => d.s ++ "千" + } ; + n = Pl + } ; + + 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 + } ; + n = Pl + } ; + + lincat + Dig = {s : Str ; n : Number} ; + + lin + IDig d = d ; + + IIDig d n = { + s = d.s ++ n.s ; + n = Pl + } ; + + 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} ; +} diff --git a/lib/src/japanese/ParadigmsJap.gf b/lib/src/japanese/ParadigmsJap.gf new file mode 100644 index 000000000..a0c0e64ba --- /dev/null +++ b/lib/src/japanese/ParadigmsJap.gf @@ -0,0 +1,64 @@ +resource ParadigmsJap = CatJap ** + open ResJap, CatJap, Prelude in { + +flags coding = utf8 ; + +oper + + mkN = overload { + mkN : (man : Str) -> (anim : Animateness) -> N + = \n,a -> lin N (regNoun n a "つ" False) ; + mkN : (kane,okane : Str) -> (anim : Animateness) -> N + = \kane,okane,a -> lin N (styleNoun kane okane a "つ" False) ; + mkN : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> N + = \n,a,c,b -> lin N (regNoun n a c b) ; + mkN : (kane,okane : Str) -> (anim : Animateness) -> (counter : Str) -> + (counterReplace : Bool) -> N + = \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b) + } ; + + 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 => []} ; + + mkN3 : (distance : Str) -> (prep1: Str) -> (prep2: Str) -> (anim : Animateness) -> N3 + = \n,p1,p2,a -> lin N3 (regNoun n a "つ" False) ** {prep1 = p1; prep2 = p2} ; + + mkPN = overload { + mkPN : (paris : Str) -> PN + = \n -> lin PN (regPN n) ; + mkPN : (jon,jonsan : Str) -> PN + = \jon,jonsan -> lin PN (personPN jon jonsan) + } ; + + mkPron = overload { + mkPron : (kare : Str) -> (Pron1Sg : Bool) -> (anim : Animateness) -> Pron + = \kare,b,a -> lin Pron (regPron kare b a) ; + mkPron : (boku,watashi : Str) -> (Pron1Sg : Bool) -> (anim : Animateness) -> Pron + = \boku,watashi,b,a -> lin Pron (stylePron boku watashi b a) + } ; + + mkA = overload { + mkA : (ookina : Str) -> A = \a -> lin A (regAdj a) ; + mkA : (kekkonshiteiru,kikonno : Str) -> A = \pred,attr -> lin A (VerbalA pred attr) + } ; + + mkA2 = overload { + mkA2 : (yasui : Str) -> (prep : Str) -> A2 = \a,p -> lin A2 (regAdj a) ** {prep = p} ; + mkA2 : (pred : Str) -> (attr : Str) -> (prep : Str) -> A2 = + \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) ; + + mkV2 : (yoma, yomi, yomu, yonda, prep : Str) -> V2 + = \yoma,yomi,yomu,yonda,p -> + lin V2 (mkVerb2 yoma yomi yomu yonda p) ; + + 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} ; +} + + diff --git a/lib/src/japanese/PhraseJap.gf b/lib/src/japanese/PhraseJap.gf new file mode 100644 index 000000000..e992cc1a5 --- /dev/null +++ b/lib/src/japanese/PhraseJap.gf @@ -0,0 +1,52 @@ +concrete PhraseJap of Phrase = CatJap +** open ResJap, ParadigmsJap, Prelude in { + +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) + } + } ; + + UttS sent = {s = \\st => sent.s ! (Wa|Ga) ! st} ; + + UttQS s = {s = \\st => s.s ! (Wa | Ga) ! st ++ "か"} ; + + UttImpSg p imp = {s = \\st => p.s ++ imp.s ! st ! p.b} ; + + UttImpPl = UttImpSg ; + + UttImpPol p imp = {s = \\st => p.s ++ imp.s ! Resp ! p.b} ; + + UttIP ip = {s = \\st => ip.s ! st ++ "ですか"} ; + + UttIAdv iadv = {s = \\st => iadv.s ! st ++ "ですか"} ; + + UttNP np = {s = \\st => np.prepositive ! st ++ np.s ! st} ; + + UttAdv adv = {s = \\st => adv.s ! st} ; + + UttVP vp = {s = \\st => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ + vp.verb ! (Anim | Inanim) ! st ! (TPres | TPast | TFut) ! (Pos | Neg)} ; + + UttCN cn = {s = \\st => cn.prepositive ! st ++ cn.object ! st ++ cn.s ! (Sg | Pl) ! st} ; + + UttCard card = {s = \\st => card.s ++ card.postpositive} ; + + UttAP ap = {s = \\st => ap.prepositive ! st ++ ap.attr ! st} ; + + UttInterj interj = {s = \\st => interj.s} ; + + NoPConj = ss "" ; + + PConjConj conj = {s = conj.pconj} ; + + NoVoc = {s = \\st => [] ; please = False} ; + + VocNP np = {s = \\st => np.prepositive ! st ++ np.s ! st ; please = False} ; +} diff --git a/lib/src/japanese/QuestionJap.gf b/lib/src/japanese/QuestionJap.gf new file mode 100644 index 000000000..859f76239 --- /dev/null +++ b/lib/src/japanese/QuestionJap.gf @@ -0,0 +1,114 @@ +concrete QuestionJap of Question = CatJap +** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + QuestCl cl = { -- ending "ka" is added at the utterance level + s = cl.s ; + 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 + } ; + changePolar = False + } ; + + QuestSlash ip clslash = { + s = \\part,st,t,p => clslash.subj ! part ! st ++ ip.s ! st ++ clslash.pred ! st ! 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 ; + 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 + } ; + 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 + } + } ; + changePolar = np.changePolar + } ; + + IdetCN idet cn = { + s = \\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 + } ; + anim = cn.anim ; + how8many = idet.how8many + } ; + + IdetIP idet = { + s = \\st => case idet.inclCard of { + True => idet.s ++ "つ" ; + False => idet.s + } ; + anim = Inanim ; -- can be Anim, depending on the context + how8many = False -- "how many" alone behaves as other IPs + } ; + + AdvIP ip adv = { + s = \\st => adv.s ! st ++ ip.s ! st ; + anim = ip.anim ; + how8many = ip.how8many + } ; + + IdetQuant iquant num = { + s = iquant.s ++ num.s ; + n = num.n ; + how8many = False ; + inclCard = num.inclCard + } ; + + PrepIP prep ip = {s = \\st => ip.s ! st ++ prep.s ; particle = ""} ; + + AdvIAdv iadv adv = {s = \\st => adv.s ! st ++ iadv.s ! st ; particle = iadv.particle} ; + + CompIAdv iadv = {s = iadv.s} ; + + CompIP ip = {s = ip.s} ; + + lincat + + QVP = {s : Animateness => Style => TTense => Polarity => Str ; prepositive : Style => Str} ; + + lin + + ComplSlashIP vpslash ip = { + s = \\a,st,t,p => vpslash.obj ! st ++ ip.s ! st ++ vpslash.prep ++ vpslash.s ! 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 ; + prepositive = vp.prepositive + } ; + + AddAdvQVP qvp iadv = { + s = \\a,st,t,p => iadv.s ! st ++ iadv.particle ++ qvp.s ! a ! st ! t ! p ; + prepositive = qvp.prepositive + } ; + + QuestQVP ip qvp = { + s = \\part,st,t,p => qvp.prepositive ! st ++ ip.s ! st ++ "が" ++ + qvp.s ! ip.anim ! st ! t ! p ; + changePolar = False + } ; +} diff --git a/lib/src/japanese/RelativeJap.gf b/lib/src/japanese/RelativeJap.gf new file mode 100644 index 000000000..b143a0876 --- /dev/null +++ b/lib/src/japanese/RelativeJap.gf @@ -0,0 +1,48 @@ +concrete RelativeJap of Relative = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + RelCl cl = { + s = \\_,st,t,p => cl.s ! Ga ! st ! t ! p ; + te = \\_,st => cl.te ! Ga ! st ; + changePolar = cl.changePolar ; + subj = cl.subj ; + pred = \\_,st,t,p => cl.pred ! st ! t ! p ; + pred_te = \\a,st => cl.pred_te ! st ; + pred_tara = \\a,st => cl.pred_tara ! st ; + 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 ; + 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_tara = \\a,st => vp.obj ! st ++ vp.prep ++ vp.tara ! a ! st ++ rp.prep ; + 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 ; + 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_tara = \\a,st => clslash.pred_tara ! st ++ rp.prep ; + missingSubj = False + } ; + + IdRP = {s = \\st => [] ; prep = []} ; + + FunRP prep np rp = { + s = \\st => np.prepositive ! st ++ np.s ! st ; + prep = prep.relPrep + } ; +} \ No newline at end of file diff --git a/lib/src/japanese/ResJap.gf b/lib/src/japanese/ResJap.gf new file mode 100644 index 000000000..d612487ab --- /dev/null +++ b/lib/src/japanese/ResJap.gf @@ -0,0 +1,505 @@ +resource ResJap = open Prelude in { + +flags coding = utf8 ; + +param + Number = Sg | Pl ; + Style = Plain | Resp ; + Animateness = Anim | Inanim ; + Mood = Ind | Con ; + TTense = TPres | TPast | TFut ; + Polarity = Pos | Neg ; + ModSense = Abil | Oblig | Wish ; + Particle = Wa | Ga ; + Anteriority = Simul | Anter ; + NumeralType = Tens | TensPlus | Other ; + ComparSense = Less | More | NoCompar ; + +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 ; tara : Animateness => Style => Str ; + prep : Str ; obj : Style => Str ; prepositive : Style => Str ; + compar : ComparSense} ; + + Noun : Type = {s : Number => Style => Str ; anim : Animateness ; + counter : Str ; counterReplace : Bool} ; + PropNoun : Type = {s : Style => Str ; anim : Animateness} ; + Adj : Type = {pred : Style => TTense => Polarity => Str; + attr : Str; te : Str ; tara : Str ; adv : Str} ; + Adj2 : Type = {pred : Style => TTense => Polarity => Str; + attr : Str; te : Str ; tara : Str ; adv : Str ; prep : Str} ; + Adverb : Type = {s : Style => Str ; prepositive : Bool ; compar : ComparSense} ; + Pronoun : Type = {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ; + Determiner : Type = {quant : Style => Str ; postpositive : Str ; + num : Str ; n : Number ; inclCard : 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 ; tara : Str} ; + Verb2 : Type = {s : Style => TTense => Polarity => Str ; te : Str ; + a_stem : Str ; i_stem : Str ; tara : Str ; + pass : Style => TTense => Polarity => Str ; pass_te : Str ; + pass_a_stem : Str ; pass_i_stem : Str ; pass_tara : Str ; + prep : Str} ; + Conjunction : Type = {s : Str ; pconj : Str ; disj : Bool} ; + + mkNoun : Str -> Str -> Str -> Str -> Animateness -> Str -> Bool -> Noun = + \man1,man2,man3,man4,a,c,b -> { + s = table { + Sg => table { + Plain => man1 ; + Resp => man2 + } ; + Pl => table { + Plain => man3 ; + Resp => man4 + } + } ; + anim = a ; + counter = c ; + counterReplace = b + } ; + + regNoun : Str -> Animateness -> Str -> Bool -> Noun = \s,a,c,b -> mkNoun s s s s a c b ; + + styleNoun : Str -> Str -> Animateness -> Str -> Bool -> Noun = \kane,okane,a,c,b -> + mkNoun kane okane kane okane a c b ; + + regAdj : Str -> Adj = \a -> case a of { + chiisa + "い" => i_mkAdj a ; + ooki + ("な"|"の") => na_mkAdj a + } ; + + i_mkAdj : Str -> Adj = \chiisai -> + let + chiisa = init chiisai ; + in { + pred = table { + Resp => table { + TPres => table { + Pos => chiisai ++ "です" ; + Neg => (chiisa + "くありません" | + chiisa + "くないです") + } ; + TPast => table { + Pos => chiisa + "かったです" ; + Neg => (chiisa + "くありませんでした" | + chiisa + "くなかったです") + } ; + TFut => table { + Pos => chiisai ++ "です" ; + Neg => (chiisa + "くありません" | + chiisa + "くないです") + } + } ; + Plain => table { + TPres => table { + Pos => chiisai ; + Neg => chiisa + "くない" + } ; + TPast => table { + Pos => chiisa + "かった" ; + Neg => chiisa + "くなかった" + } ; + TFut => table { + Pos => chiisai ; + Neg => chiisa + "くない" + } + } + } ; + attr = chiisai ; + te = chiisa + "くて" ; + tara = chiisa + "かったら" ; + adv = chiisa + "く" + } ; + + na_mkAdj : Str -> Adj = \ookina -> + let + 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 ++ "ではない" + } + } + } ; + attr = ookina ; + te = ooki + "で" ; + tara = ooki + "だったら" ; + adv = ooki + "に" + } ; + + VerbalA : Str -> Str -> Adj = \kekkonshiteiru,kikonno -> + let + 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 + "いない" + } + } + } ; + attr = kikonno ; + te = kekkonshite + "いて" ; + tara = kekkonshite + "いたら" ; + adv = kekkonshite + "に" + } ; + + mkVerb : Str -> Str -> Str -> Str -> Verb = + \yoma,yomi,yomu,yonda -> + let yon = init yonda ; + in { + s = table { + Resp => table { + TPres => table { + Pos => yomi + "ます" ; + Neg => yomi + "ません" + } ; + TPast => table { + Pos => yomi + "ました" ; + Neg => yomi + "ませんでした" + } ; + TFut => table { + Pos => yomi + "ます" ; + Neg => yomi + "ません" + } + } ; + Plain => table { + TPres => table { + Pos => yomu ; + Neg => yoma + "ない" + } ; + TPast => table { + Pos => yonda ; + Neg => yoma + "なかった" + } ; + TFut => table { + Pos => yomu ; + Neg => yoma + "ない" + } + } + } ; + te = case yonda of { + yon + "だ" => yon + "で" ; + yon + "た" => yon + "て" + } ; + a_stem = yoma ; + i_stem = yomi ; + tara = yomi + "たら" + } ; + + mkVerb2 : Str -> Str -> Str -> Str -> Str -> Verb2 = + \yoma,yomi,yomu,yonda,p -> + let yon = init yonda ; + in { + s = table { + Resp => table { + TPres => table { + Pos => yomi + "ます" ; + Neg => yomi + "ません" + } ; + TPast => table { + Pos => yomi + "ました" ; + Neg => yomi + "ませんでした" + } ; + TFut => table { + Pos => yomi + "ます" ; + Neg => yomi + "ません" + } + } ; + Plain => table { + TPres => table { + Pos => yomu ; + Neg => yoma + "ない" + } ; + TPast => table { + Pos => yonda ; + Neg => yoma + "なかった" + } ; + TFut => table { + Pos => yomu ; + Neg => yoma + "ない" + } + } + } ; + te = case yonda of { + yon + "だ" => yon + "で" ; + yon + "た" => yon + "て" + } ; + a_stem = yoma ; + i_stem = yomi ; + tara = yomi + "たら" ; + prep = p ; + pass = table { + Resp => table { + TPres => table { + Pos => case yomu of { + x + "する" => x + "されます" ; + _ => yoma + "れます" + } ; + Neg => case yomu of { + x + "する" => x + "されません" ; + _ => yoma + "れません" + } + } ; + TPast => table { + Pos => case yomu of { + x + "する" => x + "されました" ; + _ => yoma + "れました" + } ; + Neg => case yomu of { + x + "する" => x + "されませんでした" ; + _ => yoma + "れませんでした" + } + } ; + TFut => table { + Pos => case yomu of { + x + "する" => x + "されます" ; + _ => yoma + "れます" + } ; + Neg => case yomu of { + x + "する" => x + "されません" ; + _ => yoma + "れません" + } + } + } ; + Plain => table { + TPres => table { + Pos => case yomu of { + x + "する" => x + "される" ; + _ => yoma + "れる" + } ; + Neg => case yomu of { + x + "する" => x + "されない" ; + _ => yoma + "れない" + } + } ; + TPast => table { + Pos => case yomu of { + x + "する" => x + "された" ; + _ => yoma + "れた" + } ; + Neg => case yomu of { + x + "する" => x + "されなかった" ; + _ => yoma + "れなかった" + } + } ; + TFut => table { + Pos => case yomu of { + x + "する" => x + "される" ; + _ => yoma + "れる" + } ; + Neg => case yomu of { + x + "する" => x + "されない" ; + _ => yoma + "れない" + } + } + } + } ; + 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_tara = case yomu of { + x + "する" => x + "されたら" ; + _ => yoma + "れたら" + } + } ; + + mkCopula : Verb = { + s = table { + Resp => table { + TPres => table { + Pos => "です" ; + Neg => "ではありません" + } ; + TPast => table { + Pos => "でした" ; + Neg => "ではありませんでした" + } ; + TFut => table { + Pos => "です" ; + Neg => "ではありません" + } + } ; + Plain => table { + TPres => table { + Pos => "だ" ; + Neg => "ではない" + } ; + TPast => table { + Pos => "だった" ; + Neg => "ではなかった" + } ; + TFut => table { + Pos => "だ" ; + Neg => "ではない" + } + } + } ; + te = "だって" ; + a_stem = "で" ; + i_stem = "で" ; + tara = "だったら" + } ; + + mkExistV : VP = { + verb = table { + Anim => \\st,t,p => (mkVerb "い" "い" "いる" "いた").s ! st ! t ! p ; + Inanim => \\st,t,p => (mkVerb "" "あり" "ある" "あった").s ! st ! t ! p + } ; + te = table { + Anim => \\st => "いて" ; + Inanim => \\st => "あって" + } ; + a_stem = table { + Anim => \\st => "い" ; + Inanim => \\st => "" + } ; + i_stem = table { + Anim => \\st => "い" ; + Inanim => \\st => "あり" + } ; + tara = table { + Anim => \\st => "いたら" ; + Inanim => \\st => "あったら" + } ; + prep = [] ; + prepositive, obj = \\st => [] ; + compar = NoCompar + } ; + + mkNum : Str -> Number -> Bool -> Num = \s,n,b -> { + s = s ; + postpositive = [] ; + n = n ; + inclCard = b + } ; + + regPron : Str -> Bool -> Animateness -> Pronoun = \kare,b,a -> { + s = \\st => kare ; + Pron1Sg = b ; + anim = a + } ; + + mkDet : Str -> Number -> Determiner = \q,n -> { + quant = \\st => q ; + postpositive = [] ; + num = [] ; + n = n ; + inclCard = False + } ; + + stylePron : Str -> Str -> Bool -> Animateness -> Pronoun = \boku,watashi,b,a -> { + s = table { + Plain => boku ; + Resp => watashi + } ; + Pron1Sg = b ; + anim = a + } ; + + regPN : Str -> PropNoun = \paris -> { + s = table { + Plain => paris ; + Resp => paris + } ; + anim = Inanim + } ; + + personPN : Str -> Str -> PropNoun = \jon,jonsan -> { + s = table { + Plain => jon ; + Resp => jonsan + } ; + anim = Anim + } ; + + mkAdv : Str -> Adverb = \adv -> { + s = \\st => adv ; + prepositive = False ; + compar = NoCompar + } ; + + mkNP : Str -> Bool -> Bool -> Animateness -> NP = \np,b1,b2,a -> { + s = \\st => np ; + prepositive = \\st => [] ; + needPart = b1 ; + changePolar = b2 ; + Pron1Sg = False ; + anim = a + } ; + + mkConj : Str -> Str -> Bool -> Conjunction = \c,p,b -> { + s = c ; + pconj = p ; + disj = b + } ; + + mkPrep : Str -> Str -> Preposition = \p,r -> { + s = p ; + relPrep = r ; + } ; + +} + diff --git a/lib/src/japanese/SentenceJap.gf b/lib/src/japanese/SentenceJap.gf new file mode 100644 index 000000000..afaa37081 --- /dev/null +++ b/lib/src/japanese/SentenceJap.gf @@ -0,0 +1,454 @@ +concrete SentenceJap of Sentence = CatJap +** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + PredVP np vp = case vp.compar of { + More => { + 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 + } ; + tara = table { + Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ + vp.obj ! st ++ vp.prep ++ vp.tara ! np.anim ! st ; + Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "のほうが" ++ + vp.obj ! st ++ vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! np.anim ! st ; + 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 ; + tara = \\part,st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ + "より" ++ vp.obj ! st ++ vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! 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 + } ; + tara = table { + Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "は" ++ + vp.obj ! st ++ vp.prep ++ vp.tara ! np.anim ! st ; + Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ "が" ++ + vp.obj ! st ++ vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! 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.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 + } ; + tara = table { + Wa => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! np.anim ! st ; + Ga => \\st => np.prepositive ! st ++ vp.prepositive ! st ++ np.s ! st ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! np.anim ! st ; + changePolar = np.changePolar + } + } + } ; + + PredSCVP sc vp = case sc.isVP of { + True => { + 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 + } ; + tara = table { + Wa => \\st => sc.s ! Wa ! st ++ "ことは" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! Inanim ! st ; + Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Inanim ! st ; + 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 + } ; + tara = table { + Wa => \\st => sc.s ! Wa ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! Inanim ! st ; + Ga => \\st => sc.s ! Ga ! st ++ "ことが" ++ vp.obj ! st ++ + vp.prep ++ vp.tara ! 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_tara = \\st => vp.obj ! st ++ vp.prep ++ vp.tara ! Inanim ! st ; + 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 ; + tara = \\st => vpslash.prepositive ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + vpslash.obj ! st ++ vpslash.prep ++ vpslash.tara ; + 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_tara = \\st => vpslash.obj ! st ++ vpslash.tara ; + 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 ; + tara = \\st => adv.s ! st ++ clslash.tara ! st ; + subj = \\part,st => adv.s ! st ++ clslash.subj ! part ! st ; + pred = clslash.pred ; + pred_te = clslash.pred_te ; + pred_tara = clslash.pred_tara ; + changePolar = clslash.changePolar + } ; + + SlashPrep cl prep = { + s = \\st,t,p => cl.s ! Ga ! st ! t ! p ++ prep.relPrep ; + te = \\st => cl.te ! Ga ! st ++ prep.relPrep ; + tara = \\st => cl.tara ! Ga ! st ++ prep.relPrep ; + subj = cl.subj ; + pred = \\st,t,p => cl.pred ! st ! t ! p ++ prep.relPrep ; + pred_te = \\st => cl.pred_te ! st ++ prep.relPrep ; + pred_tara = \\st => cl.pred_tara ! st ++ prep.relPrep ; + 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 ; + tara = \\st => np.prepositive ! st ++ np.s ! st ++ "が" ++ sslash.s ! st ++ + vs.prep ++ vs.tara ; + 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_tara = \\st => sslash.s ! st ++ vs.prep ++ vs.tara ; + changePolar = np.changePolar + } ; + + ImpVP vp = { + s = table { + Resp => table { + Pos => vp.prepositive ! Resp ++ vp.obj ! Resp ++ vp.prep ++ + vp.te ! Anim ! Resp ; + Neg => vp.prepositive ! Resp ++ vp.obj ! Resp ++ vp.prep ++ + vp.verb ! Anim ! Plain ! TPres ! Neg ++ "で" + } ; + Plain => table { + Pos => vp.prepositive ! Plain ++ vp.obj ! Plain ++ vp.prep ++ + vp.i_stem ! Anim ! Plain ++ "なさい" ; + Neg => vp.prepositive ! Plain ++ vp.obj ! Plain ++ vp.prep ++ + vp.verb ! Anim ! Plain ! TPres ! Pos ++ "な" + } + } + } ; + + EmbedS sent = {s = \\part,st => sent.subj ! part ! st ++ sent.pred ! Plain ; isVP = False} ; + + EmbedQS qs = {s = \\part,st => qs.s ! part ! Plain ; isVP = False} ; + + EmbedVP vp = {s = \\part,st => vp.verb ! Inanim ! Plain ! TPres ! Pos ; isVP = True} ; + + UseCl t p cl = { + s = \\part,st => case t.a of { + Simul => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! Neg + } ; + TPast => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! Neg + } ; + TFut => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPres ! Neg + } + } + } ; + te = \\part,st => t.s ++ p.s ++ cl.te ! part ! st ; + tara = \\part,st => t.s ++ p.s ++ cl.tara ! part ! st ; + subj = cl.subj ; + pred = \\st => case t.a of { + Simul => case cl.changePolar of { + False => t.s ++ p.s ++ cl.pred ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ cl.pred ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case cl.changePolar of { + False => t.s ++ p.s ++ cl.pred ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.pred ! st ! TPast ! Neg + } ; + TPast => case cl.changePolar of { + False => t.s ++ p.s ++ cl.pred ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.pred ! st ! TPast ! Neg + } ; + TFut => case cl.changePolar of { + False => t.s ++ p.s ++ cl.pred ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ cl.pred ! st ! TPres ! Neg + } + } + } + } ; + + UseQCl t p cl = { + s = \\part,st => case t.a of { + Simul => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! Neg + } ; + TPast => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPast ! Neg + } ; + TFut => case cl.changePolar of { + False => t.s ++ p.s ++ cl.s ! part ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ cl.s ! part ! st ! TPres ! Neg + } + } + } + } ; + + UseRCl t p rcl = { + s = \\a,st => case t.a of { + Simul => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.s ! a ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ rcl.s ! a ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.s ! a ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ rcl.s ! a ! st ! TPast ! Neg + } ; + TPast => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.s ! a ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ rcl.s ! a ! st ! TPast ! Neg + } ; + TFut => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.s ! a ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ rcl.s ! a ! st ! TPres ! Neg + } + } + } ; + te = \\a,st => rcl.te ! a ! st ; + subj = rcl.subj ; + pred = \\a,st => case t.a of { + Simul => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.pred ! a ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ rcl.pred ! a ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.pred ! a ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ rcl.pred ! a ! st ! TPast ! Neg + } ; + TPast => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.pred ! a ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ rcl.pred ! a ! st ! TPast ! Neg + } ; + TFut => case rcl.changePolar of { + False => t.s ++ p.s ++ rcl.pred ! a ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ rcl.pred ! a ! st ! TPres ! Neg + } + } + } ; + pred_te = \\a,st => t.s ++ p.s ++ rcl.pred_te ! a ! st ; + pred_tara = \\a,st => t.s ++ p.s ++ rcl.pred_tara ! a ! st ; + missingSubj = rcl.missingSubj + } ; + + UseSlash t p clslash = { + s = \\st => case t.a of { + Simul => case clslash.changePolar of { + False => t.s ++ p.s ++ clslash.s ! st ! t.t ! p.b ; + True => t.s ++ p.s ++ clslash.s ! st ! t.t ! Neg + } ; + Anter => case t.t of { + TPres => case clslash.changePolar of { + False => t.s ++ p.s ++ clslash.s ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ clslash.s ! st ! TPast ! Neg + } ; + TPast => case clslash.changePolar of { + False => t.s ++ p.s ++ clslash.s ! st ! TPast ! p.b ; + True => t.s ++ p.s ++ clslash.s ! st ! TPast ! Neg + } ; + TFut => case clslash.changePolar of { + False => t.s ++ p.s ++ clslash.s ! st ! TPres ! p.b ; + True => t.s ++ p.s ++ clslash.s ! st ! TPres ! Neg + } + } + } ; + te = \\st => clslash.te ! st + } ; + + AdvS adv s = { + s = \\part,st => adv.s ! st ++ s.s ! part ! st ; + te = \\part,st => adv.s ! st ++ s.te ! part ! st ; + tara = \\part,st => adv.s ! st ++ s.tara ! part ! st ; + subj = \\part,st => adv.s ! st ++ s.subj ! part ! st ; + pred = s.pred + } ; + + ExtAdvS adv s = { + s = \\part,st => adv.s ! st ++ "," ++ s.s ! part ! st ; + te = \\part,st => adv.s ! st ++ "," ++ s.te ! part ! st ; + tara = \\part,st => adv.s ! st ++ "," ++ s.tara ! part ! st ; + subj = \\part,st => adv.s ! st ++ "," ++ s.subj ! part ! st ; + pred = s.pred + } ; + + SSubjS s1 subj s2 = case subj.when of { + True => { + s = \\part,st => s1.tara ! part ! st ++ subj.s ++ s2.s ! Ga ! st ; + te = \\part,st => s1.tara ! part ! st ++ subj.s ++ s2.te ! Ga ! st ; + tara = \\part,st => s1.tara ! part ! st ++ subj.s ++ s2.tara ! Ga ! st ; + subj = \\part,st => s1.tara ! part ! st ++ subj.s ++ s2.subj ! Ga ! st ; + pred = s2.pred + } ; + False => { + s = \\part,st => s1.s ! part ! Plain ++ subj.s ++ s2.s ! Ga ! st ; + te = \\part,st => s1.s ! part ! Plain ++ subj.s ++ s2.te ! Ga ! st ; + tara = \\part,st => s1.s ! part ! Plain ++ subj.s ++ s2.tara ! Ga ! st ; + subj = \\part,st => s1.s ! part ! Plain ++ subj.s ++ s2.subj ! Ga ! st ; + pred = s2.pred + } + } ; + + RelS sent rs = case rs.missingSubj of { + True => { + 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 ; + tara = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことが" ++ rs.pred_tara ! Inanim ! st ; + subj = \\part,st => rs.subj ! part ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことが" ; + pred = \\st => rs.pred ! 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 + } ; + tara = table { + Wa => \\st => rs.subj ! Wa ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことを" ++ rs.pred_tara ! Inanim ! st ; + Ga => \\st => rs.subj ! Ga ! st ++ sent.subj ! Ga ! st ++ sent.pred ! Plain ++ + "ことを" ++ rs.pred_tara ! 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 new file mode 100644 index 000000000..79316912d --- /dev/null +++ b/lib/src/japanese/StructuralJap.gf @@ -0,0 +1,108 @@ +concrete StructuralJap of Structural = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + above_Prep = mkPrep "の上に" "上に" ; -- "noueni" "ueni" + after_Prep = mkPrep "の後に" "後" ; -- "noatoni" "ato" + all_Predet = ss "全部" ; -- "zembu" + almost_AdA = ss "殆ど" ; -- "hotondo" ; + although_Subj = {s = "のに" ; when = False} ; + almost_AdN = {s = "殆ど" ; postposition = False} ; + always_AdV = ss "いつも" ; + and_Conj = mkConj "と" "そして" False ; + because_Subj = {s = "から" ; when = False} ; + before_Prep = mkPrep "の前に" "前に" ; -- "nomaeni" "maeni" + behind_Prep = mkPrep "後ろに" "後ろに" ; -- "ushironi" "ushironi" + between_Prep = mkPrep "の間に" "間に" ; -- "noaidani" "aidani" + by8agent_Prep = mkPrep "に" "" ; + by8means_Prep = mkPrep "によって" "" ; + but_PConj = ss "けれども" ; + can8know_VV = mkVerb "でき" "でき" "できる" "できた" ** {sense = Abil} ; + can_VV = can8know_VV ; + during_Prep = mkPrep "の間に" "" ; -- "noaidani" + every_Det = mkDet "各自の" Sg ; -- "kakujino" + 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 ; + tara = "一番目" ++ mkCopula.tara ; adv = "一番目"} ; -- "ichibanme" + few_Det = mkDet "少数" Pl ; -- "shoosuuno" + 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 = ""} ; + how8many_IDet = {s = "いくつ" ; n = Pl ; how8many = True ; inclCard = False} ; + how8much_IAdv = {s = \\st => "いくら" ; particle = ""} ; + i_Pron = mkPron ("僕"|"私") "私" True Anim ; -- "boku"|"watashi" + in8front_Prep = mkPrep "の前に" "前に" ; -- "nomaeni" "maeni" + in_Prep = mkPrep "に" "" ; + it_Pron = mkPron "それ" False Inanim ; + less_CAdv = {s = "のほうが" ; compar = Less} ; + many_Det = mkDet "多くの" Pl ; -- "ookuno" + more_CAdv = {s = "より" ; compar = More} ; -- "yori" + most_Predet = ss "ほとんどの" ; + much_Det = mkDet "多くの" Sg ; -- "ookuno" + must_VV = {s = (mkVerb "なら" "なり" "なる" "なった").s ; te = "なって" ; + tara = "なったら" ; a_stem = "なら" ; i_stem = "なり" ; sense = Oblig} ; + no_Phr = ss "いいえ" ; + no_Utt = {s = \\st => "いいえ"} ; + on_Prep = mkPrep "の上に" "" ; + only_Predet = ss "ほんの" ; + or_Conj = mkConj "か" "それとも" True ; + otherwise_PConj = ss "そうしなければ" ; + please_Voc = {s = table {Resp => "ください" ; Plain => "" } ; please = True} ; + possess_Prep = mkPrep "の" "" ; + quite_Adv = ss "可成" ; + she_Pron = mkPron "彼女" False Anim ; -- "kanojo" + so_AdA = ss "非常に" ; -- "hijooni" + someSg_Det = mkDet "多少の" Sg ; -- "tashoono" + somePl_Det = mkDet "いくつかの" Pl ; + somebody_NP = mkNP "誰か" False False Anim ; -- "dareka" + something_NP = mkNP "何か" False False Inanim ; -- "nanika" + somewhere_Adv = mkAdv "どこかに" ; + that_Quant = {s = \\st => "その"} ; + 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 => "この"} ; + through_Prep = mkPrep "を通じて" "通じて" ; -- "otsuujite" + to_Prep = mkPrep "に" "" ; + too_AdA = ss "あまりにも" ; + under_Prep = mkPrep "の下に" "下に" ; -- "noshitani" + very_AdA = ss "とても" ; + want_VV = {s = (mkVerb "い" "い" "いる" "いった").s ; te = "いって" ; + tara = "いったら" ; a_stem = "い" ; i_stem = "い" ; sense = Wish} ; + 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 = ""} ; + when_Subj = {s = [] ; when = True} ; + where_IAdv = {s = \\st => "どこ" ; particle = "で"} ; + 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") + youPl_Pron = mkPron "あなた達" "あなた方" False Anim ; -- "anatatachi" "anatagata" + youPol_Pron = mkPron "あなた" False Anim ; + + 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" +} diff --git a/lib/src/japanese/TenseJap.gf b/lib/src/japanese/TenseJap.gf new file mode 100644 index 000000000..b4881d901 --- /dev/null +++ b/lib/src/japanese/TenseJap.gf @@ -0,0 +1,23 @@ +concrete TenseJap of Tense = CatJap ** open ResJap, ParadigmsJap, Prelude in { + +flags coding = utf8 ; + + lin + + TTAnt t a = { + s = t.s ++ a.s ; + t = t.t ; + a = a.a + } ; + + PPos = {s = [] ; b = Pos} ; + PNeg = {s = [] ; b = Neg} ; + + TPres, TCond = {s = [] ; t = ResJap.TPres} ; + TPast = {s = [] ; t = ResJap.TPast} ; + TFut = {s = [] ; t = ResJap.TFut} ; + + ASimul = {s = [] ; a = Simul} ; + AAnter = {s = [] ; a = Anter} ; + +} \ No newline at end of file diff --git a/lib/src/japanese/TextJap.gf b/lib/src/japanese/TextJap.gf new file mode 100644 index 000000000..b20555998 --- /dev/null +++ b/lib/src/japanese/TextJap.gf @@ -0,0 +1,14 @@ +concrete TextJap of Text = CatJap ** open ResJap, Prelude in { + +flags coding = utf8 ; + +lin + + TEmpty = ss "" ; + + TFullStop phr txt = {s = phr.s ++ "." ++ txt.s} ; + + TQuestMark phr txt = {s = phr.s ++ "?" ++ txt.s} ; + + TExclMark phr txt = {s = phr.s ++ "!" ++ txt.s} ; +} \ No newline at end of file diff --git a/lib/src/japanese/VerbJap.gf b/lib/src/japanese/VerbJap.gf new file mode 100644 index 000000000..2ad7ce7fe --- /dev/null +++ b/lib/src/japanese/VerbJap.gf @@ -0,0 +1,426 @@ +concrete VerbJap of Verb = CatJap ** open ResJap, Prelude in { + + flags coding = utf8 ; + + 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 ; + tara = \\a,st => v.tara ; + prep = [] ; + obj = \\st => [] ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + 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 ; + tara = \\a,st => vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.tara ; + prep = vp.prep ; + obj = \\st => vp.obj ! st ; + prepositive = vp.prepositive ; + compar = NoCompar + } ; + Oblig => { + verb = \\a,st,t,p => vp.a_stem ! Anim ! st ++ "なければ" ++ v.s ! st ! t ! p ; + 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 ; + tara = \\a,st => vp.a_stem ! Anim ! st ++ "なければ" ++ v.tara ; + prep = vp.prep ; + obj = \\st => vp.obj ! st ; + prepositive = vp.prepositive ; + compar = NoCompar + } ; + 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 ; + tara = \\a,st => vp.i_stem ! Anim ! st ++ "たがって" ++ v.tara ; + prep = vp.prep ; + obj = \\st => vp.obj ! st ; + prepositive = vp.prepositive ; + compar = NoCompar + } + } ; + + 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 ; + tara = \\a,st => vs.tara ; + prep = vs.prep ; + obj = \\st => sent.s ! Ga ! Plain ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + 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 ; + tara = \\a,st => vq.tara ; + prep = vq.prep ; + obj = \\st => qs.s ! Ga ! Plain ++ "こと" ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + 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 ; + tara = \\a,st => va.tara ; + prep = [] ; + obj = \\st => ap.adv ! st ; + prepositive = ap.prepositive ; + compar = NoCompar + } ; + + SlashV2a v2 = { + s = \\st,t,p => v2.s ! st ! t ! p ; + a_stem = v2.a_stem ; + i_stem = v2.i_stem ; + tara = v2.tara ; + prep = v2.prep ; + obj = \\st => [] ; + prepositive = \\st => [] ; + te = v2.te ; + v2vType = False ; + compar = NoCompar + } ; + + 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 => "上げ" + } ; + tara = case np.Pron1Sg of { + True => "呉れたら" ; + False => "上げたら" + } ; + 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 ; + tara = v3.tara ; + prep = v3.prep2 ; + obj = \\st => np.s ! st ++ v3.prep1 ; + prepositive = np.prepositive ; + te = v3.te ; + v2vType = False ; + compar = NoCompar + } + } ; + + 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 ; + tara = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.tara ; + prep = "に" ; + obj = \\st => vp.obj ! st ++ vp.prep ; + te = vp.verb ! Anim ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.te ; + prepositive = vp.prepositive ; + v2vType = True ; + compar = NoCompar + } ; + + SlashV2S v2s s = { + s = v2s.s ; + a_stem = v2s.a_stem ; + i_stem = v2s.i_stem ; + tara = v2s.tara ; + prep = "に" ; + obj = \\st => s.s ! Ga ! Plain ++ "と" ; + prepositive = \\st => [] ; + te = v2s.te ; + v2vType = False ; + compar = NoCompar + } ; + + SlashV2Q v2q qs = { + s = v2q.s ; + a_stem = v2q.a_stem ; + i_stem = v2q.i_stem ; + tara = v2q.tara ; + prep = "に" ; + obj = \\st => qs.s ! Ga ! Plain ++ "ことを" ; + prepositive = \\st => [] ; + te = v2q.te ; + v2vType = True ; + compar = NoCompar + } ; + + SlashV2A v2a ap = { + s = v2a.s ; + a_stem = v2a.a_stem ; + i_stem = v2a.i_stem ; + tara = v2a.tara ; + prep = "を" ; + obj = ap.adv ; + prepositive = ap.prepositive ; + te = v2a.te ; + v2vType = True ; + compar = NoCompar + } ; + + ComplSlash vpslash np = { + verb = \\a,st,t,p => case np.changePolar of { + True => vpslash.s ! st ! t ! Neg ; + False => vpslash.s ! st ! t ! p + } ; + a_stem = \\a,st => vpslash.a_stem ; + i_stem = \\a,st => vpslash.i_stem ; + tara = \\a,st => vpslash.tara ; + prep = case np.needPart of { + True => case vpslash.v2vType of { + True => [] ; + False => vpslash.prep + } ; + False => [] + } ; + obj = \\st => case vpslash.v2vType of { + True => np.s ! st ++ vpslash.prep ++ vpslash.obj ! st ; + False => vpslash.obj ! st ++ np.s ! st + } ; + te = \\a,st => vpslash.te ; + prepositive = vpslash.prepositive ; + compar = vpslash.compar + } ; + + 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 + } ; + 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 + } ; + a_stem = [] ; + i_stem = [] ; + tara = case v.sense of { + Abil => vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ことが" ++ v.tara ; + Oblig => vpslash.a_stem ++ "なければ" ++ v.tara ; + Wish => vpslash.i_stem ++ "たがって" ++ v.tara + } ; + prep = vpslash.prep ; + obj = vpslash.obj ; + prepositive = vpslash.prepositive ; + v2vType = False ; + compar = vpslash.compar + } ; + + 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 ; + tara = vpslash.s ! Plain ! TPres ! ResJap.Pos ++ "ように" ++ v2v.tara ; + 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 + } ; + + 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 ; + tara = \\a,st => vpslash.tara ; + prep = vpslash.prep ; + obj = \\st => "自分" ; -- "jibun" + te = \\a,st => vpslash.te ; + prepositive = vpslash.prepositive ; + compar = vpslash.compar + } ; + + UseComp comp = { + verb = comp.verb ; + te = comp.te ; + a_stem = comp.a_stem ; + i_stem = comp.i_stem ; + tara = comp.tara ; + prep = [] ; + obj = comp.obj ; + prepositive = comp.prepositive ; + compar = comp.compar + } ; + + 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 ; + tara = \\a,st => v2.pass_tara ; + prep = [] ; + obj = \\st => [] ; + prepositive = \\st => [] ; + compar = NoCompar + } ; + + AdvVP vp adv = { + verb = vp.verb ; + te = vp.te ; + a_stem = vp.a_stem ; + i_stem = vp.i_stem ; + tara = vp.tara ; + prep = vp.prep ; + obj = \\st => case adv.prepositive of { + True => vp.obj ! st ; + False => adv.s ! st ++ vp.obj ! st + } ; + prepositive = \\st => case adv.prepositive of { + True => adv.s ! st ; + False => [] + } ; + compar = adv.compar + } ; + + AdVVP adv vp = { + verb = vp.verb ; + te = vp.te ; + a_stem = vp.a_stem ; + i_stem = vp.i_stem ; + tara = vp.tara ; + prep = vp.prep ; + obj = \\st => adv.s ++ vp.obj ! st ; + prepositive = vp.prepositive ; + compar = NoCompar + } ; + + AdvVPSlash vpslash adv = { + s = vpslash.s ; + te = vpslash.te ; + a_stem = vpslash.a_stem ; + i_stem = vpslash.i_stem ; + tara = vpslash.tara ; + prep = vpslash.prep ; + obj = \\st => case adv.prepositive of { + True => vpslash.obj ! st ; + False => adv.s ! st ++ vpslash.obj ! st + } ; + prepositive = \\st => case adv.prepositive of { + True => adv.s ! st ; + False => [] + } ; + v2vType = False ; + compar = adv.compar + } ; + + AdVVPSlash adv vpslash = { + s = vpslash.s ; + te = vpslash.te ; + a_stem = vpslash.a_stem ; + i_stem = vpslash.i_stem ; + tara = vpslash.tara ; + prep = vpslash.prep ; + obj = \\st => adv.s ++ vpslash.obj ! st ; + prepositive = vpslash.prepositive ; + v2vType = False ; + compar = vpslash.compar + } ; + + 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! + tara = \\a,st => ap.tara ! st ; + obj = \\st => [] ; + prepositive = ap.prepositive ; + compar = ap.compar + } ; + + CompNP np = { + verb = \\a,st,t,p => mkCopula.s ! st ! t ! p ; + te = \\a,st => "だって" ; + tara = \\a,st => "だったら" ; + a_stem = \\a,st => "で" ; + i_stem = \\a,st => "で" ; -- for wishes - not correct! + obj = \\st => np.s ! st ; + prepositive = np.prepositive ; + compar = NoCompar + } ; + + CompAdv adv = { + verb = mkExistV.verb ; + te = mkExistV.te ; + tara = mkExistV.tara ; + a_stem = mkExistV.a_stem ; + i_stem = mkExistV.i_stem ; + obj = \\st => case adv.prepositive of { + True => [] ; + False => adv.s ! st + } ; + 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 => "だって" ; + tara = \\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 + } ; + + UseCopula = { + verb = \\a,st,t,p => mkCopula.s ! st ! t ! p ; + te = \\a,st => "だって" ; + tara = \\a,st => "だったら" ; + a_stem = \\a,st => "で" ; + i_stem = \\a,st => "で" ; -- for wishes - not correct! + obj = \\st => [] ; + prepositive = \\st => [] ; + prep = [] ; + compar = NoCompar + } ; + } +