From 93e3635bea73b67a40b6675261c5b535d01ff152 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 12 Apr 2010 21:06:11 +0000 Subject: [PATCH] restored table3 in Coordination; completed PhrasebookFre --- examples/phrasebook/Compile.hs | 2 +- examples/phrasebook/Makefile | 2 +- examples/phrasebook/WordsFre.gf | 38 ++++++++++++++++++++++++++++++--- lib/src/prelude/Coordination.gf | 18 ++++++++++++---- 4 files changed, 51 insertions(+), 9 deletions(-) diff --git a/examples/phrasebook/Compile.hs b/examples/phrasebook/Compile.hs index 9f8dd391f..538f31fcd 100644 --- a/examples/phrasebook/Compile.hs +++ b/examples/phrasebook/Compile.hs @@ -28,7 +28,7 @@ main = do then mapM_ compileOne modus >> return () else return () case opts of - _ | elem "-make" opts || elem "makeonly" opts -> do + _ | elem "-make" opts || elem "-link" opts -> do system $ "gf -make " ++ unwords (map (++ ".pgf") modus) return () _ -> return () diff --git a/examples/phrasebook/Makefile b/examples/phrasebook/Makefile index b07ab91ef..2178c46b5 100644 --- a/examples/phrasebook/Makefile +++ b/examples/phrasebook/Makefile @@ -3,7 +3,7 @@ compile = runghc Compile all: demo missing demo: - $(compile) Eng Fre Ger Ita Ron Swe + $(compile) Eng Fre Ger Ita Ron Swe DisambPhrasebookEng $(compile) -link Eng Fin Fre Ger Ita Ron Swe DisambPhrasebookEng #separate, because slow... diff --git a/examples/phrasebook/WordsFre.gf b/examples/phrasebook/WordsFre.gf index 795193e4f..14a87f1e6 100644 --- a/examples/phrasebook/WordsFre.gf +++ b/examples/phrasebook/WordsFre.gf @@ -6,7 +6,8 @@ concrete WordsFre of Words = SentencesFre ** open (E = ExtraFre), (L = LexiconFre), ParadigmsFre, - (P = ParadigmsFre) in { + (P = ParadigmsFre), + Prelude in { lin @@ -31,11 +32,13 @@ lin Bad = L.bad_A ; Boring = mkA "ennuyeux" ; + Cheap = let bm = "bon marché" in mkA bm bm bm bm ; Cold = L.cold_A ; Delicious = mkA "délicieux" ; Expensive = mkA "cher" ; Fresh = mkA "frais" "fraîche" "frais" "fraîchement" ; Good = L.good_A ; + Suspect = mkA "suspect" ; Warm = L.warm_A ; -- places @@ -43,19 +46,26 @@ lin Airport = mkPlace (mkN "aéroport") dative ; Bar = mkPlace (mkN "bar") in_Prep ; Church = mkPlace (mkN "église") in_Prep ; + Cinema = mkPlace (mkN "cinéma" masculine) in_Prep ; Hospital = mkPlace (mkN "hôpital") dative ; + Hotel = mkPlace (mkN "hôtel") dative ; Museum = mkPlace (mkN "musée" masculine) in_Prep ; + Park = mkPlace (mkN "parc") in_Prep ; Restaurant = mkPlace (mkN "restaurant") in_Prep ; + School = mkPlace (mkN "école") dative ; + Shop = mkPlace (mkN "magasin") in_Prep ; Station = mkPlace (mkN "gare") dative ; + Theatre = mkPlace (mkN "théâtre" masculine) in_Prep ; Toilet = mkPlace (mkN "toilette") in_Prep ; + University = mkPlace (mkN "université" feminine) dative ; -- currencies - DanishCrown = mkCN (mkA "danois") (mkN "couronne") ; + DanishCrown = mkCN (mkA "danois") (mkN "couronne") | mkCN (mkN "couronne") ; Dollar = mkCN (mkN "dollar") ; Euro = mkCN (mkN "euro") ; Lei = mkCN (mkN "leu" "lei" masculine) ; - SwedishCrown = mkCN (mkA "suédois") (mkN "couronne") ; + SwedishCrown = mkCN (mkA "suédois") (mkN "couronne") | mkCN (mkN "couronne") ; -- nationalities @@ -73,12 +83,19 @@ lin 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) ; + AHasRoom p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "chambre")) + (SyntaxFre.mkAdv for_Prep (mkNP num (mkN "personne")))) ; + AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "table")) + (SyntaxFre.mkAdv for_Prep (mkNP num (mkN "personne")))) ; AMarried p = mkCl p.name (mkA "marié") ; AWant p obj = mkCl p.name vouloir_V2 obj ; ALike p item = mkCl item plaire_V2 p.name ; ASpeak p lang = mkCl p.name (mkV2 (mkV "parler")) lang ; ALove p q = mkCl p.name (mkV2 (mkV "aimer")) q.name ; AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "faim" feminine))) ; + AReady p = mkCl p.name (mkA "prêt") ; AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "soif" feminine))) ; ATired p = mkCl p.name (mkA "fatigué") ; AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "peur" feminine))) ; @@ -104,6 +121,19 @@ lin HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ; ItCost item price = mkCl item (mkV2 (mkV "coûter")) price ; +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYou d = mkText (lin Text (ss ("on se verra"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace p d = + mkText (lin Text (ss ("on se verra"))) + (mkText (mkPhrase (mkUtt p.at)) (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. + + Wife = xOf sing (mkN "femme") ; Husband = xOf sing (mkN "mari") ; Son = xOf sing (mkN "fils") ; @@ -120,6 +150,8 @@ lin Saturday = mkDay "samedi" ; Sunday = mkDay "dimanche" ; + Tomorrow = ParadigmsFre.mkAdv "demain" ; + oper mkNat : Str -> Str -> NPNationality = \nat,co -> diff --git a/lib/src/prelude/Coordination.gf b/lib/src/prelude/Coordination.gf index b9fc7a25e..13081d255 100644 --- a/lib/src/prelude/Coordination.gf +++ b/lib/src/prelude/Coordination.gf @@ -104,8 +104,7 @@ oper \P,Q,R,or,xs -> {s = \\p,q,r => or.s1++ xs.s1 ! p ! q ! r ++ or.s2 ++ xs.s2 ! p ! q ! r} ; - --------- - ListTable4 : Type -> Type -> Type -> Type -> Type = \P,Q,R,T -> + ListTable4 : Type -> Type -> Type -> Type -> Type = \P,Q,R,T -> {s1,s2 : P => Q => R => T => Str} ; twoTable4 : (P,Q,R,T : Type) -> (_,_ : {s : P => Q => R => T => Str}) -> @@ -153,10 +152,21 @@ oper {s1 = table P {p => table Q {q => x.s ! p ! q ++ c ++ xs.s1 ! p ! q}} ; s2 = xs.s2 } ; - consrTable4 : (P,Q,R,T : Type) -> Str -> {s : P => Q => R => T => Str} -> + + consrTable3 : (P,Q,R : Type) -> Str -> {s : P => Q => R => Str} -> + ListTable3 P Q R -> ListTable3 P Q R = + \P,Q,R,c,x,xs -> + {s1 = table P {p => table Q {q => table R { + r => x.s ! p ! q ! r ++ c ++ xs.s1 ! p ! q ! r + }}} ; + s2 = xs.s2 + } ; + + consrTable4 : (P,Q,R,T : Type) -> Str -> {s : P => Q => R => T => Str} -> ListTable4 P Q R T -> ListTable4 P Q R T = \P,Q,R,T,c,x,xs -> - {s1 = table P {p => table Q {q => table R { r => table T {t => x.s ! p ! q ! r ! t ++ c ++ xs.s1 ! p ! q ! r ! t}}}} ; + {s1 = table P {p => table Q {q => table R { + r => table T {t => x.s ! p ! q ! r ! t ++ c ++ xs.s1 ! p ! q ! r ! t}}}} ; s2 = xs.s2 } ;