1
0
forked from GitHub/gf-core

regenerated clones with complete abstract and ready-maked Lexicon-based words in Phrasebook

This commit is contained in:
aarne
2010-04-10 08:18:03 +00:00
parent d505fa5b67
commit 50a2e2ea93
43 changed files with 2203 additions and 1265 deletions

View File

@@ -2,6 +2,7 @@ module Main where
import Control.Monad import Control.Monad
import Data.Maybe import Data.Maybe
import Data.Char
import System.Cmd import System.Cmd
import System.Directory import System.Directory
import System.Environment import System.Environment
@@ -10,17 +11,21 @@ import System.Exit
-- To clone a project from one language to another: -- 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 -- 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 -- Syntax: runghc Clone FROM TO
-- Example: runhugs Clone Swe Nor -- 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 modules = "Phrasebook":"Sentences":specifics
specifics = ["Words","Greetings"] specifics = ["Words","Greetings"]
commons = ["Apple","Beer","Bread","Fish","Milk","Salt","Water","Wine",
"Bad","Cold","Good","Warm","AHasChildren"]
main = do main = do
@@ -42,7 +47,9 @@ replaceLang s1 s2 = repl where
lgs = 3 -- length s1 lgs = 3 -- length s1
-- the file name has the form p....pLLL.gf, i.e. 3-letter lang name, suffix .gf -- 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 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 isJment ws = case ws of
k:_ | elem k ["flags","lin","lincat","oper","param"] -> True k:_ | elem k ["flags","lin","lincat","oper","param"] -> True
_ -> False _ -> 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

View File

@@ -8,7 +8,8 @@ concrete DisambPhrasebookEng of Phrasebook = PhrasebookEng -
LangNat, -- CitiNat, LangNat, -- CitiNat,
GExcuse, GExcusePol, GExcuse, GExcusePol,
GSorry, GSorryPol, GSorry, GSorryPol,
GPleaseGive, GPleaseGivePol GPleaseGive, GPleaseGivePol,
GNiceToMeetYou, GNiceToMeetYouPol
] ]
** open SyntaxEng, ParadigmsEng, Prelude in { ** open SyntaxEng, ParadigmsEng, Prelude in {
lin lin
@@ -28,14 +29,16 @@ lin
GSorryPol = pol "sorry" ; GSorryPol = pol "sorry" ;
GPleaseGive = fam "please" ; GPleaseGive = fam "please" ;
GPleaseGivePol = pol "please" ; GPleaseGivePol = pol "please" ;
GNiceToMeetYou = fam "nice to meet you" ;
GNiceToMeetYouPol = pol "nice to meet you" ;
oper oper
fam : Str -> SS = \s -> postfixSS "(familiar)" (ss s) ; fam : Str -> SS = \s -> postfixSS "(familiar)" (ss s) ;
pol : Str -> SS = \s -> postfixSS "(polite)" (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) ; {name = mkNP (mkNP p) (ParadigmsEng.mkAdv s) ;
isPron = False ; -- to show the disambiguation isPron = False ; -- to show the disambiguation
poss = mkDet youSg_Pron poss = SyntaxEng.mkQuant youSg_Pron
} ; } ;
} }

View File

@@ -1,28 +1,28 @@
concrete GreetingsBul of Greetings = open Prelude in { concrete GreetingsBul of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "bye" ;
-- GCheers = ss "skål" ; -- GCheers = ss "cheers" ;
-- GDamn = ss "fan" ; -- GDamn = ss "damn" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "excuse me" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "good afternoon" ; ----
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "good evening" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "good morning" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "good night" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "goodbye" ;
-- GHello = ss "hej" ; -- GHello = ss "hello" ;
-- GHelp = ss "hlp" ; -- GHelp = ss "help" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "how are you" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "look out" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "please" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "see you soon" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "sorry" ;
-- GThanks = ss "tack" ; -- GThanks = ss "thank you" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "the bill" ;
--
-- } --}
} }

View File

@@ -1,30 +1,31 @@
concrete GreetingsCat of Greetings = open Prelude in { concrete GreetingsCat of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "ciao" ; -- GBye = ss "ciao" ;
-- GCheers = ss "cincin" ; -- GCheers = ss "cincin" ;
-- GDamn = ss "maledizione" ; -- GDamn = ss "maledizione" ;
-- GExcuse = ss "scusa" ; -- GExcuse = ss "scusa" ;
-- GExcusePol = ss "scusi" ; -- GExcusePol = ss "scusi" ;
-- GGoodDay = ss "buongiorno" ; -- GGoodDay = ss "buongiorno" ;
-- GGoodEvening = ss "buona sera" ; -- GGoodEvening = ss "buona sera" ;
-- GGoodMorning = ss "buongiorno" ; -- GGoodMorning = ss "buongiorno" ;
-- GGoodNight = ss "buona notte" ; -- GGoodNight = ss "buona notte" ;
-- GGoodbye = ss "arrivederci" ; -- GGoodbye = ss "arrivederci" ;
-- GHello = ss "ciao" ; -- GHello = ss "ciao" ;
-- GHelp = ss "aiuto" ; -- GHelp = ss "aiuto" ;
-- GHowAreYou = ss "come sta" ; -- GHowAreYou = ss "come sta" ;
-- GLookOut = ss "attenzione" ; -- GLookOut = ss "attenzione" ;
-- -- GNiceToMeetYou = ss "piacevole" ; ---- -- GNiceToMeetYou = ss "piacere di conoscerti" ;
-- GPleaseGive, GPleaseGivePol = ss "per favore" ; -- GNiceToMeetYouPol = ss "piacere di conoscerLa" ;
-- GSeeYouSoon = ss "a presto" ; ---- -- GPleaseGive, GPleaseGivePol = ss "per favore" ;
-- GSorry = ss "scusami" ; ---- -- GSeeYouSoon = ss "a presto" ; ----
-- GSorryPol = ss "scusimi" ; ---- -- GSorry = ss "scusami" ; ----
-- GThanks = ss "grazie" ; -- GSorryPol = ss "scusimi" ; ----
-- GTheCheck = ss "il conto" ; -- GThanks = ss "grazie" ;
-- -- GTheCheck = ss "il conto" ;
-- }
--}
} }

View File

@@ -1,28 +1,28 @@
concrete GreetingsDan of Greetings = open Prelude in { concrete GreetingsDan of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "hej då" ;
-- GCheers = ss "skål" ; -- GCheers = ss "skål" ;
-- GDamn = ss "fan" ; -- GDamn = ss "fan" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "ursäkta" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "god dag" ;
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "god afton" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "god morgon" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "god natt" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "hej då" ;
-- GHello = ss "hej" ; -- GHello = ss "hej" ;
-- GHelp = ss "hjälp" ; -- GHelp = ss "hjälp" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "hur står det till" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "se upp" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "var så god" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "vi ses snart" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "förlåt" ;
-- GThanks = ss "tack" ; -- GThanks = ss "tack" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "notan" ;
--
-- } --}
} }

View File

@@ -1,28 +1,28 @@
concrete GreetingsDut of Greetings = open Prelude in { concrete GreetingsDut of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "hej då" ;
-- GCheers = ss "skål" ; -- GCheers = ss "skål" ;
-- GDamn = ss "fan" ; -- GDamn = ss "fan" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "ursäkta" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "god dag" ;
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "god afton" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "god morgon" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "god natt" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "hej då" ;
-- GHello = ss "hej" ; -- GHello = ss "hej" ;
-- GHelp = ss "hjälp" ; -- GHelp = ss "hjälp" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "hur står det till" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "se upp" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "var så god" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "vi ses snart" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "förlåt" ;
-- GThanks = ss "tack" ; -- GThanks = ss "tack" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "notan" ;
--
-- } --}
} }

View File

@@ -17,7 +17,7 @@ lin
GHelp = ss "help" ; GHelp = ss "help" ;
GHowAreYou = ss "how are you" ; GHowAreYou = ss "how are you" ;
GLookOut = ss "look out" ; GLookOut = ss "look out" ;
GNiceToMeetYou = ss "nice to meet you" ; GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ;
GPleaseGive, GPleaseGivePol = ss "please" ; GPleaseGive, GPleaseGivePol = ss "please" ;
GSeeYouSoon = ss "see you soon" ; GSeeYouSoon = ss "see you soon" ;
GSorry, GSorryPol = ss "sorry" ; GSorry, GSorryPol = ss "sorry" ;

View File

@@ -18,7 +18,8 @@ lin
GHelp = ss "aiuto" ; GHelp = ss "aiuto" ;
GHowAreYou = ss "come sta" ; GHowAreYou = ss "come sta" ;
GLookOut = ss "attenzione" ; GLookOut = ss "attenzione" ;
-- GNiceToMeetYou = ss "piacevole" ; ---- GNiceToMeetYou = ss "piacere di conoscerti" ;
GNiceToMeetYouPol = ss "piacere di conoscerLa" ;
GPleaseGive, GPleaseGivePol = ss "per favore" ; GPleaseGive, GPleaseGivePol = ss "per favore" ;
GSeeYouSoon = ss "a presto" ; ---- GSeeYouSoon = ss "a presto" ; ----
GSorry = ss "scusami" ; ---- GSorry = ss "scusami" ; ----

View File

@@ -1,28 +1,28 @@
concrete GreetingsNor of Greetings = open Prelude in { concrete GreetingsNor of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "hej då" ;
-- GCheers = ss "skål" ; -- GCheers = ss "skål" ;
-- GDamn = ss "fan" ; -- GDamn = ss "fan" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "ursäkta" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "god dag" ;
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "god afton" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "god morgon" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "god natt" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "hej då" ;
-- GHello = ss "hej" ; -- GHello = ss "hej" ;
-- GHelp = ss "hjälp" ; -- GHelp = ss "hjälp" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "hur står det till" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "se upp" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "var så god" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "vi ses snart" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "förlåt" ;
-- GThanks = ss "tack" ; -- GThanks = ss "tack" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "notan" ;
--
-- } --}
} }

View File

@@ -1,28 +1,28 @@
concrete GreetingsPol of Greetings = open Prelude in { concrete GreetingsPol of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "bye" ;
-- GCheers = ss "skål" ; -- GCheers = ss "cheers" ;
-- GDamn = ss "fan" ; -- GDamn = ss "damn" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "excuse me" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "good afternoon" ; ----
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "good evening" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "good morning" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "good night" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "goodbye" ;
-- GHello = ss "hej" ; -- GHello = ss "hello" ;
-- GHelp = ss "hlp" ; -- GHelp = ss "help" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "how are you" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "look out" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "please" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "see you soon" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "sorry" ;
-- GThanks = ss "tack" ; -- GThanks = ss "thank you" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "the bill" ;
--
-- } --}
} }

View File

@@ -1,28 +1,28 @@
concrete GreetingsRus of Greetings = open Prelude in { concrete GreetingsRus of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "hej då" ; -- GBye = ss "bye" ;
-- GCheers = ss "skål" ; -- GCheers = ss "cheers" ;
-- GDamn = ss "fan" ; -- GDamn = ss "damn" ;
-- GExcuse, GExcusePol = ss "ursäkta" ; -- GExcuse, GExcusePol = ss "excuse me" ;
-- GGoodDay = ss "god dag" ; -- GGoodDay = ss "good afternoon" ; ----
-- GGoodEvening = ss "god afton" ; -- GGoodEvening = ss "good evening" ;
-- GGoodMorning = ss "god morgon" ; -- GGoodMorning = ss "good morning" ;
-- GGoodNight = ss "god natt" ; -- GGoodNight = ss "good night" ;
-- GGoodbye = ss "hej då" ; -- GGoodbye = ss "goodbye" ;
-- GHello = ss "hej" ; -- GHello = ss "hello" ;
-- GHelp = ss "hlp" ; -- GHelp = ss "help" ;
-- GHowAreYou = ss "hur står det till" ; -- GHowAreYou = ss "how are you" ;
-- GLookOut = ss "se upp" ; -- GLookOut = ss "look out" ;
-- GNiceToMeetYou = ss "trevligt att träffas" ; -- GNiceToMeetYou, GNiceToMeetYouPol = ss "nice to meet you" ;
-- GPleaseGive, GPleaseGivePol = ss "var så god" ; -- GPleaseGive, GPleaseGivePol = ss "please" ;
-- GSeeYouSoon = ss "vi ses snart" ; -- GSeeYouSoon = ss "see you soon" ;
-- GSorry, GSorryPol = ss "förlåt" ; -- GSorry, GSorryPol = ss "sorry" ;
-- GThanks = ss "tack" ; -- GThanks = ss "thank you" ;
-- GTheCheck = ss "notan" ; -- GTheCheck = ss "the bill" ;
--
-- } --}
} }

View File

@@ -1,30 +1,31 @@
concrete GreetingsSpa of Greetings = open Prelude in { concrete GreetingsSpa of Greetings = open Prelude in {
-- lincat --lincat
-- Greeting = SS ; -- Greeting = SS ;
--
-- lin --lin
-- GBye = ss "ciao" ; -- GBye = ss "ciao" ;
-- GCheers = ss "cincin" ; -- GCheers = ss "cincin" ;
-- GDamn = ss "maledizione" ; -- GDamn = ss "maledizione" ;
-- GExcuse = ss "scusa" ; -- GExcuse = ss "scusa" ;
-- GExcusePol = ss "scusi" ; -- GExcusePol = ss "scusi" ;
-- GGoodDay = ss "buongiorno" ; -- GGoodDay = ss "buongiorno" ;
-- GGoodEvening = ss "buona sera" ; -- GGoodEvening = ss "buona sera" ;
-- GGoodMorning = ss "buongiorno" ; -- GGoodMorning = ss "buongiorno" ;
-- GGoodNight = ss "buona notte" ; -- GGoodNight = ss "buona notte" ;
-- GGoodbye = ss "arrivederci" ; -- GGoodbye = ss "arrivederci" ;
-- GHello = ss "ciao" ; -- GHello = ss "ciao" ;
-- GHelp = ss "aiuto" ; -- GHelp = ss "aiuto" ;
-- GHowAreYou = ss "come sta" ; -- GHowAreYou = ss "come sta" ;
-- GLookOut = ss "attenzione" ; -- GLookOut = ss "attenzione" ;
-- -- GNiceToMeetYou = ss "piacevole" ; ---- -- GNiceToMeetYou = ss "piacere di conoscerti" ;
-- GPleaseGive, GPleaseGivePol = ss "per favore" ; -- GNiceToMeetYouPol = ss "piacere di conoscerLa" ;
-- GSeeYouSoon = ss "a presto" ; ---- -- GPleaseGive, GPleaseGivePol = ss "per favore" ;
-- GSorry = ss "scusami" ; ---- -- GSeeYouSoon = ss "a presto" ; ----
-- GSorryPol = ss "scusimi" ; ---- -- GSorry = ss "scusami" ; ----
-- GThanks = ss "grazie" ; -- GSorryPol = ss "scusimi" ; ----
-- GTheCheck = ss "il conto" ; -- GThanks = ss "grazie" ;
-- -- GTheCheck = ss "il conto" ;
-- }
--}
} }

View File

@@ -17,7 +17,7 @@ lin
GHelp = ss "hjälp" ; GHelp = ss "hjälp" ;
GHowAreYou = ss "hur står det till" ; GHowAreYou = ss "hur står det till" ;
GLookOut = ss "se upp" ; GLookOut = ss "se upp" ;
GNiceToMeetYou = ss "trevligt att träffas" ; GNiceToMeetYou, GNiceToMeetYouPol = ss "trevligt att träffas" ;
GPleaseGive, GPleaseGivePol = ss "var så god" ; GPleaseGive, GPleaseGivePol = ss "var så god" ;
GSeeYouSoon = ss "vi ses snart" ; GSeeYouSoon = ss "vi ses snart" ;
GSorry, GSorryPol = ss "förlåt" ; GSorry, GSorryPol = ss "förlåt" ;

View 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 &lt;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>

View File

@@ -11,11 +11,16 @@ koe:
gf -make PhrasebookEng.gf PhrasebookFre.gf DisambPhrasebookEng.gf gf -make PhrasebookEng.gf PhrasebookFre.gf DisambPhrasebookEng.gf
missing: 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: doc:
cat Sentences.gf Words.gf >Ontology.gf cat Sentences.gf Words.gf >Ontology.gf
gfdoc Ontology.gf gfdoc Ontology.gf
txt2tags -thtml phrasebook.txt
rm -f Ontology.gf rm -f Ontology.gf
cat SentencesI.gf WordsEng.gf >Implementation.gf
gfdoc Implementation.gf
txt2tags -thtml phrasebook.txt
rm -f Ontology.gf Implementation.gf

View File

@@ -43,7 +43,7 @@ are defined in other modules.
Day ; -- weekday type e.g. "Friday" Day ; -- weekday type e.g. "Friday"
Date ; -- definite date e.g. "on Friday" Date ; -- definite date e.g. "on Friday"
Name ; -- name of person e.g. "NN" 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> </pre>
Many of the categories are accessible as Phrases, i.e. as translation units. 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 ; PObject : Object -> Phrase ;
PKind : Kind -> Phrase ; PKind : Kind -> Phrase ;
PQuality : Quality -> Phrase ; PQuality : Quality -> Phrase ;
PNumeral : Numeral -> Phrase ; PNumber : Number -> Phrase ;
PPlace : Place -> Phrase ; PPlace : Place -> Phrase ;
PPlaceKind : PlaceKind-> Phrase ; PPlaceKind : PlaceKind-> Phrase ;
PCurrency : Currency -> Phrase ; PCurrency : Currency -> Phrase ;
@@ -91,7 +91,7 @@ This is the way to build propositions about persons.
Here are some general syntactic constructions. Here are some general syntactic constructions.
<pre> <pre>
ObjItem : Item -> Object ; -- this pizza ObjItem : Item -> Object ; -- this pizza
ObjNumber : Numeral -> Kind -> Object ; -- five pizzas ObjNumber : Number -> Kind -> Object ; -- five pizzas
ObjIndef : Kind -> Object ; -- a pizza ObjIndef : Kind -> Object ; -- a pizza
SuchKind : Quality -> Kind -> Kind ; -- Italian pizza SuchKind : Quality -> Kind -> Kind ; -- Italian pizza
@@ -105,7 +105,7 @@ Determiners.
This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas
The, Thes : Kind -> Item ; -- the pizza, the 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 ThePlace : PlaceKind -> Place ; -- the bar
@@ -125,6 +125,10 @@ Determiners.
NameNN : Name ; -- the name "NN" NameNN : Name ; -- the name "NN"
</pre> </pre>
<pre>
NNumeral : Numeral -> Number ; -- numeral in words, e.g. "twenty"
</pre>
Actions are typically language-dependent, not only lexically but also Actions are typically language-dependent, not only lexically but also
structurally. However, these ones are mostly functorial. structurally. However, these ones are mostly functorial.
<pre> <pre>
@@ -218,13 +222,19 @@ nationalities, countries, languages, citizenships
Actions (which can be expressed by different structures in different languages). Actions (which can be expressed by different structures in different languages).
Notice that also negations and questions can be formed from these. Notice that also negations and questions can be formed from these.
<pre> <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 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 AHungry : Person -> Action ; -- I am hungry
AIll : Person -> Action ; -- I am ill AIll : Person -> Action ; -- I am ill
AKnow : Person -> Action ; -- I (don't) know AKnow : Person -> Action ; -- I (don't) know
ALike : Person -> Item -> Action ; -- I like this pizza ALike : Person -> Item -> Action ; -- I like this pizza
ALive : Person -> Country -> Action ; -- I live in Sweden ALive : Person -> Country -> Action ; -- I live in Sweden
ALove : Person -> Person -> Action ; -- I love you 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 AScared : Person -> Action ; -- I am scared
ASpeak : Person -> Language -> Action ; -- I speak Finnish ASpeak : Person -> Language -> Action ; -- I speak Finnish
AThirsty : Person -> Action ; -- I am thirsty AThirsty : Person -> Action ; -- I am thirsty
@@ -236,7 +246,10 @@ Notice that also negations and questions can be formed from these.
miscellaneous phrases miscellaneous phrases
<pre> <pre>
QWhatAge : Person -> Question ; -- how many years are you
QWhatName : Person -> Question ; -- what is your name 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 PropOpen : Place -> Proposition ; -- the museum is open
PropClosed : Place -> Proposition ; -- the museum is closed PropClosed : Place -> Proposition ; -- the museum is closed
@@ -245,14 +258,23 @@ miscellaneous phrases
PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays
PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays
HowMuchCost : Item -> Question ; -- how much does the pizza cost PSeeYou : Date -> Phrase ; -- see you on Monday
ItCost : Item -> Price -> Proposition ; -- the pizza costs five euros 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> </pre>
week days week days
<pre> <pre>
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ; Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
Tomorrow : Date ;
} }
</pre> </pre>

View File

@@ -7,6 +7,6 @@ concrete PhrasebookBul of Phrasebook =
Prelude in { Prelude in {
lin lin
PGreeting g = lin Text (ss g.s) ; PGreeting g = lin Text g ;
} }

View File

@@ -7,6 +7,6 @@ concrete PhrasebookPol of Phrasebook =
Prelude in { Prelude in {
lin lin
PGreeting g = lin Text (ss g.s) ; PGreeting g = lin Text g ;
} }

View File

@@ -7,6 +7,6 @@ concrete PhrasebookRus of Phrasebook =
Prelude in { Prelude in {
lin lin
PGreeting g = lin Text (ss g.s) ; PGreeting g = lin Text g ;
} }

View File

@@ -36,7 +36,7 @@ abstract Sentences = Numeral ** {
Day ; -- weekday type e.g. "Friday" Day ; -- weekday type e.g. "Friday"
Date ; -- definite date e.g. "on Friday" Date ; -- definite date e.g. "on Friday"
Name ; -- name of person e.g. "NN" 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. -- Many of the categories are accessible as Phrases, i.e. as translation units.
@@ -47,7 +47,7 @@ abstract Sentences = Numeral ** {
PObject : Object -> Phrase ; PObject : Object -> Phrase ;
PKind : Kind -> Phrase ; PKind : Kind -> Phrase ;
PQuality : Quality -> Phrase ; PQuality : Quality -> Phrase ;
PNumeral : Numeral -> Phrase ; PNumber : Number -> Phrase ;
PPlace : Place -> Phrase ; PPlace : Place -> Phrase ;
PPlaceKind : PlaceKind-> Phrase ; PPlaceKind : PlaceKind-> Phrase ;
PCurrency : Currency -> Phrase ; PCurrency : Currency -> Phrase ;
@@ -79,7 +79,7 @@ abstract Sentences = Numeral ** {
-- Here are some general syntactic constructions. -- Here are some general syntactic constructions.
ObjItem : Item -> Object ; -- this pizza ObjItem : Item -> Object ; -- this pizza
ObjNumber : Numeral -> Kind -> Object ; -- five pizzas ObjNumber : Number -> Kind -> Object ; -- five pizzas
ObjIndef : Kind -> Object ; -- a pizza ObjIndef : Kind -> Object ; -- a pizza
SuchKind : Quality -> Kind -> Kind ; -- Italian pizza SuchKind : Quality -> Kind -> Kind ; -- Italian pizza
@@ -92,7 +92,7 @@ abstract Sentences = Numeral ** {
This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas
The, Thes : Kind -> Item ; -- the pizza, the 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 ThePlace : PlaceKind -> Place ; -- the bar
@@ -113,6 +113,8 @@ abstract Sentences = Numeral ** {
---- NameString : String -> Name ; ---- creates ambiguities with all words --% ---- 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 -- Actions are typically language-dependent, not only lexically but also
-- structurally. However, these ones are mostly functorial. -- structurally. However, these ones are mostly functorial.

View File

@@ -1,12 +1,13 @@
concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [ concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [
IFemale, YouFamFemale, YouPolFemale PersonName ---- stack overflow
,IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale
] ]
with with
(Syntax = SyntaxCat), (Syntax = SyntaxCat),
(Symbolic = SymbolicCat), (Symbolic = SymbolicCat),
(Lexicon = LexiconCat) ** (Lexicon = LexiconCat) **
open SyntaxCat, ExtraCat, Prelude in { open SyntaxCat, ExtraCat, Prelude in {
{-
lin lin
IFemale = IFemale =
{name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; {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} ; {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolMale = YouPolMale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ; {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;
-}
} }

View File

@@ -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), (Syntax = SyntaxFin),
(Symbolic = SymbolicFin), (Symbolic = SymbolicFin),
(Lexicon = LexiconFin) ** open SyntaxFin, ExtraFin, (P = ParadigmsFin), (V = VerbFin) in { (Lexicon = LexiconFin) ** open SyntaxFin, ExtraFin, (P = ParadigmsFin), (V = VerbFin) in {
@@ -6,4 +9,11 @@ concrete SentencesFin of Sentences = NumeralFin ** SentencesI - [Is,NameNN] with
lin lin
Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista
NameNN = mkNP (P.mkPN (P.mkN "NN" "NN:iä")) ; 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};
}

View File

@@ -1,3 +1,7 @@
--1 Implementation of MOLTO Phrasebook
--2 The functor for (mostly) common structures
incomplete concrete SentencesI of Sentences = Numeral ** incomplete concrete SentencesI of Sentences = Numeral **
open open
Syntax, Syntax,
@@ -15,19 +19,20 @@ incomplete concrete SentencesI of Sentences = Numeral **
Quality = AP ; Quality = AP ;
Property = A ; Property = A ;
Object = NP ; Object = NP ;
Place = {name : NP ; at : Adv ; to : Adv} ; Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv} ;
PlaceKind = {name : CN ; at : Prep ; to : Prep} ; PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ;
Currency = CN ; Currency = CN ;
Price = NP ; Price = NP ;
Action = Cl ; Action = Cl ;
Person = {name : NP ; isPron : Bool ; poss : Quant} ; Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ;
Nationality = {lang : NP ; prop : A ; country : NP} ; Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ;
Language = NP ; Language = NP ;
Citizenship = A ; Citizenship = A ;
Country = NP ; Country = NP ;
Day = {name : NP ; point : Adv ; habitual : Adv} ; Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ;
Date = Adv ; Date = Adv ;
Name = NP ; Name = NP ;
Number = Card ;
lin lin
PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.' PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.'
PQuestion 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) ; PObject x = mkPhrase (mkUtt x) ;
PKind x = mkPhrase (mkUtt x) ; PKind x = mkPhrase (mkUtt x) ;
PQuality 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) ; PPlace x = mkPhrase (mkUtt x.name) ;
PPlaceKind x = mkPhrase (mkUtt x.name) ; PPlaceKind x = mkPhrase (mkUtt x.name) ;
PCurrency x = mkPhrase (mkUtt x) ; PCurrency x = mkPhrase (mkUtt x) ;
@@ -59,10 +64,10 @@ incomplete concrete SentencesI of Sentences = Numeral **
PropAction a = a ; PropAction a = a ;
AmountCurrency num curr = mkNP <lin Numeral num : Numeral> curr ; AmountCurrency num curr = mkNP num curr ;
ObjItem i = i ; ObjItem i = i ;
ObjNumber n k = mkNP <lin Numeral n : Numeral> k ; ObjNumber n k = mkNP n k ;
ObjIndef k = mkNP a_Quant k ; ObjIndef k = mkNP a_Quant k ;
This kind = mkNP this_Quant kind ; This kind = mkNP this_Quant kind ;
@@ -97,17 +102,73 @@ incomplete concrete SentencesI of Sentences = Numeral **
PersonName n = PersonName n =
{name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used {name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used
---- NameString s = symb s ; ---- NameString s = symb s ; --%
NameNN = symb "NN" ; NameNN = symb "NN" ;
NNumeral n = mkCard <lin Numeral n : Numeral> ;
AHave p kind = mkCl p.name have_V2 (mkNP kind) ; AHave p kind = mkCl p.name have_V2 (mkNP kind) ;
ACitizen p n = mkCl p.name n ; ACitizen p n = mkCl p.name n ;
ABePlace p place = mkCl p.name place.at ; ABePlace p place = mkCl p.name place.at ;
oper oper
-- These operations are used internally in Sentences.
mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p -> mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p ->
{name = mkNP p ; isPron = True ; poss = mkQuant 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 ;
} }

View File

@@ -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), (Syntax = SyntaxRus),
--- (Symbolic = SymbolicRus), -- (Symbolic = SymbolicRus),
(Lexicon = LexiconRus) ** open ParadigmsRus in { (Lexicon = LexiconRus) ;
flags coding = utf8 ;
lin NameNN = mkNP (mkPN "нн" masculine animate) ;
}

View File

@@ -23,3 +23,4 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [
} }

View File

@@ -78,9 +78,11 @@ abstract Words = Sentences ** {
-- Actions (which can be expressed by different structures in different languages). -- Actions (which can be expressed by different structures in different languages).
-- Notice that also negations and questions can be formed from these. -- Notice that also negations and questions can be formed from these.
AHasAge : Person -> Numeral -> Action ; -- I am seventy years AHasAge : Person -> Number -> Action ; -- I am seventy years
AHasChildren: Person -> Numeral -> Action ; -- I have six children AHasChildren: Person -> Number -> Action ; -- I have six children
AHasName : Person -> Name -> Action ; -- my name is Bond 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 AHungry : Person -> Action ; -- I am hungry
AIll : Person -> Action ; -- I am ill AIll : Person -> Action ; -- I am ill
AKnow : Person -> Action ; -- I (don't) know AKnow : Person -> Action ; -- I (don't) know
@@ -88,6 +90,7 @@ abstract Words = Sentences ** {
ALive : Person -> Country -> Action ; -- I live in Sweden ALive : Person -> Country -> Action ; -- I live in Sweden
ALove : Person -> Person -> Action ; -- I love you ALove : Person -> Person -> Action ; -- I love you
AMarried : Person -> Action ; -- I am married AMarried : Person -> Action ; -- I am married
AReady : Person -> Action ; -- I am ready
AScared : Person -> Action ; -- I am scared AScared : Person -> Action ; -- I am scared
ASpeak : Person -> Language -> Action ; -- I speak Finnish ASpeak : Person -> Language -> Action ; -- I speak Finnish
AThirsty : Person -> Action ; -- I am thirsty AThirsty : Person -> Action ; -- I am thirsty
@@ -100,6 +103,8 @@ abstract Words = Sentences ** {
QWhatAge : Person -> Question ; -- how many years are you QWhatAge : Person -> Question ; -- how many years are you
QWhatName : Person -> Question ; -- what is your name 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 PropOpen : Place -> Proposition ; -- the museum is open
PropClosed : Place -> Proposition ; -- the museum is closed PropClosed : Place -> Proposition ; -- the museum is closed
@@ -108,8 +113,10 @@ abstract Words = Sentences ** {
PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays
PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays
HowMuchCost : Item -> Question ; -- how much does the pizza cost PSeeYou : Date -> Phrase ; -- see you on Monday
ItCost : Item -> Price -> Proposition ; -- the pizza costs five euros PSeeYouPlace : Place -> Date -> Phrase ; -- see you in the bar on Monday
-- family relations
Wife, Husband : Person -> Person ; -- my wife, your husband Wife, Husband : Person -> Person ; -- my wife, your husband
Son, Daughter : Person -> Person ; -- my son, 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 ; Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
Tomorrow : Date ;
} }

View File

@@ -1,134 +1,176 @@
-- (c) 2009 Aarne Ranta under LGPL --2 Implementations of Words, with English as example
concrete WordsBul of Words = SentencesBul ** concrete WordsBul of Words = SentencesBul **
open SyntaxBul, ParadigmsBul, (L = LexiconBul), Prelude in { open
SyntaxBul,
ParadigmsBul,
(L = LexiconBul),
(P = ParadigmsBul),
ExtraBul,
Prelude in {
lin lin
-- kinds of food -- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
--
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "cheese") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_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 ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "delicious" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "expensive" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "fresh" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ; 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
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- defined by $mkPlace$.
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Airport = mkPlace "airport" "at" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Bar = mkPlace "bar" "in" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Church = mkPlace "church" "in" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Cinema = mkPlace "cinema" "at" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Hospital = mkPlace "hospital" "in" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; -- Hotel = mkPlace "hotel" "in" ;
-- -- Museum = mkPlace "museum" "in" ;
-- currencies -- Park = mkPlace "park" "in" ;
-- -- Restaurant = mkPlace "restaurant" "in" ;
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- School = mkPlace "school" "at" ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Shop = mkPlace "shop" "in" ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Station = mkPlace "station" "at" ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Theatre = mkPlace "theatre" "at" ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- Toilet = mkPlace "toilet" "in" ;
-- -- University = mkPlace "university" "at" ;
-- nationalities
-- -- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- English = mkNat "engelsk" "England" ; -- Dollar = mkCN (mkN "dollar") ;
-- Finnish = mkNat "finsk" "Finland" ; -- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Flemish = mkNP (mkPN "flamländska") ; -- Lei = mkCN (mkN "leu" "lei") ;
-- French = mkNat "fransk" "Frankrike" ; -- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Nationalities
-- Swedish = mkNat "svensk" "Sverige" ;
-- -- Belgian = mkA "Belgian" ;
-- actions -- Belgium = mkNP (mkPN "Belgium") ;
-- -- English = mkNat "English" "England" ;
-- AHasName p name = mkCl (nameOf p) name ; -- Finnish = mkNat "Finnish" "Finland" ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- Flemish = mkNP (mkPN "Flemish") ;
-- AIll p = mkCl p.name (mkA "sjuk") ; -- French = mkNat "French" "France" ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- Italian = mkNat "Italian" "Italy" ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- Romanian = mkNat "Romanian" "Romania" ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxBul.mkAdv in_Prep co)) ; -- Swedish = mkNat "Swedish" "Sweden" ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ; -- Actions: the predication patterns are very often language-dependent.
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- ATired p = mkCl p.name (mkA "trött") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AHasRoom p num = mkCl p.name have_V2
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- (mkNP (mkNP a_Det (mkN "room")) (SyntaxBul.mkAdv for_Prep (mkNP num (mkN "person")))) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregBul.cost_V)) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 IrregBul.cost_V) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_Adv ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_Adv ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "ndag" ; -- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "Friday" ;
-- Saturday = mkDay "rdag" ; -- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "ndag" ; -- Sunday = mkDay "Sunday" ;
--
-- oper -- Tomorrow = P.mkAdv "tomorrow" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- auxiliaries
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
-- -- oper
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in -- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- {name = day ; -- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- point = SyntaxBul.mkAdv on_Prep day ;
-- habitual = SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- } ; -- let day = mkNP (mkPN d) in
-- -- mkNPDay day (SyntaxBul.mkAdv on_Prep day)
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- (SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- name = mkCN p ;
-- at = mkPrep i ; -- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- to = to_Prep -- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- } ;
-- -- open_Adv = P.mkAdv "open" ;
-- open_A = mkA "öppen" "öppet" ; -- closed_Adv = P.mkAdv "closed" ;
-- closed_A = mkA "stängd" "stängt" ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ; -- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxBul.mkAdv possess_Prep p.name) --}
-- } ;
-- }
} }

View File

@@ -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 concrete WordsCat of Words = SentencesCat ** open
SyntaxCat, SyntaxCat,
@@ -6,131 +6,169 @@ concrete WordsCat of Words = SentencesCat ** open
(E = ExtraCat), (E = ExtraCat),
(L = LexiconCat), (L = LexiconCat),
(P = ParadigmsCat), (P = ParadigmsCat),
ParadigmsCat in { ParadigmsCat,
Prelude in {
lin
lin
-- kinds -- kinds
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "formaggio") ; -- Cheese = mkCN (mkN "formaggio") ;
-- Coffee = mkCN (mkN "caffè") ; -- Chicken = mkCN (mkN "pollo") ;
-- Coffee = mkCN (mkN "caffè") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "tè") ; -- Tea = mkCN (mkN "tè") ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ; Wine = mkCN L.wine_N ;
-- properties -- properties
Bad = L.bad_A ; 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 ; Cold = L.cold_A ;
-- Delicious = mkA "delizioso" ; -- Delicious = mkA "delizioso" ;
-- Expensive = mkA "caro" ; -- Expensive = mkA "caro" ;
-- Fresh = mkA "fresco" ; -- Fresh = mkA "fresco" ;
Good = L.good_A ; Good = L.good_A ;
Warm = L.warm_A ; Warm = L.warm_A ;
-- -- Suspect = mkA "sospetto" ;
-- -- places
-- -- places
-- Airport = mkPlace (mkN "aeroporto") dative ;
-- Bar = mkPlace (mkN "bar") P.in_Prep ; -- Airport = mkPlace (mkN "aeroporto") dative ;
-- Church = mkPlace (mkN "chiesa") P.in_Prep ; -- Bar = mkPlace (mkN "bar") P.in_Prep ;
-- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; -- Church = mkPlace (mkN "chiesa") P.in_Prep ;
-- Museum = mkPlace (mkN "museo") P.in_Prep ; -- Cinema = mkPlace (mkN "cinema") P.in_Prep ;
-- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; -- Hospital = mkPlace (mkN "ospedale") P.in_Prep ;
-- Station = mkPlace (mkN "stazione" feminine) dative ; -- Hotel = mkPlace (mkN "albergo") P.in_Prep ;
-- Toilet = mkPlace (mkN "bagno") P.in_Prep ; -- Museum = mkPlace (mkN "museo") P.in_Prep ;
-- -- Park = mkPlace (mkN "parco") P.in_Prep ;
-- -- currencies -- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ;
-- -- School = mkPlace (mkN "scuola") P.in_Prep ;
-- DanishCrown = mkCN (mkA "danese") (mkN "corona") ; -- Shop = mkPlace (mkN "negozio") P.in_Prep ;
-- Dollar = mkCN (mkN "dollar") ; -- Station = mkPlace (mkN "stazione" feminine) dative ;
-- Euro = mkCN (mkN "euro" "euro" masculine) ; -- Theatre = mkPlace (mkN "teatro") P.in_Prep ;
-- Lei = mkCN (mkN "lei") ; ---- ? -- Toilet = mkPlace (mkN "bagno") P.in_Prep ;
-- -- University = mkPlace (mkN "università") dative ;
-- -- nationalities
-- -- currencies
-- Belgian = mkA "belgo" ;
-- Belgium = mkNP (mkPN "Belgio") ; -- DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ;
-- English = mkNat "inglese" "Inghilterra" ; -- Dollar = mkCN (mkN "dollar") ;
-- Finnish = mkNat "finlandese" "Finlandia" ; -- Euro = mkCN (mkN "euro" "euro" masculine) ;
-- Flemish = mkNP (mkPN "fiammingo") ; -- Lei = mkCN (mkN "lei") ; ---- ?
-- French = mkNat "francese" "Francia" ; -- SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ;
-- Italian = mkNat "italiano" "Italia" ;
-- Romanian = mkNat "rumeno" "Romania" ; -- nationalities
-- Swedish = mkNat "svedese" "Svezia" ;
-- -- Belgian = mkA "belgo" ;
-- -- actions -- Belgium = mkNP (mkPN "Belgio") ;
-- -- English = mkNat "inglese" "Inghilterra" ;
-- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; -- Finnish = mkNat "finlandese" "Finlandia" ;
-- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; -- Flemish = mkNP (mkPN "fiammingo") ;
-- AIll p = mkCl p.name (mkA "malato") ; -- French = mkNat "francese" "Francia" ;
-- AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ; -- Italian = mkNat "italiano" "Italia" ;
-- ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ; -- Romanian = mkNat "rumeno" "Romania" ;
-- ALive p co = -- Swedish = mkNat "svedese" "Svezia" ;
-- mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxCat.mkAdv P.in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; -- actions
-- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; -- AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
-- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- ATired p = mkCl p.name (mkA "stanco") ; -- AHasRoom p num = mkCl p.name have_V2
-- AUnderstand p = mkCl p.name (mkV "capire") ; -- (mkNP (mkNP a_Det (mkN "camera")) (SyntaxCat.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
-- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ; -- AHasTable p num = mkCl p.name have_V2
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- (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))) ;
-- -- miscellaneous -- AIll p = mkCl p.name (mkA "malato") ;
-- -- AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ;
-- QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ; -- ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ;
-- -- ALive p co =
-- PropOpen p = mkCl p.name open_A ; -- mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxCat.mkAdv P.in_Prep co)) ;
-- PropClosed p = mkCl p.name closed_A ; -- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; -- AMarried p = mkCl p.name (mkA "sposato") ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- AReady p = mkCl p.name (mkA "pronto") ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ;
-- -- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; -- ATired p = mkCl p.name (mkA "stanco") ;
-- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; -- AUnderstand p = mkCl p.name (mkV "capire") ;
-- -- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ;
-- -- week days -- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- Monday = mkDay "lunedì" ;
-- Tuesday = mkDay "martedì" ; -- miscellaneous
-- Wednesday = mkDay "mercoledì" ;
-- Thursday = mkDay "giovedì" ; -- QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ;
-- Friday = mkDay "venerdì" ; -- QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
-- Saturday = mkDay "sabato" ;
-- Sunday = mkDay "domenica" ; -- PropOpen p = mkCl p.name open_A ;
-- -- PropClosed p = mkCl p.name closed_A ;
-- -- auxiliaries -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- oper -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> -- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ;
-- -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> -- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ;
-- let day = mkNP (mkPN d) in
-- {name = day ; -- Building phrases from strings is complicated: the solution is to use
-- point, -- = ParadigmsCat.mkAdv d ; -- mkText : Text -> Text -> Text ;
-- habitual = ParadigmsCat.mkAdv ("il" ++ d) ; ---- ?
-- } ; -- PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ;
-- -- PSeeYouPlace p d =
-- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- mkText (lin Text (ss ("arrivederci")))
-- name = mkCN p ; -- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- at = i ;
-- to = dative -- 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.
-- open_A = mkA "aperto" ;
-- closed_A = mkA "chiuso" ; -- 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" ;
--}
} }

View File

@@ -1,134 +1,167 @@
-- (c) 2009 Aarne Ranta under LGPL -- (c) 2009 Aarne Ranta under LGPL
concrete WordsDan of Words = SentencesDan ** concrete WordsDan of Words = SentencesDan **
open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), Prelude in { open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), ExtraDan, Prelude in {
lin lin
-- kinds of food -- kinds of food
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "kyckling") ;
-- Fish = mkCN L.fish_N ; -- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Milk = mkCN L.milk_N ; Fish = mkCN L.fish_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ; Wine = mkCN L.wine_N ;
-- properties -- properties
--
Bad = L.bad_A ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "färsk" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ; Warm = L.warm_A ;
--
-- places -- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ; -- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ; -- 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 -- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
--
-- nationalities -- nationalities
--
-- Belgian = mkA "belgisk" ; -- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ; -- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ; -- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ; -- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ; -- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ; -- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ; -- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions -- actions
--
-- AHasName p name = mkCl (nameOf p) name ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
-- AIll p = mkCl p.name (mkA "sjuk") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- AHasRoom p num = mkCl p.name have_V2
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ; -- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; -- AHasTable p num = mkCl p.name have_V2
-- AScared p = mkCl p.name (mkA "rädd") ; -- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; -- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHungry p = mkCl p.name (mkA "hungrig") ;
-- ATired p = mkCl p.name (mkA "trött") ; -- AIll p = mkCl p.name (mkA "sjuk") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_A ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_A ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "måndag" ; -- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ; -- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ; -- Sunday = mkDay "söndag" ;
--
-- oper -- Tomorrow = ParadigmsDan.mkAdv "imorgon" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- oper
-- 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 -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- {name = day ; -- let day = mkNP (mkPN d) in
-- point = SyntaxDan.mkAdv on_Prep day ; -- mkNPDay day (SyntaxDan.mkAdv on_Prep day)
-- habitual = SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- (SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- } ;
-- -- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- name = mkCN p ;
-- at = mkPrep i ; -- open_A = mkA "öppen" "öppet" ;
-- to = to_Prep -- closed_A = mkA "stängd" "stängt" ;
-- } ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- open_A = mkA "öppen" "öppet" ; -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- 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)
-- } ;
-- }
} }

View File

@@ -1,134 +1,167 @@
-- (c) 2009 Aarne Ranta under LGPL -- (c) 2009 Aarne Ranta under LGPL
concrete WordsDut of Words = SentencesDut ** concrete WordsDut of Words = SentencesDut **
open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), Prelude in { open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), ExtraDut, Prelude in {
lin lin
-- kinds of food -- kinds of food
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "kyckling") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ; Wine = mkCN L.wine_N ;
-- properties -- properties
Bad = L.bad_A ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "färsk" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ; Warm = L.warm_A ;
--
-- places -- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ; -- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ; -- 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 -- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
--
-- nationalities -- nationalities
--
-- Belgian = mkA "belgisk" ; -- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ; -- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ; -- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ; -- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ; -- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ; -- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ; -- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions -- actions
--
-- AHasName p name = mkCl (nameOf p) name ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
-- AIll p = mkCl p.name (mkA "sjuk") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- AHasRoom p num = mkCl p.name have_V2
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDut.mkAdv in_Prep co)) ; -- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; -- AHasTable p num = mkCl p.name have_V2
-- AScared p = mkCl p.name (mkA "rädd") ; -- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; -- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHungry p = mkCl p.name (mkA "hungrig") ;
-- ATired p = mkCl p.name (mkA "trött") ; -- AIll p = mkCl p.name (mkA "sjuk") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_A ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_A ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "måndag" ; -- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ; -- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ; -- Sunday = mkDay "söndag" ;
--
-- oper -- Tomorrow = ParadigmsDut.mkAdv "imorgon" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- oper
-- 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 -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- {name = day ; -- let day = mkNP (mkPN d) in
-- point = SyntaxDut.mkAdv on_Prep day ; -- mkNPDay day (SyntaxDut.mkAdv on_Prep day)
-- habitual = SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- (SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- } ;
-- -- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- name = mkCN p ;
-- at = mkPrep i ; -- open_A = mkA "öppen" "öppet" ;
-- to = to_Prep -- closed_A = mkA "stängd" "stängt" ;
-- } ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- open_A = mkA "öppen" "öppet" ; -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- 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)
-- } ;
-- }
} }

View File

@@ -1,12 +1,17 @@
-- (c) 2009 Aarne Ranta under LGPL --2 Implementations of Words, with English as example
concrete WordsEng of Words = SentencesEng ** concrete WordsEng of Words = SentencesEng **
open open
SyntaxEng, ParadigmsEng, (L = LexiconEng), (P = ParadigmsEng), SyntaxEng,
IrregEng, ExtraEng, Prelude in { ParadigmsEng,
(L = LexiconEng),
(P = ParadigmsEng),
IrregEng,
ExtraEng,
Prelude in {
lin lin
-- kinds -- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
@@ -23,7 +28,7 @@ concrete WordsEng of Words = SentencesEng **
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_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 ; Bad = L.bad_A ;
Boring = mkA "boring" ; Boring = mkA "boring" ;
@@ -36,7 +41,9 @@ concrete WordsEng of Words = SentencesEng **
Suspect = mkA "suspect" ; Suspect = mkA "suspect" ;
Warm = L.warm_A ; 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" ; Airport = mkPlace "airport" "at" ;
Bar = mkPlace "bar" "in" ; Bar = mkPlace "bar" "in" ;
@@ -54,15 +61,15 @@ concrete WordsEng of Words = SentencesEng **
Toilet = mkPlace "toilet" "in" ; Toilet = mkPlace "toilet" "in" ;
University = mkPlace "university" "at" ; 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") ; Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
Lei = mkCN (mkN "leu" "lei") ; 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" ; Belgian = mkA "Belgian" ;
Belgium = mkNP (mkPN "Belgium") ; Belgium = mkNP (mkPN "Belgium") ;
@@ -74,10 +81,14 @@ concrete WordsEng of Words = SentencesEng **
Romanian = mkNat "Romanian" "Romania" ; Romanian = mkNat "Romanian" "Romania" ;
Swedish = mkNat "Swedish" "Sweden" ; 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) ; AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP <lin Numeral num : Numeral> L.child_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 ; AHasName p name = mkCl (nameOf p) name ;
AHungry p = mkCl p.name (mkA "hungry") ; AHungry p = mkCl p.name (mkA "hungry") ;
AIll p = mkCl p.name (mkA "ill") ; 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)) ; 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 ; ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
AMarried p = mkCl p.name (mkA "married") ; AMarried p = mkCl p.name (mkA "married") ;
AReady p = mkCl p.name (mkA "ready") ;
AScared p = mkCl p.name (mkA "scared") ; AScared p = mkCl p.name (mkA "scared") ;
ASpeak p lang = mkCl p.name (mkV2 IrregEng.speak_V) lang ; ASpeak p lang = mkCl p.name (mkV2 IrregEng.speak_V) lang ;
AThirsty p = mkCl p.name (mkA "thirsty") ; AThirsty p = mkCl p.name (mkA "thirsty") ;
@@ -97,7 +109,9 @@ concrete WordsEng of Words = SentencesEng **
-- miscellaneous -- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; 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 ; PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_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) ; PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_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)) ; -- Building phrases from strings is complicated: the solution is to use
ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ; -- 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") ; Wife = xOf sing (mkN "wife") ;
Husband = xOf sing (mkN "husband") ; Husband = xOf sing (mkN "husband") ;
@@ -125,42 +148,29 @@ concrete WordsEng of Words = SentencesEng **
Saturday = mkDay "Saturday" ; Saturday = mkDay "Saturday" ;
Sunday = mkDay "Sunday" ; Sunday = mkDay "Sunday" ;
Tomorrow = P.mkAdv "tomorrow" ;
-- auxiliaries -- auxiliaries
oper 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 -> mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in let day = mkNP (mkPN d) in
{name = day ; mkNPDay day (SyntaxEng.mkAdv on_Prep day)
point = SyntaxEng.mkAdv on_Prep day ; (SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
habitual = SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
} ;
mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
name = mkCN (mkN p) ; mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
at = P.mkPrep i ;
to = to_Prep
} ;
open_Adv = P.mkAdv "open" ; open_Adv = P.mkAdv "open" ;
closed_Adv = P.mkAdv "closed" ; closed_Adv = P.mkAdv "closed" ;
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)
(SyntaxEng.mkAdv possess_Prep p.name)
} ;
isPron = False ;
poss = SyntaxEng.mkQuant he_Pron -- not used because not pron
} ;
nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ; nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
sing = False ; plur = True ;
} }

View File

@@ -47,6 +47,8 @@ concrete WordsFin of Words = SentencesFin **
Station = mkPlace (mkN "asema") lla ; Station = mkPlace (mkN "asema") lla ;
Hospital = mkPlace (mkN "sairaala") ssa ; Hospital = mkPlace (mkN "sairaala") ssa ;
Church = mkPlace (mkN "kirkko") ssa ; Church = mkPlace (mkN "kirkko") ssa ;
Cinema = mkPlace (mkN "elokuva" (mkN "teatteri")) ssa ;
Theatre = mkPlace (mkN "teatteri") ssa ;
Shop = mkPlace (mkN "kauppa") ssa ; Shop = mkPlace (mkN "kauppa") ssa ;
Park = mkPlace (mkN "puisto") ssa ; Park = mkPlace (mkN "puisto") ssa ;
Hotel = mkPlace (mkN "hotelli") ssa ; Hotel = mkPlace (mkN "hotelli") ssa ;
@@ -55,9 +57,11 @@ concrete WordsFin of Words = SentencesFin **
-- currencies -- currencies
DanishCrown = mkCN (mkN "Tanskan kruunu") | mkCN (mkN "kruunu") ;
Dollar = mkCN (mkN "dollari") ; Dollar = mkCN (mkN "dollari") ;
Euro = mkCN (mkN "euro") ; Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "lei") ; Lei = mkCN (mkN "lei") ;
SwedishCrown = mkCN (mkN "Ruotsin kruunu") | mkCN (mkN "kruunu") ;
-- nationalities -- nationalities
@@ -77,13 +81,27 @@ concrete WordsFin of Words = SentencesFin **
-- actions -- 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 ; 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ä")) ; AHungry p = mkCl p.name have_V2 (mkNP (mkN "nälkä")) ;
AIll p = mkCl p.name (mkA "sairas") ; AIll p = mkCl p.name (mkA "sairas") ;
AKnow p = mkCl p.name (mkV "tietää") ; AKnow p = mkCl p.name (mkV "tietää") ;
ALike p item = mkCl p.name L.like_V2 item ; 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)) ; 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 ; 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")) ; AScared p = mkCl p.name (caseV partitive (mkV "pelottaa")) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ; ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ;
AThirsty p = mkCl p.name have_V2 (mkNP (mkN "jano")) ; AThirsty p = mkCl p.name have_V2 (mkNP (mkN "jano")) ;
@@ -95,6 +113,9 @@ concrete WordsFin of Words = SentencesFin **
-- miscellaneous -- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; 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 ; PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_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) ; PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_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 -- week days
@@ -116,6 +153,8 @@ concrete WordsFin of Words = SentencesFin **
Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ; Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ;
Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ; Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ;
Tomorrow = ParadigmsFin.mkAdv "huomenna" ;
oper oper
mkNat : PN -> PN -> A -> mkNat : PN -> PN -> A ->
{lang : NP ; prop : A ; country : NP} = \nat,co,pro -> {lang : NP ; prop : A ; country : NP} = \nat,co,pro ->
@@ -140,24 +179,12 @@ concrete WordsFin of Words = SentencesFin **
ssa = False ; ssa = False ;
lla = True ; lla = True ;
open_Adv = ParadigmsFin.mkAdv "avoinna" ; xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
closed_Adv = ParadigmsFin.mkAdv "kiinni" ; relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ;
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
} ;
nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ; 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" ;
} }

View File

@@ -71,6 +71,9 @@ lin
-- actions -- 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 ; AWant p obj = mkCl p.name vouloir_V2 obj ;
ALike p item = mkCl item plaire_V2 p.name ; ALike p item = mkCl item plaire_V2 p.name ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parler")) lang ; ASpeak p lang = mkCl p.name (mkV2 (mkV "parler")) lang ;
@@ -89,6 +92,7 @@ lin
-- miscellaneous -- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "appeler")))) ; 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 ; PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ; PropClosed p = mkCl p.name closed_A ;
@@ -100,6 +104,12 @@ lin
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ; HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ;
ItCost item price = mkCl item (mkV2 (mkV "coûter")) price ; 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 -- week days
Monday = mkDay "lundi" ; Monday = mkDay "lundi" ;
@@ -112,23 +122,19 @@ lin
oper oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> mkNat : Str -> Str -> NPNationality = \nat,co ->
{lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in let day = mkNP (mkPN d) in
{name = day ; mkNPDay day (P.mkAdv d) (P.mkAdv ("le" ++ d)) ;
point = P.mkAdv d ;
habitual = P.mkAdv ("le" ++ d) ;
} ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
name = mkCN p ; mkCNPlace (mkCN p) i dative ;
at = i ;
to = dative
} ;
open_A = P.mkA "ouvert" ; open_A = P.mkA "ouvert" ;
closed_A = P.mkA "fermé" ; closed_A = P.mkA "fermé" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
} }

View File

@@ -48,7 +48,7 @@ concrete WordsGer of Words = SentencesGer **
DanishCrown = mkCN (mkA "Dänisch") (mkN "Krone") ; DanishCrown = mkCN (mkA "Dänisch") (mkN "Krone") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- 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") ; -- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;

View File

@@ -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 concrete WordsIta of Words = SentencesIta ** open
SyntaxIta, SyntaxIta,
@@ -6,7 +6,8 @@ concrete WordsIta of Words = SentencesIta ** open
(E = ExtraIta), (E = ExtraIta),
(L = LexiconIta), (L = LexiconIta),
(P = ParadigmsIta), (P = ParadigmsIta),
ParadigmsIta in { ParadigmsIta,
Prelude in {
lin lin
@@ -16,8 +17,10 @@ lin
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "formaggio") ; Cheese = mkCN (mkN "formaggio") ;
Chicken = mkCN (mkN "pollo") ;
Coffee = mkCN (mkN "caffè") ; Coffee = mkCN (mkN "caffè") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ; Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
@@ -29,30 +32,40 @@ lin
Bad = L.bad_A ; 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 ; Cold = L.cold_A ;
Delicious = mkA "delizioso" ; Delicious = mkA "delizioso" ;
Expensive = mkA "caro" ; Expensive = mkA "caro" ;
Fresh = mkA "fresco" ; Fresh = mkA "fresco" ;
Good = L.good_A ; Good = L.good_A ;
Warm = L.warm_A ; Warm = L.warm_A ;
Suspect = mkA "sospetto" ;
-- places -- places
Airport = mkPlace (mkN "aeroporto") dative ; Airport = mkPlace (mkN "aeroporto") dative ;
Bar = mkPlace (mkN "bar") P.in_Prep ; Bar = mkPlace (mkN "bar") P.in_Prep ;
Church = mkPlace (mkN "chiesa") P.in_Prep ; Church = mkPlace (mkN "chiesa") P.in_Prep ;
Cinema = mkPlace (mkN "cinema") P.in_Prep ;
Hospital = mkPlace (mkN "ospedale") P.in_Prep ; Hospital = mkPlace (mkN "ospedale") P.in_Prep ;
Hotel = mkPlace (mkN "albergo") P.in_Prep ;
Museum = mkPlace (mkN "museo") P.in_Prep ; Museum = mkPlace (mkN "museo") P.in_Prep ;
Park = mkPlace (mkN "parco") P.in_Prep ;
Restaurant = mkPlace (mkN "ristorante") 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 ; Station = mkPlace (mkN "stazione" feminine) dative ;
Theatre = mkPlace (mkN "teatro") P.in_Prep ;
Toilet = mkPlace (mkN "bagno") P.in_Prep ; Toilet = mkPlace (mkN "bagno") P.in_Prep ;
University = mkPlace (mkN "università") dative ;
-- currencies -- currencies
DanishCrown = mkCN (mkA "danese") (mkN "corona") ; DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ;
Dollar = mkCN (mkN "dollar") ; Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro" "euro" masculine) ; Euro = mkCN (mkN "euro" "euro" masculine) ;
Lei = mkCN (mkN "lei") ; ---- ? Lei = mkCN (mkN "lei") ; ---- ?
SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ;
-- nationalities -- nationalities
@@ -68,6 +81,12 @@ lin
-- actions -- 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 ; AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ;
AIll p = mkCl p.name (mkA "malato") ; AIll p = mkCl p.name (mkA "malato") ;
@@ -76,6 +95,8 @@ lin
ALive p co = ALive p co =
mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxIta.mkAdv P.in_Prep 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 ; 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))) ; AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ;
@@ -88,6 +109,7 @@ lin
-- miscellaneous -- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ; 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 ; PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ; PropClosed p = mkCl p.name closed_A ;
@@ -99,6 +121,24 @@ lin
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ;
ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; 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 -- week days
Monday = mkDay "lunedì" ; Monday = mkDay "lunedì" ;
@@ -109,24 +149,22 @@ lin
Saturday = mkDay "sabato" ; Saturday = mkDay "sabato" ;
Sunday = mkDay "domenica" ; Sunday = mkDay "domenica" ;
Tomorrow = P.mkAdv "domani" ;
-- auxiliaries -- auxiliaries
oper oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> mkNat : Str -> Str -> NPNationality = \nat,co ->
{lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ; mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in let day = mkNP (mkPN d) in
{name = day ; mkNPDay day (P.mkAdv ("il" ++ d)) (P.mkAdv ("il" ++ d)) ; ---- ?
point, -- = ParadigmsIta.mkAdv d ;
habitual = ParadigmsIta.mkAdv ("il" ++ d) ; ---- ?
} ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
name = mkCN p ; mkCNPlace (mkCN p) i dative ;
at = i ;
to = dative xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
} ;
open_A = mkA "aperto" ; open_A = mkA "aperto" ;
closed_A = mkA "chiuso" ; closed_A = mkA "chiuso" ;

View File

@@ -1,7 +1,7 @@
-- (c) 2009 Aarne Ranta under LGPL -- (c) 2009 Aarne Ranta under LGPL
concrete WordsNor of Words = SentencesNor ** concrete WordsNor of Words = SentencesNor **
open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), Prelude in { open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), ExtraNor, Prelude in {
lin lin
@@ -10,125 +10,158 @@ concrete WordsNor of Words = SentencesNor **
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "kyckling") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ; Wine = mkCN L.wine_N ;
--
-- properties -- properties
--
Bad = L.bad_A ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "färsk" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ; Warm = L.warm_A ;
--
-- places -- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ; -- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ; -- 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 -- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
--
-- nationalities -- nationalities
--
-- Belgian = mkA "belgisk" ; -- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ; -- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ; -- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ; -- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ; -- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ; -- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ; -- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions -- actions
--
-- AHasName p name = mkCl (nameOf p) name ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
-- AIll p = mkCl p.name (mkA "sjuk") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- AHasRoom p num = mkCl p.name have_V2
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxNor.mkAdv in_Prep co)) ; -- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ; -- AHasTable p num = mkCl p.name have_V2
-- AScared p = mkCl p.name (mkA "rädd") ; -- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; -- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHungry p = mkCl p.name (mkA "hungrig") ;
-- ATired p = mkCl p.name (mkA "trött") ; -- AIll p = mkCl p.name (mkA "sjuk") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_A ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_A ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "måndag" ; -- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ; -- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ; -- Sunday = mkDay "söndag" ;
--
-- oper -- Tomorrow = ParadigmsNor.mkAdv "imorgon" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- oper
-- 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 -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- {name = day ; -- let day = mkNP (mkPN d) in
-- point = SyntaxNor.mkAdv on_Prep day ; -- mkNPDay day (SyntaxNor.mkAdv on_Prep day)
-- habitual = SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- (SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- } ;
-- -- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- name = mkCN p ;
-- at = mkPrep i ; -- open_A = mkA "öppen" "öppet" ;
-- to = to_Prep -- closed_A = mkA "stängd" "stängt" ;
-- } ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- open_A = mkA "öppen" "öppet" ; -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- 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)
-- } ;
-- }
} }

View File

@@ -1,134 +1,176 @@
-- (c) 2009 Aarne Ranta under LGPL --2 Implementations of Words, with English as example
concrete WordsPol of Words = SentencesPol ** concrete WordsPol of Words = SentencesPol **
open SyntaxPol, ParadigmsPol, (L = LexiconPol), Prelude in { open
SyntaxPol,
ParadigmsPol,
(L = LexiconPol),
(P = ParadigmsPol),
-- ExtraPol,
Prelude in {
lin lin
-- kinds of food -- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "cheese") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_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 ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "delicious" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "expensive" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "fresh" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ; 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
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- defined by $mkPlace$.
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Airport = mkPlace "airport" "at" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Bar = mkPlace "bar" "in" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Church = mkPlace "church" "in" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Cinema = mkPlace "cinema" "at" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Hospital = mkPlace "hospital" "in" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; -- Hotel = mkPlace "hotel" "in" ;
-- -- Museum = mkPlace "museum" "in" ;
-- currencies -- Park = mkPlace "park" "in" ;
-- -- Restaurant = mkPlace "restaurant" "in" ;
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- School = mkPlace "school" "at" ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Shop = mkPlace "shop" "in" ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Station = mkPlace "station" "at" ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Theatre = mkPlace "theatre" "at" ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- Toilet = mkPlace "toilet" "in" ;
-- -- University = mkPlace "university" "at" ;
-- nationalities
-- -- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- English = mkNat "engelsk" "England" ; -- Dollar = mkCN (mkN "dollar") ;
-- Finnish = mkNat "finsk" "Finland" ; -- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Flemish = mkNP (mkPN "flamländska") ; -- Lei = mkCN (mkN "leu" "lei") ;
-- French = mkNat "fransk" "Frankrike" ; -- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Nationalities
-- Swedish = mkNat "svensk" "Sverige" ;
-- -- Belgian = mkA "Belgian" ;
-- actions -- Belgium = mkNP (mkPN "Belgium") ;
-- -- English = mkNat "English" "England" ;
-- AHasName p name = mkCl (nameOf p) name ; -- Finnish = mkNat "Finnish" "Finland" ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- Flemish = mkNP (mkPN "Flemish") ;
-- AIll p = mkCl p.name (mkA "sjuk") ; -- French = mkNat "French" "France" ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- Italian = mkNat "Italian" "Italy" ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- Romanian = mkNat "Romanian" "Romania" ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxPol.mkAdv in_Prep co)) ; -- Swedish = mkNat "Swedish" "Sweden" ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ; -- Actions: the predication patterns are very often language-dependent.
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- ATired p = mkCl p.name (mkA "trött") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AHasRoom p num = mkCl p.name have_V2
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- (mkNP (mkNP a_Det (mkN "room")) (SyntaxPol.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregPol.cost_V)) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 IrregPol.cost_V) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_Adv ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_Adv ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "ndag" ; -- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "Friday" ;
-- Saturday = mkDay "rdag" ; -- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "ndag" ; -- Sunday = mkDay "Sunday" ;
--
-- oper -- Tomorrow = P.mkAdv "tomorrow" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- auxiliaries
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
-- -- oper
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in -- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- {name = day ; -- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- point = SyntaxPol.mkAdv on_Prep day ;
-- habitual = SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- } ; -- let day = mkNP (mkPN d) in
-- -- mkNPDay day (SyntaxPol.mkAdv on_Prep day)
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- (SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- name = mkCN p ;
-- at = mkPrep i ; -- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- to = to_Prep -- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- } ;
-- -- open_Adv = P.mkAdv "open" ;
-- open_A = mkA "öppen" "öppet" ; -- closed_Adv = P.mkAdv "closed" ;
-- closed_A = mkA "stängd" "stängt" ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ; -- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxPol.mkAdv possess_Prep p.name) --}
-- } ;
-- }
} }

View File

@@ -1,134 +1,177 @@
-- (c) 2009 Aarne Ranta under LGPL --2 Implementations of Words, with English as example
concrete WordsRus of Words = SentencesRus ** 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 ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ; -- Cheese = mkCN (mkN "cheese") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ; -- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ; -- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_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 ; Bad = L.bad_A ;
-- Boring = mkA "tråkig" ; -- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ; Cold = L.cold_A ;
-- Delicious = mkA "läcker" ; -- Delicious = mkA "delicious" ;
-- Expensive = mkA "dyr" ; -- Expensive = mkA "expensive" ;
-- Fresh = mkA "färsk" ; -- Fresh = mkA "fresh" ;
Good = L.good_A ; Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ; 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
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; -- defined by $mkPlace$.
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ; -- Airport = mkPlace "airport" "at" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; -- Bar = mkPlace "bar" "in" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; -- Church = mkPlace "church" "in" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; -- Cinema = mkPlace "cinema" "at" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ; -- Hospital = mkPlace "hospital" "in" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; -- Hotel = mkPlace "hotel" "in" ;
-- -- Museum = mkPlace "museum" "in" ;
-- currencies -- Park = mkPlace "park" "in" ;
-- -- Restaurant = mkPlace "restaurant" "in" ;
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; -- School = mkPlace "school" "at" ;
-- Dollar = mkCN (mkN "dollar" "dollar") ; -- Shop = mkPlace "shop" "in" ;
-- Euro = mkCN (mkN "euro" "euro") ; -- Station = mkPlace "station" "at" ;
-- Lei = mkCN (mkN "lei" "lei") ; -- Theatre = mkPlace "theatre" "at" ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; -- Toilet = mkPlace "toilet" "in" ;
-- -- University = mkPlace "university" "at" ;
-- nationalities
-- -- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ; -- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- English = mkNat "engelsk" "England" ; -- Dollar = mkCN (mkN "dollar") ;
-- Finnish = mkNat "finsk" "Finland" ; -- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Flemish = mkNP (mkPN "flamländska") ; -- Lei = mkCN (mkN "leu" "lei") ;
-- French = mkNat "fransk" "Frankrike" ; -- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ; -- Nationalities
-- Swedish = mkNat "svensk" "Sverige" ;
-- -- Belgian = mkA "Belgian" ;
-- actions -- Belgium = mkNP (mkPN "Belgium") ;
-- -- English = mkNat "English" "England" ;
-- AHasName p name = mkCl (nameOf p) name ; -- Finnish = mkNat "Finnish" "Finland" ;
-- AHungry p = mkCl p.name (mkA "hungrig") ; -- Flemish = mkNP (mkPN "Flemish") ;
-- AIll p = mkCl p.name (mkA "sjuk") ; -- French = mkNat "French" "France" ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; -- Italian = mkNat "Italian" "Italy" ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; -- Romanian = mkNat "Romanian" "Romania" ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxRus.mkAdv in_Prep co)) ; -- Swedish = mkNat "Swedish" "Sweden" ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ; -- Actions: the predication patterns are very often language-dependent.
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ; -- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- ATired p = mkCl p.name (mkA "trött") ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ; -- AHasRoom p num = mkCl p.name have_V2
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; -- (mkNP (mkNP a_Det (mkN "room")) (SyntaxRus.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- 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 -- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; -- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- -- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- PropOpen p = mkCl p.name open_A ; -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregRus.cost_V)) ;
-- PropClosed p = mkCl p.name closed_A ; -- ItCost item price = mkCl item (mkV2 IrregRus.cost_V) price ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- PropOpen p = mkCl p.name open_Adv ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- PropClosed p = mkCl p.name closed_Adv ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ; -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
--
-- Monday = mkDay "ndag" ; -- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "tisdag" ; -- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "onsdag" ; -- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "torsdag" ; -- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "fredag" ; -- Friday = mkDay "Friday" ;
-- Saturday = mkDay "rdag" ; -- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "ndag" ; -- Sunday = mkDay "Sunday" ;
--
-- oper -- Tomorrow = P.mkAdv "tomorrow" ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ; -- auxiliaries
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
-- -- oper
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in -- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- {name = day ; -- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- point = SyntaxRus.mkAdv on_Prep day ;
-- habitual = SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d))) -- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- } ; -- let day = mkNP (mkPN d) in
-- -- mkNPDay day (SyntaxRus.mkAdv on_Prep day)
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- (SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- name = mkCN p ;
-- at = mkPrep i ; -- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- to = to_Prep -- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- } ;
-- -- open_Adv = P.mkAdv "open" ;
-- open_A = mkA "öppen" "öppet" ; -- closed_Adv = P.mkAdv "closed" ;
-- closed_A = mkA "stängd" "stängt" ;
-- -- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p -> -- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ; -- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxRus.mkAdv possess_Prep p.name) --}
-- } ;
-- }
} }

View File

@@ -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 concrete WordsSpa of Words = SentencesSpa ** open
SyntaxSpa, SyntaxSpa,
@@ -6,131 +6,169 @@ concrete WordsSpa of Words = SentencesSpa ** open
(E = ExtraSpa), (E = ExtraSpa),
(L = LexiconSpa), (L = LexiconSpa),
(P = ParadigmsSpa), (P = ParadigmsSpa),
ParadigmsSpa in { ParadigmsSpa,
Prelude in {
lin
lin
-- kinds -- kinds
Apple = mkCN L.apple_N ; Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "formaggio") ; -- Cheese = mkCN (mkN "formaggio") ;
-- Coffee = mkCN (mkN "caffè") ; -- Chicken = mkCN (mkN "pollo") ;
-- Coffee = mkCN (mkN "caffè") ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ; -- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "tè") ; -- Tea = mkCN (mkN "tè") ;
Water = mkCN L.water_N ; Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ; Wine = mkCN L.wine_N ;
--
-- -- properties -- properties
--
Bad = L.bad_A ; 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 ; Cold = L.cold_A ;
-- Delicious = mkA "delizioso" ; -- Delicious = mkA "delizioso" ;
-- Expensive = mkA "caro" ; -- Expensive = mkA "caro" ;
-- Fresh = mkA "fresco" ; -- Fresh = mkA "fresco" ;
Good = L.good_A ; Good = L.good_A ;
Warm = L.warm_A ; Warm = L.warm_A ;
-- -- Suspect = mkA "sospetto" ;
-- -- places
-- -- places
-- Airport = mkPlace (mkN "aeroporto") dative ;
-- Bar = mkPlace (mkN "bar") P.in_Prep ; -- Airport = mkPlace (mkN "aeroporto") dative ;
-- Church = mkPlace (mkN "chiesa") P.in_Prep ; -- Bar = mkPlace (mkN "bar") P.in_Prep ;
-- Hospital = mkPlace (mkN "ospedale") P.in_Prep ; -- Church = mkPlace (mkN "chiesa") P.in_Prep ;
-- Museum = mkPlace (mkN "museo") P.in_Prep ; -- Cinema = mkPlace (mkN "cinema") P.in_Prep ;
-- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ; -- Hospital = mkPlace (mkN "ospedale") P.in_Prep ;
-- Station = mkPlace (mkN "stazione" feminine) dative ; -- Hotel = mkPlace (mkN "albergo") P.in_Prep ;
-- Toilet = mkPlace (mkN "bagno") P.in_Prep ; -- Museum = mkPlace (mkN "museo") P.in_Prep ;
-- -- Park = mkPlace (mkN "parco") P.in_Prep ;
-- -- currencies -- Restaurant = mkPlace (mkN "ristorante") P.in_Prep ;
-- -- School = mkPlace (mkN "scuola") P.in_Prep ;
-- DanishCrown = mkCN (mkA "danese") (mkN "corona") ; -- Shop = mkPlace (mkN "negozio") P.in_Prep ;
-- Dollar = mkCN (mkN "dollar") ; -- Station = mkPlace (mkN "stazione" feminine) dative ;
-- Euro = mkCN (mkN "euro" "euro" masculine) ; -- Theatre = mkPlace (mkN "teatro") P.in_Prep ;
-- Lei = mkCN (mkN "lei") ; ---- ? -- Toilet = mkPlace (mkN "bagno") P.in_Prep ;
-- -- University = mkPlace (mkN "università") dative ;
-- -- nationalities
-- -- currencies
-- Belgian = mkA "belgo" ;
-- Belgium = mkNP (mkPN "Belgio") ; -- DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ;
-- English = mkNat "inglese" "Inghilterra" ; -- Dollar = mkCN (mkN "dollar") ;
-- Finnish = mkNat "finlandese" "Finlandia" ; -- Euro = mkCN (mkN "euro" "euro" masculine) ;
-- Flemish = mkNP (mkPN "fiammingo") ; -- Lei = mkCN (mkN "lei") ; ---- ?
-- French = mkNat "francese" "Francia" ; -- SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ;
-- Italian = mkNat "italiano" "Italia" ;
-- Romanian = mkNat "rumeno" "Romania" ; -- nationalities
-- Swedish = mkNat "svedese" "Svezia" ;
-- -- Belgian = mkA "belgo" ;
-- -- actions -- Belgium = mkNP (mkPN "Belgio") ;
-- -- English = mkNat "inglese" "Inghilterra" ;
-- AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ; -- Finnish = mkNat "finlandese" "Finlandia" ;
-- AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ; -- Flemish = mkNP (mkPN "fiammingo") ;
-- AIll p = mkCl p.name (mkA "malato") ; -- French = mkNat "francese" "Francia" ;
-- AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ; -- Italian = mkNat "italiano" "Italia" ;
-- ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ; -- Romanian = mkNat "rumeno" "Romania" ;
-- ALive p co = -- Swedish = mkNat "svedese" "Svezia" ;
-- mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxSpa.mkAdv P.in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ; -- actions
-- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ; -- AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
-- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- ATired p = mkCl p.name (mkA "stanco") ; -- AHasRoom p num = mkCl p.name have_V2
-- AUnderstand p = mkCl p.name (mkV "capire") ; -- (mkNP (mkNP a_Det (mkN "camera")) (SyntaxSpa.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
-- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ; -- AHasTable p num = mkCl p.name have_V2
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- (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))) ;
-- -- miscellaneous -- AIll p = mkCl p.name (mkA "malato") ;
-- -- AKnow p = mkCl p.name (mkV (sapere_78 "sapere")) ;
-- QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ; -- ALike p item = mkCl item (mkV2 (mkV (piacere_64 "piacere")) dative) p.name ;
-- -- ALive p co =
-- PropOpen p = mkCl p.name open_A ; -- mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxSpa.mkAdv P.in_Prep co)) ;
-- PropClosed p = mkCl p.name closed_A ; -- ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; -- AMarried p = mkCl p.name (mkA "sposato") ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; -- AReady p = mkCl p.name (mkA "pronto") ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; -- AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ;
-- -- AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ; -- ATired p = mkCl p.name (mkA "stanco") ;
-- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ; -- AUnderstand p = mkCl p.name (mkV "capire") ;
-- -- AWant p obj = mkCl p.name (mkV2 (mkV (volere_96 "volere"))) obj ;
-- -- week days -- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- Monday = mkDay "lunedì" ;
-- Tuesday = mkDay "martedì" ; -- miscellaneous
-- Wednesday = mkDay "mercoledì" ;
-- Thursday = mkDay "giovedì" ; -- QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ;
-- Friday = mkDay "venerdì" ; -- QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
-- Saturday = mkDay "sabato" ;
-- Sunday = mkDay "domenica" ; -- PropOpen p = mkCl p.name open_A ;
-- -- PropClosed p = mkCl p.name closed_A ;
-- -- auxiliaries -- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- -- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- oper -- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> -- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- {lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ;
-- -- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> -- ItCost item price = mkCl item (mkV2 (mkV "costare")) price ;
-- let day = mkNP (mkPN d) in
-- {name = day ; -- Building phrases from strings is complicated: the solution is to use
-- point, -- = ParadigmsSpa.mkAdv d ; -- mkText : Text -> Text -> Text ;
-- habitual = ParadigmsSpa.mkAdv ("il" ++ d) ; ---- ?
-- } ; -- PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ;
-- -- PSeeYouPlace p d =
-- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { -- mkText (lin Text (ss ("arrivederci")))
-- name = mkCN p ; -- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- at = i ;
-- to = dative -- 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.
-- open_A = mkA "aperto" ;
-- closed_A = mkA "chiuso" ; -- 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" ;
--}
} }

View File

@@ -1,7 +1,7 @@
-- (c) 2009 Aarne Ranta under LGPL -- (c) 2009 Aarne Ranta under LGPL
concrete WordsSwe of Words = SentencesSwe ** concrete WordsSwe of Words = SentencesSwe **
open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), Prelude in { open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), ExtraSwe, Prelude in {
lin lin
@@ -11,8 +11,10 @@ concrete WordsSwe of Words = SentencesSwe **
Beer = mkCN L.beer_N ; Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ; Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "ost") ; Cheese = mkCN (mkN "ost") ;
Chicken = mkCN (mkN "kyckling") ;
Coffee = mkCN (mkN "kaffe" neutrum) ; Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ; Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ; Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ; Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ; Salt = mkCN L.salt_N ;
@@ -23,12 +25,14 @@ concrete WordsSwe of Words = SentencesSwe **
-- properties -- properties
Bad = L.bad_A ; Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "tråkig" ; Boring = mkA "tråkig" ;
Cold = L.cold_A ; Cold = L.cold_A ;
Delicious = mkA "läcker" ; Delicious = mkA "läcker" ;
Expensive = mkA "dyr" ; Expensive = mkA "dyr" ;
Fresh = mkA "färsk" ; Fresh = mkA "färsk" ;
Good = L.good_A ; Good = L.good_A ;
Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ; Warm = L.warm_A ;
-- places -- places
@@ -36,19 +40,26 @@ concrete WordsSwe of Words = SentencesSwe **
Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ; Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
Bar = mkPlace (mkN "bar" "barer") "i" ; Bar = mkPlace (mkN "bar" "barer") "i" ;
Church = mkPlace (mkN "kyrka") "i" ; Church = mkPlace (mkN "kyrka") "i" ;
Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ; Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ; Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
Park = mkPlace (mkN "park" "parker") "i" ;
Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ; 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å" ; Station = mkPlace (mkN "station" "stationer") "på" ;
Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
Toilet = mkPlace (mkN "toalett" "toaletter") "på" ; Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
University = mkPlace (mkN "universitet" "universitet") "på" ;
-- currencies -- currencies
DanishCrown = mkCN (mkA "dansk") (mkN "krona") ; DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
Dollar = mkCN (mkN "dollar" "dollar") ; Dollar = mkCN (mkN "dollar" "dollar") ;
Euro = mkCN (mkN "euro" "euro") ; Euro = mkCN (mkN "euro" "euro") ;
Lei = mkCN (mkN "lei" "lei") ; Lei = mkCN (mkN "lei" "lei") ;
SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ; SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
-- nationalities -- nationalities
@@ -64,13 +75,23 @@ concrete WordsSwe of Words = SentencesSwe **
-- actions -- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ; 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") ; AHungry p = mkCl p.name (mkA "hungrig") ;
AIll p = mkCl p.name (mkA "sjuk") ; AIll p = mkCl p.name (mkA "sjuk") ;
AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ; AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ; 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)) ; 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 ; 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") ; AScared p = mkCl p.name (mkA "rädd") ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ; ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
AThirsty p = mkCl p.name (mkA "törstig") ; AThirsty p = mkCl p.name (mkA "törstig") ;
@@ -82,6 +103,9 @@ concrete WordsSwe of Words = SentencesSwe **
-- miscellaneous -- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ; 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 ; PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_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) ; PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_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"))) ; -- Building phrases from strings is complicated: the solution is to use
ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ; -- 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 -- week days
@@ -103,42 +142,25 @@ concrete WordsSwe of Words = SentencesSwe **
Saturday = mkDay "lördag" ; Saturday = mkDay "lördag" ;
Sunday = mkDay "söndag" ; Sunday = mkDay "söndag" ;
Tomorrow = ParadigmsSwe.mkAdv "imorgon" ;
oper oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co -> mkNat : Str -> Str -> NPNationality = \nat,co ->
{lang = mkNP (mkPN (nat + "a")) ; mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
prop = mkA nat ; country = mkNP (mkPN co)} ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d -> mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in let day = mkNP (mkPN d) in
{name = day ; mkNPDay day (SyntaxSwe.mkAdv on_Prep day)
point = SyntaxSwe.mkAdv on_Prep day ; (SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
habitual = SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
} ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> { mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
name = mkCN p ; mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
at = mkPrep i ;
to = to_Prep
} ;
open_A = mkA "öppen" "öppet" ; open_A = mkA "öppen" "öppet" ;
closed_A = mkA "stängd" "stängt" ; 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 ;
} }

View File

@@ -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 :

View File

@@ -17,6 +17,7 @@
History History
</P> </P>
<UL> <UL>
<LI>10 April. Some additions in API, comments in implementation; regenerated clones.
<LI>8 April. Added German. <LI>8 April. Added German.
<LI>7 April. Added the Clone script, applied to initiate the rest of MOLTO languages. <LI>7 April. Added the Clone script, applied to initiate the rest of MOLTO languages.
<LI>6 April. Version 0.4: weekdays, nationalities <LI>6 April. Version 0.4: weekdays, nationalities
@@ -193,12 +194,21 @@ The basic things "everyone" can do is
<P> <P>
The missing concrete syntax entries are added to the <CODE>Words</CODE><I>L</I><CODE>.gf</CODE> 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 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 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 a little more demanding, since they also require syntax constructors. Greetings (prefixed
with <CODE>G</CODE>) are pure strings. with <CODE>G</CODE>) are pure strings.
</P> </P>
<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: Here are the steps to follow for contributors:
</P> </P>
<OL> <OL>

View File

@@ -13,6 +13,7 @@ Aarne Ranta
#BSMALL #BSMALL
History History
- 10 April. Some additions in API, comments in implementation; regenerated clones.
- 8 April. Added German. - 8 April. Added German.
- 7 April. Added the Clone script, applied to initiate the rest of MOLTO languages. - 7 April. Added the Clone script, applied to initiate the rest of MOLTO languages.
- 6 April. Version 0.4: weekdays, nationalities - 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`` The missing concrete syntax entries are added to the ``Words``//L//``.gf``
files for each language //L//. The 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 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 a little more demanding, since they also require syntax constructors. Greetings (prefixed
with ``G``) are pure strings. 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: Here are the steps to follow for contributors:
+ Make sure you have the latest sources + Make sure you have the latest sources
from [GF Darcs http://www.grammaticalframework.org/doc/gf-developers.html], from [GF Darcs http://www.grammaticalframework.org/doc/gf-developers.html],