diff --git a/examples/phrasebook/WordsCat.gf b/examples/phrasebook/WordsCat.gf index 6c36ef427..ac41b7377 100644 --- a/examples/phrasebook/WordsCat.gf +++ b/examples/phrasebook/WordsCat.gf @@ -6,6 +6,7 @@ concrete WordsCat of Words = SentencesCat ** open (E = ExtraCat), (L = LexiconCat), (P = ParadigmsCat), + (S = SyntaxCat), ParadigmsCat, Prelude in { @@ -32,32 +33,48 @@ lin Bad = L.bad_A ; Boring = mkA "avorrit" "avorrida" "avorrits" "avorrides" "avorridament" ; - Cheap = mkA "barat" ; + Cheap = cheap_A ; Cold = L.cold_A ; Delicious = mkA "deliciós" "deliciosa" "deliciosos" "delicioses" "deliciosament"; - Expensive = mkA "car" ; + Expensive = expensive_A ; Fresh = mkA "fresc" ; Good = L.good_A ; - Warm = L.warm_A ; Suspect = mkA "sospitós" ; + Warm = L.warm_A ; -- places - Airport = mkPlace (mkN "aeroport") dative ; - Bar = mkPlace (mkN "bar") dative ; - Church = mkPlace (mkN "església") dative ; - Cinema = mkPlace (mkN "cinema" masculine) dative ; - Hospital = mkPlace (mkN "hospital") dative ; - Hotel = mkPlace (mkN "alberg") dative ; - Museum = mkPlace (mkN "museu") dative ; - Park = mkPlace (mkN "parc") dative ; - Restaurant = mkPlace (mkN "restaurant") dative ; - School = mkPlace (mkN "escola") dative ; - Shop = mkPlace (mkN "tenda") dative ; - Station = mkPlace (mkN "estació" feminine) dative ; - Theatre = mkPlace (mkN "teatre") dative ; - Toilet = mkPlace (mkN "lavabo") dative ; - University = mkPlace (mkN "universitat" feminine) dative ; +oper + mkLloc : N -> CNPlace = \n -> mkPlace n dative ; +lin + Airport = mkLloc (mkN "aeroport") ; + AmusementPark = mkLloc (mkN "parc d' atraccions") ; + Bank = mkLloc (mkN "banc") ; + Bar = mkLloc (mkN "bar") ; + Cafeteria = mkLloc (mkN "cafeteria") ; + Center = mkLloc (mkN "centre") ; + Cinema = mkLloc (mkN "cinema" masculine) ; + Church = mkLloc (mkN "església") ; + Disco = mkLloc (mkN "discoteca") ; + Hospital = mkLloc (mkN "hospital") ; + Hotel = mkLloc (mkN "alberg") ; + Museum = mkLloc (mkN "museu") ; + Park = mkLloc (mkN "parc") ; + Parking = mkLloc (mkN "pàrking" masculine) ; + Pharmacy = mkLloc (mkN "farmàcia") ; + PostOffice = mkLloc (mkN "oficina de correus" feminine) ; + Pub = mkLloc (mkN "pub" masculine) ; + Restaurant = mkLloc (mkN "restaurant") ; + School = mkLloc (mkN "escola") ; + Shop = mkLloc (mkN "tenda") ; + Station = mkLloc (mkN "estació" feminine) ; + Supermarket = mkLloc (mkN "supermercat" masculine) ; + Theatre = mkLloc (mkN "teatre") ; + Toilet = mkLloc (mkN "lavabo") ; + University = mkLloc (mkN "universitat" feminine) ; + Zoo = mkLloc (mkN "zoo" masculine) ; + + CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurant")) in_Prep dative ; -- currencies oper @@ -69,31 +86,60 @@ lin Dollar = mkCN (mkN "dollar") ; Euro = mkCN (mkN "euro" "euro" masculine) ; Lei = mkCN (mkN "leu" "lei" masculine) ; + Leva = mkCN (mkN "lev" "lev" masculine) ; + NorwegianCrown = Corona (mkA "noruec" "noruega" "noruecs" "noruegues" "a la noruega") ; + Pound = mkCN (mkN "lliura") ; + Rouble = mkCN (mkN "ruble") ; SwedishCrown = Corona (mkA "suec" "sueca" "suecs" "sueques" "a la sueca") ; + Zloty = mkCN (mkN "zloty" "zloty" masculine) ; -- nationalities Belgian = mkA "belga" ; Belgium = mkNP (mkPN "Bèlgica") ; + Bulgarian = mkNat "búlgar" "Bulgària" ; + Catalan = mkNat "català" "Catalunya" ; -- "catalana" "catalans" "catalanes" "a la catalana" ; + Danish = mkNat "danès" "Dinamarca" ; -- mkA "danès" "danesa" "danesos" "daneses" "a la danesa" ; + Dutch = mkNat "holandès" "Holanda" ; English = mkNat "anglès" "Anglaterra" ; Finnish = mkNat "finès" "Finlàndia" ; Flemish = mkNP (mkPN "flamenc") ; - French = mkNat "francès" "França" ; + French = mkNat "francès" "França" ; + German = mkNat "alemany" "Alemania" ; Italian = mkNat "italià" "Itàlia" ; + Norwegian = mkNat "noruec" "Noruega" ; -- mkA "noruec" "noruega" "noruecs" "noruegues" "a la noruega" ; + Polish = mkNat "polonès" "Polònia" ; Romanian = mkNat "romanès" "Romania" ; + Russian = mkNat "rus" "Rússia" ; + Spanish = mkNat "espanyol" "Espanya" ; Swedish = mkNat "suec" "Suècia" ; + +-- means of transportation + + Bike = mkTransport (mkN "bici" feminine) ; + Bus = mkTransport (mkN "autobús" "autobusos" masculine) ; + Car = mkTransport L.car_N ; + Ferry = mkTransport (mkN "ferri" masculine) ; + Plane = mkTransport L.airplane_N ; + Subway = mkTransport (mkN "metro") ; + Taxi = mkTransport (mkN "taxi" masculine) ; + Train = mkTransport (mkN "tren" masculine) ; + Tram = mkTransport (mkN "tramvia" masculine) ; + + ByFoot = P.mkAdv "a peu" ; + -- actions AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; + AHasName p name = + let dir = mkV (dir_41 "dir") + in mkCl p.name (mkV2 (reflV dir)) name ; AHasRoom p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (mkN "habitació" feminine)) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ; AHasTable p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (mkN "taula")) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ; - AHasName p name = - let dir = mkV (dir_41 "dir") - in mkCl p.name (mkV2 (reflV dir)) name ; AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "gana" feminine))) ; AIll p = mkCl p.name (mkA "malalt") ; AKnow p = @@ -121,37 +167,38 @@ lin -- miscellaneous + QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ; QWhatName p = let dir = mkV (dir_41 "dir") in mkQS (mkQCl how_IAdv (mkCl p.name (reflV dir))) ; - QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ; - PropOpen p = mkCl p.name open_A ; - PropClosed p = mkCl p.name closed_A ; - PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; - PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; - PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; - PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; - HowMuchCost item = let valer = mkV (valer_114 "valer") in mkQS (mkQCl how8much_IAdv (mkCl item valer)) ; ItCost item price = let valer = mkV (valer_114 "valer") in mkCl item (mkV2 valer) price ; - + PropOpen p = mkCl p.name open_A ; + PropClosed p = mkCl p.name closed_A ; + PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- Building phrases from strings is complicated: the solution is to use -- mkText : Text -> Text -> Text ; - - PSeeYou d = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt d)) ; - PSeeYouPlace p = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt p.at)) ; - PSeeYouPlaceDate p d = + PSeeYouPlaceDate p d = mkText (lin Text (ss ("a reveure"))) - (mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ; + (mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ; + PSeeYouPlace p = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt p.at)) ; +-- PSeeYou d = mkText (lin Text (ss ("fins aviat"))) (mkPhrase (mkUtt d)) ; + PSeeYouDate d = mkText (lin Text (ss ("a reveure"))) (mkPhrase (mkUtt d)) ; + -- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$ -- below. Languages with productive genitives can use an equivalent of -- "my son's wife" for non-pronouns, as e.g. in English. +-- family relations + Wife = xOf sing (mkN "dona") ; Husband = xOf sing (mkN "home") ; Son = xOf sing (mkN "fill") ; @@ -170,9 +217,47 @@ lin Tomorrow = P.mkAdv "demà" ; + +-- transports + + HowFar place = mkQS (mkQCl far_IP place.name placeCopula) ; + HowFarFrom x y = mkQS (mkQCl (mkIP far_IP (S.mkAdv from_Prep x.name)) y.name placeCopula) ; + HowFarFromBy x y t = mkQS (mkQCl how8much_IAdv + (mkCl (mkVP (mkVP (mkVP (mkVP (mkV "durar")) (S.mkAdv desde_Prep x.name)) (S.mkAdv fins_Prep y.name)) t ))) ; + HowFarBy y t = mkQS (mkQCl how8much_IAdv + (mkCl (mkVP (mkVP (mkVP (mkV "durar")) (S.mkAdv fins_Prep 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))) ; + +-- modifiers of places + TheBest = mkSuperl L.good_A True ; + TheClosest = mkSuperl L.near_A False; + TheCheapest = mkSuperl cheap_A False ; + TheMostExpensive = mkSuperl expensive_A False ; + TheMostPopular = mkSuperl (mkA "popular") False ; + TheWorst = mkSuperl L.bad_A True ; + SuperlPlace sup p = placeNPSuperl sup p ; + -- auxiliaries oper + + mkSuperl : A -> Bool -> OrdSuperlative = \a,bool -> + let ord : Ord = S.mkOrd a in { + ord = ord ; + isPre = bool ; + } ; + + desde_Prep = mkPrep "des de" ; + + fins_Prep = mkPrep "fins a" ; + + far_IP = mkIP whatSg_IP (S.mkAdv (P.mkAdA "tan") (P.mkAdv "lluny")) ; + + placeCopula = mkV2 (mkV (estar_54 "estar")) ; + mkNat : Str -> Str -> NPNationality = \nat,co -> mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ; @@ -183,8 +268,17 @@ lin mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> mkCNPlace (mkCN p) i dative ; + mkTransport : N -> {name : CN ; by : Adv} = \n -> { + name = mkCN n ; + by = S.mkAdv with_Prep (mkNP n) + } ; + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; open_A = mkA "obert" ; closed_A = mkA "tancat" ; + cheap_A = mkA "barat" ; + expensive_A = mkA "car" ; } + + diff --git a/examples/phrasebook/WordsSpa.gf b/examples/phrasebook/WordsSpa.gf index 0f396f25b..a55ea13b5 100644 --- a/examples/phrasebook/WordsSpa.gf +++ b/examples/phrasebook/WordsSpa.gf @@ -250,7 +250,9 @@ lin TheClosest = mkSuperl L.near_A False; TheCheapest = mkSuperl cheap_A False ; TheMostExpensive = mkSuperl expensive_A False ; - TheMostPopular = mkSuperl (mkA "popular") False ; + TheMostPopular = + let popular = mkA "popular" "popular" "populars" "populars" "popularment" + in mkSuperl popular False ; TheWorst = mkSuperl L.bad_A True ; SuperlPlace sup p = placeNPSuperl sup p ;