diff --git a/src/runtime/haskell/LPGF.hs b/src/runtime/haskell/LPGF.hs index 667b0d621..df73efe90 100644 --- a/src/runtime/haskell/LPGF.hs +++ b/src/runtime/haskell/LPGF.hs @@ -168,6 +168,7 @@ lin2string l = case l of LFSpace -> "" -- when encountered at beginning/end LFToken tok -> tok LFTuple [l] -> lin2string l + LFTuple (l:_) -> lin2string l -- unselected table, just choose first option (see e.g. FoodsJpn) LFPre pts df -> lin2string df -- when encountered at end LFConcat (LFPre pts df) l2 -> lin2string $ LFConcat l1 l2 where diff --git a/testsuite/lpgf/Foods.treebank b/testsuite/lpgf/Foods.treebank index 0a52510d0..09a78cb15 100644 --- a/testsuite/lpgf/Foods.treebank +++ b/testsuite/lpgf/Foods.treebank @@ -17,6 +17,7 @@ FoodsHeb: היין ההוא טעים FoodsHin: वह मदिरा स्वादिष्ट है FoodsIce: þetta vín er ljúffengt FoodsIta: quel vino è delizioso +FoodsJpn: その ワインは おいしい FoodsLat: id vinum est iucundum FoodsLav: tas vīns ir garšīgs FoodsMkd: она вино е вкусно @@ -53,6 +54,7 @@ FoodsHeb: הפיצה הזאת מאוד משעממת FoodsHin: यह पिज़्ज़ा अति अरुचिकर है FoodsIce: þessi flatbaka er mjög leiðinleg FoodsIta: questa pizza è molto noiosa +FoodsJpn: この ピザは とても つまらない FoodsLat: haec placenta neapolitana est valde fluens FoodsLav: šī pica ir ļoti garlaicīga FoodsMkd: оваа пица е многу досадна @@ -89,6 +91,7 @@ FoodsHeb: הגבינה הזאת טריה FoodsHin: यह पनीर ताज़ा है FoodsIce: þessi ostur er ferskur FoodsIta: questo formaggio è fresco +FoodsJpn: この チーズは 新鮮 だ FoodsLat: hoc formaticum est recens FoodsLav: šis siers ir svaigs FoodsMkd: ова сирење е свежо @@ -125,6 +128,7 @@ FoodsHeb: הדגים ההם חמים FoodsHin: वे मछलीयँा गरम हैं FoodsIce: þessir fiskar eru heitir FoodsIta: quei pesci sono caldi +FoodsJpn: その 魚は あたたかい FoodsLat: ei pisces sunt calidi FoodsLav: tās zivis ir siltas FoodsMkd: оние риби се топли @@ -161,6 +165,7 @@ FoodsHeb: הפיצה האיטלקית המשעממת ההיא יקרה FoodsHin: वह अरुचिकर इटली पिज़्ज़ा बहुमूल्य है FoodsIce: þessi leiðinlega ítalska flatbaka er dýr FoodsIta: quella pizza italiana noiosa è cara +FoodsJpn: その つまらない イタリアの ピザは たかい FoodsLat: ea placenta itala fluens neapolitana est pretiosa FoodsLav: tā garlaicīgā itāļu pica ir dārga FoodsMkd: онаа досадна италијанска пица е скапа diff --git a/testsuite/lpgf/FoodsJpn.gf b/testsuite/lpgf/FoodsJpn.gf new file mode 100644 index 000000000..855a95175 --- /dev/null +++ b/testsuite/lpgf/FoodsJpn.gf @@ -0,0 +1,71 @@ + +-- (c) 2009 Zofia Stankiewicz under LGPL + +concrete FoodsJpn of Foods = open Prelude in { + +flags coding=utf8 ; + + lincat + Comment = {s: Style => Str}; + Quality = {s: AdjUse => Str ; t: AdjType} ; + Kind = {s : Number => Str} ; + Item = {s : Str ; n : Number} ; + + lin + Pred item quality = {s = case quality.t of { + IAdj => table {Plain => item.s ++ quality.s ! APred ; Polite => item.s ++ quality.s ! APred ++ copula ! Polite ! item.n } ; + NaAdj => \\p => item.s ++ quality.s ! APred ++ copula ! p ! item.n } + } ; + This = det Sg "この" ; + That = det Sg "その" ; + These = det Pl "この" ; + Those = det Pl "その" ; + Mod quality kind = {s = \\n => quality.s ! Attr ++ kind.s ! n} ; + Wine = regNoun "ワインは" ; + Cheese = regNoun "チーズは" ; + Fish = regNoun "魚は" ; + Pizza = regNoun "ピザは" ; + Very quality = {s = \\a => "とても" ++ quality.s ! a ; t = quality.t } ; + Fresh = adj "新鮮な" "新鮮"; + Warm = regAdj "あたたかい" ; + Italian = adj "イタリアの" "イタリアのもの"; + Expensive = regAdj "たかい" ; + Delicious = regAdj "おいしい" ; + Boring = regAdj "つまらない" ; + + param + Number = Sg | Pl ; + AdjUse = Attr | APred ; -- na-adjectives have different forms as noun attributes and predicates + Style = Plain | Polite ; -- for phrase types + AdjType = IAdj | NaAdj ; -- IAdj can form predicates without the copula, NaAdj cannot + + oper + det : Number -> Str -> {s : Number => Str} -> {s : Str ; n : Number} = + \n,d,cn -> { + s = d ++ cn.s ! n ; + n = n + } ; + noun : Str -> Str -> {s : Number => Str} = + \sakana,sakana -> {s = \\_ => sakana } ; + + regNoun : Str -> {s : Number => Str} = + \sakana -> noun sakana sakana ; + + adj : Str -> Str -> {s : AdjUse => Str ; t : AdjType} = + \chosenna, chosen -> { + s = table { + Attr => chosenna ; + APred => chosen + } ; + t = NaAdj + } ; + + regAdj : Str -> {s: AdjUse => Str ; t : AdjType} =\akai -> { + s = \\_ => akai ; t = IAdj} ; + + copula : Style => Number => Str = + table { + Plain => \\_ => "だ" ; + Polite => \\_ => "です" } ; + +}