diff --git a/examples/phrasebook/SentencesTha.gf b/examples/phrasebook/SentencesTha.gf index 0b6f84c5d..40b4c36aa 100644 --- a/examples/phrasebook/SentencesTha.gf +++ b/examples/phrasebook/SentencesTha.gf @@ -1,5 +1,6 @@ concrete SentencesTha of Sentences = NumeralTha ** open - ResTha, + (R = ResTha), + (S = StringsTha), Prelude in { lincat @@ -7,23 +8,26 @@ concrete SentencesTha of Sentences = NumeralTha ** open -- Word = Text ; -- Message = Text ; Greeting = SS ; + Sentence = SS ; + Question = SS ; + Proposition = R.Clause ; + Item = SS ; + Kind = R.Noun ; + + MassKind = SS ; -- + Quality = R.Adj ; + Property = R.Adj ; + Object = R.NP ; + PrimObject = R.NP ; {- - Sentence = S ; - Question = QS ; - Proposition = Cl ; - Item = NP ; - Kind = CN ; - MassKind = CN ; - Quality = AP ; - Property = A ; - Object = NP ; - PrimObject = NP ; Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv} ; PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ; Currency = CN ; Price = NP ; - Action = Cl ; - Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ; +-} + Action = R.Clause ; + Person = R.NP ; +{- Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ; Language = NP ; Citizenship = A ; @@ -31,7 +35,9 @@ concrete SentencesTha of Sentences = NumeralTha ** open Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ; Date = Adv ; Name = NP ; - Number = Card ; +-} + Number = SS ; +{- ByTransport = Adv ; Transport = {name : CN ; by : Adv} ; Superlative = Det ; @@ -39,10 +45,10 @@ concrete SentencesTha of Sentences = NumeralTha ** open lin MPhrase p = p ; -- MContinue p m = mkText p m ; -{- - PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.' - PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?' --} + + PSentence s = s ; + PQuestion q = q ; + PGreeting g = g ; PWord w = w ; @@ -64,60 +70,71 @@ concrete SentencesTha of Sentences = NumeralTha ** open PDay d = mkPhrase (mkUtt d.name) ; PTransport t = mkPhrase (mkUtt t.name) ; PByTransport t = mkPhrase (mkUtt t) ; +-} + PYes = ss S.chay_s ; + PNo = ss S.may_s ; + PYesToNo = ss S.chay_s ; ---- - PYes = mkPhrase yes_Utt ; - PNo = mkPhrase no_Utt ; - PYesToNo = mkPhrase yes_Utt ; +-- GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) ; - GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) ; + Is np q = R.mkClause np (R.adjVP q) ; + IsMass m q = R.mkClause m (R.adjVP q) ; - Is = mkCl ; - IsMass m q = mkCl (mkNP m) q ; + SProp p = ss (p.s ! R.ClDecl ! R.Pos) ; + SPropNot p = ss (p.s ! R.ClDecl ! R.Neg) ; + QProp p = ss (p.s ! R.ClQuest ! R.Pos) ; - SProp = mkS ; - SPropNot = mkS negativePol ; - QProp p = mkQS (mkQCl p) ; - - WherePlace place = mkQS (mkQCl where_IAdv place.name) ; - WherePerson person = mkQS (mkQCl where_IAdv person.name) ; +-- WherePlace place = mkQS (mkQCl where_IAdv place.name) ; +-- WherePerson person = mkQS (mkQCl where_IAdv person.name) ; PropAction a = a ; - AmountCurrency num curr = mkNP num curr ; +-- AmountCurrency num curr = mkNP num curr ; ObjItem i = i ; +{- ObjNumber n k = mkNP n k ; ObjIndef k = mkNP a_Quant k ; ObjPlural k = mkNP aPl_Det k ; ObjMass k = mkNP k ; ObjAndObj = mkNP and_Conj ; +-} OneObj o = o ; - This kind = mkNP this_Quant kind ; - That kind = mkNP that_Quant kind ; + This kind = ss (R.thbind kind.s S.nii_s) ; + That kind = ss (R.thbind kind.s S.nan_s) ; +{- These kind = mkNP this_Quant plNum kind ; Those kind = mkNP that_Quant plNum kind ; The kind = mkNP the_Quant kind ; Thes kind = mkNP the_Quant plNum kind ; - ThisMass kind = mkNP this_Quant kind ; - ThatMass kind = mkNP that_Quant kind ; - TheMass kind = mkNP the_Quant kind ; +-} + ThisMass kind = ss (R.thbind kind.s S.nii_s) ; + ThatMass kind = ss (R.thbind kind.s S.nan_s) ; + TheMass kind = kind ; - SuchKind quality kind = mkCN quality kind ; - SuchMassKind quality kind = mkCN quality kind ; - Very property = mkAP very_AdA (mkAP property) ; - Too property = mkAP too_AdA (mkAP property) ; - PropQuality property = mkAP property ; + SuchKind quality kind = {s = R.thbind kind.s quality.s ; c = kind.c} ; + SuchMassKind quality kind = {s = R.thbind kind.s quality.s ; c = kind.c} ; + + Very property = ss (R.thbind property.s S.mak_s) ; +-- Too property = ss (property.s ++ mak_s) ; + PropQuality property = property ; + +{- ThePlace kind = let dd = if_then_else Det kind.isPl thePl_Det theSg_Det in placeNP dd kind ; APlace kind = let dd = if_then_else Det kind.isPl aPl_Det aSg_Det in placeNP dd kind ; +-} - IMale, IFemale = mkPerson i_Pron ; - YouFamMale, YouFamFemale = mkPerson youSg_Pron ; - YouPolMale, YouPolFemale = mkPerson youPol_Pron ; + IMale = ss S.phom_s ; + IFemale = ss (R.thbind S.di_s S.chan_s) ; + YouFamMale, + YouFamFemale, + YouPolMale, YouPolFemale = ss S.khun_s ; ---- there are degrees +{- LangNat n = n.lang ; CitiNat n = n.prop ; CountryNat n = n.country ; @@ -130,9 +147,9 @@ concrete SentencesTha of Sentences = NumeralTha ** open {name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used ---- NameString s = symb s ; --% NameNN = symb "NN" ; - - NNumeral n = mkCard ; - +-} + NNumeral n = n ; +{- SHave p obj = mkS (mkCl p.name have_V2 obj) ; SHaveNo p k = mkS negativePol (mkCl p.name have_V2 (mkNP aPl_Det k)) ; SHaveNoMass p m = mkS negativePol (mkCl p.name have_V2 (mkNP m)) ; diff --git a/examples/phrasebook/WordsTha.gf b/examples/phrasebook/WordsTha.gf index 4831e104f..055b8685b 100644 --- a/examples/phrasebook/WordsTha.gf +++ b/examples/phrasebook/WordsTha.gf @@ -1,151 +1,150 @@ ---2 Implementations of Words, with English as example - concrete WordsTha of Words = SentencesTha ** open --- SyntaxTha, --- ParadigmsTha, --- (L = LexiconTha), --- (P = ParadigmsTha), --- IrregTha, --- ExtraTha, + (R = ResTha), + (S = StringsTha), Prelude in { --- lin + + flags coding = utf8 ; + + lin -- Kinds; many of them are in the resource lexicon, others can be built by $mkN$. -- Apple = mkCN L.apple_N ; --- Beer = mkCN L.beer_N ; + Beer = ss S.biar_s ; -- Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "cheese") ; --- Chicken = mkCN (mkN "chicken") ; --- Coffee = mkCN (mkN "coffee") ; +-- Cheese = mkCN (mkN "จหเเสเ") ; +-- Chicken = mkCN (mkN "จหิจกเน") ; +-- Coffee = mkCN (mkN "จoฝฝเเ") ; -- Fish = mkCN L.fish_N ; --- Meat = mkCN (mkN "meat") ; +-- Meat = mkCN (mkN "มเัต") ; -- Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Pizza = mkCN (mkN "ปิzzั") ; -- Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "tea") ; +-- Tea = mkCN (mkN "ตเั") ; -- 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 "บoรินง" ; +-- Cheap = mkA "จหเัป" ; -- Cold = L.cold_A ; --- Delicious = mkA "delicious" ; --- Expensive = mkA "expensive" ; --- Fresh = mkA "fresh" ; --- Good = L.good_A ; --- Suspect = mkA "suspect" ; + Delicious = ss "อร่อย" ; + Expensive = ss "แพง" ; +-- Fresh = mkA "ฝรเสห" ; + Good = ss "ดี" ; +-- Suspect = mkA "สุสปเจต" ; -- 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 "ัิรปoรต" "ัต" ; +-- AmusementPark = mkCompoundPlace "ัมุสเมเนต" "ปัรก" "ัต" ; +-- Bank = mkPlace "บันก" "ัต" ; +-- Bar = mkPlace "บัร" "ิน" ; +-- Cafeteria = mkPlace "จันตเเน" "ิน" ; +-- Center = mkPlace "จเนตเร" "ิน" ; +-- Cinema = mkPlace "จินเมั" "ัต" ; +-- Church = mkPlace "จหุรจห" "ิน" ; +-- Disco = mkPlace "ดิสจo" "ัต" ; +-- Hospital = mkPlace "หoสปิตัล" "ิน" ; +-- Hotel = mkPlace "หoตเล" "ิน" ; +-- Museum = mkPlace "มุสเุม" "ัต" ; +-- Park = mkPlace "ปัรก" "ิน" ; +-- Parking = mkCompoundPlace "จัร" "ปัรก" "ิน" ; +-- Pharmacy = mkPlace "ปหัรมัจย" "ัต" ; +-- PostOffice = mkCompoundPlace "ปoสต" "oฝฝิจเ" "ัต" ; +-- Pub = mkPlace "ปุบ" "ัต" ; +-- Restaurant = mkPlace "รเสตัุรันต" "ิน" ; +-- School = mkPlace "สจหooล" "ัต" ; +-- Shop = mkPlace "สหoป" "ัต" ; +-- Station = mkPlace "สตัติoน" "ัต" ; +-- Supermarket = mkPlace "สุปเรมัรกเต" "ัต" ; +-- Theatre = mkPlace "ตหเัตรเ" "ัต" ; +-- Toilet = mkPlace "ตoิลเต" "ิน" ; +-- University = mkPlace "ุนิึเรสิตย" "ัต" ; +-- Zoo = mkPlace "zoo" "ัต" ; --- CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) in_Prep to_Prep ; +-- CitRestaurant cit = mkCNPlace (mkCN cit (mkN "รเสตัุรันต")) in_Prep to_Prep ; -- 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" "euros") ; -- to prevent euroes --- Lei = mkCN (mkN "leu" "lei") ; --- Leva = mkCN (mkN "lev") ; --- NorwegianCrown = mkCN (mkA "Norwegian") (mkN "crown") | mkCN (mkN "crown") ; --- Pound = mkCN (mkN "pound") ; --- Rouble = mkCN (mkN "rouble") ; --- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; --- Zloty = mkCN (mkN "zloty" "zloty") ; +-- DanishCrown = mkCN (mkA "Dันิสห") (mkN "จรoวน") | mkCN (mkN "จรoวน") ; +-- Dollar = mkCN (mkN "ดoลลัร") ; +-- Euro = mkCN (mkN "เุรo" "เุรoส") ; -- to prevent euroes +-- Lei = mkCN (mkN "ลเุ" "ลเิ") ; +-- Leva = mkCN (mkN "ลเึ") ; +-- NorwegianCrown = mkCN (mkA "Noรวเงิัน") (mkN "จรoวน") | mkCN (mkN "จรoวน") ; +-- Pound = mkCN (mkN "ปoุนด") ; +-- Rouble = mkCN (mkN "รoุบลเ") ; +-- SwedishCrown = mkCN (mkA "็วเดิสห") (mkN "จรoวน") | mkCN (mkN "จรoวน") ; +-- Zloty = mkCN (mkN "zลoตย" "zลoตย") ; -- Nationalities --- Belgian = mkA "Belgian" ; --- Belgium = mkNP (mkPN "Belgium") ; --- Bulgarian = mkNat "Bulgarian" "Bulgaria" ; --- Catalan = mkNPNationality (mkNP (mkPN "Catalan")) (mkNP (mkPN "Catalonia")) (mkA "Catalonian") ; --- 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" ; --- 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 = mkA "Bเลงิัน" ; +-- Belgium = mkNP (mkPN "Bเลงิุม") ; +-- Bulgarian = mkNat "Bุลงัริัน" "Bุลงัริั" ; +-- Catalan = mkNPNationality (mkNP (mkPN "Cัตัลัน")) (mkNP (mkPN "Cัตัลoนิั")) (mkA "Cัตัลoนิัน") ; +-- Danish = mkNat "Dันิสห" "Dเนมัรก" ; +-- Dutch = mkNPNationality (mkNP (mkPN "Dุตจห")) (mkNP the_Quant (mkN "Nเตหเรลันดส")) (mkA "Dุตจห") ; +-- English = mkNat "Eนงลิสห" "Eนงลันด" ; +-- Finnish = mkNat "Fินนิสห" "Fินลันด" ; +-- Flemish = mkNP (mkPN "Fลเมิสห") ; +-- French = mkNat "Fรเนจห" "Fรันจเ" ; +-- German = mkNat "Gเรมัน" "Gเรมันย" ; +-- Italian = mkNat "Iตัลิัน" "Iตัลย" ; +-- Norwegian = mkNat "Noรวเงิัน" "Noรวัย" ; +-- Polish = mkNat "Poลิสห" "Poลันด" ; +-- Romanian = mkNat "ๆoมันิัน" "ๆoมันิั" ; +-- Russian = mkNat "ๆุสสิัน" "ๆุสสิั" ; +-- Spanish = mkNat "็ปันิสห" "็ปัิน" ; +-- Swedish = mkNat "็วเดิสห" "็วเดเน" ; -- Means of transportation -- Bike = mkTransport L.bike_N ; --- Bus = mkTransport (mkN "bus") ; +-- Bus = mkTransport (mkN "บุส") ; -- Car = mkTransport L.car_N ; --- Ferry = mkTransport (mkN "ferry") ; +-- Ferry = mkTransport (mkN "ฝเรรย") ; -- Plane = mkTransport L.airplane_N ; --- Subway = mkTransport (mkN "subway") ; --- Taxi = mkTransport (mkN "taxi") ; --- Train = mkTransport (mkN "train") ; --- Tram = mkTransport (mkN "tram") ; +-- Subway = mkTransport (mkN "สุบวัย") ; +-- Taxi = mkTransport (mkN "ตัxิ") ; +-- Train = mkTransport (mkN "ตรัิน") ; +-- Tram = mkTransport (mkN "ตรัม") ; --- ByFoot = P.mkAdv "by foot" ; +-- ByFoot = P.mkAdv "บย ฝooต" ; -- Actions: the predication patterns are very often language-dependent. --- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsTha.mkAdv "old")); --- AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; +-- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsTha.mkAdv "oลด")); + AHasChildren p num = R.mkClause p + (R.insertObj (R.mkVP (R.regV "มี")) + (ss (R.thbind "ลูก" (num.s ++ S.khon_s)))) ; ---- bind num -- AHasRoom p num = mkCl p.name have_V2 --- (mkNP (mkNP a_Det (mkN "room")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- (mkNP (mkNP a_Det (mkN "รooม")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "ปเรสoน")))) ; -- AHasTable p num = mkCl p.name have_V2 --- (mkNP (mkNP a_Det (mkN "table")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- (mkNP (mkNP a_Det (mkN "ตับลเ")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "ปเรสoน")))) ; -- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungry") ; --- AIll p = mkCl p.name (mkA "ill") ; +-- AHungry p = mkCl p.name (mkA "หุนงรย") ; +-- AIll p = mkCl p.name (mkA "ิลล") ; -- AKnow p = mkCl p.name IrregTha.know_V ; --- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxTha.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ; --- AMarried p = mkCl p.name (mkA "married") ; --- AReady p = mkCl p.name (mkA "ready") ; --- AScared p = mkCl p.name (mkA "scared") ; +-- ALike p item = mkCl p.name (mkV2 (mkV "ลิกเ")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "ลิึเ")) (SyntaxTha.mkAdv in_Prep co)) ; + ALove p q = R.mkClause p (R.insertObj (R.mkVP (R.regV "รัก")) q) ; +-- AMarried p = mkCl p.name (mkA "มัรริเด") ; +-- AReady p = mkCl p.name (mkA "รเัดย") ; +-- AScared p = mkCl p.name (mkA "สจัรเด") ; -- ASpeak p lang = mkCl p.name (mkV2 IrregTha.speak_V) lang ; --- AThirsty p = mkCl p.name (mkA "thirsty") ; --- ATired p = mkCl p.name (mkA "tired") ; +-- AThirsty p = mkCl p.name (mkA "ตหิรสตย") ; +-- ATired p = mkCl p.name (mkA "ติรเด") ; -- AUnderstand p = mkCl p.name IrregTha.understand_V ; --- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ; +-- AWant p obj = mkCl p.name (mkV2 (mkV "วันต")) obj ; -- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregTha.go_V) place.to) ; -- miscellaneous @@ -165,41 +164,41 @@ concrete WordsTha of Words = SentencesTha ** -- 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 (lin Text (ss ("สเเ ยoุ"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p = mkText (lin Text (ss ("สเเ ยoุ"))) (mkPhrase (mkUtt p.at)) ; -- PSeeYouPlaceDate p d = --- mkText (lin Text (ss ("see you"))) +-- mkText (lin Text (ss ("สเเ ยoุ"))) -- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ; --- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$ +-- Relations are expressed as "มย วิฝเ" or "มย สoณส วิฝเ", as defined by $xOf$ -- below. Languages without productive genitives must use an equivalent of --- "the wife of my son" for non-pronouns. +-- "ตหเ วิฝเ oฝ มย สoน" for non-pronouns. --- Wife = xOf sing (mkN "wife") ; --- Husband = xOf sing (mkN "husband") ; --- Son = xOf sing (mkN "son") ; --- Daughter = xOf sing (mkN "daughter") ; + Wife = xOf "เมีย" ; ---- familiar + Husband = xOf "ผัว" ; ---- familiar + Son = xOf (R.thbind "ลูก จาย") ; + Daughter = xOf (R.thbind "ลูก สาว") ; -- Children = xOf plur 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 "Moนดัย" ; +-- Tuesday = mkDay "Tุเสดัย" ; +-- Wednesday = mkDay "Wเดนเสดัย" ; +-- Thursday = mkDay "Tหุรสดัย" ; +-- Friday = mkDay "Fริดัย" ; +-- Saturday = mkDay "็ัตุรดัย" ; +-- Sunday = mkDay "็ุนดัย" ; --- Tomorrow = P.mkAdv "tomorrow" ; +-- Tomorrow = P.mkAdv "ตoมoรรoว" ; -- 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 "จหเัป") ; +-- TheMostExpensive = mkSuperl (mkA "เxปเนสิึเ") ; +-- TheMostPopular = mkSuperl (mkA "ปoปุลัร") ; -- TheWorst = mkSuperl L.bad_A ; -- SuperlPlace sup p = placeNP sup p ; @@ -224,7 +223,7 @@ concrete WordsTha of Words = SentencesTha ** -- auxiliaries --- oper + oper -- mkNat : Str -> Str -> NPNationality = \nat,co -> -- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ; @@ -240,13 +239,13 @@ concrete WordsTha of Words = SentencesTha ** -- 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" ; +-- open_Adv = P.mkAdv "oปเน" ; +-- closed_Adv = P.mkAdv "จลoสเด" ; --- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> --- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + xOf : Str -> R.NP -> R.NP = \x,p -> + ss (R.thbind x "ของ" p.s) ; ---- optional particle --- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; +-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "นัมเ") p).name ; -- mkTransport : N -> {name : CN ; by : Adv} = \n -> { @@ -256,7 +255,7 @@ concrete WordsTha of Words = SentencesTha ** -- mkSuperl : A -> Det = \a -> SyntaxTha.mkDet the_Art (SyntaxTha.mkOrd a) ; --- far_IAdv = ExtraTha.IAdvAdv (ss "far") ; +-- far_IAdv = ExtraTha.IAdvAdv (ss "ฝัร") ; --} } diff --git a/examples/phrasebook/src/WordsTha.gf b/examples/phrasebook/src/WordsTha.gf new file mode 100644 index 000000000..ac3666033 --- /dev/null +++ b/examples/phrasebook/src/WordsTha.gf @@ -0,0 +1,261 @@ +concrete WordsTha of Words = SentencesTha ** + open + (R = ResTha), + (S = StringsTha), + Prelude in { + + flags coding = utf8 ; + + lin + +-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$. + +-- Apple = mkCN L.apple_N ; + Beer = ss S.biar_s ; +-- Bread = mkCN L.bread_N ; +-- Cheese = mkCN (mkN "cheese") ; +-- Chicken = mkCN (mkN "chicken") ; +-- Coffee = mkCN (mkN "coffee") ; +-- Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "meat") ; +-- Milk = mkCN L.milk_N ; +-- Pizza = mkCN (mkN "pizza") ; +-- Salt = mkCN L.salt_N ; +-- Tea = mkCN (mkN "tea") ; +-- 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" ; +-- Cold = L.cold_A ; + Delicious = ss "OrT1Oy" ; + Expensive = ss "e'p2g" ; +-- Fresh = mkA "fresh" ; + Good = ss "di:" ; +-- Suspect = mkA "suspect" ; +-- 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" ; + +-- CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) in_Prep to_Prep ; + + +-- 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" "euros") ; -- to prevent euroes +-- Lei = mkCN (mkN "leu" "lei") ; +-- Leva = mkCN (mkN "lev") ; +-- NorwegianCrown = mkCN (mkA "Norwegian") (mkN "crown") | mkCN (mkN "crown") ; +-- Pound = mkCN (mkN "pound") ; +-- Rouble = mkCN (mkN "rouble") ; +-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; +-- Zloty = mkCN (mkN "zloty" "zloty") ; + +-- Nationalities + +-- Belgian = mkA "Belgian" ; +-- Belgium = mkNP (mkPN "Belgium") ; +-- Bulgarian = mkNat "Bulgarian" "Bulgaria" ; +-- Catalan = mkNPNationality (mkNP (mkPN "Catalan")) (mkNP (mkPN "Catalonia")) (mkA "Catalonian") ; +-- 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" ; +-- 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" ; + +-- Means of transportation + +-- Bike = mkTransport L.bike_N ; +-- Bus = mkTransport (mkN "bus") ; +-- Car = mkTransport L.car_N ; +-- Ferry = mkTransport (mkN "ferry") ; +-- Plane = mkTransport L.airplane_N ; +-- Subway = mkTransport (mkN "subway") ; +-- Taxi = mkTransport (mkN "taxi") ; +-- Train = mkTransport (mkN "train") ; +-- Tram = mkTransport (mkN "tram") ; + +-- ByFoot = P.mkAdv "by foot" ; + +-- Actions: the predication patterns are very often language-dependent. + +-- AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsTha.mkAdv "old")); + AHasChildren p num = R.mkClause p + (R.insertObj (R.mkVP (R.regV "mi:")) + (ss (R.thbind "lu:k" (num.s ++ S.khon_s)))) ; ---- bind num +-- AHasRoom p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "room")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- 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 IrregTha.know_V ; +-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxTha.mkAdv in_Prep co)) ; + ALove p q = R.mkClause p (R.insertObj (R.mkVP (R.regV "rak")) q) ; +-- AMarried p = mkCl p.name (mkA "married") ; +-- AReady p = mkCl p.name (mkA "ready") ; +-- AScared p = mkCl p.name (mkA "scared") ; +-- ASpeak p lang = mkCl p.name (mkV2 IrregTha.speak_V) lang ; +-- AThirsty p = mkCl p.name (mkA "thirsty") ; +-- ATired p = mkCl p.name (mkA "tired") ; +-- AUnderstand p = mkCl p.name IrregTha.understand_V ; +-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregTha.go_V) place.to) ; + +-- miscellaneous + +-- 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 IrregTha.cost_V)) ; +-- ItCost item price = mkCl item (mkV2 IrregTha.cost_V) 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) ; + +-- 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)) ; +-- PSeeYouPlaceDate p d = +-- mkText (lin Text (ss ("see you"))) +-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ; + +-- 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 "emi:y" ; ---- familiar + Husband = xOf "p1aw" ; ---- familiar + Son = xOf (R.thbind "lu:k ca:y") ; + Daughter = xOf (R.thbind "lu:k sa:w") ; +-- Children = xOf plur 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" ; + +-- Tomorrow = P.mkAdv "tomorrow" ; + +-- 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") ; +-- TheWorst = mkSuperl L.bad_A ; + +-- SuperlPlace sup p = placeNP sup p ; + + +-- transports + +-- HowFar place = mkQS (mkQCl far_IAdv place.name) ; +-- HowFarFrom x y = +-- mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxTha.mkAdv from_Prep x.name))) ; +-- HowFarFromBy x y t = +-- mkQS (mkQCl far_IAdv (mkCl y.name (SyntaxTha.mkAdv from_Prep (mkNP x.name t)))) ; +-- HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl y.name t)) ; + +-- WhichTranspPlace trans place = +-- mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ; + +-- IsTranspPlace trans place = +-- mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ; + + + +-- auxiliaries + + oper + +-- mkNat : Str -> Str -> NPNationality = \nat,co -> +-- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ; + +-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> +-- let day = mkNP (mkPN d) in +-- mkNPDay day (SyntaxTha.mkAdv on_Prep day) +-- (SyntaxTha.mkAdv on_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 (mkN p))) (P.mkPrep i) to_Prep ; + +-- 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 : Str -> R.NP -> R.NP = \x,p -> + ss (R.thbind x "k1Og" p.s) ; ---- optional particle + +-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; + + +-- mkTransport : N -> {name : CN ; by : Adv} = \n -> { +-- name = mkCN n ; +-- by = SyntaxTha.mkAdv by8means_Prep (mkNP n) +-- } ; + +-- mkSuperl : A -> Det = \a -> SyntaxTha.mkDet the_Art (SyntaxTha.mkOrd a) ; + +-- far_IAdv = ExtraTha.IAdvAdv (ss "far") ; + +--} +} diff --git a/examples/phrasebook/src/mkThai.gfs b/examples/phrasebook/src/mkThai.gfs index e1efbdcdf..f375fe586 100644 --- a/examples/phrasebook/src/mkThai.gfs +++ b/examples/phrasebook/src/mkThai.gfs @@ -1 +1,2 @@ rf -file=src/GreetingsTha.gf | ps -env=quotes -to_thai | wf -file=GreetingsTha.gf +rf -file=src/WordsTha.gf | ps -env=quotes -to_thai | wf -file=WordsTha.gf