From 7fa0407a6f043f96e2f6302e596620a7aadc98f1 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 16 Oct 2012 09:36:05 +0000 Subject: [PATCH] fixes in clefts and V3 in Chi; new pinyin versions --- lib/src/chinese/ConjunctionChi.gf | 13 ++-- lib/src/chinese/IdiomChi.gf | 6 +- lib/src/chinese/README | 29 +++++++-- lib/src/chinese/ResChi.gf | 12 +++- lib/src/chinese/StructuralChi.gf | 4 +- lib/src/chinese/VerbChi.gf | 10 +-- lib/src/chinese/pinyin/CatCmn.gf | 8 ++- lib/src/chinese/pinyin/ConjunctionCmn.gf | 13 ++-- lib/src/chinese/pinyin/IdiomCmn.gf | 6 +- lib/src/chinese/pinyin/LexiconCmn.gf | 81 +----------------------- lib/src/chinese/pinyin/Makefile | 8 +++ lib/src/chinese/pinyin/MkPinyin.hs | 37 ++++++++++- lib/src/chinese/pinyin/NounCmn.gf | 20 +++--- lib/src/chinese/pinyin/NumeralCmn.gf | 67 +++++++++++--------- lib/src/chinese/pinyin/Pinyin.hs | 6 +- lib/src/chinese/pinyin/ResCmn.gf | 24 +++++-- lib/src/chinese/pinyin/StructuralCmn.gf | 46 ++++++-------- lib/src/chinese/pinyin/VerbCmn.gf | 25 ++++---- 18 files changed, 211 insertions(+), 204 deletions(-) create mode 100644 lib/src/chinese/pinyin/Makefile diff --git a/lib/src/chinese/ConjunctionChi.gf b/lib/src/chinese/ConjunctionChi.gf index 3e8d4aa92..8476efc8f 100644 --- a/lib/src/chinese/ConjunctionChi.gf +++ b/lib/src/chinese/ConjunctionChi.gf @@ -11,15 +11,15 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin -- These fun's are generated from the list cat's. BaseS = twoSS ; - ConsS = consrSS thcomma ; + ConsS = consrSS duncomma ; BaseAdv = twoSS ; - ConsAdv = consrSS thcomma ; + ConsAdv = consrSS duncomma ; BaseNP = twoSS ; - ConsNP = consrSS thcomma ; + ConsNP = consrSS duncomma ; BaseAP = twoSS ; - ConsAP = consrSS thcomma ; + ConsAP = consrSS duncomma ; BaseRS = twoSS ; - ConsRS = consrSS thcomma ; + ConsRS = consrSS duncomma ; lincat [S] = {s1,s2 : Str} ; @@ -28,7 +28,4 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin [AP] = {s1,s2 : Str} ; [RS] = {s1,s2 : Str} ; - oper - thcomma : Str = [] ; ---- should be a space - } diff --git a/lib/src/chinese/IdiomChi.gf b/lib/src/chinese/IdiomChi.gf index cb9a4440f..ff37cbe15 100644 --- a/lib/src/chinese/IdiomChi.gf +++ b/lib/src/chinese/IdiomChi.gf @@ -10,9 +10,9 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in { -- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person) ---- it is John who did it - CleftNP np rs = mkClause np.s copula rs.s ; + CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I - CleftAdv ad s = mkClause ad.s (insertObj s (predV copula)) ; ---- it is here she slept + CleftAdv ad s = mkClause (s.s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you @@ -20,7 +20,7 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in { ProgrVP vp = vp ; ---- - ImpPl1 vp = ss (infVP vp) ; ---- + ImpPl1 vp = ss (zan_s ++ men_s ++ infVP vp ++ ba0_s) ; } diff --git a/lib/src/chinese/README b/lib/src/chinese/README index a07ea8105..657a4c079 100644 --- a/lib/src/chinese/README +++ b/lib/src/chinese/README @@ -238,7 +238,7 @@ Issues from London and New York, 2009. -p. 4 the dun-comma in lists +p. 4 the dun-comma in lists DONE p. 28 "who is X" vs. "X is who" @@ -260,7 +260,7 @@ p. 97 AB -> AABB reduplication p. 104 non-gradable adjectives require shi: zhei tiao yu shi huo de -> keep this as general rule for APs so far -p. 106 it was Chinese that I studied -> move cleft to the end +p. 106 it was Chinese that I studied -> move cleft to the end DONE 16/10 p. 116 I did it better than you -> to implement @@ -272,7 +272,7 @@ p. 168 "can": hui/neng p. 174 negation and tense -p. 185 yes/no +p. 185 yes/no DONE p. 186 alternation questions @@ -280,7 +280,7 @@ p. 197 "or" haishi/huozhe p. 206 "please" in imperative -p. 207 "let's" zanmen he yi bei ba +p. 207 "let's" zanmen he yi bei ba DONE 16/10 p. 242 coverbs @@ -294,6 +294,27 @@ RGL implementation took 4 person weeks altogether. The remaining immediate fixes However, there is a lot of Chinese that we will leave outside the common RGL abstract syntax. +16/10 + +Some more changes in the (almost) complete Chi. It has 546 words: + +0 1 2 3 4 5 6 7 8 9 、 。 一 七 万 丈 三 上 下 不 丑 业 丢 两 个 中 为 么 之 乎 乐 九 乞 书 买 了 争 事 二 +云 五 些 亮 亲 人 什 今 从 他 以 们 件 会 但 位 何 你 候 做 停 像 儿 光 八 公 六 关 写 冰 冷 净 准 几 则 到 +刺 前 副 割 劈 加 动 包 匹 医 十 千 单 卖 厂 厌 厚 去 又 友 发 变 只 可 台 右 叶 号 吃 名 后 吐 吗 吧 听 吸 +吹 呕 呼 和 咬 咱 哪 唉 唱 商 啤 喜 喝 嘴 四 回 因 园 国 圆 土 在 地 场 坏 坐 块 城 堂 堆 塑 处 备 外 多 夜 +大 天 太 夫 头 奇 套 女 奶 她 好 如 妹 妻 姑 娘 婚 婴 子 字 学 孩 它 宗 定 家 宽 寄 寓 察 对 寻 小 少 尖 尘 +就 尾 屋 山 工 左 己 已 巴 市 师 希 常 帽 干 平 年 庄 店 座 开 弟 张 往 很 得 心 必 忘 怕 您 想 懂 我 或 战 +房 所 扇 手 打 扔 把 报 拉 指 挖 挤 推 揉 握 搔 摄 摆 擦 收 敌 教 数 文 料 新 旁 旅 时 明 星 是 晚 暖 更 最 +月 有 朋 服 望 期 木 本 术 朵 机 杀 村 条 来 杯 板 林 果 枝 架 某 树 校 根 桌 桶 棕 森 棵 椅 橡 欢 歌 止 此 +死 母 每 比 毛 毯 水 求 汽 沙 没 河 油 法 泳 洗 活 流 浮 海 温 港 游 湖 湿 滑 满 滴 漂 火 灯 灰 炉 烂 烟 烧 +热 然 爱 父 片 牙 牛 牧 物 狗 猎 猫 王 玩 现 球 理 瓶 生 甲 电 男 画 白 百 的 皮 盏 盐 盒 盖 直 看 眼 着 睛 +睡 知 短 石 码 破 确 离 种 科 空 窄 窗 站 笑 笔 笨 第 等 答 简 算 箱 粒 红 约 纸 经 绑 结 给 绳 绿 缝 羊 羽 +翅 翰 老 而 耳 聪 肉 肚 肝 肠 肪 胀 背 胶 胸 能 脂 脏 脖 脚 腿 膀 膝 膨 自 舌 船 艘 艺 花 苹 草 落 蓝 薄 虫 +虱 虽 蛇 蛋 血 行 衣 表 衫 衬 袜 被 要 规 视 角 言 警 计 讨 语 说 请 读 谁 赢 走 起 趣 跑 距 路 跳 躺 车 转 +轻 辆 边 过 近 还 这 远 通 道 那 酒 酪 里 重 金 钝 钢 铁 银 长 门 闭 问 间 闻 阳 阵 除 雨 雪 零 雾 非 面 革 +靴 鞋 音 顶 项 须 颗 题 风 飞 饭 首 马 骨 鱼 鸟 黄 黎 黑 鼻 齿 ! , ? + +Also updated the Pinyin version and created a Makefile to convert Chi to Cmn. diff --git a/lib/src/chinese/ResChi.gf b/lib/src/chinese/ResChi.gf index f6185a348..d7560b0b9 100644 --- a/lib/src/chinese/ResChi.gf +++ b/lib/src/chinese/ResChi.gf @@ -44,10 +44,18 @@ resource ResChi = ParamX ** open Prelude in { zai_V = mkVerb "在" [] [] [] [] "不" ; fullstop_s = "。" ; questmark_s = "?" ; - exclmark_s = "!" ; + exclmark_s = "!" ; ge_s = "个" ; di_s = "是" ; -- used in QuestSlash - ba_s = "把" ; + ba_s = "把" ; -- ba4, object marker + ba0_s = "吧" ; -- ba, used in imperatives + men_s = "们" ; + zan_s = "咱" ; + + say_s = "说" ; -- used in embedded sentences: she answers him that we sleep + + duncomma = "、" ; + chcomma = "," ; emptyStr = [] ; diff --git a/lib/src/chinese/StructuralChi.gf b/lib/src/chinese/StructuralChi.gf index 6bd91b7fe..408e716ef 100644 --- a/lib/src/chinese/StructuralChi.gf +++ b/lib/src/chinese/StructuralChi.gf @@ -49,7 +49,7 @@ where_IAdv = mkIAdvL "哪里" ; when_IAdv = mkIAdvL "什么时候" ; how_IAdv = mkIAdvL "如何" ; all_Predet = ssword "所有" ; -many_Det = mkDet "很多" DTPoss ; +many_Det = mkDet (word "很多") DTPoss ; someSg_Det = mkDet (word "一些") Sg ; somePl_Det = mkDet (word "一些") Sg ; few_Det = mkDet "少" Pl ; @@ -145,7 +145,7 @@ so_AdA = ssword "如此" ; somebody_NP = ssword "某人" ; something_NP = ssword "某事" ; -- [mark] in sent, it depends on the context somewhere_Adv = mkAdv "某处" ; -that_Subj = mkSubj [] ", " ; -- that + S [mark] comma +that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma there7from_Adv = mkAdv "从那里" ; -- from there there7to_Adv = mkAdv "到那里" ; therefore_PConj = ssword "因此" ; diff --git a/lib/src/chinese/VerbChi.gf b/lib/src/chinese/VerbChi.gf index eb74673b5..e966de454 100644 --- a/lib/src/chinese/VerbChi.gf +++ b/lib/src/chinese/VerbChi.gf @@ -7,14 +7,14 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in { SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ; - Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3 ; isPre = True} ; - Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2 ; isPre = False} ; + Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v) ** {c2 = v.c3 ; isPre = False} ; -- slot for third argument + Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ; - SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ; - SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2 ; isPre = True} ; - SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2 ; isPre = True} ; + SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ; + SlashV2S v s = insertObj (ss (say_s ++ s.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; + SlashV2Q v q = insertObj (ss (say_s ++ q.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; ComplVV v vp = { verb = v ; diff --git a/lib/src/chinese/pinyin/CatCmn.gf b/lib/src/chinese/pinyin/CatCmn.gf index 6e7b3ee72..b125ca397 100644 --- a/lib/src/chinese/pinyin/CatCmn.gf +++ b/lib/src/chinese/pinyin/CatCmn.gf @@ -33,7 +33,7 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in VP = ResCmn.VP ; Comp = ResCmn.VP ; - VPSlash = ResCmn.VP ** {c2 : Preposition} ; + VPSlash = ResCmn.VP ** {c2 : Preposition ; isPre : Bool} ; -- whether the missing arg is before verb -- Adjective @@ -43,7 +43,8 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in CN = ResCmn.Noun ; NP, Pron = ResCmn.NP ; - Det, Quant = Determiner ; + Det = Determiner ; + Quant = Determiner ** {pl : Str} ; Predet = {s : Str} ; ---- Ord = {s : Str} ; Num = {s : Str ; numType : NumType} ; @@ -52,7 +53,8 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in -- Numeral - Numeral, Card, Digits = {s : Str} ; + Numeral = {s,p : Str} ; + Card, Digits = {s : Str} ; -- Structural diff --git a/lib/src/chinese/pinyin/ConjunctionCmn.gf b/lib/src/chinese/pinyin/ConjunctionCmn.gf index 8a598e20c..747284387 100644 --- a/lib/src/chinese/pinyin/ConjunctionCmn.gf +++ b/lib/src/chinese/pinyin/ConjunctionCmn.gf @@ -11,15 +11,15 @@ concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordin -- These fun's are generated from the list cat's. BaseS = twoSS ; - ConsS = consrSS thcomma ; + ConsS = consrSS duncomma ; BaseAdv = twoSS ; - ConsAdv = consrSS thcomma ; + ConsAdv = consrSS duncomma ; BaseNP = twoSS ; - ConsNP = consrSS thcomma ; + ConsNP = consrSS duncomma ; BaseAP = twoSS ; - ConsAP = consrSS thcomma ; + ConsAP = consrSS duncomma ; BaseRS = twoSS ; - ConsRS = consrSS thcomma ; + ConsRS = consrSS duncomma ; lincat [S] = {s1,s2 : Str} ; @@ -28,7 +28,4 @@ concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordin [AP] = {s1,s2 : Str} ; [RS] = {s1,s2 : Str} ; - oper - thcomma : Str = [] ; ---- should be a space - } diff --git a/lib/src/chinese/pinyin/IdiomCmn.gf b/lib/src/chinese/pinyin/IdiomCmn.gf index 8ff954f66..87f4109eb 100644 --- a/lib/src/chinese/pinyin/IdiomCmn.gf +++ b/lib/src/chinese/pinyin/IdiomCmn.gf @@ -10,9 +10,9 @@ concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in { -- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person) ---- it is John who did it - CleftNP np rs = mkClause np.s copula rs.s ; + CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I - CleftAdv ad s = mkClause ad.s (insertObj s (predV copula)) ; ---- it is here she slept + CleftAdv ad s = mkClause (s.s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you @@ -20,7 +20,7 @@ concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in { ProgrVP vp = vp ; ---- - ImpPl1 vp = ss (infVP vp) ; ---- + ImpPl1 vp = ss (zan_s ++ men_s ++ infVP vp ++ ba0_s) ; } diff --git a/lib/src/chinese/pinyin/LexiconCmn.gf b/lib/src/chinese/pinyin/LexiconCmn.gf index 3effed0cb..c608cab9a 100644 --- a/lib/src/chinese/pinyin/LexiconCmn.gf +++ b/lib/src/chinese/pinyin/LexiconCmn.gf @@ -17,35 +17,25 @@ lin green_A = mkA "lu:4" ; -- "lv" walk_V = mkV "zou3" ; -- "zou" sleep_V = mkV "shui4" ; -- "shui" ----- arrive_V = mkV "dao4" "le" [] [] "guo4"; -- "dao" love_V2 = mkV2 "ai4" ; -- "ai" watch_V2 = mkV2 "kan1" ; -- "kan" ---- please2_V2 = mkV "ma2fan2" ; -- "mafan" ---- believe_VS = mkV "xiang1xin4" ; -- "xiangxin" know_VS = mkV "zhi1dao4" ; -- "zhidao" wonder_VQ = mkV "hao3ji1" ; -- "haoqi" john_PN = mkPN "yao1han4" ; -- "yuehan" ---- mary_PN = mkPN "ma3li2" ; -- "mali" -- Swadesh ---big_A = mkA "da4" ; long_A = mkA "chang2" ; wide_A = mkA "kuan1" ; thick_A = mkA "hou4" ; heavy_A = mkA "chong2" ; ---small_A = mkA "xiao3" ; short_A = mkA "duan3" ; narrow_A = mkA "zhai3" ; thin_A = mkA "bo2" ; -- [mark] for person mkA "shou4" ---woman_N = mkN "nu:3ren2" ; ---man(adult_N = mkN "nan2ren2" ; ---man(human_N = mkN "ren2" ; child_N = mkN "hai2zi3" ; wife_N = mkN "qi1zi3" ; husband_N = mkN "zhang4fu1" ; ---father_N = mkN "fu4qin1" ; animal_N = mkN "dong4wu4" "qi2"; -- [mark] added classifier for nouns fish_N = mkN "yu2" "tiao2"; bird_N = mkN "niao3" "qi2"; @@ -53,7 +43,6 @@ dog_N = mkN "gou3" "qi2"; louse_N = mkN "shi1" "qi2"; snake_N = mkN "she2" "tiao2"; worm_N = mkN "chong2" "qi2"; ---tree_N = mkN "shu4" ; forest_N = mkN "sen1lin2" "pian1"; stick_N = mkN "shu4zhi1" ; fruit_N = mkN "shui3guo3" ; @@ -105,11 +94,9 @@ breathe_V = mkV "hu1xi1" ; laugh_V = mkV "xiao4" ; see_V2 = mkV2 "kan1" ; hear_V2 = mkV2 "ting1" ; ---know_V = mkV "zhi1dao4" ; think_V = mkV "xiang3" ; smell_V = mkV "wen2" ; -- [mark] "xiu4" -> "wen2", "wen2" is the common form for smell. fear_V2 = mkV2 "pa4" ; ---sleep_V = mkV "shui4" ; live_V = mkV "huo2" ; die_V = mkV "si3" ; kill_V2 = mkV2 "sha1" ; @@ -123,7 +110,6 @@ scratch_V2 = mkV2 "sao1" ; dig_V = mkV "wa1" ; swim_V = mkV "you2yong3" ; fly_V = mkV "fei1" ; ---walk_V = mkV "zou3" ; come_V = mkV "lai2" ; lie_V = mkV "tang3" ; sit_V = mkV "zuo4" ; @@ -174,7 +160,6 @@ burn_V = mkV "shao1" ; road_N = mkN "lu4" "tiao2"; mountain_N = mkN "shan1" "zuo4"; red_A = mkA "hong2" ; ---green_A = mkA "lu:4" ; yellow_A = mkA "huang2" ; white_A = mkA "bai2" ; black_A = mkA "hei1" ; @@ -199,7 +184,7 @@ wet_A = mkA "shi1" ; dry_A = mkA "gan1" ; correct_A = mkA "dui4" ; near_A = mkA "jin4" ; -far_A = mkA "yuan3" ; +--far_A = mkA "yuan3" ; left_Ord = ss "zuo3" ; right_Ord = ss "you4" ; name_N = mkN "ming2zi4" ; -- [mark] "ming2" --> "ming2zi4" @@ -234,10 +219,8 @@ cow_N = mkN "niu2" "tou2"; do_V2 = mkV2 "zuo4" ; doctor_N = mkN "yi1sheng1" "ming2"; door_N = mkN "men2" "shan1"; ----easy_A2V = mkA "rong2yi4" ; factory_N = mkN "gong1chang3" "jian1"; far_Adv = mkAdv "yuan3" ; ----father_N2 = mkN2 "fu4qin1" ; fear_VS = mkVS (mkV "pa4") ; find_V2 = mkV2 "fa1xian4" ; forget_V2 = mkV2 "wang4" ; @@ -245,20 +228,13 @@ friend_N = mkN "peng2you3" ; girl_N = mkN "gu1niang2" ; give_V3 = mkV3 "gei3" ; go_V = mkV "qu4" ; ---go_N = mkN "wang3" ; grammar_N = mkN "yu3fa3" ; hat_N = mkN "mao4zi3" "ding3"; ---take_N = mkN "dai4" ; ---have_N = mkN "you3" ; ---take_N = mkN "dai4" ; ---have_N = mkN "you3" ; hill_N = mkN "shan1" "zuo4"; hope_VS = mkV "xi1wang4" ; horse_N = mkN "ma3" "pi1"; hot_A = mkA "re4" ; ---how many_N = mkN "duo1shao3" ; important_A = mkA "chong2yao1" ; ---heavy_A = mkA "chong2" ; industry_N = mkN "gong1ye4" []; jump_V = mkV "tiao4" ; know_V2 = mkV2 "zhi1dao4" ; @@ -266,16 +242,11 @@ know_VQ = mkV "zhi1dao4" ; lamp_N = mkN "deng1" "zhan3"; language_N = mkN "yu3yan2" "zhong3"; learn_V2 = mkV2 "xue2" ; ---leave_N = mkN "li2kai1" ; leave_V2 = mkV2 "li2kai1" ; --[mark] "li2" --> "li2kai1", "li2" itself is either a morpheme, or a marker indicating distance ---walk_N = mkN "zou3" ; like_V2 = mkV2 "xi3huan1" ; ---be willing_N = mkN "yuan4yi4" ; listen_V2 = mkV2 "ting1" ; lose_V2 = mkV2 "diu1" ; ---love_N = mkN "xi3huan1" ; love_V2 = mkV2 "ai4" ; ----mother_N2 = mkN2 "ma1" ; music_N = mkN "yin1le4" [] ; -- [mark] usually without classifier newspaper_N = mkN "bao4zhi3" "zhang1"; --[mark] "bao4" --> "bao4zhi3" now_Adv = mkAdv "xian4zai4" ; @@ -283,91 +254,43 @@ number_N = mkN "hao2ma3" ; -- [mark] "hao2" --> "hao2ma3" open_V2 = mkV2 "kai1" ; paint_V2A = mkV2A (mkV "hua4") ; paper_N = mkN "zhi3" "zhang1"; ---place_N = mkN "defang1" ; ---part_N = mkN "bu4fen1" ; pen_N = mkN "bi3" "qi2"; ---pen_N = mkN "gang1bi3" "qi2"; person_N = mkN "ren2" ; ---beat_N = mkN "da2" ; ---pull_N = mkN "la1" ; play_V2 = mkV2 "wan2" ; --[mark] "wan2er2" --> "wan2" ---perform_N = mkN "biao3yan3" ; ---have_N = mkN "you3" ; put_V2 = mkV2 "bai3" ; ---let go_N = mkN "fang4" ; question_N = mkN "wen4ti2" ; ---be enough_N = mkN "gou4" ; ---very_N = mkN "hen3" ; rain_V0 = mkV "xia4yu3"; read_V2 = mkV2 "dou4" ; reason_N = mkN "dao4li3" ; restaurant_N = mkN "fan4dian4" "jian1"; ---appropriate_N = mkN "ge3shi4" ; ---correct_N = mkN "zheng1que4" ; ---run_N = mkN "pao3bu4" ; run_V = mkV "pao3" ; ---road_N = mkN "dao4" ; school_N = mkN "xue2jiao4" "suo3"; science_N = mkN "ke1xue2" []; -- [mark] usually without classifier sell_V3 = mkV3 "mai4" ; ---go_N = mkN "qu4" ; send_V3 = mkV3 "ji4" ; ---clap_N = mkN "pai1" ; sheep_N = mkN "yang2" "qi2"; ship_N = mkN "chuan2" "sao1"; shoe_N = mkN "xie2" "qi2"; shop_N = mkN "shang1dian4" "jian1"; ---of that kind_N = mkN "na3yang4" ; ---what_N = mkN "shen2ma" ; song_N = mkN "ge1" "shou3"; ---tell_N = mkN "jiang3" ; speak_V2 = mkV2 "shui4" ; ---road_N = mkN "dao4" ; ---live_N = mkN "zhu4" ; ---act as_N = mkN "dang1" ; student_N = mkN "xue2sheng1" "ming2" ; table_N = mkN "zhuo1zi3" "zhang1"; ---word_N = mkN "hua4" ; talk_V3 = mkV3 "shui4" ; ---talk_N = mkN "tan2" ; ---education_N = mkN "jiao1yu4" ; teach_V2 = mkV2 "jiao1" ; ---coach_N = mkN "fu3dao3" ; ---teacher_N = mkN "xian1sheng1" ; ---master worker_N = mkN "shi1fu4" ; teacher_N = mkN "lao3shi1" "ming2"; television_N = mkN "dian4shi4" "tai2"; ---that_N = mkN "na3ge4" ; ---that_N = mkN "na3" ; ---from_N = mkN "cong1" ; ---by way of_N = mkN "tong1guo4" ; ---towards_N = mkN "xiang4" ; ---and_N = mkN "he2" ; today_Adv = mkAdv "jin1tian1" ; ---now_N = mkN "xian4zai4" ; ---also_N = mkN "ye3" ; train_N = mkN "huo3che1" "liang4"; travel_V = mkV "lu:3hang2" ; ---below_N = mkN "xia4bian1" ; ---understand_N = mkN "lejie3" ; understand_V2 = mkV2 "dong3" ; ---recognize_N = mkN "ren4shi2" ; ---open up_N = mkN "tong1" ; university_N = mkN "da4xue2" "suo3"; wait_V2 = mkV2 "deng3" ; ---need_N = mkN "xu1yao1" ; watch_V2 = mkV2 "kan1" ; ---time_N = mkN "shi2hou4" ; ---wait_N = mkN "deng3" ; ---what_N = mkN "shen2ma" ; ---how_N = mkN "zen3ma" ; win_V2 = mkV2 "ying2" ; ---window_N = mkN "chuang1hu4" ; window_N = mkN "chuang1" "shan1"; wine_N = mkN "jiu3" "ping2"; ---leave_N = mkN "li2" ; ---do_N = mkN "zuo4" ; write_V2 = mkV2 "xie3" ; young_A = mkA "nian2qing1" ; @@ -427,7 +350,7 @@ war_N = mkN "zhan4zheng1" "chang3" ; -- [mark] rewritten wood_N = mkN "mu4tou2" "kuai1" ; -- [mark] "mu4" --> "mu4tou2" --- just missing +-- from scratch, by Jolene lin alas_Interj = ssword "ai1" ; diff --git a/lib/src/chinese/pinyin/Makefile b/lib/src/chinese/pinyin/Makefile new file mode 100644 index 000000000..52a474e0e --- /dev/null +++ b/lib/src/chinese/pinyin/Makefile @@ -0,0 +1,8 @@ +all: cmn pinyin + +pinyin: + runghc MkPinyin.hs + +cmn: + cd .. ; runghc ../Clone.hs Chi Cmn ; mv *Cmn.gf pinyin/ ; cd pinyin + diff --git a/lib/src/chinese/pinyin/MkPinyin.hs b/lib/src/chinese/pinyin/MkPinyin.hs index d7bb76242..c032a8723 100644 --- a/lib/src/chinese/pinyin/MkPinyin.hs +++ b/lib/src/chinese/pinyin/MkPinyin.hs @@ -1,5 +1,5 @@ import qualified Data.Map as Map -import Pinyin (c2pMap, useMapGF, mkList) +import Numeric main = do s <- readFile pinyinFile @@ -7,9 +7,40 @@ main = do mapM_ (mkPinyin m) ["Lexicon", "Numeral", "Res", "Structural"] return () -pinyinFile = "../pinyin.txt" +pinyinFile = "pinyin.txt" mkPinyin ma mo = do - s <- readFile (mo ++ "Chi.gf") + s <- readFile ("../" ++ runghc MkPinyin.hsmo ++ "Chi.gf") writeFile (mo ++ "Cmn.gf") (useMapGF ma s) + +--import Pinyin (c2pMap, useMapGF, mkList) + + +-- AR 3/10/2012 +-- Chinese unicode - character - pinyin conversions +-- character data from http://www.linguanaut.com/chinese_alphabet2.htm + + +mkList ws = case ws of + c:w:ws -> (head (map (flip Numeric.showHex "" . fromEnum) c), (c, chop w)) : mkList ws + _ -> [] + +chop = words . map unslash + where + unslash '/' = ' ' + unslash c = c + +useMapGF m s = case s of + 'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China + 'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn + '"':cs -> '"':convert cs + c :cs -> c :useMapGF m cs + _ -> s + where + convert cs = case cs of + '"':s -> '"' : useMapGF m s + c :s -> maybe [c] (head . words) (Map.lookup [c] m) ++ convert s + _ -> cs + +c2pMap ws = Map.fromList [(c,unwords ps) | (_,(c,ps)) <- ws] diff --git a/lib/src/chinese/pinyin/NounCmn.gf b/lib/src/chinese/pinyin/NounCmn.gf index b0ebf3425..078e24b17 100644 --- a/lib/src/chinese/pinyin/NounCmn.gf +++ b/lib/src/chinese/pinyin/NounCmn.gf @@ -10,7 +10,7 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in { UsePN pn = pn ; UsePron p = p ; - DetNP det = det ; + DetNP det = {s = det.s ++ ge_s} ; ---- PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ; @@ -19,7 +19,10 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in { AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ; DetQuant quant num = { - s = quant.s ++ num.s ; + s = case num.numType of { + NTFull => quant.pl ++ num.s ; -- to avoid yi in indef + _ => quant.s ++ num.s + } ; detType = case num.numType of { NTFull => DTNum ; -- five NTVoid n => case quant.detType of { @@ -33,15 +36,12 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in { s = quant.s ++ num.s ++ ord.s ; detType = case num.numType of { NTFull => DTNum ; -- five - NTVoid n => case quant.detType of { - DTPoss => DTPoss ; -- our - _ => DTFull n -- these/this - } + NTVoid n => DTFull n -- these/this ; also our, when ord is present } } ; PossPron p = { - s = p.s ++ possessive_s ; + s,pl = p.s ++ possessive_s ; detType = DTPoss } ; @@ -52,15 +52,15 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in { NumDigits d = d ** {numType = NTFull} ; OrdDigits d = {s = ordinal_s ++ d.s} ; - NumNumeral numeral = numeral ** {hasC = True} ; + NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi OrdNumeral numeral = {s = ordinal_s ++ numeral.s} ; AdNum adn num = {s = adn.s ++ num.s ; hasC = True} ; OrdSuperl a = {s = superlative_s ++ a.s} ; - DefArt = mkDet the_s ; - IndefArt = mkDet yi_s ; ---- in the plural ? + DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s + IndefArt = mkQuant yi_s [] (DTFull Sg) ; -- empty in the plural MassNP cn = cn ; diff --git a/lib/src/chinese/pinyin/NumeralCmn.gf b/lib/src/chinese/pinyin/NumeralCmn.gf index d56453314..e1e223d92 100644 --- a/lib/src/chinese/pinyin/NumeralCmn.gf +++ b/lib/src/chinese/pinyin/NumeralCmn.gf @@ -16,55 +16,53 @@ oper Wan : Zero => Str = oper mkD : Str -> Str -> Str = \x,_ -> word x ; -- hiding the "formal" version ---lincat Numeral = {s : Str} ; -lincat Digit = {s : Str} ; -lincat Sub10 = {s : Str} ; -lincat Sub100 = {inh : Zero ; s : Bform => Str} ; -lincat Sub1000 = {inh : Zero ; s : Qform => Str} ; -lincat Sub1000000 = {s : Str} ; -lin num x0 = - {s = x0.s} ; +lincat Digit = {s,p : Str} ; +lincat Sub10 = {s,p : Str} ; +lincat Sub100 = {inh : Zero ; s,p : Bform => Str} ; +lincat Sub1000 = {inh : Zero ; s,p : Qform => Str} ; +lincat Sub1000000 = {s,p : Str} ; +lin num x0 = x0 ; -- 一二三四五六七八九十一百千 -- lin n2 = - {s = mkD "er4" "er4"} ; + {s = mkD "er4" "er4" ; p = "liang3"} ; lin n3 = - {s = mkD "san1" "san1"} ; + {s,p = mkD "san1" "san1"} ; lin n4 = - {s = mkD "si4" "si4"} ; + {s,p = mkD "si4" "si4"} ; lin n5 = - {s = mkD "wu3" "wu3"} ; + {s,p = mkD "wu3" "wu3"} ; lin n6 = - {s = mkD "liu4" "liu4"} ; + {s,p = mkD "liu4" "liu4"} ; lin n7 = - {s = mkD "qi1" "qi1"} ; + {s,p = mkD "qi1" "qi1"} ; lin n8 = - {s = mkD "ba1" "ba1"} ; + {s,p = mkD "ba1" "ba1"} ; lin n9 = - {s = mkD "jiu3" "jiu3"} ; + {s,p = mkD "jiu3" "jiu3"} ; lin pot01 = - {s = mkD "yi1" "yi1"} ; + {s,p = mkD "yi1" "yi1"} ; lin pot0 d = - {s = d.s} ; + {s = d.s ; p = d.p} ; lin pot110 = {inh = nozero ; - s = table { + s,p = table { shi => mkD "yi1shi2" "yi1shi2" ; shi0 => mkD "yi1shi2" "yi1shi2" ; wan => mkD "yi1wan4" "yi1wan4" ; wan0 => mkD "yi1wan4" "yi1wan4"}} ; lin pot111 = {inh = nozero ; - s = table { + s,p = table { shi => mkD "shi2yi1" "shi2yi1" ; shi0 => mkD "yi1shi2yi1" "yi1shi2yi1" ; wan => mkD "shi2yi1wan4" "shi2yi1wan4" ; wan0 => mkD "shi2yi1wan4" "shi2yi1wan4"}} ; lin pot1to19 d = {inh = nozero ; - s = table { + s,p = table { shi => mkD "yi1shi2" "yi1shi2" ++ d.s ; shi0 => mkD "yi1shi2" "yi1shi2" ; wan => mkD "yi1wan4" "yi1wan4" ++ d.s ++ mkD "qian1" "qian1" ; @@ -75,17 +73,23 @@ lin pot0as1 n = shi => n.s ; shi0 => n.s ; wan => n.s ++ mkD "qian1" "qian1" ; - wan0 => n.s ++ mkD "qian1" "qian1"}} ; + wan0 => n.s ++ mkD "qian1" "qian1"} ; + p = table { + shi => n.p ; + shi0 => n.s ; + wan => n.s ++ mkD "qian1" "qian1" ; + wan0 => n.s ++ mkD "qian1" "qian1"} + } ; lin pot1 d = {inh = zero ; - s = table { + s,p = table { shi => d.s ++ mkD "shi2" "shi2" ; shi0 => d.s ++ mkD "shi2" "shi2" ; wan0 => d.s ++ "wan4" ; wan => d.s ++ "wan4"}} ; lin pot1plus d e = {inh = nozero ; - s = table { + s,p = table { shi => d.s ++ mkD "shi2" "shi2" ++ e.s ; shi0 => d.s ++ mkD "shi2" "shi2" ++ e.s ; wan => d.s ++ "wan4" ++ e.s ++ mkD "qian1" "qian1" ; @@ -96,27 +100,32 @@ lin pot1as2 n = bai => n.s ! shi ; bai0 => n.s ! shi ; shiwan => n.s ! wan ; + shiwan0 => n.s ! wan0} ; + p = table { + bai => n.p ! shi ; + bai0 => n.s ! shi ; + shiwan => n.s ! wan ; shiwan0 => n.s ! wan0}} ; lin pot2 d = {inh = zero ; - s = table { + s,p = table { bai => d.s ++ mkD "bai3" "bai3" ; bai0 => d.s ++ mkD "bai3" "bai3" ; shiwan0 => d.s ++ mkD "shi2wan4" "shi2wan4" ; shiwan => d.s ++ mkD "shi2wan4" "shi2wan4"}} ; lin pot2plus d e = {inh = nozero ; - s = table { + s,p = table { bai => d.s ++ mkD "" "bai3" ++ (ling ! ) ++ e.s ! shi0 ; bai0 => d.s ++ mkD "" "bai3" ++ (ling ! ) ++ e.s ! shi0 ; shiwan => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan ; shiwan0 => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ; lin pot2as3 n = - {s = n.s ! bai} ; + {s = n.s ! bai ; p = n.p ! bai} ; lin pot3 n = - {s = n.s ! shiwan} ; + {s,p = n.s ! shiwan} ; lin pot3plus n m = - {s = (n.s ! shiwan0) ++ (ling ! ) ++ m.s ! bai0} ; + {s,p = (n.s ! shiwan0) ++ (ling ! ) ++ m.s ! bai0} ; -- numerals as sequences of digits diff --git a/lib/src/chinese/pinyin/Pinyin.hs b/lib/src/chinese/pinyin/Pinyin.hs index 131517ed2..999a06df0 100644 --- a/lib/src/chinese/pinyin/Pinyin.hs +++ b/lib/src/chinese/pinyin/Pinyin.hs @@ -1,4 +1,4 @@ -module Pinyin where +module Main where import Numeric import qualified Data.Map as Map @@ -45,8 +45,8 @@ useMapWith :: (String -> [String]) -> ([String] -> String) -> (String -> String) useMapWith ws uws deft m = uws . map (\w -> maybe (deft w) id (Map.lookup w m)) . ws useMapGF m s = case s of - 'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China - 'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn +--- 'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China +--- 'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn '"':cs -> '"':convert cs c :cs -> c :useMapGF m cs _ -> s diff --git a/lib/src/chinese/pinyin/ResCmn.gf b/lib/src/chinese/pinyin/ResCmn.gf index f448e582d..da034e5d5 100644 --- a/lib/src/chinese/pinyin/ResCmn.gf +++ b/lib/src/chinese/pinyin/ResCmn.gf @@ -42,18 +42,27 @@ resource ResCmn = ParamX ** open Prelude in { geng_s = "geng1" ; -- more, in comparison zai_V = mkVerb "zai4" [] [] [] [] "bu4" ; - fullstop_s = "." ; - questmark_s = "?" ; - exclmark_s = "!" ; + fullstop_s = "。" ; + questmark_s = "?" ; + exclmark_s = "!" ; ge_s = "ge4" ; di_s = "shi4" ; -- used in QuestSlash + ba_s = "ba3" ; -- ba4, object marker + ba0_s = "ba1" ; -- ba, used in imperatives + men_s = "men" ; + zan_s = "za2" ; + + say_s = "shui4" ; -- used in embedded sentences: she answers him that we sleep + + duncomma = "、" ; + chcomma = "," ; emptyStr = [] ; -- Write the characters that constitute a word separately. This enables straightforward tokenization. - bword : Str -> Str -> Str = \x,y -> x + y ; -- change to x ++ y to treat words as separate tokens + bword : Str -> Str -> Str = \x,y -> x + y ; -- change to x + y to treat words as single tokens word : Str -> Str = \s -> case s of { x@? + y@? + z@? + u@? => bword x (bword y (bword z u)) ; @@ -188,6 +197,7 @@ param oper Determiner = {s : Str ; detType : DetType} ; + Quantifier = Determiner ** {pl : Str} ; mkDet = overload { mkDet : Str -> Determiner = \s -> {s = s ; detType = DTFull Sg} ; @@ -195,7 +205,11 @@ oper mkDet : Str -> DetType -> Determiner = \s,d -> {s = s ; detType = d} ; } ; - mkQuant : Str -> {s : Str} = ss ; + mkQuant = overload { + mkQuant : Str -> Quantifier = \s -> {s,pl = s ; detType = DTFull Sg} ; + mkQuant : Str -> DetType -> Quantifier = \s,d -> {s,pl = s ; detType = d} ; + mkQuant : Str -> Str -> DetType -> Quantifier = \s,p,d -> {s = s ; detType = d ; pl = p} ; + } ; pronNP : (s : Str) -> NP = \s -> { s = word s diff --git a/lib/src/chinese/pinyin/StructuralCmn.gf b/lib/src/chinese/pinyin/StructuralCmn.gf index ab831b8da..5aa3ab778 100644 --- a/lib/src/chinese/pinyin/StructuralCmn.gf +++ b/lib/src/chinese/pinyin/StructuralCmn.gf @@ -6,8 +6,8 @@ concrete StructuralCmn of Structural = CatCmn ** lin every_Det = mkDet "mei3" Sg ; - this_Quant = mkDet "zhe4" ; - that_Quant = mkDet "na3" ; + this_Quant = mkQuant "zhe4" ; + that_Quant = mkQuant "na3" ; i_Pron = pronNP "wo3" ; youSg_Pron = pronNP "ni3" ; @@ -49,7 +49,7 @@ where_IAdv = mkIAdvL "na3li3" ; when_IAdv = mkIAdvL "shen2mashi2hou4" ; how_IAdv = mkIAdvL "ru2he2" ; all_Predet = ssword "suo3you3" ; -many_Det = mkDet "duo1" Pl ; +many_Det = mkDet (word "hen3duo1") DTPoss ; someSg_Det = mkDet (word "yi1xie1") Sg ; somePl_Det = mkDet (word "yi1xie1") Sg ; few_Det = mkDet "shao3" Pl ; @@ -69,9 +69,9 @@ under_Prep = mkPrep "xia4" ; why_IAdv = mkIAdvL "wei2shen2ma" ; too_AdA = mkAdA "tai4" ; -before_Prep = mkPrep "cong1qian2" ; --s -between_Prep = mkPrep "zhi1jian1" ; --s -but_PConj = mkPConjL "dan4shi4" ; --s +before_Prep = mkPrep "cong1qian2" ; +between_Prep = mkPrep "zhi1jian1" ; +but_PConj = mkPConjL "dan4shi4" ; can_VV = mkVerb "neng2" [] [] [] [] "bu4" ; @@ -81,33 +81,26 @@ but_PConj = mkPConjL "dan4shi4" ; --s can8know_VV = mkV "hui4" [] [] [] [] "bu4" ; ---- -except_Prep = mkPrep "chu2le" "yi3wai4" ; --s -for_Prep = mkPrep "wei2le" ; --s -from_Prep = mkPrep "cong1" ; --s ----how8many_IDet = mkIDet "ji1" ; --s ----how8much_IDet = mkIDet "duo1shao3" ; --s -in8front_Prep = mkPrep "qian2bian1" ; --s -it_Pron = pronNP "ta1" ; --s ----less_CAdv = mkCAdv "shao3" ; --s -much_Det = mkDet "duo1" Sg ; --s ----more_CAdv = mkCAdv "geng1" ; --s ----most_Predet = mkPredet "zui4" ; --s -no_Quant = mkDet "bu4" ; --s +except_Prep = mkPrep "chu2le" "yi3wai4" ; +for_Prep = mkPrep "wei2le" ; +from_Prep = mkPrep "cong1" ; +in8front_Prep = mkPrep "qian2bian1" ; +it_Pron = pronNP "ta1" ; +much_Det = mkDet "duo1" Sg ; +no_Quant = mkQuant "bu4" ; not_Predet = ssword "bu4" ; ----only_Predet = mkPredet "qi2" ; --s -otherwise_PConj = mkPConjL "hai2shi4" ; --s -to_Prep = mkPrep "wang3" ; --s ----which_IQuant = mkIQuant "na3" ; --s +otherwise_PConj = mkPConjL "hai2shi4" ; +to_Prep = mkPrep "wang3" ; have_V2 = mkV2 "you3" ; -yes_Utt = ss copula_s ; +yes_Utt = ss "dui4" ; no_Utt = ss neg_s ; oper mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ; --- manually by AR +-- manually by AR, Jolene lin always_AdV = ssword "yi1zhi2" ; @@ -152,12 +145,13 @@ so_AdA = ssword "ru2ci3" ; somebody_NP = ssword "mou3ren2" ; something_NP = ssword "mou3shi4" ; -- [mark] in sent, it depends on the context somewhere_Adv = mkAdv "mou3chu3" ; -that_Subj = mkSubj [] ", " ; -- that + S [mark] comma +that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma there7from_Adv = mkAdv "cong1na3li3" ; -- from there there7to_Adv = mkAdv "dao4na3li3" ; therefore_PConj = ssword "yin1ci3" ; through_Prep = mkPrep "tong1guo4" ; -which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context +which_IQuant = mkIQuant "na3" ; +--which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context without_Prep = mkPrep "mei2you3" []; youPol_Pron = ssword "nin2" ; -- polite you diff --git a/lib/src/chinese/pinyin/VerbCmn.gf b/lib/src/chinese/pinyin/VerbCmn.gf index b4703e324..666c45575 100644 --- a/lib/src/chinese/pinyin/VerbCmn.gf +++ b/lib/src/chinese/pinyin/VerbCmn.gf @@ -5,16 +5,16 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in { lin UseV = predV ; - SlashV2a v = predV v ** {c2 = v.c2} ; + SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ; - Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3} ; ---- to check arg order - Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2} ; + Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v) ** {c2 = v.c3 ; isPre = False} ; -- slot for third argument + Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object - SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2} ; + SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ; - SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2} ; - SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2} ; - SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2} ; + SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ; + SlashV2S v s = insertObj (ss (say_s ++ s.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; + SlashV2Q v q = insertObj (ss (say_s ++ q.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; ComplVV v vp = { verb = v ; @@ -26,16 +26,19 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in { ComplVQ v q = insertObj q (predV v) ; ComplVA v ap = insertObj ap (predV v) ; - ComplSlash vp np = insertObj (mkNP (appPrep vp.c2 np.s)) vp ; + ComplSlash vp np = case vp.isPre of { + True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ? + False => insertObj (mkNP (appPrep vp.c2 np.s)) vp + } ; UseComp comp = comp ; SlashVV v vp = ---- too simple? - insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2} ; + insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2 ; isPre = vp.isPre} ; SlashV2VNP v np vp = insertObj np - (insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2} ; + (insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2 ; isPre = vp.isPre} ; AdvVP vp adv = case adv.advType of { ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well @@ -48,7 +51,7 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in { PassV2 v = insertObj (mkNP passive_s) (predV v) ; ---- - CompAP ap = insertObj (mkNP ap.s) (predV copula) ; ---- hen / bu + CompAP ap = insertObj (mkNP (ap.s ++ possessive_s)) (predV copula) ; ---- hen / bu CompNP np = insertObj np (predV copula) ; ----