From 50a2e2ea93e7280ae6063a1cbf0e8cb29fa78a09 Mon Sep 17 00:00:00 2001 From: aarne Date: Sat, 10 Apr 2010 08:18:03 +0000 Subject: [PATCH] regenerated clones with complete abstract and ready-maked Lexicon-based words in Phrasebook --- examples/phrasebook/Clone.hs | 21 +- examples/phrasebook/DisambPhrasebookEng.gf | 9 +- examples/phrasebook/GreetingsBul.gf | 50 +-- examples/phrasebook/GreetingsCat.gf | 55 +-- examples/phrasebook/GreetingsDan.gf | 50 +-- examples/phrasebook/GreetingsDut.gf | 50 +-- examples/phrasebook/GreetingsEng.gf | 2 +- examples/phrasebook/GreetingsIta.gf | 3 +- examples/phrasebook/GreetingsNor.gf | 50 +-- examples/phrasebook/GreetingsPol.gf | 50 +-- examples/phrasebook/GreetingsRus.gf | 50 +-- examples/phrasebook/GreetingsSpa.gf | 55 +-- examples/phrasebook/GreetingsSwe.gf | 2 +- examples/phrasebook/Implementation.html | 381 +++++++++++++++++++++ examples/phrasebook/Makefile | 9 +- examples/phrasebook/Ontology.html | 34 +- examples/phrasebook/PhrasebookBul.gf | 2 +- examples/phrasebook/PhrasebookPol.gf | 2 +- examples/phrasebook/PhrasebookRus.gf | 2 +- examples/phrasebook/Sentences.gf | 10 +- examples/phrasebook/SentencesCat.gf | 8 +- examples/phrasebook/SentencesFin.gf | 14 +- examples/phrasebook/SentencesI.gf | 79 ++++- examples/phrasebook/SentencesRus.gf | 14 +- examples/phrasebook/SentencesSpa.gf | 1 + examples/phrasebook/Words.gf | 17 +- examples/phrasebook/WordsBul.gf | 268 +++++++++------ examples/phrasebook/WordsCat.gf | 258 ++++++++------ examples/phrasebook/WordsDan.gf | 249 ++++++++------ examples/phrasebook/WordsDut.gf | 245 +++++++------ examples/phrasebook/WordsEng.gf | 92 ++--- examples/phrasebook/WordsFin.gf | 63 +++- examples/phrasebook/WordsFre.gf | 28 +- examples/phrasebook/WordsGer.gf | 2 +- examples/phrasebook/WordsIta.gf | 66 +++- examples/phrasebook/WordsNor.gf | 245 +++++++------ examples/phrasebook/WordsPol.gf | 272 ++++++++------- examples/phrasebook/WordsRus.gf | 275 ++++++++------- examples/phrasebook/WordsSpa.gf | 266 ++++++++------ examples/phrasebook/WordsSwe.gf | 88 +++-- examples/phrasebook/missing.txt | 8 + examples/phrasebook/phrasebook.html | 12 +- examples/phrasebook/phrasebook.txt | 11 +- 43 files changed, 2203 insertions(+), 1265 deletions(-) create mode 100644 examples/phrasebook/Implementation.html diff --git a/examples/phrasebook/Clone.hs b/examples/phrasebook/Clone.hs index 7e146731d..4619c13ed 100644 --- a/examples/phrasebook/Clone.hs +++ b/examples/phrasebook/Clone.hs @@ -2,6 +2,7 @@ module Main where import Control.Monad import Data.Maybe +import Data.Char import System.Cmd import System.Directory import System.Environment @@ -10,17 +11,21 @@ import System.Exit -- To clone a project from one language to another: -- --- 1. for each Module in modules, copy ModuleFROM to ModuleTO +-- 1. for each Module in 'modules', copy ModuleFROM to ModuleTO -- 2. in each ModuleTO, replace substrings FROM by TO, if not prefixes of an Ident --- 3. in each ModuleTO in specifics, comment out every line in the body +-- 3. in each ModuleTO in 'specifics', comment out every line in the body, except +-- those whose first word is in 'commons'. -- -- Syntax: runghc Clone FROM TO -- Example: runhugs Clone Swe Nor --- The following lines are for the phrasebook project, but can be modified to other projects. +-- The following lines are for the phrasebook project, and can be changed +-- to fit other projects. modules = "Phrasebook":"Sentences":specifics specifics = ["Words","Greetings"] +commons = ["Apple","Beer","Bread","Fish","Milk","Salt","Water","Wine", + "Bad","Cold","Good","Warm","AHasChildren"] main = do @@ -42,7 +47,9 @@ replaceLang s1 s2 = repl where lgs = 3 -- length s1 -- the file name has the form p....pLLL.gf, i.e. 3-letter lang name, suffix .gf -getLangName fi = let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in (reverse ferp,reverse nal) +getLangName fi = + let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in + (reverse ferp,reverse nal) commentIf c = if c then (unlines . commentBody . lines) else id @@ -51,4 +58,8 @@ commentBody ss = header ++ map comment body ++ ["}"] where isJment ws = case ws of k:_ | elem k ["flags","lin","lincat","oper","param"] -> True _ -> False - comment l = if take 2 l == "--" then l else "-- " ++ l + comment l = case l of + _ | take 2 l == "--" -> l -- already commented + _ | all isSpace l -> l -- empty line + _ | elem (head (words l)) commons -> l -- in 'commons' + _ -> "--" ++ l diff --git a/examples/phrasebook/DisambPhrasebookEng.gf b/examples/phrasebook/DisambPhrasebookEng.gf index 02efd623b..4f71c91ab 100644 --- a/examples/phrasebook/DisambPhrasebookEng.gf +++ b/examples/phrasebook/DisambPhrasebookEng.gf @@ -8,7 +8,8 @@ concrete DisambPhrasebookEng of Phrasebook = PhrasebookEng - LangNat, -- CitiNat, GExcuse, GExcusePol, GSorry, GSorryPol, - GPleaseGive, GPleaseGivePol + GPleaseGive, GPleaseGivePol, + GNiceToMeetYou, GNiceToMeetYouPol ] ** open SyntaxEng, ParadigmsEng, Prelude in { lin @@ -28,14 +29,16 @@ lin GSorryPol = pol "sorry" ; GPleaseGive = fam "please" ; GPleaseGivePol = pol "please" ; + GNiceToMeetYou = fam "nice to meet you" ; + GNiceToMeetYouPol = pol "nice to meet you" ; oper fam : Str -> SS = \s -> postfixSS "(familiar)" (ss s) ; pol : Str -> SS = \s -> postfixSS "(polite)" (ss s) ; - mkP : Pron -> Str -> {name : NP ; isPron : Bool ; poss : Det} = \p,s -> + mkP : Pron -> Str -> {name : NP ; isPron : Bool ; poss : Quant} = \p,s -> {name = mkNP (mkNP p) (ParadigmsEng.mkAdv s) ; isPron = False ; -- to show the disambiguation - poss = mkDet youSg_Pron + poss = SyntaxEng.mkQuant youSg_Pron } ; } diff --git a/examples/phrasebook/GreetingsBul.gf b/examples/phrasebook/GreetingsBul.gf index 3f3d6faf4..e814e2a56 100644 --- a/examples/phrasebook/GreetingsBul.gf +++ b/examples/phrasebook/GreetingsBul.gf @@ -1,28 +1,28 @@ concrete GreetingsBul of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "bye" ; +-- GCheers = ss "cheers" ; +-- GDamn = ss "damn" ; +-- GExcuse, GExcusePol = ss "excuse me" ; +-- GGoodDay = ss "good afternoon" ; ---- +-- GGoodEvening = ss "good evening" ; +-- GGoodMorning = ss "good morning" ; +-- GGoodNight = ss "good night" ; +-- GGoodbye = ss "goodbye" ; +-- GHello = ss "hello" ; +-- GHelp = ss "help" ; +-- GHowAreYou = ss "how are you" ; +-- GLookOut = ss "look out" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ; +-- GPleaseGive, GPleaseGivePol = ss "please" ; +-- GSeeYouSoon = ss "see you soon" ; +-- GSorry, GSorryPol = ss "sorry" ; +-- GThanks = ss "thank you" ; +-- GTheCheck = ss "the bill" ; + +--} } diff --git a/examples/phrasebook/GreetingsCat.gf b/examples/phrasebook/GreetingsCat.gf index 00c46f718..d31a239c8 100644 --- a/examples/phrasebook/GreetingsCat.gf +++ b/examples/phrasebook/GreetingsCat.gf @@ -1,30 +1,31 @@ concrete GreetingsCat of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- 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 "piacevole" ; ---- --- GPleaseGive, GPleaseGivePol = ss "per favore" ; --- GSeeYouSoon = ss "a presto" ; ---- --- GSorry = ss "scusami" ; ---- --- GSorryPol = ss "scusimi" ; ---- --- GThanks = ss "grazie" ; --- GTheCheck = ss "il conto" ; --- --- } +--lincat +-- Greeting = SS ; + +--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/GreetingsDan.gf b/examples/phrasebook/GreetingsDan.gf index c7af6cbe3..d2ede6136 100644 --- a/examples/phrasebook/GreetingsDan.gf +++ b/examples/phrasebook/GreetingsDan.gf @@ -1,28 +1,28 @@ concrete GreetingsDan of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "hej då" ; +-- GCheers = ss "skål" ; +-- GDamn = ss "fan" ; +-- GExcuse, GExcusePol = ss "ursäkta" ; +-- GGoodDay = ss "god dag" ; +-- GGoodEvening = ss "god afton" ; +-- GGoodMorning = ss "god morgon" ; +-- GGoodNight = ss "god natt" ; +-- GGoodbye = ss "hej då" ; +-- GHello = ss "hej" ; +-- GHelp = ss "hjälp" ; +-- GHowAreYou = ss "hur står det till" ; +-- GLookOut = ss "se upp" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ; +-- GPleaseGive, GPleaseGivePol = ss "var så god" ; +-- GSeeYouSoon = ss "vi ses snart" ; +-- GSorry, GSorryPol = ss "förlåt" ; +-- GThanks = ss "tack" ; +-- GTheCheck = ss "notan" ; + +--} } diff --git a/examples/phrasebook/GreetingsDut.gf b/examples/phrasebook/GreetingsDut.gf index 7b02497be..68162d18d 100644 --- a/examples/phrasebook/GreetingsDut.gf +++ b/examples/phrasebook/GreetingsDut.gf @@ -1,28 +1,28 @@ concrete GreetingsDut of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "hej då" ; +-- GCheers = ss "skål" ; +-- GDamn = ss "fan" ; +-- GExcuse, GExcusePol = ss "ursäkta" ; +-- GGoodDay = ss "god dag" ; +-- GGoodEvening = ss "god afton" ; +-- GGoodMorning = ss "god morgon" ; +-- GGoodNight = ss "god natt" ; +-- GGoodbye = ss "hej då" ; +-- GHello = ss "hej" ; +-- GHelp = ss "hjälp" ; +-- GHowAreYou = ss "hur står det till" ; +-- GLookOut = ss "se upp" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ; +-- GPleaseGive, GPleaseGivePol = ss "var så god" ; +-- GSeeYouSoon = ss "vi ses snart" ; +-- GSorry, GSorryPol = ss "förlåt" ; +-- GThanks = ss "tack" ; +-- GTheCheck = ss "notan" ; + +--} } diff --git a/examples/phrasebook/GreetingsEng.gf b/examples/phrasebook/GreetingsEng.gf index 08d2bd184..e69410b51 100644 --- a/examples/phrasebook/GreetingsEng.gf +++ b/examples/phrasebook/GreetingsEng.gf @@ -17,7 +17,7 @@ lin GHelp = ss "help" ; GHowAreYou = ss "how are you" ; GLookOut = ss "look out" ; - GNiceToMeetYou = ss "nice to meet you" ; + GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ; GPleaseGive, GPleaseGivePol = ss "please" ; GSeeYouSoon = ss "see you soon" ; GSorry, GSorryPol = ss "sorry" ; diff --git a/examples/phrasebook/GreetingsIta.gf b/examples/phrasebook/GreetingsIta.gf index ac2219303..a77d5e6ea 100644 --- a/examples/phrasebook/GreetingsIta.gf +++ b/examples/phrasebook/GreetingsIta.gf @@ -18,7 +18,8 @@ lin GHelp = ss "aiuto" ; GHowAreYou = ss "come sta" ; GLookOut = ss "attenzione" ; --- GNiceToMeetYou = ss "piacevole" ; ---- + GNiceToMeetYou = ss "piacere di conoscerti" ; + GNiceToMeetYouPol = ss "piacere di conoscerLa" ; GPleaseGive, GPleaseGivePol = ss "per favore" ; GSeeYouSoon = ss "a presto" ; ---- GSorry = ss "scusami" ; ---- diff --git a/examples/phrasebook/GreetingsNor.gf b/examples/phrasebook/GreetingsNor.gf index 469352e46..05fe2110f 100644 --- a/examples/phrasebook/GreetingsNor.gf +++ b/examples/phrasebook/GreetingsNor.gf @@ -1,28 +1,28 @@ concrete GreetingsNor of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "hej då" ; +-- GCheers = ss "skål" ; +-- GDamn = ss "fan" ; +-- GExcuse, GExcusePol = ss "ursäkta" ; +-- GGoodDay = ss "god dag" ; +-- GGoodEvening = ss "god afton" ; +-- GGoodMorning = ss "god morgon" ; +-- GGoodNight = ss "god natt" ; +-- GGoodbye = ss "hej då" ; +-- GHello = ss "hej" ; +-- GHelp = ss "hjälp" ; +-- GHowAreYou = ss "hur står det till" ; +-- GLookOut = ss "se upp" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ; +-- GPleaseGive, GPleaseGivePol = ss "var så god" ; +-- GSeeYouSoon = ss "vi ses snart" ; +-- GSorry, GSorryPol = ss "förlåt" ; +-- GThanks = ss "tack" ; +-- GTheCheck = ss "notan" ; + +--} } diff --git a/examples/phrasebook/GreetingsPol.gf b/examples/phrasebook/GreetingsPol.gf index 2e87138a7..9374e92b9 100644 --- a/examples/phrasebook/GreetingsPol.gf +++ b/examples/phrasebook/GreetingsPol.gf @@ -1,28 +1,28 @@ concrete GreetingsPol of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "bye" ; +-- GCheers = ss "cheers" ; +-- GDamn = ss "damn" ; +-- GExcuse, GExcusePol = ss "excuse me" ; +-- GGoodDay = ss "good afternoon" ; ---- +-- GGoodEvening = ss "good evening" ; +-- GGoodMorning = ss "good morning" ; +-- GGoodNight = ss "good night" ; +-- GGoodbye = ss "goodbye" ; +-- GHello = ss "hello" ; +-- GHelp = ss "help" ; +-- GHowAreYou = ss "how are you" ; +-- GLookOut = ss "look out" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ; +-- GPleaseGive, GPleaseGivePol = ss "please" ; +-- GSeeYouSoon = ss "see you soon" ; +-- GSorry, GSorryPol = ss "sorry" ; +-- GThanks = ss "thank you" ; +-- GTheCheck = ss "the bill" ; + +--} } diff --git a/examples/phrasebook/GreetingsRus.gf b/examples/phrasebook/GreetingsRus.gf index fa6a73077..6b1cac195 100644 --- a/examples/phrasebook/GreetingsRus.gf +++ b/examples/phrasebook/GreetingsRus.gf @@ -1,28 +1,28 @@ concrete GreetingsRus of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- lin --- GBye = ss "hej då" ; --- GCheers = ss "skål" ; --- GDamn = ss "fan" ; --- GExcuse, GExcusePol = ss "ursäkta" ; --- GGoodDay = ss "god dag" ; --- GGoodEvening = ss "god afton" ; --- GGoodMorning = ss "god morgon" ; --- GGoodNight = ss "god natt" ; --- GGoodbye = ss "hej då" ; --- GHello = ss "hej" ; --- GHelp = ss "hjälp" ; --- GHowAreYou = ss "hur står det till" ; --- GLookOut = ss "se upp" ; --- GNiceToMeetYou = ss "trevligt att träffas" ; --- GPleaseGive, GPleaseGivePol = ss "var så god" ; --- GSeeYouSoon = ss "vi ses snart" ; --- GSorry, GSorryPol = ss "förlåt" ; --- GThanks = ss "tack" ; --- GTheCheck = ss "notan" ; --- --- } +--lincat +-- Greeting = SS ; + +--lin +-- GBye = ss "bye" ; +-- GCheers = ss "cheers" ; +-- GDamn = ss "damn" ; +-- GExcuse, GExcusePol = ss "excuse me" ; +-- GGoodDay = ss "good afternoon" ; ---- +-- GGoodEvening = ss "good evening" ; +-- GGoodMorning = ss "good morning" ; +-- GGoodNight = ss "good night" ; +-- GGoodbye = ss "goodbye" ; +-- GHello = ss "hello" ; +-- GHelp = ss "help" ; +-- GHowAreYou = ss "how are you" ; +-- GLookOut = ss "look out" ; +-- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ; +-- GPleaseGive, GPleaseGivePol = ss "please" ; +-- GSeeYouSoon = ss "see you soon" ; +-- GSorry, GSorryPol = ss "sorry" ; +-- GThanks = ss "thank you" ; +-- GTheCheck = ss "the bill" ; + +--} } diff --git a/examples/phrasebook/GreetingsSpa.gf b/examples/phrasebook/GreetingsSpa.gf index 48db27470..c9bcb7482 100644 --- a/examples/phrasebook/GreetingsSpa.gf +++ b/examples/phrasebook/GreetingsSpa.gf @@ -1,30 +1,31 @@ concrete GreetingsSpa of Greetings = open Prelude in { --- lincat --- Greeting = SS ; --- --- 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 "piacevole" ; ---- --- GPleaseGive, GPleaseGivePol = ss "per favore" ; --- GSeeYouSoon = ss "a presto" ; ---- --- GSorry = ss "scusami" ; ---- --- GSorryPol = ss "scusimi" ; ---- --- GThanks = ss "grazie" ; --- GTheCheck = ss "il conto" ; --- --- } +--lincat +-- Greeting = SS ; + +--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/GreetingsSwe.gf b/examples/phrasebook/GreetingsSwe.gf index 2d80d28c7..b0846bbeb 100644 --- a/examples/phrasebook/GreetingsSwe.gf +++ b/examples/phrasebook/GreetingsSwe.gf @@ -17,7 +17,7 @@ lin GHelp = ss "hjälp" ; GHowAreYou = ss "hur står det till" ; GLookOut = ss "se upp" ; - GNiceToMeetYou = ss "trevligt att träffas" ; + GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ; GPleaseGive, GPleaseGivePol = ss "var så god" ; GSeeYouSoon = ss "vi ses snart" ; GSorry, GSorryPol = ss "förlåt" ; diff --git a/examples/phrasebook/Implementation.html b/examples/phrasebook/Implementation.html new file mode 100644 index 000000000..870150d1c --- /dev/null +++ b/examples/phrasebook/Implementation.html @@ -0,0 +1,381 @@ + + + Produced by +gfdoc - a rudimentary GF document generator. +(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL. + +

+

Implementation of MOLTO Phrasebook

+ +

The functor for (mostly) common structures

+
+  incomplete concrete SentencesI of Sentences = Numeral ** 
+    open
+      Syntax,
+      Lexicon,
+      Symbolic,  -- for names as strings
+      Prelude
+    in {
+    lincat
+      Phrase = Text ;
+      Sentence = S ;
+      Question = QS ;
+      Proposition = Cl ;
+      Item = NP ;
+      Kind = CN ;
+      Quality = AP ;
+      Property = A ;
+      Object = 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} ;
+      Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ; 
+      Language = NP ;
+      Citizenship = A ;
+      Country = NP ;
+      Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ;
+      Date = Adv ;
+      Name = NP ;
+      Number = Card ;
+    lin
+      PSentence s = mkText s | lin Text (mkUtt s) ;  -- optional '.'
+      PQuestion s = mkText s | lin Text (mkUtt s) ;  -- optional '?'
+  
+      PObject x = mkPhrase (mkUtt x) ;
+      PKind x = mkPhrase (mkUtt x) ;
+      PQuality x = mkPhrase (mkUtt x) ;
+      PNumber x = mkPhrase (mkUtt x) ;
+      PPlace x = mkPhrase (mkUtt x.name) ;
+      PPlaceKind x = mkPhrase (mkUtt x.name) ;
+      PCurrency x = mkPhrase (mkUtt x) ;
+      PPrice x = mkPhrase (mkUtt x) ;
+      PLanguage x = mkPhrase (mkUtt x) ;
+      PCountry x = mkPhrase (mkUtt x) ;
+      PCitizenship x = mkPhrase (mkUtt (mkAP x)) ;
+      PDay d = mkPhrase (mkUtt d.name) ;
+  
+      PYes = mkPhrase yes_Utt ;
+      PNo = mkPhrase no_Utt ;
+  
+      Is = mkCl ;
+  
+      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) ;
+  
+      PropAction a = a ;
+  
+      AmountCurrency num curr = mkNP num curr ;
+  
+      ObjItem i = i ;
+      ObjNumber n k = mkNP n k ;
+      ObjIndef k = mkNP a_Quant k ;
+  
+      This kind = mkNP this_Quant kind ;
+      That kind = mkNP that_Quant kind ;
+      These kind = mkNP this_Quant plNum kind ;
+      Those kind = mkNP that_Quant plNum kind ;
+      The kind = mkNP the_Quant kind ;
+      The kind = mkNP the_Quant kind ;
+      Thes kind = mkNP the_Quant plNum kind ;
+      SuchKind quality kind = mkCN quality kind ;
+      Very property = mkAP very_AdA (mkAP property) ;
+      Too property = mkAP too_AdA (mkAP property) ;
+      PropQuality property = mkAP property ;
+      ThePlace kind =
+        let name : NP = mkNP the_Quant kind.name in {
+          name = name ;
+          at = mkAdv kind.at name ;
+          to = mkAdv kind.to name
+        } ;
+  
+      IMale, IFemale = mkPerson i_Pron ;
+      YouFamMale, YouFamFemale = mkPerson youSg_Pron ;
+      YouPolMale, YouPolFemale = mkPerson youPol_Pron ;
+  
+      LangNat n = n.lang ;
+      CitiNat n = n.prop ;
+      CountryNat n = n.country ;
+      PropCit c = c ;
+  
+      OnDay d = d.point ;
+      Today = today_Adv ;
+  
+      PersonName n = 
+        {name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used
+
+ +
+      NameNN = symb "NN" ;
+  
+      NNumeral n = mkCard <lin Numeral n : Numeral>  ;
+  
+      AHave p kind = mkCl p.name have_V2 (mkNP kind) ;
+      ACitizen p n = mkCl p.name n ;
+      ABePlace p place = mkCl p.name place.at ;
+  
+  oper 
+
+ +These operations are used internally in Sentences. +
+    mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
+  
+    mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p -> 
+      {name = mkNP p ; isPron = True ; poss = mkQuant p} ;
+
+ +These are used in Words for each language. +
+    NPNationality : Type = {lang : NP ; country : NP ; prop : A} ;
+  
+    mkNPNationality : NP -> NP -> A -> NPNationality = \la,co,pro ->
+          {lang = la ; 
+           country = co ;
+           prop = pro
+          } ;
+  
+    NPDay : Type = {name : NP ; point : Adv ; habitual : Adv} ;
+  
+    mkNPDay : NP -> Adv -> Adv -> NPDay = \d,p,h ->
+        {name = d ; 
+         point = p ;
+         habitual = h
+        } ;
+  
+    NPPlace : Type = {name : NP ; at : Adv ; to : Adv} ;
+    CNPlace : Type = {name : CN ; at : Prep ; to : Prep} ;
+  
+    mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
+      name = p ;
+      at = i ;
+      to = t
+      } ;
+  
+    NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
+  
+    relativePerson : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson = 
+      \n,x,f,p -> 
+        let num = if_then_else Num n plNum sgNum in {
+        name = case p.isPron of {
+          True => mkNP p.poss num x ;
+          _    => f num p.name x
+          } ;
+        isPron = False ;
+        poss = mkQuant he_Pron -- not used because not pron
+        } ;
+  
+    GNumber : PType = Bool ;
+    sing = False ; plur = True ;
+
+ +for languages without GenNP, use the wife of p +
+    mkRelative : Bool -> CN -> NPPerson -> NPPerson = \n,x,p ->
+      relativePerson n x 
+        (\a,b,c -> mkNP (mkNP the_Quant a c) (Syntax.mkAdv possess_Prep b)) p ;
+
+ +for languages with GenNP, use p's wife +relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ; +
+  }
+
+ +

Implementations of Words, with English as example

+
+  concrete WordsEng of Words = SentencesEng ** 
+      open 
+        SyntaxEng, 
+        ParadigmsEng, 
+        (L = LexiconEng), 
+        (P = ParadigmsEng), 
+        IrregEng, 
+        ExtraEng, 
+        Prelude in {
+    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 ;
+      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 = mkA "delicious" ;
+      Expensive = mkA "expensive" ;
+      Fresh = mkA "fresh" ;
+      Good = L.good_A ;
+      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" ;
+      Bar = mkPlace "bar" "in" ;
+      Church = mkPlace "church" "in" ;
+      Cinema = mkPlace "cinema" "at" ;
+      Hospital = mkPlace "hospital" "in" ;
+      Hotel = mkPlace "hotel" "in" ;
+      Museum = mkPlace "museum" "in" ;
+      Park = mkPlace "park" "in" ;
+      Restaurant = mkPlace "restaurant" "in" ;
+      School = mkPlace "school" "at" ;
+      Shop = mkPlace "shop" "in" ;
+      Station = mkPlace "station" "at" ;
+      Theatre = mkPlace "theatre" "at" ;
+      Toilet = mkPlace "toilet" "in" ;
+      University = mkPlace "university" "at" ;
+
+ +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") ;
+      SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
+
+ +Nationalities +
+      Belgian = mkA "Belgian" ;
+      Belgium = mkNP (mkPN "Belgium") ;
+      English = mkNat "English" "England" ;
+      Finnish = mkNat "Finnish" "Finland" ;
+      Flemish = mkNP (mkPN "Flemish") ;
+      French = mkNat "French" "France" ; 
+      Italian = mkNat "Italian" "Italy" ;
+      Romanian = mkNat "Romanian" "Romania" ;
+      Swedish = mkNat "Swedish" "Sweden" ;
+
+ +Actions: the predication patterns are very often language-dependent. +
+      AHasAge p num = mkCl p.name (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 "room")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ;
+      AHasTable p num = mkCl p.name have_V2 
+        (mkNP (mkNP a_Det (mkN "table")) (SyntaxEng.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 IrregEng.know_V ;
+      ALike p item = mkCl p.name (mkV2 (mkV "like")) item ;
+      ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxEng.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") ;
+      ASpeak p lang = mkCl p.name  (mkV2 IrregEng.speak_V) lang ;
+      AThirsty p = mkCl p.name (mkA "thirsty") ;
+      ATired p = mkCl p.name (mkA "tired") ;
+      AUnderstand p = mkCl p.name IrregEng.understand_V ;
+      AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ;
+      AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregEng.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 IrregEng.cost_V)) ; 
+      ItCost item price = mkCl item (mkV2 IrregEng.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 ; +
+      PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
+      PSeeYouPlace 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 sing (mkN "wife") ;
+      Husband = xOf sing (mkN "husband") ;
+      Son = xOf sing (mkN "son") ;
+      Daughter = xOf sing (mkN "daughter") ;
+      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" ;
+
+ +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 (SyntaxEng.mkAdv on_Prep day) 
+          (SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
+  
+      mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> 
+        mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
+  
+      open_Adv = P.mkAdv "open" ;
+      closed_Adv = P.mkAdv "closed" ;
+  
+      xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> 
+        relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
+  
+      nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
+  
+  }
+
+ + + diff --git a/examples/phrasebook/Makefile b/examples/phrasebook/Makefile index 8254c5f40..ee9d1e132 100644 --- a/examples/phrasebook/Makefile +++ b/examples/phrasebook/Makefile @@ -11,11 +11,16 @@ koe: gf -make PhrasebookEng.gf PhrasebookFre.gf DisambPhrasebookEng.gf missing: - echo "pg -missing | wf -file=missing.txt" | gf Phrasebook???.gf + echo "pg -missing | wf -file=missing.txt" | gf Phrasebook.pgf +#PhrasebookBul.gf PhrasebookCat.gf PhrasebookDan.gf PhrasebookDut.gf PhrasebookNor.gf PhrasebookPol.gf PhrasebookRus.gf PhrasebookSpa.gf + doc: cat Sentences.gf Words.gf >Ontology.gf gfdoc Ontology.gf - txt2tags -thtml phrasebook.txt rm -f Ontology.gf + cat SentencesI.gf WordsEng.gf >Implementation.gf + gfdoc Implementation.gf + txt2tags -thtml phrasebook.txt + rm -f Ontology.gf Implementation.gf diff --git a/examples/phrasebook/Ontology.html b/examples/phrasebook/Ontology.html index 37c2019d1..469da449c 100644 --- a/examples/phrasebook/Ontology.html +++ b/examples/phrasebook/Ontology.html @@ -43,7 +43,7 @@ are defined in other modules. Day ; -- weekday type e.g. "Friday" Date ; -- definite date e.g. "on Friday" Name ; -- name of person e.g. "NN" - -- Numeral ; -- number expression 1 .. 999,999 e.g. "twenty" + Number ; -- number expression 1 .. 999,999 e.g. "twenty" Many of the categories are accessible as Phrases, i.e. as translation units. @@ -55,7 +55,7 @@ Many of the categories are accessible as Phrases, i.e. as translation units. PObject : Object -> Phrase ; PKind : Kind -> Phrase ; PQuality : Quality -> Phrase ; - PNumeral : Numeral -> Phrase ; + PNumber : Number -> Phrase ; PPlace : Place -> Phrase ; PPlaceKind : PlaceKind-> Phrase ; PCurrency : Currency -> Phrase ; @@ -91,7 +91,7 @@ This is the way to build propositions about persons. Here are some general syntactic constructions.
       ObjItem   : Item -> Object ;                 -- this pizza
-      ObjNumber : Numeral -> Kind -> Object ;      -- five pizzas
+      ObjNumber : Number -> Kind -> Object ;       -- five pizzas
       ObjIndef  : Kind -> Object ;                 -- a pizza
   
       SuchKind : Quality -> Kind -> Kind ;         -- Italian pizza
@@ -105,7 +105,7 @@ Determiners.
       This, That, These, Those : Kind -> Item ;    -- this pizza,...,those pizzas
       The, Thes : Kind -> Item ;                   -- the pizza, the pizzas
   
-      AmountCurrency : Numeral -> Currency -> Price ;  -- five euros
+      AmountCurrency : Number -> Currency -> Price ;  -- five euros
   
       ThePlace : PlaceKind -> Place ;                  -- the bar
   
@@ -125,6 +125,10 @@ Determiners.
       NameNN     : Name ;                       -- the name "NN"
 
+
+      NNumeral   : Numeral -> Number ;          -- numeral in words, e.g. "twenty"
+
+ Actions are typically language-dependent, not only lexically but also structurally. However, these ones are mostly functorial.
@@ -218,13 +222,19 @@ nationalities, countries, languages, citizenships
 Actions (which can be expressed by different structures in different languages).
 Notice that also negations and questions can be formed from these.
 
+      AHasAge     : Person -> Number -> Action ;    -- I am seventy years
+      AHasChildren: Person -> Number -> Action ;    -- I have six children
       AHasName    : Person -> Name -> Action ;      -- my name is Bond
+      AHasRoom    : Person -> Number -> Action ;    -- you have a room for five persons
+      AHasTable   : Person -> Number -> Action ;    -- you have a table for five persons
       AHungry     : Person -> Action ;              -- I am hungry
       AIll        : Person -> Action ;              -- I am ill
       AKnow       : Person -> Action ;              -- I (don't) know
       ALike       : Person -> Item     -> Action ;  -- I like this pizza
       ALive       : Person -> Country  -> Action ;  -- I live in Sweden
       ALove       : Person -> Person   -> Action ;  -- I love you
+      AMarried    : Person -> Action ;              -- I am married
+      AReady      : Person -> Action ;              -- I am ready
       AScared     : Person -> Action ;              -- I am scared
       ASpeak      : Person -> Language -> Action ;  -- I speak Finnish
       AThirsty    : Person -> Action ;              -- I am thirsty
@@ -236,7 +246,10 @@ Notice that also negations and questions can be formed from these.
 
 miscellaneous phrases
 
+      QWhatAge       : Person -> Question ;            -- how many years are you
       QWhatName      : Person -> Question ;            -- what is your name
+      HowMuchCost    : Item -> Question ;              -- how much does the pizza cost
+      ItCost         : Item -> Price -> Proposition ;  -- the pizza costs five euros
   
       PropOpen       : Place -> Proposition ;          -- the museum is open
       PropClosed     : Place -> Proposition ;          -- the museum is closed
@@ -245,14 +258,23 @@ miscellaneous phrases
       PropOpenDay    : Place -> Day  -> Proposition ;  -- the museum is open on Mondays
       PropClosedDay  : Place -> Day  -> Proposition ;  -- the museum is closed on Mondays
   
-      HowMuchCost    : Item -> Question ;              -- how much does the pizza cost
-      ItCost         : Item -> Price -> Proposition ;  -- the pizza costs five euros
+      PSeeYou      : Date -> Phrase ;           -- see you on Monday
+      PSeeYouPlace : Place -> Date -> Phrase ;  -- see you in the bar on Monday
+
+ +family relations +
+      Wife, Husband  : Person -> Person ;              -- my wife, your husband
+      Son, Daughter  : Person -> Person ;              -- my son, your husband
+      Children       : Person -> Person ;              -- my children 
 
week days
       Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
   
+      Tomorrow : Date ;
+  
   }
 
diff --git a/examples/phrasebook/PhrasebookBul.gf b/examples/phrasebook/PhrasebookBul.gf index fbdcb3ea8..312b0522f 100644 --- a/examples/phrasebook/PhrasebookBul.gf +++ b/examples/phrasebook/PhrasebookBul.gf @@ -7,6 +7,6 @@ concrete PhrasebookBul of Phrasebook = Prelude in { lin - PGreeting g = lin Text (ss g.s) ; + PGreeting g = lin Text g ; } diff --git a/examples/phrasebook/PhrasebookPol.gf b/examples/phrasebook/PhrasebookPol.gf index f0cb79e0f..8b1c29dee 100644 --- a/examples/phrasebook/PhrasebookPol.gf +++ b/examples/phrasebook/PhrasebookPol.gf @@ -7,6 +7,6 @@ concrete PhrasebookPol of Phrasebook = Prelude in { lin - PGreeting g = lin Text (ss g.s) ; + PGreeting g = lin Text g ; } diff --git a/examples/phrasebook/PhrasebookRus.gf b/examples/phrasebook/PhrasebookRus.gf index 2432614ad..7afe0204f 100644 --- a/examples/phrasebook/PhrasebookRus.gf +++ b/examples/phrasebook/PhrasebookRus.gf @@ -7,6 +7,6 @@ concrete PhrasebookRus of Phrasebook = Prelude in { lin - PGreeting g = lin Text (ss g.s) ; + PGreeting g = lin Text g ; } diff --git a/examples/phrasebook/Sentences.gf b/examples/phrasebook/Sentences.gf index 773c823a6..89ada1095 100644 --- a/examples/phrasebook/Sentences.gf +++ b/examples/phrasebook/Sentences.gf @@ -36,7 +36,7 @@ abstract Sentences = Numeral ** { Day ; -- weekday type e.g. "Friday" Date ; -- definite date e.g. "on Friday" Name ; -- name of person e.g. "NN" - -- Numeral ; -- number expression 1 .. 999,999 e.g. "twenty" + Number ; -- number expression 1 .. 999,999 e.g. "twenty" -- Many of the categories are accessible as Phrases, i.e. as translation units. @@ -47,7 +47,7 @@ abstract Sentences = Numeral ** { PObject : Object -> Phrase ; PKind : Kind -> Phrase ; PQuality : Quality -> Phrase ; - PNumeral : Numeral -> Phrase ; + PNumber : Number -> Phrase ; PPlace : Place -> Phrase ; PPlaceKind : PlaceKind-> Phrase ; PCurrency : Currency -> Phrase ; @@ -79,7 +79,7 @@ abstract Sentences = Numeral ** { -- Here are some general syntactic constructions. ObjItem : Item -> Object ; -- this pizza - ObjNumber : Numeral -> Kind -> Object ; -- five pizzas + ObjNumber : Number -> Kind -> Object ; -- five pizzas ObjIndef : Kind -> Object ; -- a pizza SuchKind : Quality -> Kind -> Kind ; -- Italian pizza @@ -92,7 +92,7 @@ abstract Sentences = Numeral ** { This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas The, Thes : Kind -> Item ; -- the pizza, the pizzas - AmountCurrency : Numeral -> Currency -> Price ; -- five euros + AmountCurrency : Number -> Currency -> Price ; -- five euros ThePlace : PlaceKind -> Place ; -- the bar @@ -113,6 +113,8 @@ abstract Sentences = Numeral ** { ---- NameString : String -> Name ; ---- creates ambiguities with all words --% + NNumeral : Numeral -> Number ; -- numeral in words, e.g. "twenty" + -- Actions are typically language-dependent, not only lexically but also -- structurally. However, these ones are mostly functorial. diff --git a/examples/phrasebook/SentencesCat.gf b/examples/phrasebook/SentencesCat.gf index e57f0c129..c26d33748 100644 --- a/examples/phrasebook/SentencesCat.gf +++ b/examples/phrasebook/SentencesCat.gf @@ -1,12 +1,13 @@ concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [ - IFemale, YouFamFemale, YouPolFemale + PersonName ---- stack overflow + ,IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale ] with (Syntax = SyntaxCat), (Symbolic = SymbolicCat), (Lexicon = LexiconCat) ** open SyntaxCat, ExtraCat, Prelude in { - +{- lin IFemale = {name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; @@ -20,6 +21,7 @@ concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [ {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; YouPolMale = {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ; - +-} } + diff --git a/examples/phrasebook/SentencesFin.gf b/examples/phrasebook/SentencesFin.gf index 43ed440bd..625890046 100644 --- a/examples/phrasebook/SentencesFin.gf +++ b/examples/phrasebook/SentencesFin.gf @@ -1,4 +1,7 @@ -concrete SentencesFin of Sentences = NumeralFin ** SentencesI - [Is,NameNN] with +concrete SentencesFin of Sentences = NumeralFin ** SentencesI - + [Is,NameNN, + IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale + ] with (Syntax = SyntaxFin), (Symbolic = SymbolicFin), (Lexicon = LexiconFin) ** open SyntaxFin, ExtraFin, (P = ParadigmsFin), (V = VerbFin) in { @@ -6,4 +9,11 @@ concrete SentencesFin of Sentences = NumeralFin ** SentencesI - [Is,NameNN] with lin Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista NameNN = mkNP (P.mkPN (P.mkN "NN" "NN:iä")) ; - } ; + + IMale, IFemale = + {name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; + YouFamMale, YouFamFemale = + {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; + YouPolMale, YouPolFemale = + {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron}; + } diff --git a/examples/phrasebook/SentencesI.gf b/examples/phrasebook/SentencesI.gf index ba85af671..af9548bc1 100644 --- a/examples/phrasebook/SentencesI.gf +++ b/examples/phrasebook/SentencesI.gf @@ -1,3 +1,7 @@ +--1 Implementation of MOLTO Phrasebook + +--2 The functor for (mostly) common structures + incomplete concrete SentencesI of Sentences = Numeral ** open Syntax, @@ -15,19 +19,20 @@ incomplete concrete SentencesI of Sentences = Numeral ** Quality = AP ; Property = A ; Object = NP ; - Place = {name : NP ; at : Adv ; to : Adv} ; - PlaceKind = {name : CN ; at : Prep ; to : Prep} ; + Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv} ; + PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ; Currency = CN ; Price = NP ; Action = Cl ; - Person = {name : NP ; isPron : Bool ; poss : Quant} ; - Nationality = {lang : NP ; prop : A ; country : NP} ; + Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ; + Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ; Language = NP ; Citizenship = A ; Country = NP ; - Day = {name : NP ; point : Adv ; habitual : Adv} ; + Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ; Date = Adv ; Name = NP ; + Number = Card ; lin PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.' PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?' @@ -35,7 +40,7 @@ incomplete concrete SentencesI of Sentences = Numeral ** PObject x = mkPhrase (mkUtt x) ; PKind x = mkPhrase (mkUtt x) ; PQuality x = mkPhrase (mkUtt x) ; - PNumeral x = mkPhrase (mkUtt (mkCard (x ** {lock_Numeral = <>}))) ; + PNumber x = mkPhrase (mkUtt x) ; PPlace x = mkPhrase (mkUtt x.name) ; PPlaceKind x = mkPhrase (mkUtt x.name) ; PCurrency x = mkPhrase (mkUtt x) ; @@ -59,10 +64,10 @@ incomplete concrete SentencesI of Sentences = Numeral ** PropAction a = a ; - AmountCurrency num curr = mkNP curr ; + AmountCurrency num curr = mkNP num curr ; ObjItem i = i ; - ObjNumber n k = mkNP k ; + ObjNumber n k = mkNP n k ; ObjIndef k = mkNP a_Quant k ; This kind = mkNP this_Quant kind ; @@ -97,17 +102,73 @@ incomplete concrete SentencesI of Sentences = Numeral ** PersonName n = {name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used ----- NameString s = symb s ; +---- NameString s = symb s ; --% NameNN = symb "NN" ; + NNumeral n = mkCard ; + AHave p kind = mkCl p.name have_V2 (mkNP kind) ; ACitizen p n = mkCl p.name n ; ABePlace p place = mkCl p.name place.at ; oper + +-- These operations are used internally in Sentences. + mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p -> {name = mkNP p ; isPron = True ; poss = mkQuant p} ; +-- These are used in Words for each language. + + NPNationality : Type = {lang : NP ; country : NP ; prop : A} ; + + mkNPNationality : NP -> NP -> A -> NPNationality = \la,co,pro -> + {lang = la ; + country = co ; + prop = pro + } ; + + NPDay : Type = {name : NP ; point : Adv ; habitual : Adv} ; + + mkNPDay : NP -> Adv -> Adv -> NPDay = \d,p,h -> + {name = d ; + point = p ; + habitual = h + } ; + + NPPlace : Type = {name : NP ; at : Adv ; to : Adv} ; + CNPlace : Type = {name : CN ; at : Prep ; to : Prep} ; + + mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> { + name = p ; + at = i ; + to = t + } ; + + NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ; + + relativePerson : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson = + \n,x,f,p -> + let num = if_then_else Num n plNum sgNum in { + name = case p.isPron of { + True => mkNP p.poss num x ; + _ => f num p.name x + } ; + isPron = False ; + poss = mkQuant he_Pron -- not used because not pron + } ; + + GNumber : PType = Bool ; + sing = False ; plur = True ; + +-- for languages without GenNP, use "the wife of p" + mkRelative : Bool -> CN -> NPPerson -> NPPerson = \n,x,p -> + relativePerson n x + (\a,b,c -> mkNP (mkNP the_Quant a c) (Syntax.mkAdv possess_Prep b)) p ; + +-- for languages with GenNP, use "p's wife" +-- relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ; + } diff --git a/examples/phrasebook/SentencesRus.gf b/examples/phrasebook/SentencesRus.gf index d574aeeb3..9f3c8adaf 100644 --- a/examples/phrasebook/SentencesRus.gf +++ b/examples/phrasebook/SentencesRus.gf @@ -1,10 +1,6 @@ -concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [NameNN, Today] with +concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [ + Today, NameNN -- not defined in lib + ] with (Syntax = SyntaxRus), ---- (Symbolic = SymbolicRus), - (Lexicon = LexiconRus) ** open ParadigmsRus in { - -flags coding = utf8 ; - -lin NameNN = mkNP (mkPN "нн" masculine animate) ; - -} +-- (Symbolic = SymbolicRus), + (Lexicon = LexiconRus) ; diff --git a/examples/phrasebook/SentencesSpa.gf b/examples/phrasebook/SentencesSpa.gf index c6d684dd5..90f22a3e0 100644 --- a/examples/phrasebook/SentencesSpa.gf +++ b/examples/phrasebook/SentencesSpa.gf @@ -23,3 +23,4 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [ } + diff --git a/examples/phrasebook/Words.gf b/examples/phrasebook/Words.gf index a61cb48c3..aaafb1037 100644 --- a/examples/phrasebook/Words.gf +++ b/examples/phrasebook/Words.gf @@ -78,9 +78,11 @@ abstract Words = Sentences ** { -- Actions (which can be expressed by different structures in different languages). -- Notice that also negations and questions can be formed from these. - AHasAge : Person -> Numeral -> Action ; -- I am seventy years - AHasChildren: Person -> Numeral -> Action ; -- I have six children + AHasAge : Person -> Number -> Action ; -- I am seventy years + AHasChildren: Person -> Number -> Action ; -- I have six children AHasName : Person -> Name -> Action ; -- my name is Bond + AHasRoom : Person -> Number -> Action ; -- you have a room for five persons + AHasTable : Person -> Number -> Action ; -- you have a table for five persons AHungry : Person -> Action ; -- I am hungry AIll : Person -> Action ; -- I am ill AKnow : Person -> Action ; -- I (don't) know @@ -88,6 +90,7 @@ abstract Words = Sentences ** { ALive : Person -> Country -> Action ; -- I live in Sweden ALove : Person -> Person -> Action ; -- I love you AMarried : Person -> Action ; -- I am married + AReady : Person -> Action ; -- I am ready AScared : Person -> Action ; -- I am scared ASpeak : Person -> Language -> Action ; -- I speak Finnish AThirsty : Person -> Action ; -- I am thirsty @@ -100,6 +103,8 @@ abstract Words = Sentences ** { QWhatAge : Person -> Question ; -- how many years are you QWhatName : Person -> Question ; -- what is your name + HowMuchCost : Item -> Question ; -- how much does the pizza cost + ItCost : Item -> Price -> Proposition ; -- the pizza costs five euros PropOpen : Place -> Proposition ; -- the museum is open PropClosed : Place -> Proposition ; -- the museum is closed @@ -108,8 +113,10 @@ abstract Words = Sentences ** { PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays - HowMuchCost : Item -> Question ; -- how much does the pizza cost - ItCost : Item -> Price -> Proposition ; -- the pizza costs five euros + PSeeYou : Date -> Phrase ; -- see you on Monday + PSeeYouPlace : Place -> Date -> Phrase ; -- see you in the bar on Monday + +-- family relations Wife, Husband : Person -> Person ; -- my wife, your husband Son, Daughter : Person -> Person ; -- my son, your husband @@ -119,4 +126,6 @@ abstract Words = Sentences ** { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ; + Tomorrow : Date ; + } diff --git a/examples/phrasebook/WordsBul.gf b/examples/phrasebook/WordsBul.gf index f580af610..9a4408c04 100644 --- a/examples/phrasebook/WordsBul.gf +++ b/examples/phrasebook/WordsBul.gf @@ -1,134 +1,176 @@ --- (c) 2009 Aarne Ranta under LGPL +--2 Implementations of Words, with English as example concrete WordsBul of Words = SentencesBul ** - open SyntaxBul, ParadigmsBul, (L = LexiconBul), Prelude in { - + open + SyntaxBul, + ParadigmsBul, + (L = LexiconBul), + (P = ParadigmsBul), + ExtraBul, + Prelude in { lin --- kinds of food --- +-- 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 ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; +-- 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") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "tea") ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- properties +-- Properties; many of them are in the resource lexicon, others can be built by $mkA$. Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Boring = mkA "boring" ; +-- Cheap = mkA "cheap" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "delicious" ; +-- Expensive = mkA "expensive" ; +-- Fresh = mkA "fresh" ; Good = L.good_A ; +-- Suspect = mkA "suspect" ; Warm = L.warm_A ; --- --- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- --- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- --- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- --- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxBul.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; - AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- 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" ; +-- Bar = mkPlace "bar" "in" ; +-- Church = mkPlace "church" "in" ; +-- Cinema = mkPlace "cinema" "at" ; +-- Hospital = mkPlace "hospital" "in" ; +-- Hotel = mkPlace "hotel" "in" ; +-- Museum = mkPlace "museum" "in" ; +-- Park = mkPlace "park" "in" ; +-- Restaurant = mkPlace "restaurant" "in" ; +-- School = mkPlace "school" "at" ; +-- Shop = mkPlace "shop" "in" ; +-- Station = mkPlace "station" "at" ; +-- Theatre = mkPlace "theatre" "at" ; +-- Toilet = mkPlace "toilet" "in" ; +-- University = mkPlace "university" "at" ; + +-- 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") ; +-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; + +-- Nationalities + +-- Belgian = mkA "Belgian" ; +-- Belgium = mkNP (mkPN "Belgium") ; +-- English = mkNat "English" "England" ; +-- Finnish = mkNat "Finnish" "Finland" ; +-- Flemish = mkNP (mkPN "Flemish") ; +-- French = mkNat "French" "France" ; +-- Italian = mkNat "Italian" "Italy" ; +-- Romanian = mkNat "Romanian" "Romania" ; +-- Swedish = mkNat "Swedish" "Sweden" ; + +-- Actions: the predication patterns are very often language-dependent. + +-- AHasAge p num = mkCl p.name (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 "room")) (SyntaxBul.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxBul.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 IrregBul.know_V ; +-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxBul.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") ; +-- ASpeak p lang = mkCl p.name (mkV2 IrregBul.speak_V) lang ; +-- AThirsty p = mkCl p.name (mkA "thirsty") ; +-- ATired p = mkCl p.name (mkA "tired") ; +-- AUnderstand p = mkCl p.name IrregBul.understand_V ; +-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregBul.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- 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 IrregBul.cost_V)) ; +-- ItCost item price = mkCl item (mkV2 IrregBul.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 ; + +-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace 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 sing (mkN "wife") ; +-- Husband = xOf sing (mkN "husband") ; +-- Son = xOf sing (mkN "son") ; +-- Daughter = xOf sing (mkN "daughter") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxBul.mkAdv on_Prep day ; --- habitual = SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxBul.mkAdv possess_Prep p.name) --- } ; --- } + +-- 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" ; + +-- 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 (SyntaxBul.mkAdv on_Prep day) +-- (SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ; + +-- open_Adv = P.mkAdv "open" ; +-- closed_Adv = P.mkAdv "closed" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + +-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; + +--} } diff --git a/examples/phrasebook/WordsCat.gf b/examples/phrasebook/WordsCat.gf index d6f2f6e21..4a9f271d2 100644 --- a/examples/phrasebook/WordsCat.gf +++ b/examples/phrasebook/WordsCat.gf @@ -1,4 +1,4 @@ --- (c) 2009 Aarne Ranta and Olga Caprotti under LGPL +-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL concrete WordsCat of Words = SentencesCat ** open SyntaxCat, @@ -6,131 +6,169 @@ concrete WordsCat of Words = SentencesCat ** open (E = ExtraCat), (L = LexiconCat), (P = ParadigmsCat), - ParadigmsCat in { + ParadigmsCat, + Prelude in { + +lin - lin - -- kinds Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "formaggio") ; --- Coffee = mkCN (mkN "caffè") ; +-- Cheese = mkCN (mkN "formaggio") ; +-- Chicken = mkCN (mkN "pollo") ; +-- Coffee = mkCN (mkN "caffè") ; Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "carne" feminine) ; Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "tè") ; +-- Tea = mkCN (mkN "tè") ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; -- properties Bad = L.bad_A ; --- Boring = mkA "noioso" ; +-- Boring = mkA "noioso" ; +-- Cheap = let c = "a buon mercato" in mkA c c c c c ; ---- Cold = L.cold_A ; --- Delicious = mkA "delizioso" ; --- Expensive = mkA "caro" ; --- Fresh = mkA "fresco" ; +-- Delicious = mkA "delizioso" ; +-- Expensive = mkA "caro" ; +-- Fresh = mkA "fresco" ; Good = L.good_A ; Warm = L.warm_A ; --- --- -- places --- --- Airport = mkPlace (mkN "aeroporto") dative ; --- Bar = mkPlace (mkN "bar") P.in_Prep ; --- Church = mkPlace (mkN "chiesa") P.in_Prep ; --- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; --- Museum = mkPlace (mkN "museo") P.in_Prep ; --- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; --- Station = mkPlace (mkN "stazione" feminine) dative ; --- Toilet = mkPlace (mkN "bagno") P.in_Prep ; --- --- -- currencies --- --- DanishCrown = mkCN (mkA "danese") (mkN "corona") ; --- Dollar = mkCN (mkN "dollar") ; --- Euro = mkCN (mkN "euro" "euro" masculine) ; --- Lei = mkCN (mkN "lei") ; ---- ? --- --- -- nationalities --- --- Belgian = mkA "belgo" ; --- Belgium = mkNP (mkPN "Belgio") ; --- English = mkNat "inglese" "Inghilterra" ; --- Finnish = mkNat "finlandese" "Finlandia" ; --- Flemish = mkNP (mkPN "fiammingo") ; --- French = mkNat "francese" "Francia" ; --- Italian = mkNat "italiano" "Italia" ; --- Romanian = mkNat "rumeno" "Romania" ; --- Swedish = mkNat "svedese" "Svezia" ; --- --- -- actions --- --- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; --- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; --- AIll p = mkCl p.name (mkA "malato") ; --- 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")) (SyntaxCat.mkAdv P.in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; --- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; --- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; --- ATired p = mkCl p.name (mkA "stanco") ; --- AUnderstand p = mkCl p.name (mkV "capire") ; --- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) 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")))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; --- --- -- week days --- --- Monday = mkDay "lunedì" ; --- Tuesday = mkDay "martedì" ; --- Wednesday = mkDay "mercoledì" ; --- Thursday = mkDay "giovedì" ; --- Friday = mkDay "venerdì" ; --- Saturday = mkDay "sabato" ; --- Sunday = mkDay "domenica" ; --- --- -- auxiliaries --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point, -- = ParadigmsCat.mkAdv d ; --- habitual = ParadigmsCat.mkAdv ("il" ++ d) ; ---- ? --- } ; --- --- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = i ; --- to = dative --- } ; --- --- open_A = mkA "aperto" ; --- closed_A = mkA "chiuso" ; --- --- --- } +-- Suspect = mkA "sospetto" ; + +-- places + +-- Airport = mkPlace (mkN "aeroporto") dative ; +-- Bar = mkPlace (mkN "bar") P.in_Prep ; +-- Church = mkPlace (mkN "chiesa") P.in_Prep ; +-- Cinema = mkPlace (mkN "cinema") P.in_Prep ; +-- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; +-- Hotel = mkPlace (mkN "albergo") P.in_Prep ; +-- Museum = mkPlace (mkN "museo") P.in_Prep ; +-- Park = mkPlace (mkN "parco") P.in_Prep ; +-- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; +-- School = mkPlace (mkN "scuola") P.in_Prep ; +-- Shop = mkPlace (mkN "negozio") P.in_Prep ; +-- Station = mkPlace (mkN "stazione" feminine) dative ; +-- Theatre = mkPlace (mkN "teatro") P.in_Prep ; +-- Toilet = mkPlace (mkN "bagno") P.in_Prep ; +-- University = mkPlace (mkN "università") dative ; + +-- currencies + +-- DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ; +-- Dollar = mkCN (mkN "dollar") ; +-- Euro = mkCN (mkN "euro" "euro" masculine) ; +-- Lei = mkCN (mkN "lei") ; ---- ? +-- SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ; + +-- nationalities + +-- Belgian = mkA "belgo" ; +-- Belgium = mkNP (mkPN "Belgio") ; +-- English = mkNat "inglese" "Inghilterra" ; +-- Finnish = mkNat "finlandese" "Finlandia" ; +-- Flemish = mkNP (mkPN "fiammingo") ; +-- French = mkNat "francese" "Francia" ; +-- Italian = mkNat "italiano" "Italia" ; +-- Romanian = mkNat "rumeno" "Romania" ; +-- Swedish = mkNat "svedese" "Svezia" ; + +-- 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) ; +-- AHasRoom p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "camera")) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "tavolo")) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ; +-- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; +-- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; +-- AIll p = mkCl p.name (mkA "malato") ; +-- 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")) (SyntaxCat.mkAdv P.in_Prep co)) ; +-- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; +-- AMarried p = mkCl p.name (mkA "sposato") ; +-- AReady p = mkCl p.name (mkA "pronto") ; +-- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; +-- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; +-- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; +-- ATired p = mkCl p.name (mkA "stanco") ; +-- AUnderstand p = mkCl p.name (mkV "capire") ; +-- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) 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) ; + +-- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; +-- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; + +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + +-- PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p d = +-- mkText (lin Text (ss ("arrivederci"))) +-- (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 "sposa") ; +-- Husband = xOf sing (mkN "marito") ; +-- Son = xOf sing (mkN "figlio") ; +-- Daughter = xOf sing (mkN "figlia") ; +-- Children = xOf plur L.child_N ; + +-- week days + +-- Monday = mkDay "lunedì" ; +-- Tuesday = mkDay "martedì" ; +-- Wednesday = mkDay "mercoledì" ; +-- Thursday = mkDay "giovedì" ; +-- Friday = mkDay "venerdì" ; +-- Saturday = mkDay "sabato" ; +-- Sunday = mkDay "domenica" ; + +-- Tomorrow = P.mkAdv "domani" ; + +-- 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 (P.mkAdv ("il" ++ d)) (P.mkAdv ("il" ++ d)) ; ---- ? + +-- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN p) i dative ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; + +-- open_A = mkA "aperto" ; +-- closed_A = mkA "chiuso" ; + + +--} } diff --git a/examples/phrasebook/WordsDan.gf b/examples/phrasebook/WordsDan.gf index 0e5d9a140..1dd812151 100644 --- a/examples/phrasebook/WordsDan.gf +++ b/examples/phrasebook/WordsDan.gf @@ -1,134 +1,167 @@ -- (c) 2009 Aarne Ranta under LGPL concrete WordsDan of Words = SentencesDan ** - open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), Prelude in { + open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), ExtraDan, Prelude in { lin - + -- kinds of food Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; --- Fish = mkCN L.fish_N ; --- Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Cheese = mkCN (mkN "ost") ; +-- Chicken = mkCN (mkN "kyckling") ; +-- Coffee = mkCN (mkN "kaffe" neutrum) ; + Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "kött" "kött") ; + Milk = mkCN L.milk_N ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "te" neutrum) ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; -- properties --- + Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Cheap = mkA "billig" ; +-- Boring = mkA "tråkig" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "läcker" ; +-- Expensive = mkA "dyr" ; +-- Fresh = mkA "färsk" ; Good = L.good_A ; +-- Suspect = mkA "suspekt" "suspekt" ; Warm = L.warm_A ; --- + -- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- + +-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; +-- Bar = mkPlace (mkN "bar" "barer") "i" ; +-- Church = mkPlace (mkN "kyrka") "i" ; +-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ? +-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; +-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ; +-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; +-- Park = mkPlace (mkN "park" "parker") "i" ; +-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; +-- Shop = mkPlace (mkN "affär" "affär") "i" ; +-- School = mkPlace (mkN "skola") "på" ; +-- Station = mkPlace (mkN "station" "stationer") "på" ; +-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ; +-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; +-- University = mkPlace (mkN "universitet" "universitet") "på" ; + -- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- + +-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ; +-- Dollar = mkCN (mkN "dollar" "dollar") ; +-- Euro = mkCN (mkN "euro" "euro") ; +-- Lei = mkCN (mkN "lei" "lei") ; +-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ; + -- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- + +-- Belgian = mkA "belgisk" ; +-- Belgium = mkNP (mkPN "Belgien") ; +-- English = mkNat "engelsk" "England" ; +-- Finnish = mkNat "finsk" "Finland" ; +-- Flemish = mkNP (mkPN "flamländska") ; +-- French = mkNat "fransk" "Frankrike" ; +-- Italian = mkNat "italiensk" "Italien" ; +-- Romanian = mkNat "rumänsk" "Rumänien" ; +-- Swedish = mkNat "svensk" "Sverige" ; + -- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; --- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ; +-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ; + 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 "rum" "rum")) +-- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "bord" "bord")) +-- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHungry p = mkCl p.name (mkA "hungrig") ; +-- AIll p = mkCl p.name (mkA "sjuk") ; +-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; +-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ; +-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; +-- AMarried p = mkCl p.name (mkA "gift") ; +-- AReady p = mkCl p.name (mkA "färdig") ; +-- AScared p = mkCl p.name (mkA "rädd") ; +-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; +-- AThirsty p = mkCl p.name (mkA "törstig") ; +-- ATired p = mkCl p.name (mkA "trött") ; +-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; +-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ; +-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; +-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; +-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) 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 ("vi ses"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p d = +-- mkText (lin Text (ss ("vi ses"))) +-- (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 sing (mkN "fru" "fruar") ; +-- Husband = xOf sing L.man_N ; +-- Son = xOf sing (mkN "son" "söner") ; +-- Daughter = xOf sing (mkN "dotter" "döttrar") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxDan.mkAdv on_Prep day ; --- habitual = SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxDan.mkAdv possess_Prep p.name) --- } ; --- } + +-- Monday = mkDay "måndag" ; +-- Tuesday = mkDay "tisdag" ; +-- Wednesday = mkDay "onsdag" ; +-- Thursday = mkDay "torsdag" ; +-- Friday = mkDay "fredag" ; +-- Saturday = mkDay "lördag" ; +-- Sunday = mkDay "söndag" ; + +-- Tomorrow = ParadigmsDan.mkAdv "imorgon" ; + +-- oper +-- mkNat : Str -> Str -> NPNationality = \nat,co -> +-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ; + +-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> +-- let day = mkNP (mkPN d) in +-- mkNPDay day (SyntaxDan.mkAdv on_Prep day) +-- (SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ; + +-- open_A = mkA "öppen" "öppet" ; +-- closed_A = mkA "stängd" "stängt" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + + +--} } diff --git a/examples/phrasebook/WordsDut.gf b/examples/phrasebook/WordsDut.gf index 5b74f7952..758f12f5b 100644 --- a/examples/phrasebook/WordsDut.gf +++ b/examples/phrasebook/WordsDut.gf @@ -1,134 +1,167 @@ -- (c) 2009 Aarne Ranta under LGPL concrete WordsDut of Words = SentencesDut ** - open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), Prelude in { + open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), ExtraDut, Prelude in { lin - + -- kinds of food - + Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; +-- Cheese = mkCN (mkN "ost") ; +-- Chicken = mkCN (mkN "kyckling") ; +-- Coffee = mkCN (mkN "kaffe" neutrum) ; Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "kött" "kött") ; Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "te" neutrum) ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; -- properties Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Cheap = mkA "billig" ; +-- Boring = mkA "tråkig" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "läcker" ; +-- Expensive = mkA "dyr" ; +-- Fresh = mkA "färsk" ; Good = L.good_A ; +-- Suspect = mkA "suspekt" "suspekt" ; Warm = L.warm_A ; --- + -- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- + +-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; +-- Bar = mkPlace (mkN "bar" "barer") "i" ; +-- Church = mkPlace (mkN "kyrka") "i" ; +-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ? +-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; +-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ; +-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; +-- Park = mkPlace (mkN "park" "parker") "i" ; +-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; +-- Shop = mkPlace (mkN "affär" "affär") "i" ; +-- School = mkPlace (mkN "skola") "på" ; +-- Station = mkPlace (mkN "station" "stationer") "på" ; +-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ; +-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; +-- University = mkPlace (mkN "universitet" "universitet") "på" ; + -- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- + +-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ; +-- Dollar = mkCN (mkN "dollar" "dollar") ; +-- Euro = mkCN (mkN "euro" "euro") ; +-- Lei = mkCN (mkN "lei" "lei") ; +-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ; + -- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- + +-- Belgian = mkA "belgisk" ; +-- Belgium = mkNP (mkPN "Belgien") ; +-- English = mkNat "engelsk" "England" ; +-- Finnish = mkNat "finsk" "Finland" ; +-- Flemish = mkNP (mkPN "flamländska") ; +-- French = mkNat "fransk" "Frankrike" ; +-- Italian = mkNat "italiensk" "Italien" ; +-- Romanian = mkNat "rumänsk" "Rumänien" ; +-- Swedish = mkNat "svensk" "Sverige" ; + -- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDut.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; --- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ; +-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ; + 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 "rum" "rum")) +-- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "bord" "bord")) +-- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHungry p = mkCl p.name (mkA "hungrig") ; +-- AIll p = mkCl p.name (mkA "sjuk") ; +-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; +-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDut.mkAdv in_Prep co)) ; +-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; +-- AMarried p = mkCl p.name (mkA "gift") ; +-- AReady p = mkCl p.name (mkA "färdig") ; +-- AScared p = mkCl p.name (mkA "rädd") ; +-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; +-- AThirsty p = mkCl p.name (mkA "törstig") ; +-- ATired p = mkCl p.name (mkA "trött") ; +-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; +-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ; +-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; +-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; +-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) 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 ("vi ses"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p d = +-- mkText (lin Text (ss ("vi ses"))) +-- (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 sing (mkN "fru" "fruar") ; +-- Husband = xOf sing L.man_N ; +-- Son = xOf sing (mkN "son" "söner") ; +-- Daughter = xOf sing (mkN "dotter" "döttrar") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxDut.mkAdv on_Prep day ; --- habitual = SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxDut.mkAdv possess_Prep p.name) --- } ; --- } + +-- Monday = mkDay "måndag" ; +-- Tuesday = mkDay "tisdag" ; +-- Wednesday = mkDay "onsdag" ; +-- Thursday = mkDay "torsdag" ; +-- Friday = mkDay "fredag" ; +-- Saturday = mkDay "lördag" ; +-- Sunday = mkDay "söndag" ; + +-- Tomorrow = ParadigmsDut.mkAdv "imorgon" ; + +-- oper +-- mkNat : Str -> Str -> NPNationality = \nat,co -> +-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ; + +-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> +-- let day = mkNP (mkPN d) in +-- mkNPDay day (SyntaxDut.mkAdv on_Prep day) +-- (SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ; + +-- open_A = mkA "öppen" "öppet" ; +-- closed_A = mkA "stängd" "stängt" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + + +--} } diff --git a/examples/phrasebook/WordsEng.gf b/examples/phrasebook/WordsEng.gf index a50504f76..a76901825 100644 --- a/examples/phrasebook/WordsEng.gf +++ b/examples/phrasebook/WordsEng.gf @@ -1,12 +1,17 @@ --- (c) 2009 Aarne Ranta under LGPL +--2 Implementations of Words, with English as example concrete WordsEng of Words = SentencesEng ** open - SyntaxEng, ParadigmsEng, (L = LexiconEng), (P = ParadigmsEng), - IrregEng, ExtraEng, Prelude in { + SyntaxEng, + ParadigmsEng, + (L = LexiconEng), + (P = ParadigmsEng), + IrregEng, + ExtraEng, + Prelude in { lin --- kinds +-- 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 ; @@ -23,7 +28,7 @@ concrete WordsEng of Words = SentencesEng ** Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- properties +-- Properties; many of them are in the resource lexicon, others can be built by $mkA$. Bad = L.bad_A ; Boring = mkA "boring" ; @@ -36,7 +41,9 @@ concrete WordsEng of Words = SentencesEng ** Suspect = mkA "suspect" ; Warm = L.warm_A ; --- places +-- 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" ; Bar = mkPlace "bar" "in" ; @@ -54,15 +61,15 @@ concrete WordsEng of Words = SentencesEng ** Toilet = mkPlace "toilet" "in" ; University = mkPlace "university" "at" ; --- currencies +-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns. - DanishCrown = mkCN (mkA "Danish") (mkN "crown") ; + 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") ; - SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") ; + SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; --- nationalities +-- Nationalities Belgian = mkA "Belgian" ; Belgium = mkNP (mkPN "Belgium") ; @@ -74,10 +81,14 @@ concrete WordsEng of Words = SentencesEng ** Romanian = mkNat "Romanian" "Romania" ; Swedish = mkNat "Swedish" "Sweden" ; --- actions +-- Actions: the predication patterns are very often language-dependent. - AHasAge p num = mkCl p.name (mkNP L.year_N) ; - AHasChildren p num = mkCl p.name have_V2 (mkNP L.child_N) ; + AHasAge p num = mkCl p.name (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 "room")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ; + AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "table")) (SyntaxEng.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") ; @@ -86,6 +97,7 @@ concrete WordsEng of Words = SentencesEng ** ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxEng.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") ; ASpeak p lang = mkCl p.name (mkV2 IrregEng.speak_V) lang ; AThirsty p = mkCl p.name (mkA "thirsty") ; @@ -97,7 +109,9 @@ concrete WordsEng of Words = SentencesEng ** -- miscellaneous QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; - QWhatAge p = mkQS (mkQCl (ICompAP (mkAP (mkA "old"))) p.name) ; + QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregEng.cost_V)) ; + ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ; PropOpen p = mkCl p.name open_Adv ; PropClosed p = mkCl p.name closed_Adv ; @@ -106,8 +120,17 @@ concrete WordsEng of Words = SentencesEng ** PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ; PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ; - HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregEng.cost_V)) ; - ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ; +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace 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 sing (mkN "wife") ; Husband = xOf sing (mkN "husband") ; @@ -125,42 +148,29 @@ concrete WordsEng of Words = SentencesEng ** Saturday = mkDay "Saturday" ; Sunday = mkDay "Sunday" ; + Tomorrow = P.mkAdv "tomorrow" ; + -- auxiliaries oper - mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> - {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; + + 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 - {name = day ; - point = SyntaxEng.mkAdv on_Prep day ; - habitual = SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) - } ; + let day = mkNP (mkPN d) in + mkNPDay day (SyntaxEng.mkAdv on_Prep day) + (SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; - mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { - name = mkCN (mkN p) ; - at = P.mkPrep i ; - to = to_Prep - } ; + mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> + mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ; open_Adv = P.mkAdv "open" ; closed_Adv = P.mkAdv "closed" ; - NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ; - - xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p -> - let num = if_then_else Num n plNum sgNum in { - name = case p.isPron of { - True => mkNP p.poss num x ; - _ => mkNP (mkNP the_Quant num x) - (SyntaxEng.mkAdv possess_Prep p.name) - } ; - isPron = False ; - poss = SyntaxEng.mkQuant he_Pron -- not used because not pron - } ; + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> + relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; - sing = False ; plur = True ; } diff --git a/examples/phrasebook/WordsFin.gf b/examples/phrasebook/WordsFin.gf index bf09544f3..d779859ef 100644 --- a/examples/phrasebook/WordsFin.gf +++ b/examples/phrasebook/WordsFin.gf @@ -47,6 +47,8 @@ concrete WordsFin of Words = SentencesFin ** Station = mkPlace (mkN "asema") lla ; Hospital = mkPlace (mkN "sairaala") ssa ; Church = mkPlace (mkN "kirkko") ssa ; + Cinema = mkPlace (mkN "elokuva" (mkN "teatteri")) ssa ; + Theatre = mkPlace (mkN "teatteri") ssa ; Shop = mkPlace (mkN "kauppa") ssa ; Park = mkPlace (mkN "puisto") ssa ; Hotel = mkPlace (mkN "hotelli") ssa ; @@ -55,9 +57,11 @@ concrete WordsFin of Words = SentencesFin ** -- currencies + DanishCrown = mkCN (mkN "Tanskan kruunu") | mkCN (mkN "kruunu") ; Dollar = mkCN (mkN "dollari") ; Euro = mkCN (mkN "euro") ; Lei = mkCN (mkN "lei") ; + SwedishCrown = mkCN (mkN "Ruotsin kruunu") | mkCN (mkN "kruunu") ; -- nationalities @@ -77,13 +81,27 @@ concrete WordsFin of Words = SentencesFin ** -- actions + AHasAge p num = mkCl p.name (mkNP num L.year_N) ; + AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; AHasName p name = mkCl (nameOf p) name ; + AHasRoom p num = mkCl p.name have_V2 +---- (mkNP (E.PartCN (mkN "huone")) ---- partitive works in questions + (mkNP (mkNP a_Det (mkN "huone")) + (SyntaxFin.mkAdv for_Prep (mkNP num (mkN "henki" "henkiä")))) ; + AHasTable p num = mkCl p.name have_V2 +---- (mkNP (E.PartCN (mkN "pöytä")) + (mkNP (mkNP a_Det (mkN "pöytä")) + (SyntaxFin.mkAdv for_Prep (mkNP num (mkN "henki" "henkiä")))) ; + + AHungry p = mkCl p.name have_V2 (mkNP (mkN "nälkä")) ; AIll p = mkCl p.name (mkA "sairas") ; AKnow p = mkCl p.name (mkV "tietää") ; ALike p item = mkCl p.name L.like_V2 item ; ALive p co = mkCl p.name (mkVP (mkVP (mkV "asua")) (SyntaxFin.mkAdv in_Prep co)) ; ALove p q = mkCl p.name (mkV2 (mkV "rakastaa") partitive) q.name ; + AMarried p = mkCl p.name (ParadigmsFin.mkAdv "naimisissa") ; + AReady p = mkCl p.name (ParadigmsFin.mkA "valmis") ; AScared p = mkCl p.name (caseV partitive (mkV "pelottaa")) ; ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ; AThirsty p = mkCl p.name have_V2 (mkNP (mkN "jano")) ; @@ -95,6 +113,9 @@ concrete WordsFin of Words = SentencesFin ** -- miscellaneous QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; + QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ; + ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ; PropOpen p = mkCl p.name open_Adv ; PropClosed p = mkCl p.name closed_Adv ; @@ -103,8 +124,24 @@ concrete WordsFin of Words = SentencesFin ** PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ; PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ; - HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ; - ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ; + +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYou d = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace p d = + mkText (lin Text (ss ("nähdään"))) + (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 sing (mkN "vaimo") ; + Husband = xOf sing L.man_N ; + Son = xOf sing L.boy_N ; + Daughter = xOf sing (mkN "tytär") ; + Children = xOf plur L.child_N ; -- week days @@ -116,6 +153,8 @@ concrete WordsFin of Words = SentencesFin ** Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ; Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ; + Tomorrow = ParadigmsFin.mkAdv "huomenna" ; + oper mkNat : PN -> PN -> A -> {lang : NP ; prop : A ; country : NP} = \nat,co,pro -> @@ -140,24 +179,12 @@ concrete WordsFin of Words = SentencesFin ** ssa = False ; lla = True ; - open_Adv = ParadigmsFin.mkAdv "avoinna" ; - closed_Adv = ParadigmsFin.mkAdv "kiinni" ; - - NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ; - - xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p -> - let num = if_then_else Num n plNum sgNum in { - name = case p.isPron of { - True => mkNP p.poss num x ; - _ => mkNP (E.GenNP p.name) num x - } ; - isPron = False ; - poss = SyntaxFin.mkQuant he_Pron -- not used because not pron - } ; - + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> + relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ; nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ; - sing = False ; plur = True ; + open_Adv = ParadigmsFin.mkAdv "avoinna" ; + closed_Adv = ParadigmsFin.mkAdv "kiinni" ; } diff --git a/examples/phrasebook/WordsFre.gf b/examples/phrasebook/WordsFre.gf index 0a93e611a..795193e4f 100644 --- a/examples/phrasebook/WordsFre.gf +++ b/examples/phrasebook/WordsFre.gf @@ -71,6 +71,9 @@ lin -- 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) ; + 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 ; @@ -89,6 +92,7 @@ lin -- miscellaneous QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "appeler")))) ; + QWhatAge p = mkQS (mkQCl (mkIP whichSg_IDet (mkN "âge" masculine)) p.name have_V2) ; PropOpen p = mkCl p.name open_A ; PropClosed p = mkCl p.name closed_A ; @@ -100,6 +104,12 @@ lin HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ; ItCost item price = mkCl item (mkV2 (mkV "coûter")) price ; + Wife = xOf sing (mkN "femme") ; + Husband = xOf sing (mkN "mari") ; + Son = xOf sing (mkN "fils") ; + Daughter = xOf sing (mkN "fille") ; + Children = xOf plur L.child_N ; + -- week days Monday = mkDay "lundi" ; @@ -112,23 +122,19 @@ lin oper - mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> - {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; + 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 - {name = day ; - point = P.mkAdv d ; - habitual = P.mkAdv ("le" ++ d) ; - } ; + mkNPDay day (P.mkAdv d) (P.mkAdv ("le" ++ d)) ; - mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { - name = mkCN p ; - at = i ; - to = dative - } ; + mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> + mkCNPlace (mkCN p) i dative ; open_A = P.mkA "ouvert" ; closed_A = P.mkA "fermé" ; + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; + } diff --git a/examples/phrasebook/WordsGer.gf b/examples/phrasebook/WordsGer.gf index 02b01445f..51303f87f 100644 --- a/examples/phrasebook/WordsGer.gf +++ b/examples/phrasebook/WordsGer.gf @@ -48,7 +48,7 @@ concrete WordsGer of Words = SentencesGer ** DanishCrown = mkCN (mkA "Dänisch") (mkN "Krone") ; -- Dollar = mkCN (mkN "dollar" "dollar") ; - Euro = mkCN (mkN "Euro" "Euro" neuter) ; + Euro = mkCN (mkN "Euro" "Euro" "Euro" "Euro" "Euro" "Euro" neuter) ; -- Lei = mkCN (mkN "lei" "lei") ; -- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; diff --git a/examples/phrasebook/WordsIta.gf b/examples/phrasebook/WordsIta.gf index 8ede69ac6..72e97aa5e 100644 --- a/examples/phrasebook/WordsIta.gf +++ b/examples/phrasebook/WordsIta.gf @@ -1,4 +1,4 @@ --- (c) 2009 Aarne Ranta and Olga Caprotti under LGPL +-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL concrete WordsIta of Words = SentencesIta ** open SyntaxIta, @@ -6,7 +6,8 @@ concrete WordsIta of Words = SentencesIta ** open (E = ExtraIta), (L = LexiconIta), (P = ParadigmsIta), - ParadigmsIta in { + ParadigmsIta, + Prelude in { lin @@ -16,8 +17,10 @@ lin Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; Cheese = mkCN (mkN "formaggio") ; + Chicken = mkCN (mkN "pollo") ; Coffee = mkCN (mkN "caffè") ; Fish = mkCN L.fish_N ; + Meat = mkCN (mkN "carne" feminine) ; Milk = mkCN L.milk_N ; Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; @@ -29,30 +32,40 @@ lin Bad = L.bad_A ; Boring = mkA "noioso" ; + Cheap = let c = "a buon mercato" in mkA c c c c c ; ---- Cold = L.cold_A ; Delicious = mkA "delizioso" ; Expensive = mkA "caro" ; Fresh = mkA "fresco" ; Good = L.good_A ; Warm = L.warm_A ; + Suspect = mkA "sospetto" ; -- places Airport = mkPlace (mkN "aeroporto") dative ; Bar = mkPlace (mkN "bar") P.in_Prep ; Church = mkPlace (mkN "chiesa") P.in_Prep ; + Cinema = mkPlace (mkN "cinema") P.in_Prep ; Hospital = mkPlace (mkN "ospedale") P.in_Prep ; + Hotel = mkPlace (mkN "albergo") P.in_Prep ; Museum = mkPlace (mkN "museo") P.in_Prep ; + Park = mkPlace (mkN "parco") P.in_Prep ; Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; + School = mkPlace (mkN "scuola") P.in_Prep ; + Shop = mkPlace (mkN "negozio") P.in_Prep ; Station = mkPlace (mkN "stazione" feminine) dative ; + Theatre = mkPlace (mkN "teatro") P.in_Prep ; Toilet = mkPlace (mkN "bagno") P.in_Prep ; + University = mkPlace (mkN "università") dative ; -- currencies - DanishCrown = mkCN (mkA "danese") (mkN "corona") ; + DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ; Dollar = mkCN (mkN "dollar") ; Euro = mkCN (mkN "euro" "euro" masculine) ; Lei = mkCN (mkN "lei") ; ---- ? + SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ; -- nationalities @@ -68,6 +81,12 @@ lin -- 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) ; + AHasRoom p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "camera")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ; + AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "tavolo")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ; AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; AIll p = mkCl p.name (mkA "malato") ; @@ -76,6 +95,8 @@ lin ALive p co = mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxIta.mkAdv P.in_Prep co)) ; ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; + AMarried p = mkCl p.name (mkA "sposato") ; + AReady p = mkCl p.name (mkA "pronto") ; AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; @@ -88,6 +109,7 @@ lin -- 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) ; PropOpen p = mkCl p.name open_A ; PropClosed p = mkCl p.name closed_A ; @@ -99,6 +121,24 @@ lin HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace p d = + mkText (lin Text (ss ("arrivederci"))) + (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 "sposa") ; + Husband = xOf sing (mkN "marito") ; + Son = xOf sing (mkN "figlio") ; + Daughter = xOf sing (mkN "figlia") ; + Children = xOf plur L.child_N ; + -- week days Monday = mkDay "lunedì" ; @@ -109,24 +149,22 @@ lin Saturday = mkDay "sabato" ; Sunday = mkDay "domenica" ; + Tomorrow = P.mkAdv "domani" ; + -- auxiliaries oper - mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> - {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; + 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 - {name = day ; - point, -- = ParadigmsIta.mkAdv d ; - habitual = ParadigmsIta.mkAdv ("il" ++ d) ; ---- ? - } ; + mkNPDay day (P.mkAdv ("il" ++ d)) (P.mkAdv ("il" ++ d)) ; ---- ? - mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { - name = mkCN p ; - at = i ; - to = dative - } ; + mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> + mkCNPlace (mkCN p) i dative ; + + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; open_A = mkA "aperto" ; closed_A = mkA "chiuso" ; diff --git a/examples/phrasebook/WordsNor.gf b/examples/phrasebook/WordsNor.gf index dde0e8f0f..d9cd3be3c 100644 --- a/examples/phrasebook/WordsNor.gf +++ b/examples/phrasebook/WordsNor.gf @@ -1,7 +1,7 @@ -- (c) 2009 Aarne Ranta under LGPL concrete WordsNor of Words = SentencesNor ** - open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), Prelude in { + open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), ExtraNor, Prelude in { lin @@ -10,125 +10,158 @@ concrete WordsNor of Words = SentencesNor ** Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; +-- Cheese = mkCN (mkN "ost") ; +-- Chicken = mkCN (mkN "kyckling") ; +-- Coffee = mkCN (mkN "kaffe" neutrum) ; Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "kött" "kött") ; Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "te" neutrum) ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- + -- properties --- + Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Cheap = mkA "billig" ; +-- Boring = mkA "tråkig" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "läcker" ; +-- Expensive = mkA "dyr" ; +-- Fresh = mkA "färsk" ; Good = L.good_A ; +-- Suspect = mkA "suspekt" "suspekt" ; Warm = L.warm_A ; --- + -- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- + +-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; +-- Bar = mkPlace (mkN "bar" "barer") "i" ; +-- Church = mkPlace (mkN "kyrka") "i" ; +-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ? +-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; +-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ; +-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; +-- Park = mkPlace (mkN "park" "parker") "i" ; +-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; +-- Shop = mkPlace (mkN "affär" "affär") "i" ; +-- School = mkPlace (mkN "skola") "på" ; +-- Station = mkPlace (mkN "station" "stationer") "på" ; +-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ; +-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; +-- University = mkPlace (mkN "universitet" "universitet") "på" ; + -- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- + +-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ; +-- Dollar = mkCN (mkN "dollar" "dollar") ; +-- Euro = mkCN (mkN "euro" "euro") ; +-- Lei = mkCN (mkN "lei" "lei") ; +-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ; + -- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- + +-- Belgian = mkA "belgisk" ; +-- Belgium = mkNP (mkPN "Belgien") ; +-- English = mkNat "engelsk" "England" ; +-- Finnish = mkNat "finsk" "Finland" ; +-- Flemish = mkNP (mkPN "flamländska") ; +-- French = mkNat "fransk" "Frankrike" ; +-- Italian = mkNat "italiensk" "Italien" ; +-- Romanian = mkNat "rumänsk" "Rumänien" ; +-- Swedish = mkNat "svensk" "Sverige" ; + -- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxNor.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; --- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ; +-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ; + 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 "rum" "rum")) +-- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "bord" "bord")) +-- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; +-- AHungry p = mkCl p.name (mkA "hungrig") ; +-- AIll p = mkCl p.name (mkA "sjuk") ; +-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; +-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxNor.mkAdv in_Prep co)) ; +-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; +-- AMarried p = mkCl p.name (mkA "gift") ; +-- AReady p = mkCl p.name (mkA "färdig") ; +-- AScared p = mkCl p.name (mkA "rädd") ; +-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; +-- AThirsty p = mkCl p.name (mkA "törstig") ; +-- ATired p = mkCl p.name (mkA "trött") ; +-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; +-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ; +-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; +-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; +-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) 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 ("vi ses"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p d = +-- mkText (lin Text (ss ("vi ses"))) +-- (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 sing (mkN "fru" "fruar") ; +-- Husband = xOf sing L.man_N ; +-- Son = xOf sing (mkN "son" "söner") ; +-- Daughter = xOf sing (mkN "dotter" "döttrar") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxNor.mkAdv on_Prep day ; --- habitual = SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxNor.mkAdv possess_Prep p.name) --- } ; --- } + +-- Monday = mkDay "måndag" ; +-- Tuesday = mkDay "tisdag" ; +-- Wednesday = mkDay "onsdag" ; +-- Thursday = mkDay "torsdag" ; +-- Friday = mkDay "fredag" ; +-- Saturday = mkDay "lördag" ; +-- Sunday = mkDay "söndag" ; + +-- Tomorrow = ParadigmsNor.mkAdv "imorgon" ; + +-- oper +-- mkNat : Str -> Str -> NPNationality = \nat,co -> +-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ; + +-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> +-- let day = mkNP (mkPN d) in +-- mkNPDay day (SyntaxNor.mkAdv on_Prep day) +-- (SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ; + +-- open_A = mkA "öppen" "öppet" ; +-- closed_A = mkA "stängd" "stängt" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + + +--} } diff --git a/examples/phrasebook/WordsPol.gf b/examples/phrasebook/WordsPol.gf index dc991a1e6..5e0966541 100644 --- a/examples/phrasebook/WordsPol.gf +++ b/examples/phrasebook/WordsPol.gf @@ -1,134 +1,176 @@ --- (c) 2009 Aarne Ranta under LGPL +--2 Implementations of Words, with English as example concrete WordsPol of Words = SentencesPol ** - open SyntaxPol, ParadigmsPol, (L = LexiconPol), Prelude in { - + open + SyntaxPol, + ParadigmsPol, + (L = LexiconPol), + (P = ParadigmsPol), +-- ExtraPol, + Prelude in { lin - --- kinds of food + +-- 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 ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; +-- 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") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "tea") ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- --- properties --- + +-- Properties; many of them are in the resource lexicon, others can be built by $mkA$. + Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Boring = mkA "boring" ; +-- Cheap = mkA "cheap" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "delicious" ; +-- Expensive = mkA "expensive" ; +-- Fresh = mkA "fresh" ; Good = L.good_A ; +-- Suspect = mkA "suspect" ; Warm = L.warm_A ; --- --- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- --- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- --- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- --- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxPol.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; --- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- 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" ; +-- Bar = mkPlace "bar" "in" ; +-- Church = mkPlace "church" "in" ; +-- Cinema = mkPlace "cinema" "at" ; +-- Hospital = mkPlace "hospital" "in" ; +-- Hotel = mkPlace "hotel" "in" ; +-- Museum = mkPlace "museum" "in" ; +-- Park = mkPlace "park" "in" ; +-- Restaurant = mkPlace "restaurant" "in" ; +-- School = mkPlace "school" "at" ; +-- Shop = mkPlace "shop" "in" ; +-- Station = mkPlace "station" "at" ; +-- Theatre = mkPlace "theatre" "at" ; +-- Toilet = mkPlace "toilet" "in" ; +-- University = mkPlace "university" "at" ; + +-- 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") ; +-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; + +-- Nationalities + +-- Belgian = mkA "Belgian" ; +-- Belgium = mkNP (mkPN "Belgium") ; +-- English = mkNat "English" "England" ; +-- Finnish = mkNat "Finnish" "Finland" ; +-- Flemish = mkNP (mkPN "Flemish") ; +-- French = mkNat "French" "France" ; +-- Italian = mkNat "Italian" "Italy" ; +-- Romanian = mkNat "Romanian" "Romania" ; +-- Swedish = mkNat "Swedish" "Sweden" ; + +-- Actions: the predication patterns are very often language-dependent. + +-- AHasAge p num = mkCl p.name (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 "room")) (SyntaxPol.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxPol.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 IrregPol.know_V ; +-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxPol.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") ; +-- ASpeak p lang = mkCl p.name (mkV2 IrregPol.speak_V) lang ; +-- AThirsty p = mkCl p.name (mkA "thirsty") ; +-- ATired p = mkCl p.name (mkA "tired") ; +-- AUnderstand p = mkCl p.name IrregPol.understand_V ; +-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregPol.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- 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 IrregPol.cost_V)) ; +-- ItCost item price = mkCl item (mkV2 IrregPol.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 ; + +-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace 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 sing (mkN "wife") ; +-- Husband = xOf sing (mkN "husband") ; +-- Son = xOf sing (mkN "son") ; +-- Daughter = xOf sing (mkN "daughter") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxPol.mkAdv on_Prep day ; --- habitual = SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxPol.mkAdv possess_Prep p.name) --- } ; --- } + +-- 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" ; + +-- 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 (SyntaxPol.mkAdv on_Prep day) +-- (SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ; + +-- open_Adv = P.mkAdv "open" ; +-- closed_Adv = P.mkAdv "closed" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + +-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; + +--} } diff --git a/examples/phrasebook/WordsRus.gf b/examples/phrasebook/WordsRus.gf index d2de86c54..a90a5cc0d 100644 --- a/examples/phrasebook/WordsRus.gf +++ b/examples/phrasebook/WordsRus.gf @@ -1,134 +1,177 @@ --- (c) 2009 Aarne Ranta under LGPL +--2 Implementations of Words, with English as example concrete WordsRus of Words = SentencesRus ** - open SyntaxRus, ParadigmsRus, (L = LexiconRus), Prelude in { + open + SyntaxRus, + ParadigmsRus, + (L = LexiconRus), + (P = ParadigmsRus), +-- IrregRus, +-- ExtraRus, + Prelude in { +-- lin + +-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$. - lin - --- kinds of food --- Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "ost") ; --- Coffee = mkCN (mkN "kaffe" neutrum) ; +-- 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") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "te" neutrum) ; +-- Tea = mkCN (mkN "tea") ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- --- properties --- + +-- Properties; many of them are in the resource lexicon, others can be built by $mkA$. + Bad = L.bad_A ; --- Boring = mkA "tråkig" ; +-- Boring = mkA "boring" ; +-- Cheap = mkA "cheap" ; Cold = L.cold_A ; --- Delicious = mkA "läcker" ; --- Expensive = mkA "dyr" ; --- Fresh = mkA "färsk" ; +-- Delicious = mkA "delicious" ; +-- Expensive = mkA "expensive" ; +-- Fresh = mkA "fresh" ; Good = L.good_A ; +-- Suspect = mkA "suspect" ; Warm = L.warm_A ; --- --- places --- --- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; --- Bar = mkPlace (mkN "bar" "barer") "i" ; --- Church = mkPlace (mkN "kyrka") "i" ; --- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; --- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; --- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; --- Station = mkPlace (mkN "station" "stationer") "på" ; --- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; --- --- currencies --- --- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; --- Dollar = mkCN (mkN "dollar" "dollar") ; --- Euro = mkCN (mkN "euro" "euro") ; --- Lei = mkCN (mkN "lei" "lei") ; --- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; --- --- nationalities --- --- Belgian = mkA "belgisk" ; --- Belgium = mkNP (mkPN "Belgien") ; --- English = mkNat "engelsk" "England" ; --- Finnish = mkNat "finsk" "Finland" ; --- Flemish = mkNP (mkPN "flamländska") ; --- French = mkNat "fransk" "Frankrike" ; --- Italian = mkNat "italiensk" "Italien" ; --- Romanian = mkNat "rumänsk" "Rumänien" ; --- Swedish = mkNat "svensk" "Sverige" ; --- --- actions --- --- AHasName p name = mkCl (nameOf p) name ; --- AHungry p = mkCl p.name (mkA "hungrig") ; --- AIll p = mkCl p.name (mkA "sjuk") ; --- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; --- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; --- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxRus.mkAdv in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; --- AScared p = mkCl p.name (mkA "rädd") ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; --- AThirsty p = mkCl p.name (mkA "törstig") ; --- ATired p = mkCl p.name (mkA "trött") ; --- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; --- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; --- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; --- + +-- 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" ; +-- Bar = mkPlace "bar" "in" ; +-- Church = mkPlace "church" "in" ; +-- Cinema = mkPlace "cinema" "at" ; +-- Hospital = mkPlace "hospital" "in" ; +-- Hotel = mkPlace "hotel" "in" ; +-- Museum = mkPlace "museum" "in" ; +-- Park = mkPlace "park" "in" ; +-- Restaurant = mkPlace "restaurant" "in" ; +-- School = mkPlace "school" "at" ; +-- Shop = mkPlace "shop" "in" ; +-- Station = mkPlace "station" "at" ; +-- Theatre = mkPlace "theatre" "at" ; +-- Toilet = mkPlace "toilet" "in" ; +-- University = mkPlace "university" "at" ; + +-- 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") ; +-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ; + +-- Nationalities + +-- Belgian = mkA "Belgian" ; +-- Belgium = mkNP (mkPN "Belgium") ; +-- English = mkNat "English" "England" ; +-- Finnish = mkNat "Finnish" "Finland" ; +-- Flemish = mkNP (mkPN "Flemish") ; +-- French = mkNat "French" "France" ; +-- Italian = mkNat "Italian" "Italy" ; +-- Romanian = mkNat "Romanian" "Romania" ; +-- Swedish = mkNat "Swedish" "Sweden" ; + +-- Actions: the predication patterns are very often language-dependent. + +-- AHasAge p num = mkCl p.name (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 "room")) (SyntaxRus.mkAdv for_Prep (mkNP num (mkN "person")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxRus.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 IrregRus.know_V ; +-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ; +-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxRus.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") ; +-- ASpeak p lang = mkCl p.name (mkV2 IrregRus.speak_V) lang ; +-- AThirsty p = mkCl p.name (mkA "thirsty") ; +-- ATired p = mkCl p.name (mkA "tired") ; +-- AUnderstand p = mkCl p.name IrregRus.understand_V ; +-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ; +-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregRus.go_V) place.to) ; + -- miscellaneous --- --- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; --- + +-- 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 IrregRus.cost_V)) ; +-- ItCost item price = mkCl item (mkV2 IrregRus.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 ; + +-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace 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 sing (mkN "wife") ; +-- Husband = xOf sing (mkN "husband") ; +-- Son = xOf sing (mkN "son") ; +-- Daughter = xOf sing (mkN "daughter") ; +-- Children = xOf plur L.child_N ; + -- week days --- --- Monday = mkDay "måndag" ; --- Tuesday = mkDay "tisdag" ; --- Wednesday = mkDay "onsdag" ; --- Thursday = mkDay "torsdag" ; --- Friday = mkDay "fredag" ; --- Saturday = mkDay "lördag" ; --- Sunday = mkDay "söndag" ; --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN (nat + "a")) ; --- prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point = SyntaxRus.mkAdv on_Prep day ; --- habitual = SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) --- } ; --- --- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = mkPrep i ; --- to = to_Prep --- } ; --- --- open_A = mkA "öppen" "öppet" ; --- closed_A = mkA "stängd" "stängt" ; --- --- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> --- case p.isPron of { --- True => mkNP p.poss (mkN "namn" "namn") ; --- _ => mkNP (mkNP the_Det (mkN "namn" "namn")) --- (SyntaxRus.mkAdv possess_Prep p.name) --- } ; --- } + +-- 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" ; + +-- 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 (SyntaxRus.mkAdv on_Prep day) +-- (SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; + +-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ; + +-- open_Adv = P.mkAdv "open" ; +-- closed_Adv = P.mkAdv "closed" ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> +-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; + +-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; + +--} } diff --git a/examples/phrasebook/WordsSpa.gf b/examples/phrasebook/WordsSpa.gf index 94f304441..6c911373e 100644 --- a/examples/phrasebook/WordsSpa.gf +++ b/examples/phrasebook/WordsSpa.gf @@ -1,4 +1,4 @@ --- (c) 2009 Aarne Ranta and Olga Caprotti under LGPL +-- (c) 2010 Aarne Ranta and Olga Caprotti under LGPL concrete WordsSpa of Words = SentencesSpa ** open SyntaxSpa, @@ -6,131 +6,169 @@ concrete WordsSpa of Words = SentencesSpa ** open (E = ExtraSpa), (L = LexiconSpa), (P = ParadigmsSpa), - ParadigmsSpa in { + ParadigmsSpa, + Prelude in { + +lin - lin - -- kinds - + Apple = mkCN L.apple_N ; Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; --- Cheese = mkCN (mkN "formaggio") ; --- Coffee = mkCN (mkN "caffè") ; +-- Cheese = mkCN (mkN "formaggio") ; +-- Chicken = mkCN (mkN "pollo") ; +-- Coffee = mkCN (mkN "caffè") ; Fish = mkCN L.fish_N ; +-- Meat = mkCN (mkN "carne" feminine) ; Milk = mkCN L.milk_N ; --- Pizza = mkCN (mkN "pizza") ; +-- Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; --- Tea = mkCN (mkN "tè") ; +-- Tea = mkCN (mkN "tè") ; Water = mkCN L.water_N ; Wine = mkCN L.wine_N ; --- --- -- properties --- + +-- properties + Bad = L.bad_A ; --- Boring = mkA "noioso" ; +-- Boring = mkA "noioso" ; +-- Cheap = let c = "a buon mercato" in mkA c c c c c ; ---- Cold = L.cold_A ; --- Delicious = mkA "delizioso" ; --- Expensive = mkA "caro" ; --- Fresh = mkA "fresco" ; +-- Delicious = mkA "delizioso" ; +-- Expensive = mkA "caro" ; +-- Fresh = mkA "fresco" ; Good = L.good_A ; Warm = L.warm_A ; --- --- -- places --- --- Airport = mkPlace (mkN "aeroporto") dative ; --- Bar = mkPlace (mkN "bar") P.in_Prep ; --- Church = mkPlace (mkN "chiesa") P.in_Prep ; --- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; --- Museum = mkPlace (mkN "museo") P.in_Prep ; --- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; --- Station = mkPlace (mkN "stazione" feminine) dative ; --- Toilet = mkPlace (mkN "bagno") P.in_Prep ; --- --- -- currencies --- --- DanishCrown = mkCN (mkA "danese") (mkN "corona") ; --- Dollar = mkCN (mkN "dollar") ; --- Euro = mkCN (mkN "euro" "euro" masculine) ; --- Lei = mkCN (mkN "lei") ; ---- ? --- --- -- nationalities --- --- Belgian = mkA "belgo" ; --- Belgium = mkNP (mkPN "Belgio") ; --- English = mkNat "inglese" "Inghilterra" ; --- Finnish = mkNat "finlandese" "Finlandia" ; --- Flemish = mkNP (mkPN "fiammingo") ; --- French = mkNat "francese" "Francia" ; --- Italian = mkNat "italiano" "Italia" ; --- Romanian = mkNat "rumeno" "Romania" ; --- Swedish = mkNat "svedese" "Svezia" ; --- --- -- actions --- --- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; --- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; --- AIll p = mkCl p.name (mkA "malato") ; --- 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 P.in_Prep co)) ; --- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; --- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; --- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; --- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; --- ATired p = mkCl p.name (mkA "stanco") ; --- AUnderstand p = mkCl p.name (mkV "capire") ; --- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) 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")))) ; --- --- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; --- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; --- --- -- week days --- --- Monday = mkDay "lunedì" ; --- Tuesday = mkDay "martedì" ; --- Wednesday = mkDay "mercoledì" ; --- Thursday = mkDay "giovedì" ; --- Friday = mkDay "venerdì" ; --- Saturday = mkDay "sabato" ; --- Sunday = mkDay "domenica" ; --- --- -- auxiliaries --- --- oper --- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> --- {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; --- --- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> --- let day = mkNP (mkPN d) in --- {name = day ; --- point, -- = ParadigmsSpa.mkAdv d ; --- habitual = ParadigmsSpa.mkAdv ("il" ++ d) ; ---- ? --- } ; --- --- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { --- name = mkCN p ; --- at = i ; --- to = dative --- } ; --- --- open_A = mkA "aperto" ; --- closed_A = mkA "chiuso" ; --- --- --- } +-- Suspect = mkA "sospetto" ; + +-- places + +-- Airport = mkPlace (mkN "aeroporto") dative ; +-- Bar = mkPlace (mkN "bar") P.in_Prep ; +-- Church = mkPlace (mkN "chiesa") P.in_Prep ; +-- Cinema = mkPlace (mkN "cinema") P.in_Prep ; +-- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; +-- Hotel = mkPlace (mkN "albergo") P.in_Prep ; +-- Museum = mkPlace (mkN "museo") P.in_Prep ; +-- Park = mkPlace (mkN "parco") P.in_Prep ; +-- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; +-- School = mkPlace (mkN "scuola") P.in_Prep ; +-- Shop = mkPlace (mkN "negozio") P.in_Prep ; +-- Station = mkPlace (mkN "stazione" feminine) dative ; +-- Theatre = mkPlace (mkN "teatro") P.in_Prep ; +-- Toilet = mkPlace (mkN "bagno") P.in_Prep ; +-- University = mkPlace (mkN "università") dative ; + +-- currencies + +-- DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ; +-- Dollar = mkCN (mkN "dollar") ; +-- Euro = mkCN (mkN "euro" "euro" masculine) ; +-- Lei = mkCN (mkN "lei") ; ---- ? +-- SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ; + +-- nationalities + +-- Belgian = mkA "belgo" ; +-- Belgium = mkNP (mkPN "Belgio") ; +-- English = mkNat "inglese" "Inghilterra" ; +-- Finnish = mkNat "finlandese" "Finlandia" ; +-- Flemish = mkNP (mkPN "fiammingo") ; +-- French = mkNat "francese" "Francia" ; +-- Italian = mkNat "italiano" "Italia" ; +-- Romanian = mkNat "rumeno" "Romania" ; +-- Swedish = mkNat "svedese" "Svezia" ; + +-- 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) ; +-- AHasRoom p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "camera")) (SyntaxSpa.mkAdv for_Prep (mkNP num (mkN "persona")))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (mkN "tavolo")) (SyntaxSpa.mkAdv for_Prep (mkNP num (mkN "persona")))) ; +-- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; +-- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; +-- AIll p = mkCl p.name (mkA "malato") ; +-- 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 P.in_Prep co)) ; +-- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; +-- AMarried p = mkCl p.name (mkA "sposato") ; +-- AReady p = mkCl p.name (mkA "pronto") ; +-- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ; +-- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; +-- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; +-- ATired p = mkCl p.name (mkA "stanco") ; +-- AUnderstand p = mkCl p.name (mkV "capire") ; +-- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) 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) ; + +-- 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; +-- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; + +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + +-- PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ; +-- PSeeYouPlace p d = +-- mkText (lin Text (ss ("arrivederci"))) +-- (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 "sposa") ; +-- Husband = xOf sing (mkN "marito") ; +-- Son = xOf sing (mkN "figlio") ; +-- Daughter = xOf sing (mkN "figlia") ; +-- Children = xOf plur L.child_N ; + +-- week days + +-- Monday = mkDay "lunedì" ; +-- Tuesday = mkDay "martedì" ; +-- Wednesday = mkDay "mercoledì" ; +-- Thursday = mkDay "giovedì" ; +-- Friday = mkDay "venerdì" ; +-- Saturday = mkDay "sabato" ; +-- Sunday = mkDay "domenica" ; + +-- Tomorrow = P.mkAdv "domani" ; + +-- 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 (P.mkAdv ("il" ++ d)) (P.mkAdv ("il" ++ d)) ; ---- ? + +-- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> +-- mkCNPlace (mkCN p) i dative ; + +-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; + +-- open_A = mkA "aperto" ; +-- closed_A = mkA "chiuso" ; + + +--} } diff --git a/examples/phrasebook/WordsSwe.gf b/examples/phrasebook/WordsSwe.gf index b48bb3e18..abd665746 100644 --- a/examples/phrasebook/WordsSwe.gf +++ b/examples/phrasebook/WordsSwe.gf @@ -1,7 +1,7 @@ -- (c) 2009 Aarne Ranta under LGPL concrete WordsSwe of Words = SentencesSwe ** - open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), Prelude in { + open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), ExtraSwe, Prelude in { lin @@ -11,8 +11,10 @@ concrete WordsSwe of Words = SentencesSwe ** Beer = mkCN L.beer_N ; Bread = mkCN L.bread_N ; Cheese = mkCN (mkN "ost") ; + Chicken = mkCN (mkN "kyckling") ; Coffee = mkCN (mkN "kaffe" neutrum) ; Fish = mkCN L.fish_N ; + Meat = mkCN (mkN "kött" "kött") ; Milk = mkCN L.milk_N ; Pizza = mkCN (mkN "pizza") ; Salt = mkCN L.salt_N ; @@ -23,12 +25,14 @@ concrete WordsSwe of Words = SentencesSwe ** -- properties Bad = L.bad_A ; + Cheap = mkA "billig" ; Boring = mkA "tråkig" ; Cold = L.cold_A ; Delicious = mkA "läcker" ; Expensive = mkA "dyr" ; Fresh = mkA "färsk" ; Good = L.good_A ; + Suspect = mkA "suspekt" "suspekt" ; Warm = L.warm_A ; -- places @@ -36,19 +40,26 @@ concrete WordsSwe of Words = SentencesSwe ** Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; Bar = mkPlace (mkN "bar" "barer") "i" ; Church = mkPlace (mkN "kyrka") "i" ; + Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ? Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; + Hotel = mkPlace (mkN "hotell" "hotell") "på" ; Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; + Park = mkPlace (mkN "park" "parker") "i" ; Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; + Shop = mkPlace (mkN "affär" "affär") "i" ; + School = mkPlace (mkN "skola") "på" ; Station = mkPlace (mkN "station" "stationer") "på" ; + Theatre = mkPlace (mkN "teater" "teatrar") "på" ; Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; + University = mkPlace (mkN "universitet" "universitet") "på" ; -- currencies - DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; + DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ; Dollar = mkCN (mkN "dollar" "dollar") ; Euro = mkCN (mkN "euro" "euro") ; Lei = mkCN (mkN "lei" "lei") ; - SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; + SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ; -- nationalities @@ -64,13 +75,23 @@ concrete WordsSwe of Words = SentencesSwe ** -- actions + AHasAge p num = mkCl p.name (mkNP num L.year_N) ; AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ; + 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 "rum" "rum")) + (SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; + AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "bord" "bord")) + (SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ; AHungry p = mkCl p.name (mkA "hungrig") ; AIll p = mkCl p.name (mkA "sjuk") ; AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxSwe.mkAdv in_Prep co)) ; ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; + AMarried p = mkCl p.name (mkA "gift") ; + AReady p = mkCl p.name (mkA "färdig") ; AScared p = mkCl p.name (mkA "rädd") ; ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; AThirsty p = mkCl p.name (mkA "törstig") ; @@ -82,6 +103,9 @@ concrete WordsSwe of Words = SentencesSwe ** -- miscellaneous QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ; + QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; + ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; PropOpen p = mkCl p.name open_A ; PropClosed p = mkCl p.name closed_A ; @@ -90,8 +114,23 @@ concrete WordsSwe of Words = SentencesSwe ** 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 = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; - ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYou d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace p d = + mkText (lin Text (ss ("vi ses"))) + (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 sing (mkN "fru" "fruar") ; + Husband = xOf sing L.man_N ; + Son = xOf sing (mkN "son" "söner") ; + Daughter = xOf sing (mkN "dotter" "döttrar") ; + Children = xOf plur L.child_N ; -- week days @@ -103,42 +142,25 @@ concrete WordsSwe of Words = SentencesSwe ** Saturday = mkDay "lördag" ; Sunday = mkDay "söndag" ; + Tomorrow = ParadigmsSwe.mkAdv "imorgon" ; + oper - mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> - {lang = mkNP (mkPN (nat + "a")) ; - prop = mkA nat ; country = mkNP (mkPN co)} ; + mkNat : Str -> Str -> NPNationality = \nat,co -> + mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ; mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> - let day = mkNP (mkPN d) in - {name = day ; - point = SyntaxSwe.mkAdv on_Prep day ; - habitual = SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) - } ; + let day = mkNP (mkPN d) in + mkNPDay day (SyntaxSwe.mkAdv on_Prep day) + (SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ; - mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { - name = mkCN p ; - at = mkPrep i ; - to = to_Prep - } ; + mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> + mkCNPlace (mkCN p) (mkPrep i) to_Prep ; open_A = mkA "öppen" "öppet" ; closed_A = mkA "stängd" "stängt" ; - NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ; + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> + relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ; - xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p -> - let num = if_then_else Num n plNum sgNum in { - name = case p.isPron of { - True => mkNP p.poss num x ; - _ => mkNP (mkNP the_Quant num x) - (SyntaxSwe.mkAdv possess_Prep p.name) - } ; - isPron = False ; - poss = SyntaxSwe.mkQuant he_Pron -- not used because not pron - } ; - - nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ; - - sing = False ; plur = True ; } diff --git a/examples/phrasebook/missing.txt b/examples/phrasebook/missing.txt index e69de29bb..908552b37 100644 --- a/examples/phrasebook/missing.txt +++ b/examples/phrasebook/missing.txt @@ -0,0 +1,8 @@ +DisambPhrasebookEng : +PhrasebookEng : +PhrasebookFin : +PhrasebookFre : AHasRoom AHasTable AReady Cheap Cinema Hotel PSeeYou PSeeYouPlace Park School Shop Suspect Theatre Tomorrow University +PhrasebookGer : AHasAge AHasChildren AHasRoom AHasTable AMarried AReady Bar Cheap Chicken Children Cinema Coffee Daughter Dollar Flemish GNiceToMeetYou Hotel Husband Lei Meat Museum PSeeYou PSeeYouPlace Park QWhatAge Romanian School Shop Son Suspect Swedish SwedishCrown Tea Theatre Toilet Tomorrow Wife +PhrasebookIta : +PhrasebookRon : AHasAge AHasChildren AHasName AHasRoom AHasTable AHungry AIll AKnow ALive AMarried AReady AScared AThirsty ATired AWantGo Airport Belgian Belgium Cheap Chicken Children Church Cinema Coffee DanishCrown Daughter English Finnish Flemish French Friday GExcusePol GPleaseGivePol GSorryPol Hospital Hotel Husband Italian Meat Monday Museum PSeeYou PSeeYouPlace Park PropClosed PropClosedDate PropClosedDay PropOpen PropOpenDate PropOpenDay QWhatAge QWhatName Romanian Saturday School Shop Son Station Sunday Suspect Swedish SwedishCrown Tea Theatre Thursday Tomorrow Tuesday University Wednesday Wife +PhrasebookSwe : diff --git a/examples/phrasebook/phrasebook.html b/examples/phrasebook/phrasebook.html index e7a9bfa58..c5572a575 100644 --- a/examples/phrasebook/phrasebook.html +++ b/examples/phrasebook/phrasebook.html @@ -17,6 +17,7 @@ History

    +
  • 10 April. Some additions in API, comments in implementation; regenerated clones.
  • 8 April. Added German.
  • 7 April. Added the Clone script, applied to initiate the rest of MOLTO languages.
  • 6 April. Version 0.4: weekdays, nationalities @@ -193,12 +194,21 @@ The basic things "everyone" can do is

    The missing concrete syntax entries are added to the WordsL.gf files for each language L. The -morphological paradigms +morphological paradigms of the GF resource library should be used. Actions (prefixed with A, as AWant) are a little more demanding, since they also require syntax constructors. Greetings (prefixed with G) are pure strings.

    +Some explanations can be found in the +implementation document, which is produced from the +concrete syntax files +SentencesI.gf +and +WordsEng.gf +by make doc. +

    +

    Here are the steps to follow for contributors:

      diff --git a/examples/phrasebook/phrasebook.txt b/examples/phrasebook/phrasebook.txt index 0400600fd..e8f499f9e 100644 --- a/examples/phrasebook/phrasebook.txt +++ b/examples/phrasebook/phrasebook.txt @@ -13,6 +13,7 @@ Aarne Ranta #BSMALL History +- 10 April. Some additions in API, comments in implementation; regenerated clones. - 8 April. Added German. - 7 April. Added the Clone script, applied to initiate the rest of MOLTO languages. - 6 April. Version 0.4: weekdays, nationalities @@ -163,11 +164,19 @@ The basic things "everyone" can do is The missing concrete syntax entries are added to the ``Words``//L//``.gf`` files for each language //L//. The -[morphological paradigms http://www.grammaticalframework.org/lib/doc/synopsis.html#toc78] +[morphological paradigms http://code.haskell.org/gf/lib/doc/synopsis.html#toc78] of the GF resource library should be used. Actions (prefixed with ``A``, as ``AWant``) are a little more demanding, since they also require syntax constructors. Greetings (prefixed with ``G``) are pure strings. +Some explanations can be found in the +[implementation document Implementation.html], which is produced from the +concrete syntax files +[``SentencesI.gf`` http://code.haskell.org/gf/examples/phrasebook/SentencesI.gf] +and +[``WordsEng.gf`` http://code.haskell.org/gf/examples/phrasebook/WordsEng.gf] +by ``make doc``. + Here are the steps to follow for contributors: + Make sure you have the latest sources from [GF Darcs http://www.grammaticalframework.org/doc/gf-developers.html],