From 3723ae33ed058a6fbb1e230ff7eacc59f98e2cac Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 20 May 2010 15:44:51 +0000 Subject: [PATCH] Spanish Phrasebook by Inari Listenmaa --- examples/phrasebook/GreetingsSpa.gf | 52 +++--- examples/phrasebook/PhrasebookSpa.gf | 28 ++-- examples/phrasebook/SentencesSpa.gf | 55 +++++-- examples/phrasebook/WordsSpa.gf | 227 ++++++++++++++++----------- 4 files changed, 219 insertions(+), 143 deletions(-) diff --git a/examples/phrasebook/GreetingsSpa.gf b/examples/phrasebook/GreetingsSpa.gf index c9bcb7482..6008688f6 100644 --- a/examples/phrasebook/GreetingsSpa.gf +++ b/examples/phrasebook/GreetingsSpa.gf @@ -1,31 +1,31 @@ concrete GreetingsSpa of Greetings = open Prelude in { ---lincat --- Greeting = SS ; +flags coding = utf8 ; + +lincat + Greeting = SS ; + +lin + GBye = ss "adiós" ; + GCheers = ss "salud" ; + GDamn = ss "joder" ; + GExcuse = ss "perdón" ; + GExcusePol = ss "perdone" ; + GGoodMorning, GGoodDay = ss "buenos días" ; + GGoodEvening = ss "buenas tardes" ; + GGoodNight = ss "buenas noches" ; + GGoodbye = ss "hasta luego" ; + GHello = ss "hola" ; + GHelp = ss "socorro" ; + GHowAreYou = ss "cómo está" ; -- the polite singular "you" + GLookOut = ss "atención" ; + GNiceToMeetYou = ss "encantado de conocerle" ; -- the polite singular "you" + GPleaseGive, GPleaseGivePol = ss "por favor" ; + GSeeYouSoon = ss "nos vemos pronto" ; + GSorry = ss "disculpa" ; + GSorryPol = ss "disculpe" ; + GThanks = ss "gracias" ; + GTheCheck = ss "la cuenta" ; ---lin --- GBye = ss "ciao" ; --- GCheers = ss "cincin" ; --- GDamn = ss "maledizione" ; --- GExcuse = ss "scusa" ; --- GExcusePol = ss "scusi" ; --- GGoodDay = ss "buongiorno" ; --- GGoodEvening = ss "buona sera" ; --- GGoodMorning = ss "buongiorno" ; --- GGoodNight = ss "buona notte" ; --- GGoodbye = ss "arrivederci" ; --- GHello = ss "ciao" ; --- GHelp = ss "aiuto" ; --- GHowAreYou = ss "come sta" ; --- GLookOut = ss "attenzione" ; --- GNiceToMeetYou = ss "piacere di conoscerti" ; --- GNiceToMeetYouPol = ss "piacere di conoscerLa" ; --- GPleaseGive, GPleaseGivePol = ss "per favore" ; --- GSeeYouSoon = ss "a presto" ; ---- --- GSorry = ss "scusami" ; ---- --- GSorryPol = ss "scusimi" ; ---- --- GThanks = ss "grazie" ; --- GTheCheck = ss "il conto" ; ---} } diff --git a/examples/phrasebook/PhrasebookSpa.gf b/examples/phrasebook/PhrasebookSpa.gf index c31673187..5605826d6 100644 --- a/examples/phrasebook/PhrasebookSpa.gf +++ b/examples/phrasebook/PhrasebookSpa.gf @@ -1,14 +1,14 @@ ---# -path=.:present - -concrete PhrasebookSpa of Phrasebook = - GreetingsSpa, - WordsSpa - ** open - SyntaxSpa, - Prelude in { - -lin - PGreeting g = lin Text (ss g.s) ; - -} - +--# -path=.:present + +concrete PhrasebookSpa of Phrasebook = + GreetingsSpa, + WordsSpa + ** open + SyntaxSpa, + Prelude in { + +lin + PGreeting g = lin Text (ss g.s) ; + +} + diff --git a/examples/phrasebook/SentencesSpa.gf b/examples/phrasebook/SentencesSpa.gf index 4e293aea0..0fcf185e8 100644 --- a/examples/phrasebook/SentencesSpa.gf +++ b/examples/phrasebook/SentencesSpa.gf @@ -1,13 +1,21 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [ - IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale + IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale, + WherePlace, WherePerson, ABePlace, + Superlative ] with (Syntax = SyntaxSpa), (Symbolic = SymbolicSpa), (Lexicon = LexiconSpa) ** - open SyntaxSpa, ExtraSpa, Prelude in { + open ParadigmsSpa, BeschSpa, SyntaxSpa, ExtraSpa, Prelude in { + +flags coding = utf8 ; + + lincat + Superlative = OrdSuperlative ; -- {ord: Ord ; isPre: Bool} + + lin - lin IFemale = {name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; YouFamFemale = @@ -20,9 +28,17 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [ {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; YouPolMale = {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ; - + + ABePlace p place = mkCl p.name (mkVP (mkVP estar) place.at) ; + + WherePlace place = mkQS (mkQCl where_IAdv (mkCl place.name estar) ) ; + + WherePerson person = mkQS (mkQCl where_IAdv (mkCl person.name estar) ) ; + oper - + + estar = mkV (estar_2 "estar") ; + CNPlace : Type = {name : CN ; at : Prep ; to : Prep } ; mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> { @@ -31,13 +47,26 @@ oper to = t ; } ; - placeNP : Det -> CNPlace -> NPPlace = \det,kind -> - let name : NP = mkNP det kind.name in { + OrdSuperlative : Type = {ord: Ord ; isPre: Bool} ; + + placeNPSuperl : OrdSuperlative -> CNPlace -> NPPlace = \sup,kind -> case sup.isPre of { + True => placeNPDet sup.ord kind ; + False => placeNPAdj sup.ord kind + } ; + + -- "el mejor aeropuerto" + placeNPDet : Ord -> CNPlace -> NPPlace = \ord,kind -> + let name : NP = mkNP (mkDet the_Art ord) kind.name in { name = name ; - at = mkAdv kind.at name ; - to = mkAdv kind.to name ; - }; - -} - + at = SyntaxSpa.mkAdv kind.at name ; + to = SyntaxSpa.mkAdv kind.to name ; + }; + -- "el aeropuerto más grande" + placeNPAdj : Ord -> CNPlace -> NPPlace = \ord,kind -> + let name : NP = mkNP the_Art (mkCN kind.name (mkAP ord)) in { + name = name ; + at = SyntaxSpa.mkAdv kind.at name ; + to = SyntaxSpa.mkAdv kind.to name ; + }; +} \ No newline at end of file diff --git a/examples/phrasebook/WordsSpa.gf b/examples/phrasebook/WordsSpa.gf index 90b705082..0f396f25b 100644 --- a/examples/phrasebook/WordsSpa.gf +++ b/examples/phrasebook/WordsSpa.gf @@ -6,10 +6,13 @@ concrete WordsSpa of Words = SentencesSpa ** open (E = ExtraSpa), (L = LexiconSpa), (P = ParadigmsSpa), + (S = SyntaxSpa), ParadigmsSpa, StructuralSpa, Prelude in { +flags coding = utf8 ; + lin -- kinds @@ -19,24 +22,24 @@ lin Bread = mkCN L.bread_N ; Cheese = mkCN (mkN "queso") ; Chicken = mkCN (mkN "pollo") ; - Coffee = mkCN (mkN "café") ; + Coffee = mkCN (mkN "café") ; Fish = mkCN L.fish_N ; Meat = mkCN (mkN "carne" feminine) ; Milk = mkCN L.milk_N ; Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; - Tea = mkCN (mkN "té") ; - Water = mkCN L.water_N ; + Tea = mkCN (mkN "té" "tés" masculine) ; + Water = mkCN (mkN "agua") ; Wine = mkCN L.wine_N ; -- properties Bad = L.bad_A ; Boring = mkA "aburrido" ; - Cheap = mkA "económico" ; + Cheap = cheap_A ; Cold = L.cold_A ; Delicious = mkA "delicioso" ; - Expensive = mkA "caro" ; + Expensive = expensive_A ; Fresh = mkA "fresco" ; Good = L.good_A ; Warm = L.warm_A ; @@ -44,13 +47,12 @@ lin -- places - - Airport = mkPlace (mkN "aeropuerto") dative ; - AmusementPark = mkPlace (mkN "parque de atracciones") dative ; - Bank = mkPlace (mkN "banco") StructuralSpa.in_Prep ; --- Bar = mkPlace (mkN "bar") in_Prep ; - Cafeteria = mkPlace (mkN "cafetería") StructuralSpa.in_Prep; - Center = mkPlace (mkN "centro") StructuralSpa.in_Prep; + Airport = mkPlace (mkN "aeropuerto") in_Prep ; + AmusementPark = mkPlace (compN (mkN "parque") ["de atracciones"]) in_Prep ; + Bank = mkPlace (mkN "banco") in_Prep ; + Bar = mkPlace (mkN "bar") in_Prep ; + Cafeteria = mkPlace (mkN "cafetería") in_Prep; + Center = mkPlace (mkN "centro") in_Prep; Church = mkPlace (mkN "iglesia") in_Prep ; Cinema = mkPlace (mkN "cine") in_Prep ; Disco = mkPlace (mkN "disco") in_Prep; @@ -58,106 +60,108 @@ lin Hotel = mkPlace (mkN "hotel") in_Prep ; Museum = mkPlace (mkN "museo") in_Prep ; Park = mkPlace (mkN "parque") in_Prep ; - Parking = mkPlace (mkN "estacionamiento") dative ; + Parking = mkPlace (mkN "aparcamiento") in_Prep ; Pharmacy = mkPlace (mkN "farmacia") in_Prep ; - PostOffice = mkPlace (mkN "oficina de correos") dative ; + PostOffice = mkPlace (compN (mkN "oficina") ["de correos"]) in_Prep ; + Pub = mkPlace (mkN "pub" "pubs" masculine) in_Prep ; Restaurant = mkPlace (mkN "restaurante") in_Prep ; School = mkPlace (mkN "escuela") in_Prep ; Shop = mkPlace (mkN "tienda") in_Prep ; - Station = mkPlace (mkN "estación") in_Prep ; - Supermarket = mkPlace (mkN "supermercado") dative ; + Station = mkPlace (mkN "estación" feminine) in_Prep ; + Supermarket = mkPlace (mkN "supermercado") in_Prep ; Theatre = mkPlace (mkN "teatro") in_Prep ; - Toilet = mkPlace (mkN "baño") in_Prep ; - University = mkPlace (mkN "universidad") dative ; - Zoo = mkPlace (mkN "zoo") dative ; + Toilet = mkPlace (mkN "baño") in_Prep ; + University = mkPlace (mkN "universidad" feminine) in_Prep ; + Zoo = mkPlace (mkN "zoo") in_Prep ; CitRestaurant cit = mkCNPlace (mkCN cit (mkN "restaurante")) in_Prep to_Prep ; -- currencies - DanishCrown = mkCN (mkA "danesa") (mkN "corona") | mkCN (mkN "corona") ; - Dollar = mkCN (mkN "dólar") ; - Euro = mkCN (mkN "Euro" "Euro" masculine) ; + DanishCrown = mkCN (mkA "daneso") (mkN "corona") | mkCN (mkN "corona") ; + Dollar = mkCN (mkN "dólar") ; + Euro = mkCN (mkN "euro") ; Lei = mkCN (mkN "leu") ; Leva = mkCN (mkN "lev" "lev" masculine) ; - NorwegianCrown = mkCN (mkA "noruega") (mkN "corona") | mkCN (mkN "corona") ; + NorwegianCrown = mkCN (mkA "noruego") (mkN "corona") | mkCN (mkN "corona") ; + Pound = mkCN (mkN "libra") | mkCN (mkA "esterlino") (mkN "libra") ; Rouble = mkCN (mkN "rublo") ; - SwedishCrown = mkCN (mkA "sueca") (mkN "corona") | mkCN (mkN "corona") ; - Zloty = mkCN (mkN "zloty" "zlotych" masculine) ; + SwedishCrown = mkCN (mkA "sueco") (mkN "corona") | mkCN (mkN "corona") ; + Zloty = mkCN (mkN "zloty" "zlotys" masculine) ; -- nationalities Belgian = mkA "belga" ; - Belgium = mkNP (mkPN "Bélgica") ; + Belgium = mkNP (mkPN "Bélgica") ; Bulgarian = mkNat "bulgaro" "Bulgaria" ; - Catalan = mkNat "catalán" "Cataluña" ; - Danish = mkNat "danés" "Dinamarca" ; - Dutch = mkNat "neerlandés" "Holanda" ; - English = mkNat "inglés" "Inglaterra" ; - Finnish = mkNat "finlandés" "Finlandia" ; + Catalan = mkNat "catalán" "Cataluña" ; + Danish = mkNat "danés" "Dinamarca" ; + Dutch = mkNat "neerlandés" "Holanda" ; + English = mkNat "inglés" "Inglaterra" ; + Finnish = mkNat "finlandés" "Finlandia" ; Flemish = mkNP (mkPN "flamenco") ; - French = mkNat "francés" "Francia" ; - German = mkNat "alemán" "Alemania" ; + French = mkNat "francés" "Francia" ; + German = mkNat "alemán" "Alemania" ; Italian = mkNat "italiano" "Italia" ; Norwegian = mkNat "noruego" "Noruega" ; Polish = mkNat "polaco" "Polonia" ; Romanian = mkNat "rumano" "Rumania" ; Russian = mkNat "ruso" "Rusia" ; - Spanish = mkNat "español" "España" ; + Spanish = mkNat "español" "España" ; Swedish = mkNat "sueco" "Suecia" ; -- means of transportation Bike = mkTransport (mkN "bicicleta") ; - Bus = mkTransport (mkN "autobús" "autobús" masculine) ; - Car = mkTransport L.car_N ; - Ferry = mkTransport (mkN "balsa") ; - Plane = mkTransport L.airplane_N ; - Subway = mkTransport (mkN "metro" feminine) ; + Bus = mkTransport (mkN "autobús" "autobuses" masculine) ; + Car = mkTransport L.car_N | mkTransport (mkN "coche") ; + Ferry = mkTransport (mkN "ferry") | mkTransport (mkN "transbordador") ; + Plane = mkTransport (mkN "avión") ; + Subway = mkTransport (mkN "metro") ; Taxi = mkTransport (mkN "taxi" masculine) ; Train = mkTransport (mkN "tren") ; - Tram = mkTransport (mkN "tranvía") ; + Tram = mkTransport (mkN "tranvía") ; - ByFoot = ParadigmsSpa.mkAdv "a pie" ; + ByFoot = P.mkAdv "a pie" ; -- 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) ; + AHasChildren p num = mkCl p.name have_V2 (mkNP num (mkN "hijo")) ; AHasRoom p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (mkN "habitación")) (SyntaxSpa.mkAdv for_Prep (mkNP num (mkN "persona")))) ; + (mkNP (mkNP a_Det (mkN "habitación" feminine)) (S.mkAdv for_Prep (mkNP num (mkN "persona")))) ; AHasTable p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (mkN "mesa")) (SyntaxSpa.mkAdv for_Prep (mkNP num (mkN "persona")))) ; --- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; + (mkNP (mkNP a_Det (mkN "mesa")) (S.mkAdv for_Prep (mkNP num (mkN "persona")))) ; + AHasName p name = mkCl p.name (mkV2 (reflV (mkV "llamar"))) name ; AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "hambre" feminine))) ; - AIll p = mkCl p.name (mkA "enfermo") ; --- AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ; --- ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxSpa.mkAdv in_Prep co)) ; + AIll p = mkCl p.name stateCopula (mkAP (mkA "enfermo")) ; + AKnow p = mkCl p.name (mkV (saber_71 "saber")) ; + ALike p item = mkCl item (mkV2 (mkV ("gustar")) dative) p.name ; + ALive p co = mkCl p.name (mkVP (mkVP (mkV "vivir")) (S.mkAdv in_Prep co)) ; ALove p q = mkCl p.name (mkV2 (mkV "amar")) q.name ; AMarried p = mkCl p.name (mkA "casado") ; - AReady p = mkCl p.name (mkA "preparado") ; --- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; - ASpeak p lang = mkCl p.name (mkV2 (mkV "hablar")) lang ; + AReady p = mkCl p.name stateCopula (mkAP (mkA "listo")) ; + AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "miedo"))) ; + ASpeak p lang = mkCl p.name (mkV2 (mkV "hablar")) lang ; AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sed" feminine))) ; - ATired p = mkCl p.name (mkA "cansado") ; - AUnderstand p = mkCl p.name (mkV "entender") ; --- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ; + ATired p = mkCl p.name stateCopula (mkAP (mkA "cansado")) ; + AUnderstand p = mkCl p.name (mkV (defender_29 "entender")) ; + AWant p obj = mkCl p.name (mkV2 (mkV (querer_64 "querer"))) obj ; AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- miscellaneous --- QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ; --- QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ; --- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "cuestar"))) ; - ItCost item price = mkCl item (mkV2 (mkV "cuestar")) price ; + QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "llamar")))) ; + QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costar" "cuesto"))) ; + ItCost item price = mkCl item (mkV2 (mkV "costar" "cuesto")) 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) ; + PropOpen p = mkCl p.name stateCopula (mkAP open_A) ; + PropClosed p = mkCl p.name stateCopula (mkAP closed_A) ; + PropOpenDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP open_A)) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP closed_A)) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP open_A)) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP stateCopula (mkAP closed_A)) d.habitual) ; -- Building phrases from strings is complicated: the solution is to use @@ -167,7 +171,7 @@ lin PSeeYouPlace p = mkText (lin Text (ss ("nos vemos"))) (mkPhrase (mkUtt p.at)) ; PSeeYouPlaceDate p d = mkText (lin Text (ss ("nos vemos"))) - (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ; + (mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ; -- 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 @@ -177,29 +181,46 @@ lin Husband = xOf sing (mkN "marido" masculine) ; Son = xOf sing (mkN "hijo" masculine) ; Daughter = xOf sing (mkN "hija" feminine) ; - Children = xOf plur L.child_N ; + Children = xOf plur (mkN "hijo") ; -- week days Monday = mkDay "lunes" ; Tuesday = mkDay "martes" ; - Wednesday = mkDay "miércoles" ; + Wednesday = mkDay "miércoles" ; Thursday = mkDay "jueves" ; Friday = mkDay "viernes" ; - Saturday = mkDay "sábado" ; + Saturday = mkDay "sábado" ; Sunday = mkDay "domingo" ; - Tomorrow = P.mkAdv "mañana" ; + Tomorrow = P.mkAdv "mañana" ; -- transports --- HowFar place = mkQS (mkQCl far_IAdv place.name) ; --- HowFarFrom x y = mkQS (mkQCl (mkIAdv far_IAdv (SyntaxSpa.mkAdv from_Prep x.name)) y.name) ; --- HowFarFromBy x y t = mkQS (mkQCl (mkIAdv (mkIAdv far_IAdv (SyntaxSpa.mkAdv from_Prep x.name)) t) y.name) ; --- HowFarBy y t = mkQS (mkQCl (mkIAdv far_IAdv t.by) y.name) ; + -- "qué tan lejos está PLACE" + HowFar place = mkQS (mkQCl far_IP place.name placeCopula) ; --- oper far_IAdv = E.IAdvAdv L.far_Adv ; + -- "qué tan lejos de X está Y" + HowFarFrom x y = mkQS (mkQCl (mkIP far_IP (S.mkAdv from_Prep x.name)) y.name placeCopula) ; + + -- "cuánto dura desde X hasta Y con T" + -- x,y: Place ; t: ByTransport + HowFarFromBy x y t = mkQS (mkQCl how8much_IAdv + (mkCl (mkVP (mkVP (mkVP (mkVP (mkV "durar")) (S.mkAdv desde_Prep x.name)) (S.mkAdv hasta_Prep y.name)) t ))) ; + + -- "cuánto dura hasta Y con T" + -- y: Place ; t: ByTransport + HowFarBy y t = mkQS (mkQCl how8much_IAdv + (mkCl (mkVP (mkVP (mkVP (mkV "durar")) (S.mkAdv hasta_Prep y.name)) t ))) ; + + +oper + far_IP = mkIP whatSg_IP (S.mkAdv (P.mkAdA "tan") (P.mkAdv "lejos")) ; -- "qué tan lejos" + how8much_IAdv = ss "cuánto" ; -- this wasn't implemented in the resource library + desde_Prep = mkPrep "desde" ; + hasta_Prep = mkPrep "hasta" ; + placeCopula = mkV2 (mkV (estar_2 "estar")) ; lin WhichTranspPlace trans place = @@ -210,16 +231,29 @@ lin -- modifiers of places - TheBest = mkSuperl L.good_A ; - TheClosest = mkSuperl L.near_A ; - TheCheapest = mkSuperl (mkA "barato") ; - TheMostExpensive = mkSuperl (mkA "caro") ; - TheMostPopular = mkSuperl (mkA "populares") ; - TheWorst = mkSuperl L.bad_A ; - - SuperlPlace sup p = placeNP sup p ; + ------------------------------------------------------------------ + -- Common adjectives like "good" or "bad" come before the noun, + -- but most of them come after. So, when making a superlative + -- place, we have to know in which place it belongs. + -- + -- The lincat of Superlative is defined in SentencesSpa as a type + -- OrdSuperlative, consisting of {ord: Ord ; isPre: Bool}. + -- + -- The function mkSuperl returns an OrdSuperlative. SuperlPlace + -- takes two parameters, OrdSuperlative and PlaceKind, and gives + -- them to placeNPSuperl (defined in SentencesSpa). + -- In placeNPSuperl the value of isPre determines whether the + -- superlative is placed before or after the noun. + ------------------------------------------------------------------ + 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 @@ -228,24 +262,37 @@ lin 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 (P.mkAdv d) (P.mkAdv ("los" ++ d)) ; ---- ? - mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> + -- not the most elegant solution, but it works + mkDay : Str -> NPDay = \d -> + case last d of { + "s" => mkNPDay (mkNP (mkN d)) (P.mkAdv d) (P.mkAdv ("los" ++ d)) ; + _ => mkNPDay (mkNP (mkN d)) (P.mkAdv d) (P.mkAdv ("los" ++ d + "s")) + } ; + + mkPlace : N -> Prep -> CNPlace = \p,i -> mkCNPlace (mkCN p) i dative ; xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; mkTransport : N -> {name : CN ; by : Adv} = \n -> { name = mkCN n ; - by = SyntaxSpa.mkAdv with_Prep (mkNP n) + by = S.mkAdv with_Prep (mkNP n) } ; - mkSuperl : A -> Det = \a -> SyntaxSpa.mkDet the_Art (SyntaxSpa.mkOrd a) ; + mkSuperl : A -> Bool -> OrdSuperlative = \a,bool -> + let ord : Ord = S.mkOrd a in { + ord = ord ; + isPre = bool ; + } ; + + -- for adjectives that express temporary state + stateCopula = mkVA (mkV (estar_2 "estar")) ; + + cheap_A = mkA "barato" ; + expensive_A = mkA "caro" ; open_A = mkA "abierto" ; closed_A = mkA "cerrado" ; - }