From 2bff57faca8e7a1ec6df19458cc4dd50da56e495 Mon Sep 17 00:00:00 2001 From: lizazim Date: Wed, 7 Jan 2015 23:44:49 +0000 Subject: [PATCH] patchJpn --- examples/phrasebook/GreetingsJpn.gf | 49 ++-- examples/phrasebook/SentencesJpn.gf | 48 +++- examples/phrasebook/WordsJpn.gf | 418 ++++++++++++++++------------ lib/src/japanese/CommonJpn.gf | 2 +- lib/src/japanese/ConjunctionJpn.gf | 21 +- lib/src/japanese/IdiomJpn.gf | 83 +++++- lib/src/japanese/LexiconJpn.gf | 12 +- lib/src/japanese/ParadigmsJpn.gf | 6 +- lib/src/japanese/PhraseJpn.gf | 10 +- lib/src/japanese/ResJpn.gf | 20 +- lib/src/japanese/StructuralJpn.gf | 152 +++++----- lib/src/japanese/VerbJpn.gf | 2 + 12 files changed, 508 insertions(+), 315 deletions(-) diff --git a/examples/phrasebook/GreetingsJpn.gf b/examples/phrasebook/GreetingsJpn.gf index a8ddfb224..ca68697c5 100644 --- a/examples/phrasebook/GreetingsJpn.gf +++ b/examples/phrasebook/GreetingsJpn.gf @@ -1,27 +1,30 @@ concrete GreetingsJpn of Greetings = SentencesJpn [Greeting,mkGreeting] ** open Prelude in { +flags coding = utf8 ; + lin - GBye = mkGreeting "bye" ; - GCheers = mkGreeting "cheers" ; - GDamn = mkGreeting "damn" ; - GExcuse, GExcusePol = mkGreeting "excuse me" ; - GGoodDay = mkGreeting "good afternoon" ; ---- - GGoodEvening = mkGreeting "good evening" ; - GGoodMorning = mkGreeting "good morning" ; - GGoodNight = mkGreeting "good night" ; - GGoodbye = mkGreeting "goodbye" ; - GHello = mkGreeting "hello" ; - GHelp = mkGreeting "help" ; - GHowAreYou = mkGreeting "how are you" ; - GLookOut = mkGreeting "look out" ; - GNiceToMeetYou, GNiceToMeetYouPol = mkGreeting "nice to meet you" ; - GPleaseGive, GPleaseGivePol = mkGreeting "please" ; - GSeeYouSoon = mkGreeting "see you soon" ; - GSorry, GSorryPol = mkGreeting "sorry" ; - GThanks = mkGreeting "thank you" ; - GTheCheck = mkGreeting "the bill" ; - GCongratulations = mkGreeting "congratulations"; - GHappyBirthday = mkGreeting "happy birthday" ; - GGoodLuck = mkGreeting "good luck" ; - GWhatTime = mkGreeting "what time is it" | mkGreeting "what is the time" ; + GBye = mkGreeting "バイ" ; + GCheers = mkGreeting "かんぱい" ; + GDamn = mkGreeting "くそ" ; + GExcuse, GExcusePol = mkGreeting "すみません" ; + GGoodDay, GHello = mkGreeting "こんにちは" ; ---- + GGoodEvening = mkGreeting "こんばんは" ; + GGoodMorning = mkGreeting "おはようございます" ; + GGoodNight = mkGreeting "おやすみなさい" ; + GGoodbye = mkGreeting "さようなら" ; + GHelp = mkGreeting "助けて" ; + GHowAreYou = mkGreeting "お元気ですか" ; + GLookOut = mkGreeting "危ない" ; + GNiceToMeetYou = mkGreeting "初めまして" ; + GPleaseGive = mkGreeting "ください" ; + GPleaseGivePol = mkGreeting "お願いします" ; + GSeeYouSoon = mkGreeting "またね" ; + GSorry = mkGreeting "ごめんなさい" ; + GSorryPol = mkGreeting "申し訳ありません" ; + GThanks = mkGreeting "ありがとう" ; + GTheCheck = mkGreeting "会計" ; + GCongratulations = mkGreeting "お目出度うご座います"; + GHappyBirthday = mkGreeting "お誕生日おめでとうございます" ; + GGoodLuck = mkGreeting "がんばってください" ; + GWhatTime = mkGreeting "今何時ですか" ; } diff --git a/examples/phrasebook/SentencesJpn.gf b/examples/phrasebook/SentencesJpn.gf index bc3605fbd..4fdaf5fb5 100644 --- a/examples/phrasebook/SentencesJpn.gf +++ b/examples/phrasebook/SentencesJpn.gf @@ -3,27 +3,42 @@ concrete SentencesJpn of Sentences = NumeralJpn ** VDrink,VEat,VRead,VWait,VWrite, phrasePlease, mkSentence, mkPhrase, NameNN, - PSentence, PQuestion, GObjectPlease - + PSentence, PQuestion, GObjectPlease, + ACitizen, Citizenship, CitiNat, Nationality, NPNationality, mkNPNationality, PropCit, PCitizenship ] with (Syntax = SyntaxJpn), -- (Symbolic = SymbolicJpn), (Lexicon = LexiconJpn) ** open SyntaxJpn, ParadigmsJpn in { +flags coding = utf8 ; + +lincat + + Citizenship = NPCitizenship ; + Nationality = NPNationality ; + lin - VDrink = v2toVP drink_V2 ; - VEat = v2toVP eat_V2 ; - VRead = v2toVP read_V2 ; - VWait = v2toVP wait_V2 ; - VWrite = v2toVP write_V2 ; + VDrink = v2toVP drink_V2 ; + VEat = v2toVP eat_V2 ; + VRead = v2toVP read_V2 ; + VWait = v2toVP wait_V2 ; + VWrite = v2toVP write_V2 ; - NameNN = mkNP (mkPN "NN") ; + NameNN = mkNP (mkPN "NN") ; - PSentence s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '.' - PQuestion s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '?' + PSentence s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '.' + PQuestion s = mkText (mkPhr (mkUtt s)) | lin Text (mkPhr (mkUtt s)) ; -- optional '?' - GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkPhr (mkUtt o)) ; + GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkPhr (mkUtt o)) ; + + ACitizen p n = mkCl p.name n.citizenship ; + + CitiNat n = {prop = n.prop ; citizenship = n.citizenship} ; + + PropCit c = c.prop ; + + PCitizenship x = mkPhrase (mkUtt x.citizenship) ; oper v2toVP : V2 -> VP = \v2 -> mkVP ; @@ -32,5 +47,16 @@ oper mkPhrase : Utt -> Text = \u -> lin Text (mkPhr u) ; -- no punctuation mkSentence : Utt -> Text = \t -> lin Text (postfixSS "." (mkPhr t) | (mkPhr t)) ; -- optional . + + NPCitizenship : Type = {prop : A ; citizenship : NP} ; + + NPNationality : Type = NPCitizenship ** {lang : NP ; country : NP} ; + + mkNPNationality : NP -> NP -> A -> NP -> NPNationality = \la,co,pro,ci -> + {lang = la ; + country = co ; + prop = pro ; + citizenship = ci + } ; } diff --git a/examples/phrasebook/WordsJpn.gf b/examples/phrasebook/WordsJpn.gf index 134da8aaa..6cc406a45 100644 --- a/examples/phrasebook/WordsJpn.gf +++ b/examples/phrasebook/WordsJpn.gf @@ -5,10 +5,14 @@ concrete WordsJpn of Words = SentencesJpn ** SyntaxJpn, ParadigmsJpn, (L = LexiconJpn), - (P = ParadigmsJpn), + (P = ParadigmsJpn), + (R = ResJpn), -- IrregJpn, ExtraJpn, Prelude in { + +flags coding = utf8 ; + lin -- Kinds; many of them are in the resource lexicon, others can be built by $mkN$. @@ -16,212 +20,220 @@ concrete WordsJpn of Words = SentencesJpn ** Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; - Cheese = mkCN (mkN "cheese") ; - Chicken = mkCN (mkN "chicken") ; - Coffee = mkCN (mkN "coffee") ; + Cheese = mkCN (mkN "チーズ" R.Inanim) ; -- "chiizu" + Chicken = mkCN (mkN "鶏" R.Inanim "切れ" False) ; -- "tori" "kire" + Coffee = mkCN (mkN "コーヒー" R.Inanim "杯" False) ; -- "koohi" "hai" (cups of) Fish = mkCN L.fish_N ; - Meat = mkCN (mkN "meat") ; + Meat = mkCN (mkN "肉" R.Inanim "切れ" False) ; -- "niku" "kire" Milk = mkCN L.milk_N ; - Pizza = mkCN (mkN "pizza") ; + Pizza = mkCN (mkN "ピザ" R.Inanim "枚" False) ; -- "piza" "mai" (smth flat) Salt = mkCN L.salt_N ; - Tea = mkCN (mkN "tea") ; + Tea = mkCN (mkN "お茶" R.Inanim "杯" False) ; -- "ocha" "hai" (cups of) Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; -- Properties; many of them are in the resource lexicon, others can be built by $mkA$. Bad = L.bad_A ; --- Boring = mkA "boring" ; --- Cheap = mkA "cheap" ; + Boring = mkA "つまらない" ; + Cheap = mkA "安い" ; -- "yasui" Cold = L.cold_A ; --- Delicious = mkA "delicious" ; --- Expensive = mkA "expensive" ; --- Fresh = mkA "fresh" ; + Delicious = mkA "美味しい" ; -- "oishii" + Expensive = mkA "高い" ; -- "takai" + Fresh = mkA "新鮮な" ; -- "shinsenna" Good = L.good_A ; --- Suspect = mkA "suspect" ; + Suspect = mkA "怪しい" ; -- "ayashii" Warm = L.warm_A ; -- Places require different prepositions to express location; in some languages -- also the directional preposition varies, but in English we use $to$, as -- defined by $mkPlace$. - Airport = mkPlace "airport" "at" ; - AmusementPark = mkCompoundPlace "amusement" "park" "at" ; - Bank = mkPlace "bank" "at" ; - Bar = mkPlace "bar" "in" ; - Cafeteria = mkPlace "canteen" "in" ; - Center = mkPlace "center" "in" ; - Cinema = mkPlace "cinema" "at" ; - Church = mkPlace "church" "in" ; - Disco = mkPlace "disco" "at" ; - Hospital = mkPlace "hospital" "in" ; - Hotel = mkPlace "hotel" "in" ; - Museum = mkPlace "museum" "at" ; - Park = mkPlace "park" "in" ; - Parking = mkCompoundPlace "car" "park" "in" ; - Pharmacy = mkPlace "pharmacy" "at" ; - PostOffice = mkCompoundPlace "post" "office" "at" ; - Pub = mkPlace "pub" "at" ; - Restaurant = mkPlace "restaurant" "in" ; - School = mkPlace "school" "at" ; - Shop = mkPlace "shop" "at" ; - Station = mkPlace "station" "at" ; - Supermarket = mkPlace "supermarket" "at" ; - Theatre = mkPlace "theatre" "at" ; - Toilet = mkPlace "toilet" "in" ; - University = mkPlace "university" "at" ; - Zoo = mkPlace "zoo" "at" ; + Airport = mkPlace "空港" "で" ; -- "kuukou" "de" + AmusementPark = mkPlace "遊園地" "で" ; -- "yuuenchi" "de" + Bank = mkPlace "銀行" "で" ; -- "ginkou" "de" + Bar = mkPlace "バー" "で" ; -- "baa" "de" + Cafeteria = mkPlace "食堂" "で" ; -- "shokudou" "de" + Center = mkPlace "センター" "で" ; -- "sentaa" "de" + Cinema = mkPlace "映画館" "で" ; -- "eigakan" "de" + Church = mkPlace "教会" "で" ; -- "kyoukai" "de" + Disco = mkPlace "ディスコ" "で" ; -- "disuko" "de" + Hospital = mkPlace "病院" "で" ; -- "byouin" "de" + Hotel = mkPlace "ホテル" "で" ; -- "hoteru" "de" + Museum = mkPlace "博物館" "で" ; -- "hakubutsukan" "de" + Park = mkPlace "公園" "で" ; -- "kouen" "de" + Parking = mkPlace "駐車場" "で" ; -- "chuushajou" "de" + Pharmacy = mkPlace "薬局" "で" ; -- "kyoukai" "de" + PostOffice = mkPlace "郵便局" "で" ; -- "yuubinkyoku" "de" + Pub = mkPlace "パブ" "で" ; -- "pabu" "de" + Restaurant = mkPlace "レストラン" "で" ; -- "resutoran" "de" + School = mkPlace "学校" "で" ; -- "gakkou" "de" + Shop = mkPlace "商店" "で" ; -- "mise" "de" + Station = mkPlace "駅" "で" ; -- "eki" "de" + Supermarket = mkPlace "スーパー" "で" ; -- "suupaa" "de" + Theatre = mkPlace "劇場" "で" ; -- "gekijou" "de" + Toilet = mkPlace "お手洗い" "で" ; -- "otearai" "de" + University = mkPlace "大学" "で" ; -- "daigaku" "de" + Zoo = mkPlace "動物園" "で" ; -- "doubutsuen" "de" - CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) in_Prep to_Prep ; + CitRestaurant cit = mkCNPlace (mkCN cit.prop (mkN "レストラン")) in_Prep to_Prep ; -- "resutoran" -- Currencies; $crown$ is ambiguous between Danish and Swedish crowns. ----- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ; - Dollar = mkCN (mkN "dollar") ; - Euro = mkCN (mkN "euro") ; -- to prevent euroes - Lei = mkCN (mkN "leu") ; - Leva = mkCN (mkN "lev") ; ----- NorwegianCrown = mkCN (mkA "Norwegian") (mkN "crown") | mkCN (mkN "crown") ; - Pound = mkCN (mkN "pound") ; - Rouble = mkCN (mkN "rouble") ; - Rupee = mkCN (mkN "rupee") ; ----- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; - Zloty = mkCN (mkN "zloty") ; - Yuan = mkCN (mkN "yuan") ; + DanishCrown = mkCur "デンマーク・クローネ" | mkCur "クローナ" ; -- "denmaaku kuroune" + Dollar = mkCur "ドル" ; -- "doru" + Euro = mkCur "ユーロ" ; -- "yuuro" + Lei = mkCur "レウ" ; -- "reu" + Leva = mkCur "レフ" ; -- "refu" + NorwegianCrown = mkCur "ノルウェー・クローネ" | mkCur "クローナ" ; -- "noruwee kuroune" + Pound = mkCur "ポンド" ; -- "pondo" + Rouble = mkCur "ルーブル" ; -- "ruuburu" + Rupee = mkCur "ルピ" ; -- "rupii" + SwedishCrown = mkCur "スウェーデン・クローナ" | mkCur "クローナ" ; -- "Suu~eeden kurouna" + Zloty = mkCur "ズロティ" ; -- "zuroti" + Yuan = mkCur "元" ; -- "gen" -- Nationalities --- Belgian = mkA "Belgian" ; - Belgium = mkNP (mkPN "Belgium") ; - Bulgarian = mkNat "Bulgarian" "Bulgaria" ; ----- Catalan = mkNPNationality (mkNP (mkPN "Catalan")) (mkNP (mkPN "Catalonia")) (mkA "Catalonian") ; - Chinese = mkNat "Chinese" "China" ; - Danish = mkNat "Danish" "Denmark" ; ----- Dutch = mkNPNationality (mkNP (mkPN "Dutch")) (mkNP the_Quant (mkN "Netherlands")) (mkA "Dutch") ; - English = mkNat "English" "England" ; - Finnish = mkNat "Finnish" "Finland" ; - Flemish = mkNP (mkPN "Flemish") ; - French = mkNat "French" "France" ; - German = mkNat "German" "Germany" ; - Hindi = mkNP (mkPN "Hindi") ; - India = mkNP (mkPN "India") ; ----- Indian = mkA "Indian" ; - Italian = mkNat "Italian" "Italy" ; - Norwegian = mkNat "Norwegian" "Norway" ; - Polish = mkNat "Polish" "Poland" ; - Romanian = mkNat "Romanian" "Romania" ; - Russian = mkNat "Russian" "Russia" ; - Spanish = mkNat "Spanish" "Spain" ; - Swedish = mkNat "Swedish" "Sweden" ; + Belgian = {prop = mkA "ベルギー の" ; citizenship = mkNP (mkN "ベルギー 人")} ; -- "berugii no" + Belgium = mkNP (mkPN "ベルギー") ; -- "berugii" + Bulgarian = mkNat "ブルガリア" ; -- "burugaria" + Catalan = mkNat "カタロニア" ; -- "kataronia" + Chinese = mkNat"中国" ; -- "chuugoku" + Danish = mkNat "デンマーク" ; -- "denmaaku" + Dutch = mkNat "オランダ" ; -- "oranda" + English = mkNPNationality (mkNP (mkPN "英語")) (mkNP (mkPN "イギリス")) -- "eigo" + (mkA "イギリスの") (mkNP (mkPN "イギリス人")) ; + Finnish = mkNat "フィンランド" ; -- "finrando" + Flemish = mkNP (mkPN "フラマン 語") ; -- "furaman go" + French = mkNat "フランス" ; -- "furansu" + German = mkNat "ドイツ" ; -- "doitsu" + Hindi = mkNP (mkPN "ヒンディー語") ; -- "hindii" + India = mkNP (mkPN "インド") ; -- "indo" + Indian = {prop = mkA "インドの" ; citizenship = mkNP (mkN "インド人")} ; -- "indo no" + Italian = mkNat "イタリア" ; -- "itaria" + Norwegian = mkNat "ノルウェー" ; -- "noruwee" + Polish = mkNat "ポーランド" ; -- "porando" + Romanian = mkNat "ルーマニア" ; -- "ruumania" + Russian = mkNat "ロシア" ; -- "roshia" + Spanish = mkNat "スペイン" ; -- "supein" + Swedish = mkNat "スウェーデン" ; -- "suweeden" -- Means of transportation Bike = mkTransport L.bike_N ; - Bus = mkTransport (mkN "bus") ; + Bus = mkTransport (mkN "バス") ; -- "basu" Car = mkTransport L.car_N ; - Ferry = mkTransport (mkN "ferry") ; + Ferry = mkTransport (mkN "フェリー") ; -- "ferii" Plane = mkTransport L.airplane_N ; - Subway = mkTransport (mkN "subway") ; - Taxi = mkTransport (mkN "taxi") ; - Train = mkTransport (mkN "train") ; - Tram = mkTransport (mkN "tram") ; + Subway = mkTransport (mkN "地下鉄") ; -- "chikatetsu" + Taxi = mkTransport (mkN "タクシー") ; -- "takushii" + Train = mkTransport (mkN "電車") ; -- "densha" + Tram = mkTransport (mkN "市電") ; -- "shiden" - ByFoot = P.mkAdv "by foot" ; + ByFoot = P.mkAdv "徒歩で" ; -- "toho de" -- Actions: the predication patterns are very often language-dependent. - AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsJpn.mkAdv "old")); - AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; - AHasRoom p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (mkN "room")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkN "person")))) ; - AHasTable p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (mkN "table")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkN "person")))) ; + AHasAge p num = mkCl p.name (mkNP num (mkNounWOCounter "歳")) ; + AHasChildren p num = mkCl p.name (mkV2 "いる" "が" R.Gr2) (mkNP num L.child_N) ; AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungry") ; --- AIll p = mkCl p.name (mkA "ill") ; - AKnow p = mkCl p.name (v2toVP L.know_V2) ; - ALike p item = mkCl p.name L.like_V2 item ; - ALive p co = mkCl p.name (mkVP (mkVP L.live_V) (SyntaxJpn.mkAdv in_Prep co)) ; - ALove p q = mkCl p.name L.love_V2 q.name ; --- AMarried p = mkCl p.name (mkA "married") ; --- AReady p = mkCl p.name (mkA "ready") ; --- AScared p = mkCl p.name (mkA "scared") ; + AHasRoom p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "部屋")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkNounWOCounter "人")))) ; -- "heya" + AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "テーブル")) (SyntaxJpn.mkAdv for_Prep (mkNP num (mkNounWOCounter "人")))) ; + AHungry p = mkCl p.name (P.mkV "お腹が空いている" R.Gr1) ; -- "onaka ga suite iru" + AIll p = mkCl p.name (mkA "病気の") ; + AKnow p = mkCl p.name mkKnow ; + ALike p item = mkCl p.name (mkA2 "好きな" "が") item ; + ALive p co = mkCl p.name (mkVP (mkVP (mkV "住んでいる" R.Gr2)) (SyntaxJpn.mkAdv in_Prep co)) ; -- "sundeiru" + ALove p q = mkCl p.name (mkV2 "愛している" "を" R.Gr2) q.name ; -- "aishiteiru" + AMarried p = mkCl p.name (mkA "結婚している" "既婚の") ; -- "kekkonshiteiru" "kikonno" + AReady p = mkCl p.name L.ready_A ; + AScared p = mkCl p.name (mkA "怖い") ; ASpeak p lang = mkCl p.name L.speak_V2 lang ; --- AThirsty p = mkCl p.name (mkA "thirsty") ; --- ATired p = mkCl p.name (mkA "tired") ; - AUnderstand p = mkCl p.name (v2toVP L.understand_V2) ; - AWant p obj = mkCl p.name (mkV2 "want") obj ; + AThirsty p = mkCl p.name (mkA "喉が乾いている" "渇した") ; + -- "nodo ga kawaiteiru" "kasshita" + ATired p = mkCl p.name (mkA "疲れている" "疲れた") ; + -- "tsukareteiru" "tsukareta" + AUnderstand p = case p.name.meaning of { + R.SomeoneElse => mkCl p.name (v2toVP L.understand_V2) ; + R.Me => mkCl p.name (mkV "分かる" R.Gr1) -- "wakaru" + } ; + AWant p obj = case (p.name).meaning of { + R.Me => mkCl p.name (mkA2 "欲しい" "が") obj ; + R.SomeoneElse => mkCl p.name (mkA2 "欲しがっている" "欲しい" "が") obj + } ; AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- miscellaneous QWhatName p = mkQS (mkQCl (mkIComp whatSg_IP) (nameOf p)) ; --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; - HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "cost"))) ; - ItCost item price = mkCl item (mkV2 "cost") price ; + QWhatAge p = mkQS (mkQCl howOld_IAdv (mkCl p.name R.mkCopula)) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "かかる"))) ; + ItCost item price = mkCl item (mkV2 "かかる" "" R.Gr1) price ; - PropOpen p = mkCl p.name open_Adv ; - PropClosed p = mkCl p.name closed_Adv ; - PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ; - PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ; - PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ; - PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ; + PropOpen p = mkCl p.name mkOpen ; + PropClosed p = mkCl p.name mkClosed ; + PropOpenDate p d = mkCl p.name (mkVP (mkVP mkOpen) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP mkClosed) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP mkOpen) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP mkClosed) d.habitual) ; -- Building phrases from strings is complicated: the solution is to use -- mkText : Text -> Text -> Text ; - PSeeYouDate d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ; - PSeeYouPlace p = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt p.at)) ; + PSeeYouDate d = mkText (mkPhrase (mkUtt d)) (lin Text (ss ("会いましょう"))) ; -- "aimashou" + PSeeYouPlace p = mkText (mkPhrase (mkUtt p.at)) (lin Text (ss ("会いましょう"))) ; -- "aimashou" PSeeYouPlaceDate p d = - mkText (lin Text (ss ("see you"))) - (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ; + mkText (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) + (lin Text (ss ("会いましょう"))) ; -- "aimashou" -- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$ -- below. Languages without productive genitives must use an equivalent of -- "the wife of my son" for non-pronouns. - Wife = xOf (mkN "wife") ; - Husband = xOf (mkN "husband") ; - Son = xOf (mkN "son") ; - Daughter = xOf (mkN "daughter") ; + Wife = xOf (mkN "妻" "奥さん" R.Anim "人" False "妻たち") ; -- "tsuma" "okusan" + Husband = xOf (mkN "夫" "ご主人" R.Anim "人" False "夫たち") ; -- "otto" "goshujin" + Son = xOf (mkN "息子" "息子さん" R.Anim "人" False "息子たち") ; -- "musuko" + Daughter = xOf (mkN "娘" "お嬢さん" R.Anim "人" False "娘たち") ; -- "musume" "ojousan" Children = xOf L.child_N ; -- week days - Monday = mkDay "Monday" ; - Tuesday = mkDay "Tuesday" ; - Wednesday = mkDay "Wednesday" ; - Thursday = mkDay "Thursday" ; - Friday = mkDay "Friday" ; - Saturday = mkDay "Saturday" ; - Sunday = mkDay "Sunday" ; + Monday = mkDay "月曜日" ; -- "getsuyoubi" + Tuesday = mkDay "火曜日" ; -- "kayoubi" + Wednesday = mkDay "水曜日" ; -- "suiyoubi" + Thursday = mkDay "木曜日" ; -- "mokuyoubi" + Friday = mkDay "金曜日" ; -- "kin'youbi" + Saturday = mkDay "土曜日" ; -- "doyoubi" + Sunday = mkDay "日曜日" ; -- "nichiyoubi" - Tomorrow = P.mkAdv "tomorrow" ; + Tomorrow = P.mkAdv "明日" ; -- "ashita" -- modifiers of places TheBest = mkSuperl L.good_A ; TheClosest = mkSuperl L.near_A ; ----- TheCheapest = mkSuperl (mkA "cheap") ; ----- TheMostExpensive = mkSuperl (mkA "expensive") ; ----- TheMostPopular = mkSuperl (mkA "popular") ; + TheCheapest = mkSuperl (mkA "安い") ; -- "yasui" + TheMostExpensive = mkSuperl (mkA "高い") ; -- "takai" + TheMostPopular = mkSuperl (mkA "盛んな") ; -- "sakanna" TheWorst = mkSuperl L.bad_A ; SuperlPlace sup p = placeNP sup p ; -- transports - -{- - HowFar place = mkQS (mkQCl far_IAdv place.name) ; + + HowFar place = mkQS (mkQCl howFar_IAdv (mkCl place.name (mkA "遠い"))) ; HowFarFrom x y = - mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxJpn.mkAdv from_Prep x.name))) ; + mkQS (mkQCl howFar_IAdv (mkCl (mkNP y.name (SyntaxJpn.mkAdv from_Prep x.name)) (mkA "遠い"))) ; HowFarFromBy x y t = - mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxJpn.mkAdv from_Prep (mkNP x.name t)))) ; - HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl y.name t)) ; --} + mkQS (mkQCl howFar_IAdv (mkCl + (mkNP y.name (SyntaxJpn.mkAdv from_Prep (mkNP x.name t))) (mkA "遠い"))) ; + HowFarBy y t = mkQS (mkQCl howFar_IAdv (mkCl (mkNP y.name t) (mkA "遠い"))) ; + WhichTranspPlace trans place = mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ; @@ -234,13 +246,14 @@ concrete WordsJpn of Words = SentencesJpn ** oper - mkNat : Str -> Str -> NPNationality = \nat,co -> - mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) L.good_A ; ---- mkA ... + mkNat : Str -> NPNationality = \co -> + mkNPNationality (mkNP (mkPN (co + "語"))) (mkNP (mkPN co)) + (mkA (co + "の")) (mkNP (mkPN (co + "人"))) ; ---- mkA ... mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> let day : NP = mkNP (mkPN d) in - mkNPDay day (SyntaxJpn.mkAdv on_Prep day) - (SyntaxJpn.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + mkNPDay day (SyntaxJpn.mkAdv in_Prep day) + (SyntaxJpn.mkAdv in_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; mkCompoundPlace : Str -> Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \comp, p, i -> mkCNPlace (mkCN (P.mkN (comp + p))) (P.mkPrep i) to_Prep ; @@ -248,16 +261,14 @@ concrete WordsJpn of Words = SentencesJpn ** mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,i -> mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ; - open_Adv = P.mkAdv "open" ; - closed_Adv = P.mkAdv "closed" ; - xOf : N -> NPPerson -> NPPerson = \f,p -> {name = mkNP the_Det (mkCN f (SyntaxJpn.mkAdv possess_Prep p.name)) ; isPron = False ; poss = the_Quant} ; ---- poss not used + mkOpen : A = mkA "開いている" "開いた" ; -- "aiteiru" + mkClosed : A = mkA "閉まっている" "閉まった" ; -- "shimatteiru" - nameOf : NPPerson -> NP = \p -> (xOf (mkN "name") p).name ; - + nameOf : NPPerson -> NP = \p -> (xOf (mkN "名前") p).name ; mkTransport : N -> {name : CN ; by : Adv} = \n -> { name = mkCN n ; @@ -266,51 +277,108 @@ concrete WordsJpn of Words = SentencesJpn ** mkSuperl : A -> Det = \a -> SyntaxJpn.mkDet the_Art (SyntaxJpn.mkOrd a) ; - far_IAdv = lin IAdv (ss "how far") ; + howFar_IAdv : IAdv = lin IAdv {s = \\st => "どのくらい" ; particle = "" ; wh8re = False} ; + + howOld_IAdv : IAdv = lin IAdv {s = \\st => "何歳" ; particle = "" ; wh8re = False} ; + + mkCur : Str -> Currency = \c -> lin Currency (lin CN { + s = \\n,st => c ; + anim = R.Inanim ; + counter = c ; + counterReplace = True ; + counterTsu, hasAttr = False ; + object, prepositive = \\st => "" + } ) ; + + mkNounWOCounter : Str -> CN = \noun -> lin CN { + s = \\n,st => noun ; + anim = R.Inanim ; + counter = noun ; + counterReplace = True ; + counterTsu, hasAttr = False ; + object, prepositive = \\st => "" + } ; + + mkKnow : V = lin V { + s = table { + R.Resp => table { + (R.TPres|R.TFut) => table { + R.Pos => "知っています" ; + R.Neg => "知りません" + } ; + R.TPast => table { + R.Pos => "知っていました" ; + R.Neg => "知りませんでした" + } + } ; + R.Plain => table { + (R.TPres|R.TFut) => table { + R.Pos => "知っている" ; + R.Neg => "知らない" + } ; + R.TPast => table { + R.Pos => "知っていた" ; + R.Neg => "知らなかった" + } + } + } ; + te = table { + R.Pos => "知って" ; + R.Neg => "知らないで" + } ; + a_stem = "知ら" ; + i_stem = "知り" ; + ba = table { + R.Pos => "知れば" ; + R.Neg => "知らなければ" + } ; + needSubject = True + } ; -------------------------------------------------- -- New 30/11/2011 AR -------------------------------------------------- lin - Thai = mkNat "Thai" "Thailand" ; - Baht = mkCN (mkN "baht" "baht") ; + Thai = mkNat "タイ" ; -- "tai" + Baht = mkCur "バーツ" ; -- "baatsu" - Rice = mkCN (mkN "rice") ; - Pork = mkCN (mkN "pork") ; - Beef = mkCN (mkN "beef") ; + Rice = mkCN (mkN "ご飯") ; -- "gohan" + Pork = mkCN (mkN "豚肉") ; -- "butaniku" + Beef = mkCN (mkN "牛肉") ; -- "gyuuniku" Egg = mkCN L.egg_N ; - Noodles = mkCN (mkN "noodle") ; - Shrimps = mkCN (mkN "shrimp") ; - Chili = mkCN (mkN "chili") ; - Garlic = mkCN (mkN "garlic") ; - Durian = mkCN (mkN "durian") ; - Mango = mkCN (mkN "mango") ; - Pineapple = mkCN (mkN "pineapple") ; - Coke = mkCN (mkN "coke") ; - IceCream = mkCN (mkN "ice cream") ; - Salad = mkCN (mkN "salad") ; - OrangeJuice = mkCN (mkN "orange juice") ; - Lemonade = mkCN (mkN "lemonade") ; + Noodles = mkCN (mkN "ヌードル") ; -- "nuudoru" + Shrimps = mkCN (mkN "海老") ; -- "ebi" + Chili = mkCN (mkN "チリ") ; -- "chiri" + Garlic = mkCN (mkN "大蒜") ; -- "ninniku" + Durian = mkCN (mkN "ドリアン") ; -- "dorian" + Mango = mkCN (mkN "マンゴ") ; -- "mango" + Pineapple = mkCN (mkN "パイナップル") ; -- "painappuru" + Coke = mkCN (mkN "コーク") ; -- "kooku" + IceCream = mkCN (mkN "アイスクリーム") ; -- "aisukuriimu" + Salad = mkCN (mkN "サラダ") ; -- "sarada" + OrangeJuice = mkCN (mkN "オレンジジュース") ; -- "orenjijuusu" + Lemonade = mkCN (mkN "レモネード") ; -- "remoneedo" Beach = mkPlace "beach" "on" ; - ItsRaining = mkCl (progressiveVP (mkVP L.rain_V0)) ; + ItsRaining = mkCl (mkVP R.mkRain) ; ItsCold = mkCl (mkVP L.cold_A) ; ItsWarm = mkCl (mkVP L.warm_A) ; - ItsWindy = mkCl (mkVP (P.mkA "windy")) ; - SunShine = mkCl (mkNP the_Det L.sun_N) (progressiveVP (mkVP (mkV "shine"))) ; + ItsWindy = mkCl (mkVP (P.mkA "風が強い")) ; + SunShine = mkCl (mkNP L.sun_N) (mkVP (mkV "輝いている" R.Gr2)) ; + -- "taiyou wa kagayaite iru" - Smoke = mkVP (P.mkV "smoke") ; + Smoke = mkVP (P.mkV "煙草を吸う" R.Gr1) ; -- "tabako o suu" - ADoctor = mkProfession (mkN "doctor") ; - AProfessor = mkProfession (mkN "professor") ; - ALawyer = mkProfession (mkN "lawyer") ; - AEngineer = mkProfession (mkN "engineer") ; - ATeacher = mkProfession (mkN "teacher") ; - ACook = mkProfession (mkN "cook") ; - AStudent = mkProfession (mkN "student") ; - ABusinessman = mkProfession (mkN "businessman" "businessmen") ; + ADoctor = mkProfession (mkN "医者") ; -- "isha" + AProfessor = mkProfession (mkN "教授") ; -- "kyouju" + ALawyer = mkProfession (mkN "弁護士") ; -- "bengoshi" + AEngineer = mkProfession (mkN "技術者") ; -- "gijutsusha" + ATeacher = mkProfession (mkN "先生") ; -- "sensei" + ACook = mkProfession (mkN "料理人") ; -- "ryourinin" + AStudent = mkProfession (mkN "学生") ; -- "gakusei" + ABusinessman = mkProfession (mkN "実業家") ; -- "jitsugyouka" oper mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ; diff --git a/lib/src/japanese/CommonJpn.gf b/lib/src/japanese/CommonJpn.gf index f5b0e1e0e..8adb3e692 100644 --- a/lib/src/japanese/CommonJpn.gf +++ b/lib/src/japanese/CommonJpn.gf @@ -14,7 +14,7 @@ flags coding = utf8 ; SC = {s : Particle => Style => Str ; isVP : Bool} ; - Adv = Adverb ; -- {s : Style => Str ; prepositive : Bool ; compar : ComparSense} ; + Adv = Adverb ; -- {s : Style => Str ; prepositive : Bool} ; AdN = {s : Str ; postposition : Bool} ; diff --git a/lib/src/japanese/ConjunctionJpn.gf b/lib/src/japanese/ConjunctionJpn.gf index 712b0ff15..8e5512f12 100644 --- a/lib/src/japanese/ConjunctionJpn.gf +++ b/lib/src/japanese/ConjunctionJpn.gf @@ -76,6 +76,13 @@ concrete ConjunctionJpn of Conjunction = CatJpn ** open ResJpn, Prelude in { } ; prepositive = adv.prepositive } ; + + ConjAdV conj adv = { + s = case conj.type of { + (And | Both) => conj.null ++ adv.and ; + Or => conj.null ++ adv.or + } + } ; ConjNP conj np = { s = \\st => case conj.type of { @@ -214,7 +221,17 @@ concrete ConjunctionJpn of Conjunction = CatJpn ** open ResJpn, Prelude in { _ => True } } ; - + + BaseAdV x y = { + and = x.s ++ y.s ; + or = x.s ++ "か" ++ y.s + } ; + + ConsAdV x xs = { + and = x.s ++ xs.and ; + or = x.s ++ "か" ++ xs.or + } ; + BaseNP x y = { and = \\st => x.s ! st ++ "と" ++ y.s ! st ; or = \\st => x.s ! st ++ "か" ++ y.s ! st ; @@ -343,6 +360,8 @@ concrete ConjunctionJpn of Conjunction = CatJpn ** open ResJpn, Prelude in { missingSubj : Bool} ; [Adv] = {and, or : Style => Str ; prepositive : Bool} ; + + [AdV] = {and, or : Str} ; [NP] = {and, or, both : Style => Str ; prepositive : Style => Str ; needPart : Bool ; changePolar : Bool ; meaning : Speaker ; anim : Animateness} ; diff --git a/lib/src/japanese/IdiomJpn.gf b/lib/src/japanese/IdiomJpn.gf index 10efabc5d..47cd3f170 100644 --- a/lib/src/japanese/IdiomJpn.gf +++ b/lib/src/japanese/IdiomJpn.gf @@ -7,26 +7,26 @@ flags coding = utf8 ; ImpersCl vp = case vp.needSubject of { True => { s = table { - Wa => \\st,t,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + Wa => \\st,t,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; - Ga => \\st,t,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + Ga => \\st,t,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p } ; te = table { - Wa => \\st,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + Wa => \\st,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; - Ga => \\st,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + Ga => \\st,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p } ; ba = table { - Wa => \\st,p => vp.prepositive ! st ++ "これは" ++ vp.obj ! st ++ + Wa => \\st,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p ; - Ga => \\st,p => vp.prepositive ! st ++ "これが" ++ vp.obj ! st ++ + Ga => \\st,p => vp.prepositive ! st ++ vp.obj ! st ++ vp.prep ++ vp.ba ! SomeoneElse ! Inanim ! st ! p } ; subj = table { - Wa => \\st => vp.prepositive ! st ++ "これは" ; - Ga => \\st => vp.prepositive ! st ++ "これが" + Wa => \\st => vp.prepositive ! st ; + Ga => \\st => vp.prepositive ! st } ; pred = \\st,t,p => vp.obj ! st ++ vp.prep ++ vp.verb ! SomeoneElse ! Inanim ! st ! t ! p ; pred_te = \\st,p => vp.obj ! st ++ vp.prep ++ vp.te ! SomeoneElse ! Inanim ! st ! p ; @@ -134,6 +134,50 @@ flags coding = utf8 ; } ; changePolar = False } ; + + ExistNPAdv np adv = case np.needPart of { + True => { + s = \\part,st,t,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + te = \\part,st,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + ba = \\part,st,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ++ + mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; + subj = \\part,st => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ "が" ; + pred = \\st,t,p => mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + pred_te = \\st,p => mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + pred_ba = \\st,p => mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; + changePolar = np.changePolar + } ; + False => { + s = \\part,st,t,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ + mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + te = \\part,st,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ + mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + ba = \\part,st,p => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ++ + mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; + subj = \\part,st => adv.s ! st ++ np.prepositive ! st ++ np.s ! st ; + pred = \\st,t,p => mkExistV.verb ! SomeoneElse ! np.anim ! st ! t ! p ; + pred_te = \\st,p => mkExistV.te ! SomeoneElse ! np.anim ! st ! p ; + pred_ba = \\st,p => mkExistV.ba ! SomeoneElse ! np.anim ! st ! p ; + changePolar = np.changePolar + } + } ; + + ExistIPAdv ip adv = { + s = \\part,st,t,p => case ip.how8many of { + True => adv.s ! st ++ ip.s_subj ! st ++ mkExistV.verb ! SomeoneElse ! ip.anim ! st ! t ! p ++ "か" ; + False => adv.s ! st ++ ip.s_subj ! st ++ "が" ++ mkExistV.verb ! SomeoneElse ! ip.anim ! st ! t ! p + ++ "か" + } ; + s_plain_pred = \\part,st,t,p => case ip.how8many of { + True => adv.s ! st ++ ip.s_subj ! st ++ + mkExistV.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p ++ "か" ; + False => adv.s ! st ++ ip.s_subj ! st ++ "が" ++ + mkExistV.verb ! SomeoneElse ! ip.anim ! Plain ! t ! p ++ "か" + } ; + changePolar = False + } ; ProgrVP vp = { verb = \\sp,a,st,t,p => vp.te ! sp ! a ! st ! Pos ++ (mkVerb "いる" Gr2).s ! st ! t ! p ; @@ -159,4 +203,27 @@ flags coding = utf8 ; } ; type = Imper } ; + + SelfAdvVP vp = { + verb = \\sp,a,st,t,p => "自分 は" ++ vp.verb ! sp ! a ! st ! t ! p ; + a_stem = \\sp,a,st => "自分 は" ++ vp.a_stem ! sp ! a ! st ; + i_stem = \\sp,a,st => "自分 は" ++ vp.i_stem ! sp ! a ! st ; + te = \\sp,a,st,p => "自分 は" ++ vp.te ! sp ! a ! st ! p ; + ba = \\sp,a,st,p => "自分 は" ++ vp.ba ! sp ! a ! st ! p ; + prep = vp.prep ; + obj = vp.obj ; + prepositive = vp.prepositive ; + needSubject = vp.needSubject + } ; + + SelfAdVVP = SelfAdvVP ; + + SelfNP np = { + s = \\st => np.s ! st ++ "自分 は" ; + prepositive = np.prepositive ; + needPart = np.needPart ; + changePolar = np.changePolar ; + meaning = np.meaning ; + anim = np.anim + } ; } diff --git a/lib/src/japanese/LexiconJpn.gf b/lib/src/japanese/LexiconJpn.gf index 669011056..e62ef1af6 100644 --- a/lib/src/japanese/LexiconJpn.gf +++ b/lib/src/japanese/LexiconJpn.gf @@ -7,7 +7,7 @@ lin add_V3 = mkV3 "加える" "に" "を" Gr2 ; -- "kuwaeru" airplane_N = mkN "飛行機" Inanim "機" False ; -- "hikouki" "ki" alas_Interj = ss "残念です" ; -- "zannendesu" - already_Adv = mkAdv "すでに" ; -- "sudeni" + already_Adv = ResJpn.mkAdv "すでに" ; -- "sudeni" animal_N = mkN "動物" Anim "疋" True ; -- "doubutsu" "hiki" answer_V2S = mkV "答える" Gr2 ; -- "kotaeru" apartment_N = mkN "アパート" Inanim ; -- "apaato" @@ -57,7 +57,7 @@ lin ceiling_N = mkN "天井" Inanim ; -- "tenjou" chair_N = mkN "椅子" Inanim "脚" False ; -- "isu" "kyaku" cheese_N = mkN "チーズ" Inanim ; -- "chiizu" - child_N = mkN "子供" Anim "人" False "子供たち" ; -- "kodomo" + child_N = mkN "子供" Anim "人" False ; -- "kodomo" church_N = mkN "教会" Inanim "軒" False ; -- "kyoukai" "ken" city_N = mkN "都市" Inanim ; -- "toshi" clean_A = mkA "奇麗な" ; -- "kireina" ; @@ -97,7 +97,7 @@ lin eye_N = mkN "目" Inanim ; -- "me" factory_N = mkN "工場" Inanim ; -- "koujou" fall_V = mkV "落ちる" Gr2 ; -- "ochiru" - far_Adv = mkAdv "遠くに" ; -- "tookuni" + far_Adv = ResJpn.mkAdv "遠くに" ; -- "tookuni" father_N2 = mkN2 "お父さん" Anim "人" False "お父さんたち" "の" ; -- "otousan" fat_N = mkN "脂" Inanim ; -- "abura" fear_VS = mkV2 "恐れる" "ことを" Gr2 ; -- "osoreru" @@ -179,7 +179,7 @@ lin like_V2 = mkV2 "好く" "を" Gr1 ; -- "suku" listen_V2 = mkV2 "聞く" "を" Gr1 ; -- "kiku" liver_N = mkN "肝臓" Inanim ; -- "kanzou" - live_V = mkV "生きる" Gr2 ; -- "ikiru" + live_V = mkV "住む" Gr1 ; -- "sumu" long_A = mkA "長い" ; -- "nagai" lose_V2 = mkV2 "失う" "を" Gr1 ; -- "ushinau" louse_N = mkN "虱" Anim "匹" False ; -- "shirami" "hiki" @@ -202,7 +202,7 @@ lin newspaper_N = mkN "新聞" Inanim "部" False ; -- "shimbun" "bu" night_N = mkN "夜" Inanim "夜" True ; -- "yoru" "ya" nose_N = mkN "鼻" Inanim ; -- "hana" - now_Adv = mkAdv "今" ; -- "ima" + now_Adv = ResJpn.mkAdv "今" ; -- "ima" number_N = mkN "数" Inanim "数" True ; -- "kazu" "suu" oil_N = mkN "油" Inanim ; -- "abura" old_A = mkA "古い" ; -- "furui" @@ -314,7 +314,7 @@ lin think_V = mkV "考える" Gr2 ; -- "kangaeru" throw_V2 = mkV2 "投げる" "を" Gr2 ; -- "nageru" tie_V2 = mkV2 "結ぶ" "を" Gr1 ; -- "musubu" - today_Adv = mkAdv "今日" ; -- "kyou" ; + today_Adv = ResJpn.mkAdv "今日" ; -- "kyou" ; tongue_N = mkN "舌" Inanim ; -- "shita" tooth_N = mkN "歯" Inanim ; -- "ha" train_N = mkN "電車" Inanim "列車" True ; -- "densha" "ressha" diff --git a/lib/src/japanese/ParadigmsJpn.gf b/lib/src/japanese/ParadigmsJpn.gf index 33892e886..adfe9f8bd 100644 --- a/lib/src/japanese/ParadigmsJpn.gf +++ b/lib/src/japanese/ParadigmsJpn.gf @@ -18,7 +18,11 @@ oper (men : Str) -> N = \n,a,c,b,pl -> lin N (numberNoun n a c b pl False) ; mkN : (kane,okane : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> N - = \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b False) + = \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b False) ; + mkN : (tsuma,okusan : Str) -> (anim : Animateness) -> (counter : Str) -> + (counterReplace : Bool) -> (tsumatachi : Str) -> N + = \tsuma,okusan,a,c,b,tsumatachi -> + lin N (mkNoun tsuma okusan tsumatachi tsumatachi a c b False) } ; mkN2 : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> diff --git a/lib/src/japanese/PhraseJpn.gf b/lib/src/japanese/PhraseJpn.gf index f98d64c9e..df0513400 100644 --- a/lib/src/japanese/PhraseJpn.gf +++ b/lib/src/japanese/PhraseJpn.gf @@ -13,12 +13,14 @@ flags coding = utf8 ; } ; VocPres => case utt.type of { ImpPolite => voc.s ! Resp ++ "、" ++ pconj.s ++ utt.s ! Wa ! Resp ; - Imper => voc.s ! Plain ++ "、" ++ pconj.s ++ utt.s ! Wa ! Plain ; - NoImp => voc.s ! Plain ++ "、" ++ pconj.s ++ utt.s ! Wa ! Plain + (Imper|NoImp) => voc.s ! Resp ++ "、" ++ pconj.s ++ utt.s ! Wa ! Resp + -- 1) change default style here } ; VocAbs => case utt.type of { - (Imper|ImpPolite) => voc.s ! Plain ++ pconj.s ++ utt.s ! Wa ! Plain ; - NoImp => voc.s ! Plain ++ pconj.s ++ utt.s ! Wa ! Plain + (Imper|ImpPolite) => voc.s ! Resp ++ pconj.s ++ utt.s ! Wa ! Resp ; + -- 2) here + NoImp => voc.s ! Resp ++ pconj.s ++ utt.s ! Wa ! Resp + -- 3) and here } } } ; diff --git a/lib/src/japanese/ResJpn.gf b/lib/src/japanese/ResJpn.gf index a68da2c41..c4598e2e0 100644 --- a/lib/src/japanese/ResJpn.gf +++ b/lib/src/japanese/ResJpn.gf @@ -335,7 +335,7 @@ oper prep2 = p2 } ; - mkCopula = { + mkCopula : Verb = { s = table { Resp => table { (TPres|TFut) => table { @@ -365,7 +365,9 @@ oper ba = table { Pos => "であれば" ; Neg => "でなければ" - } + } ; + a_stem, i_stem = "で" ; -- not used + needSubject = True -- not used } ; mkExistV : VP = { @@ -685,16 +687,16 @@ oper } ; mkRain : Verb = { - s = \\st,t,p => "雨が" ++ (mkVerb "降る" Gr1).s ! st ! t ! p ; -- "ame ga furu" + s = \\st,t,p => "雨が" ++ (mkVerb "降っている" Gr2).s ! st ! t ! p ; -- "ame ga furu" te = table { - Pos => "雨が降って" ; - Neg => "雨が降らないで" + Pos => "雨が降っていて" ; + Neg => "雨が降っていないで" } ; - a_stem = "雨が降ら" ; - i_stem = "雨が降り" ; + a_stem = "雨が降ってい" ; + i_stem = "雨が降ってい" ; ba = table { - Pos => "雨が降れば" ; - Neg => "雨が降らなければ" + Pos => "雨が降っていれば" ; + Neg => "雨が降っていなければ" } ; needSubject = False } ; diff --git a/lib/src/japanese/StructuralJpn.gf b/lib/src/japanese/StructuralJpn.gf index 0972febef..27472f81a 100644 --- a/lib/src/japanese/StructuralJpn.gf +++ b/lib/src/japanese/StructuralJpn.gf @@ -1,115 +1,115 @@ -concrete StructuralJpn of Structural = CatJpn ** open ResJpn, ParadigmsJpn, Prelude in { +concrete StructuralJpn of Structural = CatJpn ** open (R = ResJpn), ParadigmsJpn, Prelude in { flags coding = utf8 ; lin - above_Prep = mkPrep "の上に" ; -- "noueni" - after_Prep = mkPrep "の後に" ; -- "noatoni" + above_Prep = R.mkPrep "の上に" ; -- "noueni" + after_Prep = R.mkPrep "の後に" ; -- "noatoni" all_Predet = {s = "全部" ; not = False} ; almost_AdA = ss "殆ど" ; -- "hotondo" almost_AdN = {s = "殆ど" ; postposition = False} ; - although_Subj = mkSubj "のに" OtherSubj ; + although_Subj = R.mkSubj "のに" R.OtherSubj ; always_AdV = ss "いつも" ; - and_Conj = mkConj "そして" And ; - because_Subj = mkSubj "から" OtherSubj ; - before_Prep = mkPrep "の前に" ; -- "nomaeni" - behind_Prep = mkPrep "後ろに" ; -- "ushironi" - between_Prep = mkPrep "の間に" ; -- "noaidani" - both7and_DConj = mkConj "そして" Both ; - by8agent_Prep = mkPrep "に" ; - by8means_Prep = mkPrep "によって" ; + and_Conj = R.mkConj "そして" R.And ; + because_Subj = R.mkSubj "から" R.OtherSubj ; + before_Prep = R.mkPrep "の前に" ; -- "nomaeni" + behind_Prep = R.mkPrep "後ろに" ; -- "ushironi" + between_Prep = R.mkPrep "の間に" ; -- "noaidani" + both7and_DConj = R.mkConj "そして" R.Both ; + by8agent_Prep = R.mkPrep "に" ; + by8means_Prep = R.mkPrep "で" ; but_PConj = ss "けれども" ; - can8know_VV = mkCan ; + can8know_VV = R.mkCan ; can_VV = can8know_VV ; - during_Prep = mkPrep "の間に" ; -- "noaidani" - either7or_DConj = mkConj "それとも" Or ; - every_Det = mkDet "全ての" "全て" Sg ; -- "subeteno" - everybody_NP = mkNP "皆" True False Anim ; -- "minna" - everything_NP = mkNP "全て" True False Inanim ; -- "subete" - everywhere_Adv = mkAdv "どこでも" ; -- "dokodemo" - first_Ord = mkFirst ; - 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 "ここから" ; + during_Prep = R.mkPrep "の間に" ; -- "noaidani" + either7or_DConj = R.mkConj "それとも" R.Or ; + every_Det = R.mkDet "全ての" "全て" R.Sg ; -- "subeteno" + everybody_NP = R.mkNP "皆" True False R.Anim ; -- "minna" + everything_NP = R.mkNP "全て" True False R.Inanim ; -- "subete" + everywhere_Adv = R.mkAdv "どこでも" ; -- "dokodemo" +-- first_Ord = R.mkFirst ; + few_Det = R.mkDet "少数の" "少数" R.Pl ; -- "shoosuuno" + for_Prep = R.mkPrep "用" ; -- "you" "のために" + from_Prep = R.mkPrep "から" ; + he_Pron = mkPron "彼" False R.Anim ; -- "kare" + here_Adv = R.mkAdv "ここで" ; + here7to_Adv = R.mkAdv "ここに" ; + here7from_Adv = R.mkAdv "ここから" ; how_IAdv = {s = \\st => "どのように" ; particle = "" ; wh8re = False} ; - how8many_IDet = {s = "いくつ" ; n = Pl ; how8many = True ; inclCard = False} ; + how8many_IDet = {s = "いくつ" ; n = R.Pl ; how8many = True ; inclCard = False} ; how8much_IAdv = {s = \\st => "いくら" ; particle = "" ; wh8re = False} ; - i_Pron = mkPron "私" "私" True Anim ; -- "watashi" - if_Subj = mkSubj "" If ; - in8front_Prep = mkPrep "の前に" ; -- "nomaeni" - in_Prep = mkPrep "に" ; - it_Pron = mkPron "それ" False Inanim ; + i_Pron = mkPron "私" "私" True R.Anim ; -- "watashi" + if_Subj = R.mkSubj "" R.If ; + in8front_Prep = R.mkPrep "の前に" ; -- "nomaeni" + in_Prep = R.mkPrep "に" ; + it_Pron = mkPron "それ" False R.Inanim ; less_CAdv = {s = "より" ; less = True ; s_adn = "以下"} ; -- "ika" - many_Det = mkDet "多くの" "多く" Pl ; -- "ookuno" + many_Det = R.mkDet "多くの" "多く" R.Pl ; -- "ookuno" more_CAdv = {s = "より" ; less = False ; s_adn = "以上"} ; -- "ijou" most_Predet = {s = "ほとんどの" ; not = False} ; - much_Det = mkDet "多くの" "多量" Sg ; -- "ookuno" "taryou" - must_VV = mkMust ; - no_Phr = {s = "いいえ"} ; - no_Utt = {s = \\part,st => "いいえ" ; type = NoImp} ; - on_Prep = mkPrep "の上に" ; -- "noueni" + much_Det = R.mkDet "多くの" "多量" R.Sg ; -- "ookuno" "taryou" + must_VV = R.mkMust ; +-- no_Phr = {s = "いいえ"} ; + no_Utt = {s = \\part,st => "いいえ" ; type = R.NoImp} ; + on_Prep = R.mkPrep "の上に" ; -- "noueni" only_Predet = {s = "ほんの" ; not = False} ; - or_Conj = mkConj "それとも" Or ; + or_Conj = R.mkConj "それとも" R.Or ; otherwise_PConj = ss "そうしなければ" ; - part_Prep = mkPrep "の" ; - please_Voc = {s = \\st => "ください" ; type = Please ; null = ""} ; - possess_Prep = mkPrep "の" ; + part_Prep = R.mkPrep "の" ; + please_Voc = {s = \\st => "ください" ; type = R.Please ; null = ""} ; + possess_Prep = R.mkPrep "の" ; quite_Adv = ss "可成" ; -- "kanari" - she_Pron = mkPron "彼女" False Anim ; -- "kanojo" + she_Pron = mkPron "彼女" False R.Anim ; -- "kanojo" so_AdA = ss "非常に" ; -- "hijooni" - someSg_Det = mkDet "多少の" "幾らか" Sg ; -- "tashoono" "ikuraka" - somePl_Det = mkDet "いくつかの" "幾らか" Pl ; -- "ikuraka" - somebody_NP = mkNP "誰か" False False Anim ; -- "dareka" - something_NP = mkNP "何か" False False Inanim ; -- "nanika" - somewhere_Adv = mkAdv "どこかに" ; + someSg_Det = R.mkDet "多少の" "幾らか" R.Sg ; -- "tashoono" "ikuraka" + somePl_Det = R.mkDet "いくつかの" "幾らか" R.Pl ; -- "ikuraka" + somebody_NP = R.mkNP "誰か" False False R.Anim ; -- "dareka" + something_NP = R.mkNP "何か" False False R.Inanim ; -- "nanika" + somewhere_Adv = R.mkAdv "どこかに" ; that_Quant = {s = \\st => "その" ; sp = \\st => "それ" ; no = False} ; - that_Subj = mkSubj "ことを" That ; - there_Adv = mkAdv "そこで" ; - there7to_Adv = mkAdv "そこに" ; - there7from_Adv = mkAdv "そこから" ; + that_Subj = R.mkSubj "ことを" R.That ; + there_Adv = R.mkAdv "そこで" ; + there7to_Adv = R.mkAdv "そこに" ; + there7from_Adv = R.mkAdv "そこから" ; therefore_PConj = ss "それで" ; - they_Pron = mkPron "彼ら" "あの人達" False Anim ; -- "karera" "ano hito-tachi" + they_Pron = mkPron "彼ら" "あの人達" False R.Anim ; -- "karera" "ano hito-tachi" this_Quant = {s = \\st => "この" ; sp = \\st => "これ" ; no = False} ; - through_Prep = mkPrep "を通じて" ; -- "otsuujite" - to_Prep = mkPrep "に" ; + through_Prep = R.mkPrep "を通じて" ; -- "otsuujite" + to_Prep = R.mkPrep "に" ; too_AdA = ss "あまりにも" ; - under_Prep = mkPrep "の下に" ; -- "noshitani" + under_Prep = R.mkPrep "の下に" ; -- "noshitani" very_AdA = ss "とても" ; - want_VV = mkWant ; - we_Pron = mkPron "私達" False Anim ; -- "watashitachi" - whatPl_IP = {s_subj, s_obj = \\st => "何" ; anim = Inanim ; how8many = False} ; -- "nani" - whatSg_IP = {s_subj, s_obj = \\st => "何" ; anim = Inanim ; how8many = False} ; + want_VV = R.mkWant ; + we_Pron = mkPron "私達" False R.Anim ; -- "watashitachi" + whatPl_IP = {s_subj, s_obj = \\st => "何" ; anim = R.Inanim ; how8many = False} ; -- "nani" + whatSg_IP = {s_subj, s_obj = \\st => "何" ; anim = R.Inanim ; how8many = False} ; when_IAdv = {s = \\st => "いつ" ; particle = "" ; wh8re = False} ; - when_Subj = mkSubj "と" OtherSubj ; + when_Subj = R.mkSubj "と" R.OtherSubj ; where_IAdv = {s = \\st => "どこ" ; particle = "で" ; wh8re = True} ; which_IQuant = ss "どの" ; - whoPl_IP = {s_subj, s_obj = \\st => "誰" ; anim = Anim ; how8many = False} ; -- "dare" - whoSg_IP = {s_subj, s_obj = \\st => "誰" ; anim = Anim ; how8many = False} ; + whoPl_IP = {s_subj, s_obj = \\st => "誰" ; anim = R.Anim ; how8many = False} ; -- "dare" + whoSg_IP = {s_subj, s_obj = \\st => "誰" ; anim = R.Anim ; how8many = False} ; why_IAdv = {s = \\st => "どうして" ; particle = "" ; wh8re = False} ; - with_Prep = mkPrep "と" ; - without_Prep = mkPrep "無しで" ; -- "nashide" - yes_Phr = {s = "はい"} ; - yes_Utt = {s = \\part,st => "はい" ; type = NoImp} ; - youSg_Pron = mkPron "あなた" "あなた" False Anim ; - youPl_Pron = mkPron "あなた達" "あなた方" False Anim ; -- "anatatachi" "anatagata" - youPol_Pron = mkPron "あなた" False Anim ; + with_Prep = R.mkPrep "と" ; + without_Prep = R.mkPrep "無しで" ; -- "nashide" +-- yes_Phr = {s = "はい"} ; + yes_Utt = {s = \\part,st => "はい" ; type = R.NoImp} ; + youSg_Pron = mkPron "あなた" "あなた" False R.Anim ; + youPl_Pron = mkPron "あなた達" "あなた方" False R.Anim ; -- "anatatachi" "anatagata" + youPol_Pron = mkPron "あなた" False R.Anim ; no_Quant = {s = \\st => "" ; sp = \\st => "何も" ; no = True} ; -- "nanimo" not_Predet = {s = "" ; not = True} ; at_least_AdN = {s = "少なくとも" ; postposition = False} ; -- "sukunakutomo" at_most_AdN = {s = "せいぜい" ; postposition = False} ; - nobody_NP = mkNP "誰も" False True Anim ; -- "daremo" - nothing_NP = mkNP "何も" False True Inanim ; -- "nanimo" - except_Prep = mkPrep "を除いて" ; + nobody_NP = R.mkNP "誰も" False True R.Anim ; -- "daremo" + nothing_NP = R.mkNP "何も" False True R.Inanim ; -- "nanimo" + except_Prep = R.mkPrep "を除いて" ; as_CAdv = {s = "と同じぐらい" ; less = False ; s_adn = "もの"} ; - have_V2 = mkV2 "持っている" "を" Gr2 ; + have_V2 = mkV2 "持っている" "を" R.Gr2 ; - language_title_Utt = {s = \\part,st => "日本語" ; type = NoImp} ; -- "nihongo" + language_title_Utt = {s = \\part,st => "日本語" ; type = R.NoImp} ; -- "nihongo" } diff --git a/lib/src/japanese/VerbJpn.gf b/lib/src/japanese/VerbJpn.gf index bbca5f977..cad7cfe66 100644 --- a/lib/src/japanese/VerbJpn.gf +++ b/lib/src/japanese/VerbJpn.gf @@ -322,6 +322,8 @@ concrete VerbJpn of Verb = CatJpn ** open ResJpn, Prelude in { needSubject = vp.needSubject } ; + ExtAdvVP = AdvVP ; + AdVVP adv vp = { verb = vp.verb ; te = vp.te ;