concrete NounJpn of Noun = CatJpn ** open ResJpn, ParadigmsJpn, Prelude in { flags coding = utf8 ; lin DetCN det cn = { s = \\st => case det.inclCard of { True => case cn.counterReplace of { True => case cn.hasAttr of { True => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.counter ++ det.postpositive ++ "の" ++ cn.s ! det.n ! st ; False => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.counter ++ det.postpositive } ; False => case of { => cn.object ! st ++ det.quant ! st ++ det.num ++ "個" ++ det.postpositive ++ "の" ++ cn.s ! det.n ! st ; _ => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.counter ++ det.postpositive ++ "の" ++ cn.s ! det.n ! st } } ; False => cn.object ! st ++ det.quant ! st ++ det.num ++ cn.s ! det.n ! st } ; prepositive = cn.prepositive ; needPart = True ; changePolar = case det.no of { True => True ; False => False } ; meaning = SomeoneElse ; anim = cn.anim } ; UsePN pn = { s = \\st => pn.s ! st ; prepositive = \\st => [] ; needPart = True ; changePolar = False ; meaning = SomeoneElse ; anim = pn.anim } ; UsePron pron = { s = pron.s ; prepositive = \\st => [] ; needPart = True ; changePolar = False ; meaning = case pron.Pron1Sg of { True => Me ; False => SomeoneElse } ; anim = pron.anim } ; PredetNP p np = { s = \\st => p.s ++ np.s ! st ; prepositive = np.prepositive ; needPart = np.needPart ; changePolar = case p.not of { True => True ; False => np.changePolar } ; meaning = np.meaning ; 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 ; meaning = np.meaning ; 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 ; meaning = np.meaning ; anim = np.anim } ; ExtAdvNP = AdvNP ; RelNP np rs = { s = \\st => rs.s ! np.anim ! st ++ np.s ! st ; prepositive = np.prepositive ; needPart = np.needPart ; changePolar = np.changePolar ; meaning = np.meaning ; anim = np.anim } ; DetNP det = { s = det.sp ; prepositive = \\st => [] ; needPart = True ; changePolar = case det.no of { True => True ; False => False } ; meaning = SomeoneElse ; 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 ; sp = \\st => case num.inclCard of { True => case num.tenPlus of { False => quant.s ! st ++ num.s ++ "つ" ++ num.postpositive ; True => quant.s ! st ++ num.s ++ num.postpositive } ; False => quant.sp ! st ++ num.s } ; no = quant.no ; tenPlus = num.tenPlus } ; DetQuantOrd quant num ord = { quant = \\st => quant.s ! st ++ ord.attr ; postpositive = num.postpositive ; num = num.s ; n = num.n ; inclCard = num.inclCard ; sp = \\st => case num.inclCard of { True => case num.tenPlus of { False => quant.s ! st ++ ord.attr ++ num.s ++ "つ" ++ num.postpositive ; True => quant.s ! st ++ ord.attr ++ num.s ++ num.postpositive } ; False => quant.s ! st ++ ord.attr ++ num.s } ; no = quant.no ; tenPlus = num.tenPlus } ; NumSg = mkNum "" Sg ; NumPl = mkNum "" Pl ; 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 ; tenPlus = card.tenPlus } ; False => { s = adn.s ++ card.s ; postpositive = [] ; n = card.n ; tenPlus = card.tenPlus } } ; OrdDigits d = { pred = \\st,t,p => d.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; -- "banme" attr = d.s ++ "番目の" ; te = \\p => d.s ++ "番目" ++ mkCopula.te ! p ; ba = \\p => d.s ++ "番目" ++ mkCopula.ba ! p ; adv = \\p => d.s ++ "番目" ; dropNaEnging = d.s ++ "番目の" } ; OrdNumeral num = { pred = \\st,t,p => num.s ++ "番目" ++ mkCopula.s ! st ! t ! p ; attr = num.s ++ "番目の" ; te = \\p => num.s ++ "番目" ++ mkCopula.te ! p ; ba = \\p => num.s ++ "番目" ++ mkCopula.ba ! p ; adv = \\p => num.s ++ "番目" ; dropNaEnging = num.s ++ "番目の" } ; OrdSuperl a = { pred = \\st,t,p => "一番" ++ a.pred ! st ! t ! p ; -- "ichiban" attr = "一番" ++ a.attr ; te = \\p => "一番" ++ a.te ! p ; ba = \\p => "一番" ++ a.ba ! p ; adv = \\p => "一番" ++ a.adv ! p ; dropNaEnging = "一番" ++ a.dropNaEnging } ; OrdNumeralSuperl n a = { pred = \\st,t,p => n.s ++ "番" ++ a.pred ! st ! t ! p ; -- "ichiban" attr = n.s ++ "番" ++ a.attr ; te = \\p => n.s ++ "番" ++ a.te ! p ; ba = \\p => n.s ++ "番" ++ a.ba ! p ; adv = \\p => n.s ++ "番" ++ a.adv ! p ; dropNaEnging = n.s ++ "番" ++ a.dropNaEnging } ; IndefArt = {s = \\st => "" ; sp = \\st => "何か" ; no = False} ; DefArt = {s = \\st => "" ; sp = \\st => "これ" ; no = False} ; MassNP cn = { s = \\st => cn.object ! st ++ cn.s ! Pl ! st ; prepositive = cn.prepositive ; needPart = True ; changePolar = False ; meaning = SomeoneElse ; anim = cn.anim } ; PossPron pron = { s, sp = \\st => pron.s ! st ++ "の" ; no = False } ; UseN n = { s = n.s ; object = \\st => [] ; prepositive = \\st => [] ; hasAttr = False ; anim = n.anim ; counter = n.counter ; counterReplace = n.counterReplace ; counterTsu = n.counterTsu } ; 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 ; counterTsu = n2.counterTsu } ; 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 ; counterTsu = n3.counterTsu } ; UseN2 n2 = { s = n2.s ; object = n2.object ; prepositive = \\st => [] ; hasAttr = False ; anim = n2.anim ; counter = n2.counter ; counterReplace = n2.counterReplace ; counterTsu = n2.counterTsu } ; Use2N3 n3 = { s = n3.s ; object = \\st => [] ; prep = n3.prep1 ; anim = n3.anim ; counter = n3.counter ; counterReplace = n3.counterReplace; counterTsu = n3.counterTsu } ; Use3N3 n3 = { s = n3.s ; object = \\st => [] ; prep = n3.prep2 ; anim = n3.anim ; counter = n3.counter ; counterReplace = n3.counterReplace; counterTsu = n3.counterTsu } ; AdjCN ap cn = { s = \\n,st => case cn.hasAttr of { False => ap.attr ! st ++ cn.s ! n ! st ; True => ap.te ! st ! Pos ++ cn.s ! n ! st } ; object = cn.object ; prepositive = cn.prepositive ; hasAttr = True ; anim = cn.anim ; counter = cn.counter ; counterReplace = cn.counterReplace ; counterTsu = cn.counterTsu } ; 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 ; counterTsu = cn.counterTsu } ; 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 ; counterTsu = cn.counterTsu } ; 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; counterTsu = cn.counterTsu } ; ApposCN cn np = { s = \\n,st => np.s ! st ++ cn.s ! n ! st ; object = cn.object ; prepositive = cn.prepositive ; hasAttr = cn.hasAttr ; anim = cn.anim ; counter = cn.counter ; counterReplace = cn.counterReplace ; counterTsu = cn.counterTsu } ; PossNP cn np = { -- house of Paris, house of mine s = \\n,st => np.s ! st ++ "の" ++ cn.s ! n ! st ; object = cn.object ; prepositive = cn.prepositive ; hasAttr = cn.hasAttr ; anim = cn.anim ; counter = cn.counter ; counterReplace = cn.counterReplace ; counterTsu = cn.counterTsu } ; PartNP = PossNP ; CountNP det np = { s = \\st => np.s ! st ++ "の" ++ det.sp ! st ; prepositive = np.prepositive ; needPart = True ; changePolar = case det.no of { True => True ; False => False } ; meaning = SomeoneElse ; anim = np.anim } ; AdjDAP dap ap = lin Det { quant = \\st => dap.quant ! st ++ ap.prepositive ! st ++ ap.attr ! st ; num = dap.num ; postpositive = dap.postpositive ; n = dap.n ; inclCard = dap.inclCard ; sp = \\st => dap.sp ! st ++ ap.prepositive ! st ++ ap.attr ! st ; no = dap.no ; tenPlus = dap.tenPlus } ; DetDAP det = det ; }