mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
regenerated clones with complete abstract and ready-maked Lexicon-based words in Phrasebook
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
@@ -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" ; ----
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
381
examples/phrasebook/Implementation.html
Normal file
381
examples/phrasebook/Implementation.html
Normal file
@@ -0,0 +1,381 @@
|
||||
<html>
|
||||
<body>
|
||||
<i> Produced by
|
||||
gfdoc - a rudimentary GF document generator.
|
||||
(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.
|
||||
</i>
|
||||
<p>
|
||||
<h1> Implementation of MOLTO Phrasebook</h1>
|
||||
|
||||
<h2> The functor for (mostly) common structures</h2>
|
||||
<pre>
|
||||
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
|
||||
</pre>
|
||||
|
||||
<pre>
|
||||
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
|
||||
</pre>
|
||||
|
||||
These operations are used internally in Sentences.
|
||||
<pre>
|
||||
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} ;
|
||||
</pre>
|
||||
|
||||
These are used in Words for each language.
|
||||
<pre>
|
||||
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 ;
|
||||
</pre>
|
||||
|
||||
for languages without GenNP, use <i>the wife of p</i>
|
||||
<pre>
|
||||
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 ;
|
||||
</pre>
|
||||
|
||||
for languages with GenNP, use <i>p's wife</i>
|
||||
relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ;
|
||||
<pre>
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h2> Implementations of Words, with English as example</h2>
|
||||
<pre>
|
||||
concrete WordsEng of Words = SentencesEng **
|
||||
open
|
||||
SyntaxEng,
|
||||
ParadigmsEng,
|
||||
(L = LexiconEng),
|
||||
(P = ParadigmsEng),
|
||||
IrregEng,
|
||||
ExtraEng,
|
||||
Prelude in {
|
||||
lin
|
||||
</pre>
|
||||
|
||||
Kinds; many of them are in the resource lexicon, others can be built by <tt>mkN</tt>.
|
||||
<pre>
|
||||
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 ;
|
||||
</pre>
|
||||
|
||||
Properties; many of them are in the resource lexicon, others can be built by <tt>mkA</tt>.
|
||||
<pre>
|
||||
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 ;
|
||||
</pre>
|
||||
|
||||
Places require different prepositions to express location; in some languages
|
||||
also the directional preposition varies, but in English we use <tt>to</tt>, as
|
||||
defined by <tt>mkPlace</tt>.
|
||||
<pre>
|
||||
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" ;
|
||||
</pre>
|
||||
|
||||
Currencies; <tt>crown</tt> is ambiguous between Danish and Swedish crowns.
|
||||
<pre>
|
||||
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") ;
|
||||
</pre>
|
||||
|
||||
Nationalities
|
||||
<pre>
|
||||
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" ;
|
||||
</pre>
|
||||
|
||||
Actions: the predication patterns are very often language-dependent.
|
||||
<pre>
|
||||
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) ;
|
||||
</pre>
|
||||
|
||||
miscellaneous
|
||||
<pre>
|
||||
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) ;
|
||||
</pre>
|
||||
|
||||
Building phrases from strings is complicated: the solution is to use
|
||||
mkText : Text -> Text -> Text ;
|
||||
<pre>
|
||||
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))) ;
|
||||
</pre>
|
||||
|
||||
Relations are expressed as <i>my wife</i> or <i>my son's wife</i>, as defined by <tt>xOf</tt>
|
||||
below. Languages without productive genitives must use an equivalent of
|
||||
<i>the wife of my son</i> for non-pronouns.
|
||||
<pre>
|
||||
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 ;
|
||||
</pre>
|
||||
|
||||
week days
|
||||
<pre>
|
||||
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" ;
|
||||
</pre>
|
||||
|
||||
auxiliaries
|
||||
<pre>
|
||||
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 ;
|
||||
|
||||
}
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
</pre>
|
||||
|
||||
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.
|
||||
<pre>
|
||||
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"
|
||||
</pre>
|
||||
|
||||
<pre>
|
||||
NNumeral : Numeral -> Number ; -- numeral in words, e.g. "twenty"
|
||||
</pre>
|
||||
|
||||
Actions are typically language-dependent, not only lexically but also
|
||||
structurally. However, these ones are mostly functorial.
|
||||
<pre>
|
||||
@@ -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.
|
||||
<pre>
|
||||
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
|
||||
<pre>
|
||||
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
|
||||
</pre>
|
||||
|
||||
family relations
|
||||
<pre>
|
||||
Wife, Husband : Person -> Person ; -- my wife, your husband
|
||||
Son, Daughter : Person -> Person ; -- my son, your husband
|
||||
Children : Person -> Person ; -- my children
|
||||
</pre>
|
||||
|
||||
week days
|
||||
<pre>
|
||||
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
|
||||
|
||||
Tomorrow : Date ;
|
||||
|
||||
}
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@ concrete PhrasebookBul of Phrasebook =
|
||||
Prelude in {
|
||||
|
||||
lin
|
||||
PGreeting g = lin Text (ss g.s) ;
|
||||
PGreeting g = lin Text g ;
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@ concrete PhrasebookPol of Phrasebook =
|
||||
Prelude in {
|
||||
|
||||
lin
|
||||
PGreeting g = lin Text (ss g.s) ;
|
||||
PGreeting g = lin Text g ;
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@ concrete PhrasebookRus of Phrasebook =
|
||||
Prelude in {
|
||||
|
||||
lin
|
||||
PGreeting g = lin Text (ss g.s) ;
|
||||
PGreeting g = lin Text g ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
-}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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};
|
||||
}
|
||||
|
||||
@@ -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 <lin Numeral num : Numeral> curr ;
|
||||
AmountCurrency num curr = mkNP num curr ;
|
||||
|
||||
ObjItem i = i ;
|
||||
ObjNumber n k = mkNP <lin Numeral n : Numeral> 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 <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 ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
@@ -23,3 +23,4 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 <lin Numeral num : Numeral> L.year_N) ;
|
||||
AHasChildren p num = mkCl p.name have_V2 (mkNP <lin Numeral num : Numeral> 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 ;
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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") ;
|
||||
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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" ;
|
||||
|
||||
|
||||
--}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 :
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
History
|
||||
</P>
|
||||
<UL>
|
||||
<LI>10 April. Some additions in API, comments in implementation; regenerated clones.
|
||||
<LI>8 April. Added German.
|
||||
<LI>7 April. Added the Clone script, applied to initiate the rest of MOLTO languages.
|
||||
<LI>6 April. Version 0.4: weekdays, nationalities
|
||||
@@ -193,12 +194,21 @@ The basic things "everyone" can do is
|
||||
<P>
|
||||
The missing concrete syntax entries are added to the <CODE>Words</CODE><I>L</I><CODE>.gf</CODE>
|
||||
files for each language <I>L</I>. The
|
||||
<A HREF="http://www.grammaticalframework.org/lib/doc/synopsis.html#toc78">morphological paradigms</A>
|
||||
<A HREF="http://code.haskell.org/gf/lib/doc/synopsis.html#toc78">morphological paradigms</A>
|
||||
of the GF resource library should be used. Actions (prefixed with <CODE>A</CODE>, as <CODE>AWant</CODE>) are
|
||||
a little more demanding, since they also require syntax constructors. Greetings (prefixed
|
||||
with <CODE>G</CODE>) are pure strings.
|
||||
</P>
|
||||
<P>
|
||||
Some explanations can be found in the
|
||||
<A HREF="Implementation.html">implementation document</A>, which is produced from the
|
||||
concrete syntax files
|
||||
<A HREF="http://code.haskell.org/gf/examples/phrasebook/SentencesI.gf"><CODE>SentencesI.gf</CODE></A>
|
||||
and
|
||||
<A HREF="http://code.haskell.org/gf/examples/phrasebook/WordsEng.gf"><CODE>WordsEng.gf</CODE></A>
|
||||
by <CODE>make doc</CODE>.
|
||||
</P>
|
||||
<P>
|
||||
Here are the steps to follow for contributors:
|
||||
</P>
|
||||
<OL>
|
||||
|
||||
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user