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 0c27260c47
commit dd686d7f26
43 changed files with 2203 additions and 1265 deletions

View File

@@ -2,6 +2,7 @@ module Main where
import Control.Monad
import Data.Maybe
import Data.Char
import System.Cmd
import System.Directory
import System.Environment
@@ -10,17 +11,21 @@ import System.Exit
-- To clone a project from one language to another:
--
-- 1. for each Module in modules, copy ModuleFROM to ModuleTO
-- 1. for each Module in 'modules', copy ModuleFROM to ModuleTO
-- 2. in each ModuleTO, replace substrings FROM by TO, if not prefixes of an Ident
-- 3. in each ModuleTO in specifics, comment out every line in the body
-- 3. in each ModuleTO in 'specifics', comment out every line in the body, except
-- those whose first word is in 'commons'.
--
-- Syntax: runghc Clone FROM TO
-- Example: runhugs Clone Swe Nor
-- The following lines are for the phrasebook project, but can be modified to other projects.
-- The following lines are for the phrasebook project, and can be changed
-- to fit other projects.
modules = "Phrasebook":"Sentences":specifics
specifics = ["Words","Greetings"]
commons = ["Apple","Beer","Bread","Fish","Milk","Salt","Water","Wine",
"Bad","Cold","Good","Warm","AHasChildren"]
main = do
@@ -42,7 +47,9 @@ replaceLang s1 s2 = repl where
lgs = 3 -- length s1
-- the file name has the form p....pLLL.gf, i.e. 3-letter lang name, suffix .gf
getLangName fi = let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in (reverse ferp,reverse nal)
getLangName fi =
let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in
(reverse ferp,reverse nal)
commentIf c = if c then (unlines . commentBody . lines) else id
@@ -51,4 +58,8 @@ commentBody ss = header ++ map comment body ++ ["}"] where
isJment ws = case ws of
k:_ | elem k ["flags","lin","lincat","oper","param"] -> True
_ -> False
comment l = if take 2 l == "--" then l else "-- " ++ l
comment l = case l of
_ | take 2 l == "--" -> l -- already commented
_ | all isSpace l -> l -- empty line
_ | elem (head (words l)) commons -> l -- in 'commons'
_ -> "--" ++ l

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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
missing:
echo "pg -missing | wf -file=missing.txt" | gf Phrasebook???.gf
echo "pg -missing | wf -file=missing.txt" | gf Phrasebook.pgf
#PhrasebookBul.gf PhrasebookCat.gf PhrasebookDan.gf PhrasebookDut.gf PhrasebookNor.gf PhrasebookPol.gf PhrasebookRus.gf PhrasebookSpa.gf
doc:
cat Sentences.gf Words.gf >Ontology.gf
gfdoc Ontology.gf
txt2tags -thtml phrasebook.txt
rm -f Ontology.gf
cat SentencesI.gf WordsEng.gf >Implementation.gf
gfdoc Implementation.gf
txt2tags -thtml phrasebook.txt
rm -f Ontology.gf Implementation.gf

View File

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

View File

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

View File

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

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),
(Symbolic = SymbolicFin),
(Lexicon = LexiconFin) ** open SyntaxFin, ExtraFin, (P = ParadigmsFin), (V = VerbFin) in {
@@ -6,4 +9,11 @@ concrete SentencesFin of Sentences = NumeralFin ** SentencesI - [Is,NameNN] with
lin
Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista
NameNN = mkNP (P.mkPN (P.mkN "NN" "NN:iä")) ;
} ;
IMale, IFemale =
{name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ;
YouFamMale, YouFamFemale =
{name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;
YouPolMale, YouPolFemale =
{name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron};
}

View File

@@ -1,3 +1,7 @@
--1 Implementation of MOLTO Phrasebook
--2 The functor for (mostly) common structures
incomplete concrete SentencesI of Sentences = Numeral **
open
Syntax,
@@ -15,19 +19,20 @@ incomplete concrete SentencesI of Sentences = Numeral **
Quality = AP ;
Property = A ;
Object = NP ;
Place = {name : NP ; at : Adv ; to : Adv} ;
PlaceKind = {name : CN ; at : Prep ; to : Prep} ;
Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv} ;
PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ;
Currency = CN ;
Price = NP ;
Action = Cl ;
Person = {name : NP ; isPron : Bool ; poss : Quant} ;
Nationality = {lang : NP ; prop : A ; country : NP} ;
Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ;
Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ;
Language = NP ;
Citizenship = A ;
Country = NP ;
Day = {name : NP ; point : Adv ; habitual : Adv} ;
Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ;
Date = Adv ;
Name = NP ;
Number = Card ;
lin
PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.'
PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?'
@@ -35,7 +40,7 @@ incomplete concrete SentencesI of Sentences = Numeral **
PObject x = mkPhrase (mkUtt x) ;
PKind x = mkPhrase (mkUtt x) ;
PQuality x = mkPhrase (mkUtt x) ;
PNumeral x = mkPhrase (mkUtt (mkCard (x ** {lock_Numeral = <>}))) ;
PNumber x = mkPhrase (mkUtt x) ;
PPlace x = mkPhrase (mkUtt x.name) ;
PPlaceKind x = mkPhrase (mkUtt x.name) ;
PCurrency x = mkPhrase (mkUtt x) ;
@@ -59,10 +64,10 @@ incomplete concrete SentencesI of Sentences = Numeral **
PropAction a = a ;
AmountCurrency num curr = mkNP <lin Numeral num : Numeral> curr ;
AmountCurrency num curr = mkNP num curr ;
ObjItem i = i ;
ObjNumber n k = mkNP <lin Numeral n : Numeral> k ;
ObjNumber n k = mkNP n k ;
ObjIndef k = mkNP a_Quant k ;
This kind = mkNP this_Quant kind ;
@@ -97,17 +102,73 @@ incomplete concrete SentencesI of Sentences = Numeral **
PersonName n =
{name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used
---- NameString s = symb s ;
---- NameString s = symb s ; --%
NameNN = symb "NN" ;
NNumeral n = mkCard <lin Numeral n : Numeral> ;
AHave p kind = mkCl p.name have_V2 (mkNP kind) ;
ACitizen p n = mkCl p.name n ;
ABePlace p place = mkCl p.name place.at ;
oper
-- These operations are used internally in Sentences.
mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p ->
{name = mkNP p ; isPron = True ; poss = mkQuant p} ;
-- These are used in Words for each language.
NPNationality : Type = {lang : NP ; country : NP ; prop : A} ;
mkNPNationality : NP -> NP -> A -> NPNationality = \la,co,pro ->
{lang = la ;
country = co ;
prop = pro
} ;
NPDay : Type = {name : NP ; point : Adv ; habitual : Adv} ;
mkNPDay : NP -> Adv -> Adv -> NPDay = \d,p,h ->
{name = d ;
point = p ;
habitual = h
} ;
NPPlace : Type = {name : NP ; at : Adv ; to : Adv} ;
CNPlace : Type = {name : CN ; at : Prep ; to : Prep} ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t
} ;
NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
relativePerson : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson =
\n,x,f,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => mkNP p.poss num x ;
_ => f num p.name x
} ;
isPron = False ;
poss = mkQuant he_Pron -- not used because not pron
} ;
GNumber : PType = Bool ;
sing = False ; plur = True ;
-- for languages without GenNP, use "the wife of p"
mkRelative : Bool -> CN -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n x
(\a,b,c -> mkNP (mkNP the_Quant a c) (Syntax.mkAdv possess_Prep b)) p ;
-- for languages with GenNP, use "p's wife"
-- relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ;
}

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

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

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 **
open SyntaxBul, ParadigmsBul, (L = LexiconBul), Prelude in {
open
SyntaxBul,
ParadigmsBul,
(L = LexiconBul),
(P = ParadigmsBul),
ExtraBul,
Prelude in {
lin
-- kinds of food
--
-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Cheese = mkCN (mkN "cheese") ;
-- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "delicious" ;
-- Expensive = mkA "expensive" ;
-- Fresh = mkA "fresh" ;
Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
--
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxBul.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- Places require different prepositions to express location; in some languages
-- also the directional preposition varies, but in English we use $to$, as
-- defined by $mkPlace$.
-- Airport = mkPlace "airport" "at" ;
-- Bar = mkPlace "bar" "in" ;
-- Church = mkPlace "church" "in" ;
-- Cinema = mkPlace "cinema" "at" ;
-- Hospital = mkPlace "hospital" "in" ;
-- Hotel = mkPlace "hotel" "in" ;
-- Museum = mkPlace "museum" "in" ;
-- Park = mkPlace "park" "in" ;
-- Restaurant = mkPlace "restaurant" "in" ;
-- School = mkPlace "school" "at" ;
-- Shop = mkPlace "shop" "in" ;
-- Station = mkPlace "station" "at" ;
-- Theatre = mkPlace "theatre" "at" ;
-- Toilet = mkPlace "toilet" "in" ;
-- University = mkPlace "university" "at" ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- Dollar = mkCN (mkN "dollar") ;
-- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Lei = mkCN (mkN "leu" "lei") ;
-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Nationalities
-- Belgian = mkA "Belgian" ;
-- Belgium = mkNP (mkPN "Belgium") ;
-- English = mkNat "English" "England" ;
-- Finnish = mkNat "Finnish" "Finland" ;
-- Flemish = mkNP (mkPN "Flemish") ;
-- French = mkNat "French" "France" ;
-- Italian = mkNat "Italian" "Italy" ;
-- Romanian = mkNat "Romanian" "Romania" ;
-- Swedish = mkNat "Swedish" "Sweden" ;
-- Actions: the predication patterns are very often language-dependent.
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "room")) (SyntaxBul.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxBul.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungry") ;
-- AIll p = mkCl p.name (mkA "ill") ;
-- AKnow p = mkCl p.name IrregBul.know_V ;
-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxBul.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
-- AMarried p = mkCl p.name (mkA "married") ;
-- AReady p = mkCl p.name (mkA "ready") ;
-- AScared p = mkCl p.name (mkA "scared") ;
-- ASpeak p lang = mkCl p.name (mkV2 IrregBul.speak_V) lang ;
-- AThirsty p = mkCl p.name (mkA "thirsty") ;
-- ATired p = mkCl p.name (mkA "tired") ;
-- AUnderstand p = mkCl p.name IrregBul.understand_V ;
-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregBul.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregBul.cost_V)) ;
-- ItCost item price = mkCl item (mkV2 IrregBul.cost_V) price ;
-- PropOpen p = mkCl p.name open_Adv ;
-- PropClosed p = mkCl p.name closed_Adv ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("see you")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "wife") ;
-- Husband = xOf sing (mkN "husband") ;
-- Son = xOf sing (mkN "son") ;
-- Daughter = xOf sing (mkN "daughter") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "ndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "rdag" ;
-- Sunday = mkDay "ndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxBul.mkAdv on_Prep day ;
-- habitual = SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxBul.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "Friday" ;
-- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "Sunday" ;
-- Tomorrow = P.mkAdv "tomorrow" ;
-- auxiliaries
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxBul.mkAdv on_Prep day)
-- (SyntaxBul.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- open_Adv = P.mkAdv "open" ;
-- closed_Adv = P.mkAdv "closed" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
--}
}

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

View File

@@ -1,134 +1,167 @@
-- (c) 2009 Aarne Ranta under LGPL
concrete WordsDan of Words = SentencesDan **
open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), Prelude in {
open SyntaxDan, ParadigmsDan, IrregDan, (L = LexiconDan), ExtraDan, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Fish = mkCN L.fish_N ;
-- Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Cheese = mkCN (mkN "ost") ;
-- Chicken = mkCN (mkN "kyckling") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
--
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ;
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Park = mkPlace (mkN "park" "parker") "i" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Shop = mkPlace (mkN "affär" "affär") "i" ;
-- School = mkPlace (mkN "skola") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
-- University = mkPlace (mkN "universitet" "universitet") "på" ;
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- (SyntaxDan.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDan.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AMarried p = mkCl p.name (mkA "gift") ;
-- AReady p = mkCl p.name (mkA "färdig") ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("vi ses")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "fru" "fruar") ;
-- Husband = xOf sing L.man_N ;
-- Son = xOf sing (mkN "son" "söner") ;
-- Daughter = xOf sing (mkN "dotter" "döttrar") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxDan.mkAdv on_Prep day ;
-- habitual = SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxDan.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
-- Tomorrow = ParadigmsDan.mkAdv "imorgon" ;
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxDan.mkAdv on_Prep day)
-- (SyntaxDan.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
--}
}

View File

@@ -1,134 +1,167 @@
-- (c) 2009 Aarne Ranta under LGPL
concrete WordsDut of Words = SentencesDut **
open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), Prelude in {
open SyntaxDut, ParadigmsDut, IrregDut, (L = LexiconDut), ExtraDut, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Cheese = mkCN (mkN "ost") ;
-- Chicken = mkCN (mkN "kyckling") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ;
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Park = mkPlace (mkN "park" "parker") "i" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Shop = mkPlace (mkN "affär" "affär") "i" ;
-- School = mkPlace (mkN "skola") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
-- University = mkPlace (mkN "universitet" "universitet") "på" ;
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDut.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- (SyntaxDut.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxDut.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AMarried p = mkCl p.name (mkA "gift") ;
-- AReady p = mkCl p.name (mkA "färdig") ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("vi ses")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "fru" "fruar") ;
-- Husband = xOf sing L.man_N ;
-- Son = xOf sing (mkN "son" "söner") ;
-- Daughter = xOf sing (mkN "dotter" "döttrar") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxDut.mkAdv on_Prep day ;
-- habitual = SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxDut.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
-- Tomorrow = ParadigmsDut.mkAdv "imorgon" ;
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxDut.mkAdv on_Prep day)
-- (SyntaxDut.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
--}
}

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 **
open
SyntaxEng, ParadigmsEng, (L = LexiconEng), (P = ParadigmsEng),
IrregEng, ExtraEng, Prelude in {
SyntaxEng,
ParadigmsEng,
(L = LexiconEng),
(P = ParadigmsEng),
IrregEng,
ExtraEng,
Prelude in {
lin
-- kinds
-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
@@ -23,7 +28,7 @@ concrete WordsEng of Words = SentencesEng **
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
Bad = L.bad_A ;
Boring = mkA "boring" ;
@@ -36,7 +41,9 @@ concrete WordsEng of Words = SentencesEng **
Suspect = mkA "suspect" ;
Warm = L.warm_A ;
-- places
-- Places require different prepositions to express location; in some languages
-- also the directional preposition varies, but in English we use $to$, as
-- defined by $mkPlace$.
Airport = mkPlace "airport" "at" ;
Bar = mkPlace "bar" "in" ;
@@ -54,15 +61,15 @@ concrete WordsEng of Words = SentencesEng **
Toilet = mkPlace "toilet" "in" ;
University = mkPlace "university" "at" ;
-- currencies
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA "Danish") (mkN "crown") ;
DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
Lei = mkCN (mkN "leu" "lei") ;
SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") ;
SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- nationalities
-- Nationalities
Belgian = mkA "Belgian" ;
Belgium = mkNP (mkPN "Belgium") ;
@@ -74,10 +81,14 @@ concrete WordsEng of Words = SentencesEng **
Romanian = mkNat "Romanian" "Romania" ;
Swedish = mkNat "Swedish" "Sweden" ;
-- actions
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (mkNP <lin Numeral num : Numeral> L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP <lin Numeral num : Numeral> L.child_N) ;
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "room")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "table")) (SyntaxEng.mkAdv for_Prep (mkNP num (mkN "person")))) ;
AHasName p name = mkCl (nameOf p) name ;
AHungry p = mkCl p.name (mkA "hungry") ;
AIll p = mkCl p.name (mkA "ill") ;
@@ -86,6 +97,7 @@ concrete WordsEng of Words = SentencesEng **
ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxEng.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
AMarried p = mkCl p.name (mkA "married") ;
AReady p = mkCl p.name (mkA "ready") ;
AScared p = mkCl p.name (mkA "scared") ;
ASpeak p lang = mkCl p.name (mkV2 IrregEng.speak_V) lang ;
AThirsty p = mkCl p.name (mkA "thirsty") ;
@@ -97,7 +109,9 @@ concrete WordsEng of Words = SentencesEng **
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP (mkA "old"))) p.name) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregEng.cost_V)) ;
ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ;
PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_Adv ;
@@ -106,8 +120,17 @@ concrete WordsEng of Words = SentencesEng **
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregEng.cost_V)) ;
ItCost item price = mkCl item (mkV2 IrregEng.cost_V) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p d =
mkText (lin Text (ss ("see you")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "wife") ;
Husband = xOf sing (mkN "husband") ;
@@ -125,42 +148,29 @@ concrete WordsEng of Words = SentencesEng **
Saturday = mkDay "Saturday" ;
Sunday = mkDay "Sunday" ;
Tomorrow = P.mkAdv "tomorrow" ;
-- auxiliaries
oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
{lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ;
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
{name = day ;
point = SyntaxEng.mkAdv on_Prep day ;
habitual = SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
} ;
let day = mkNP (mkPN d) in
mkNPDay day (SyntaxEng.mkAdv on_Prep day)
(SyntaxEng.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
name = mkCN (mkN p) ;
at = P.mkPrep i ;
to = to_Prep
} ;
mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
open_Adv = P.mkAdv "open" ;
closed_Adv = P.mkAdv "closed" ;
NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => mkNP p.poss num x ;
_ => mkNP (mkNP the_Quant num x)
(SyntaxEng.mkAdv possess_Prep p.name)
} ;
isPron = False ;
poss = SyntaxEng.mkQuant he_Pron -- not used because not pron
} ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
sing = False ; plur = True ;
}

View File

@@ -47,6 +47,8 @@ concrete WordsFin of Words = SentencesFin **
Station = mkPlace (mkN "asema") lla ;
Hospital = mkPlace (mkN "sairaala") ssa ;
Church = mkPlace (mkN "kirkko") ssa ;
Cinema = mkPlace (mkN "elokuva" (mkN "teatteri")) ssa ;
Theatre = mkPlace (mkN "teatteri") ssa ;
Shop = mkPlace (mkN "kauppa") ssa ;
Park = mkPlace (mkN "puisto") ssa ;
Hotel = mkPlace (mkN "hotelli") ssa ;
@@ -55,9 +57,11 @@ concrete WordsFin of Words = SentencesFin **
-- currencies
DanishCrown = mkCN (mkN "Tanskan kruunu") | mkCN (mkN "kruunu") ;
Dollar = mkCN (mkN "dollari") ;
Euro = mkCN (mkN "euro") ;
Lei = mkCN (mkN "lei") ;
SwedishCrown = mkCN (mkN "Ruotsin kruunu") | mkCN (mkN "kruunu") ;
-- nationalities
@@ -77,13 +81,27 @@ concrete WordsFin of Words = SentencesFin **
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasName p name = mkCl (nameOf p) name ;
AHasRoom p num = mkCl p.name have_V2
---- (mkNP (E.PartCN (mkN "huone")) ---- partitive works in questions
(mkNP (mkNP a_Det (mkN "huone"))
(SyntaxFin.mkAdv for_Prep (mkNP num (mkN "henki" "henkiä")))) ;
AHasTable p num = mkCl p.name have_V2
---- (mkNP (E.PartCN (mkN "pöytä"))
(mkNP (mkNP a_Det (mkN "pöytä"))
(SyntaxFin.mkAdv for_Prep (mkNP num (mkN "henki" "henkiä")))) ;
AHungry p = mkCl p.name have_V2 (mkNP (mkN "nälkä")) ;
AIll p = mkCl p.name (mkA "sairas") ;
AKnow p = mkCl p.name (mkV "tietää") ;
ALike p item = mkCl p.name L.like_V2 item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "asua")) (SyntaxFin.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "rakastaa") partitive) q.name ;
AMarried p = mkCl p.name (ParadigmsFin.mkAdv "naimisissa") ;
AReady p = mkCl p.name (ParadigmsFin.mkA "valmis") ;
AScared p = mkCl p.name (caseV partitive (mkV "pelottaa")) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ;
AThirsty p = mkCl p.name have_V2 (mkNP (mkN "jano")) ;
@@ -95,6 +113,9 @@ concrete WordsFin of Words = SentencesFin **
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ;
ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ;
PropOpen p = mkCl p.name open_Adv ;
PropClosed p = mkCl p.name closed_Adv ;
@@ -103,8 +124,24 @@ concrete WordsFin of Words = SentencesFin **
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ;
ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYou d = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p d =
mkText (lin Text (ss ("nähdään")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "vaimo") ;
Husband = xOf sing L.man_N ;
Son = xOf sing L.boy_N ;
Daughter = xOf sing (mkN "tytär") ;
Children = xOf plur L.child_N ;
-- week days
@@ -116,6 +153,8 @@ concrete WordsFin of Words = SentencesFin **
Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ;
Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ;
Tomorrow = ParadigmsFin.mkAdv "huomenna" ;
oper
mkNat : PN -> PN -> A ->
{lang : NP ; prop : A ; country : NP} = \nat,co,pro ->
@@ -140,24 +179,12 @@ concrete WordsFin of Words = SentencesFin **
ssa = False ;
lla = True ;
open_Adv = ParadigmsFin.mkAdv "avoinna" ;
closed_Adv = ParadigmsFin.mkAdv "kiinni" ;
NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => mkNP p.poss num x ;
_ => mkNP (E.GenNP p.name) num x
} ;
isPron = False ;
poss = SyntaxFin.mkQuant he_Pron -- not used because not pron
} ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ;
nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ;
sing = False ; plur = True ;
open_Adv = ParadigmsFin.mkAdv "avoinna" ;
closed_Adv = ParadigmsFin.mkAdv "kiinni" ;
}

View File

@@ -71,6 +71,9 @@ lin
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AMarried p = mkCl p.name (mkA "marié") ;
AWant p obj = mkCl p.name vouloir_V2 obj ;
ALike p item = mkCl item plaire_V2 p.name ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parler")) lang ;
@@ -89,6 +92,7 @@ lin
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "appeler")))) ;
QWhatAge p = mkQS (mkQCl (mkIP whichSg_IDet (mkN "âge" masculine)) p.name have_V2) ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
@@ -100,6 +104,12 @@ lin
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "coûter"))) ;
ItCost item price = mkCl item (mkV2 (mkV "coûter")) price ;
Wife = xOf sing (mkN "femme") ;
Husband = xOf sing (mkN "mari") ;
Son = xOf sing (mkN "fils") ;
Daughter = xOf sing (mkN "fille") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "lundi" ;
@@ -112,23 +122,19 @@ lin
oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
{lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ;
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
{name = day ;
point = P.mkAdv d ;
habitual = P.mkAdv ("le" ++ d) ;
} ;
mkNPDay day (P.mkAdv d) (P.mkAdv ("le" ++ d)) ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
name = mkCN p ;
at = i ;
to = dative
} ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
mkCNPlace (mkCN p) i dative ;
open_A = P.mkA "ouvert" ;
closed_A = P.mkA "fermé" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
}

View File

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

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
SyntaxIta,
@@ -6,7 +6,8 @@ concrete WordsIta of Words = SentencesIta ** open
(E = ExtraIta),
(L = LexiconIta),
(P = ParadigmsIta),
ParadigmsIta in {
ParadigmsIta,
Prelude in {
lin
@@ -16,8 +17,10 @@ lin
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "formaggio") ;
Chicken = mkCN (mkN "pollo") ;
Coffee = mkCN (mkN "caffè") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "carne" feminine) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
@@ -29,30 +32,40 @@ lin
Bad = L.bad_A ;
Boring = mkA "noioso" ;
Cheap = let c = "a buon mercato" in mkA c c c c c ; ----
Cold = L.cold_A ;
Delicious = mkA "delizioso" ;
Expensive = mkA "caro" ;
Fresh = mkA "fresco" ;
Good = L.good_A ;
Warm = L.warm_A ;
Suspect = mkA "sospetto" ;
-- places
Airport = mkPlace (mkN "aeroporto") dative ;
Bar = mkPlace (mkN "bar") P.in_Prep ;
Church = mkPlace (mkN "chiesa") P.in_Prep ;
Cinema = mkPlace (mkN "cinema") P.in_Prep ;
Hospital = mkPlace (mkN "ospedale") P.in_Prep ;
Hotel = mkPlace (mkN "albergo") P.in_Prep ;
Museum = mkPlace (mkN "museo") P.in_Prep ;
Park = mkPlace (mkN "parco") P.in_Prep ;
Restaurant = mkPlace (mkN "ristorante") P.in_Prep ;
School = mkPlace (mkN "scuola") P.in_Prep ;
Shop = mkPlace (mkN "negozio") P.in_Prep ;
Station = mkPlace (mkN "stazione" feminine) dative ;
Theatre = mkPlace (mkN "teatro") P.in_Prep ;
Toilet = mkPlace (mkN "bagno") P.in_Prep ;
University = mkPlace (mkN "università") dative ;
-- currencies
DanishCrown = mkCN (mkA "danese") (mkN "corona") ;
DanishCrown = mkCN (mkA "danese") (mkN "corona") | mkCN (mkN "corona") ;
Dollar = mkCN (mkN "dollar") ;
Euro = mkCN (mkN "euro" "euro" masculine) ;
Lei = mkCN (mkN "lei") ; ---- ?
SwedishCrown = mkCN (mkA "svedese") (mkN "corona") | mkCN (mkN "corona") ;
-- nationalities
@@ -68,6 +81,12 @@ lin
-- actions
AHasAge p num = mkCl p.name have_V2 (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "camera")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "tavolo")) (SyntaxIta.mkAdv for_Prep (mkNP num (mkN "persona")))) ;
AHasName p name = mkCl p.name (mkV2 (reflV (mkV "chiamare"))) name ;
AHungry p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "fame" feminine))) ;
AIll p = mkCl p.name (mkA "malato") ;
@@ -76,6 +95,8 @@ lin
ALive p co =
mkCl p.name (mkVP (mkVP (mkV "abitare")) (SyntaxIta.mkAdv P.in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "amare")) q.name ;
AMarried p = mkCl p.name (mkA "sposato") ;
AReady p = mkCl p.name (mkA "pronto") ;
AScared p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "paura" feminine))) ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "parlare")) lang ;
AThirsty p = mkCl p.name (E.ComplCN have_V2 (mkCN (mkN "sete" feminine))) ;
@@ -88,6 +109,7 @@ lin
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (reflV (mkV "chiamare")))) ;
QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name have_V2) ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
@@ -99,6 +121,24 @@ lin
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "costare"))) ;
ItCost item price = mkCl item (mkV2 (mkV "costare")) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYou d = mkText (lin Text (ss ("arrivederci"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p d =
mkText (lin Text (ss ("arrivederci")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "the wife of my son", as defined by $xOf$
-- below. Languages with productive genitives can use an equivalent of
-- "my son's wife" for non-pronouns, as e.g. in English.
Wife = xOf sing (mkN "sposa") ;
Husband = xOf sing (mkN "marito") ;
Son = xOf sing (mkN "figlio") ;
Daughter = xOf sing (mkN "figlia") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "lunedì" ;
@@ -109,24 +149,22 @@ lin
Saturday = mkDay "sabato" ;
Sunday = mkDay "domenica" ;
Tomorrow = P.mkAdv "domani" ;
-- auxiliaries
oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
{lang = mkNP (mkPN nat) ; prop = mkA nat ; country = mkNP (mkPN co)} ;
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
{name = day ;
point, -- = ParadigmsIta.mkAdv d ;
habitual = ParadigmsIta.mkAdv ("il" ++ d) ; ---- ?
} ;
mkNPDay day (P.mkAdv ("il" ++ d)) (P.mkAdv ("il" ++ d)) ; ---- ?
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
name = mkCN p ;
at = i ;
to = dative
} ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
mkCNPlace (mkCN p) i dative ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
open_A = mkA "aperto" ;
closed_A = mkA "chiuso" ;

View File

@@ -1,7 +1,7 @@
-- (c) 2009 Aarne Ranta under LGPL
concrete WordsNor of Words = SentencesNor **
open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), Prelude in {
open SyntaxNor, ParadigmsNor, IrregNor, (L = LexiconNor), ExtraNor, Prelude in {
lin
@@ -10,125 +10,158 @@ concrete WordsNor of Words = SentencesNor **
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Cheese = mkCN (mkN "ost") ;
-- Chicken = mkCN (mkN "kyckling") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "te" neutrum) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
--
-- properties
--
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Cheap = mkA "billig" ;
-- Boring = mkA "tråkig" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
Good = L.good_A ;
-- Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "" ;
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Park = mkPlace (mkN "park" "parker") "i" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Shop = mkPlace (mkN "affär" "affär") "i" ;
-- School = mkPlace (mkN "skola") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
-- University = mkPlace (mkN "universitet" "universitet") "på" ;
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxNor.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
-- AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "rum" "rum"))
-- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "bord" "bord"))
-- (SyntaxNor.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxNor.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AMarried p = mkCl p.name (mkA "gift") ;
-- AReady p = mkCl p.name (mkA "färdig") ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("vi ses")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "fru" "fruar") ;
-- Husband = xOf sing L.man_N ;
-- Son = xOf sing (mkN "son" "söner") ;
-- Daughter = xOf sing (mkN "dotter" "döttrar") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxNor.mkAdv on_Prep day ;
-- habitual = SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxNor.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "måndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "lördag" ;
-- Sunday = mkDay "söndag" ;
-- Tomorrow = ParadigmsNor.mkAdv "imorgon" ;
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxNor.mkAdv on_Prep day)
-- (SyntaxNor.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
--}
}

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 **
open SyntaxPol, ParadigmsPol, (L = LexiconPol), Prelude in {
open
SyntaxPol,
ParadigmsPol,
(L = LexiconPol),
(P = ParadigmsPol),
-- ExtraPol,
Prelude in {
lin
-- kinds of food
-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Cheese = mkCN (mkN "cheese") ;
-- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
--
-- properties
--
-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "delicious" ;
-- Expensive = mkA "expensive" ;
-- Fresh = mkA "fresh" ;
Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
--
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxPol.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- Places require different prepositions to express location; in some languages
-- also the directional preposition varies, but in English we use $to$, as
-- defined by $mkPlace$.
-- Airport = mkPlace "airport" "at" ;
-- Bar = mkPlace "bar" "in" ;
-- Church = mkPlace "church" "in" ;
-- Cinema = mkPlace "cinema" "at" ;
-- Hospital = mkPlace "hospital" "in" ;
-- Hotel = mkPlace "hotel" "in" ;
-- Museum = mkPlace "museum" "in" ;
-- Park = mkPlace "park" "in" ;
-- Restaurant = mkPlace "restaurant" "in" ;
-- School = mkPlace "school" "at" ;
-- Shop = mkPlace "shop" "in" ;
-- Station = mkPlace "station" "at" ;
-- Theatre = mkPlace "theatre" "at" ;
-- Toilet = mkPlace "toilet" "in" ;
-- University = mkPlace "university" "at" ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- Dollar = mkCN (mkN "dollar") ;
-- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Lei = mkCN (mkN "leu" "lei") ;
-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Nationalities
-- Belgian = mkA "Belgian" ;
-- Belgium = mkNP (mkPN "Belgium") ;
-- English = mkNat "English" "England" ;
-- Finnish = mkNat "Finnish" "Finland" ;
-- Flemish = mkNP (mkPN "Flemish") ;
-- French = mkNat "French" "France" ;
-- Italian = mkNat "Italian" "Italy" ;
-- Romanian = mkNat "Romanian" "Romania" ;
-- Swedish = mkNat "Swedish" "Sweden" ;
-- Actions: the predication patterns are very often language-dependent.
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "room")) (SyntaxPol.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxPol.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungry") ;
-- AIll p = mkCl p.name (mkA "ill") ;
-- AKnow p = mkCl p.name IrregPol.know_V ;
-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxPol.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
-- AMarried p = mkCl p.name (mkA "married") ;
-- AReady p = mkCl p.name (mkA "ready") ;
-- AScared p = mkCl p.name (mkA "scared") ;
-- ASpeak p lang = mkCl p.name (mkV2 IrregPol.speak_V) lang ;
-- AThirsty p = mkCl p.name (mkA "thirsty") ;
-- ATired p = mkCl p.name (mkA "tired") ;
-- AUnderstand p = mkCl p.name IrregPol.understand_V ;
-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregPol.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregPol.cost_V)) ;
-- ItCost item price = mkCl item (mkV2 IrregPol.cost_V) price ;
-- PropOpen p = mkCl p.name open_Adv ;
-- PropClosed p = mkCl p.name closed_Adv ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("see you")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "wife") ;
-- Husband = xOf sing (mkN "husband") ;
-- Son = xOf sing (mkN "son") ;
-- Daughter = xOf sing (mkN "daughter") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "ndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "rdag" ;
-- Sunday = mkDay "ndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxPol.mkAdv on_Prep day ;
-- habitual = SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxPol.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "Friday" ;
-- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "Sunday" ;
-- Tomorrow = P.mkAdv "tomorrow" ;
-- auxiliaries
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxPol.mkAdv on_Prep day)
-- (SyntaxPol.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- open_Adv = P.mkAdv "open" ;
-- closed_Adv = P.mkAdv "closed" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
--}
}

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 **
open SyntaxRus, ParadigmsRus, (L = LexiconRus), Prelude in {
open
SyntaxRus,
ParadigmsRus,
(L = LexiconRus),
(P = ParadigmsRus),
-- IrregRus,
-- ExtraRus,
Prelude in {
-- lin
-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
lin
-- kinds of food
--
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
-- Cheese = mkCN (mkN "ost") ;
-- Coffee = mkCN (mkN "kaffe" neutrum) ;
-- Cheese = mkCN (mkN "cheese") ;
-- Chicken = mkCN (mkN "chicken") ;
-- Coffee = mkCN (mkN "coffee") ;
Fish = mkCN L.fish_N ;
-- Meat = mkCN (mkN "meat") ;
Milk = mkCN L.milk_N ;
-- Pizza = mkCN (mkN "pizza") ;
-- Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
-- Tea = mkCN (mkN "te" neutrum) ;
-- Tea = mkCN (mkN "tea") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
--
-- properties
--
-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
Bad = L.bad_A ;
-- Boring = mkA "tråkig" ;
-- Boring = mkA "boring" ;
-- Cheap = mkA "cheap" ;
Cold = L.cold_A ;
-- Delicious = mkA "läcker" ;
-- Expensive = mkA "dyr" ;
-- Fresh = mkA "färsk" ;
-- Delicious = mkA "delicious" ;
-- Expensive = mkA "expensive" ;
-- Fresh = mkA "fresh" ;
Good = L.good_A ;
-- Suspect = mkA "suspect" ;
Warm = L.warm_A ;
--
-- places
--
-- Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
-- Bar = mkPlace (mkN "bar" "barer") "i" ;
-- Church = mkPlace (mkN "kyrka") "i" ;
-- Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
-- Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
-- Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
-- Station = mkPlace (mkN "station" "stationer") "på" ;
-- Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
--
-- currencies
--
-- DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
-- Dollar = mkCN (mkN "dollar" "dollar") ;
-- Euro = mkCN (mkN "euro" "euro") ;
-- Lei = mkCN (mkN "lei" "lei") ;
-- SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
--
-- nationalities
--
-- Belgian = mkA "belgisk" ;
-- Belgium = mkNP (mkPN "Belgien") ;
-- English = mkNat "engelsk" "England" ;
-- Finnish = mkNat "finsk" "Finland" ;
-- Flemish = mkNP (mkPN "flamländska") ;
-- French = mkNat "fransk" "Frankrike" ;
-- Italian = mkNat "italiensk" "Italien" ;
-- Romanian = mkNat "rumänsk" "Rumänien" ;
-- Swedish = mkNat "svensk" "Sverige" ;
--
-- actions
--
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungrig") ;
-- AIll p = mkCl p.name (mkA "sjuk") ;
-- AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
-- ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxRus.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
-- AScared p = mkCl p.name (mkA "rädd") ;
-- ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
-- AThirsty p = mkCl p.name (mkA "törstig") ;
-- ATired p = mkCl p.name (mkA "trött") ;
-- AUnderstand p = mkCl p.name (mkV "förstå" "förstod" "förstått") ;
-- AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;
--
-- Places require different prepositions to express location; in some languages
-- also the directional preposition varies, but in English we use $to$, as
-- defined by $mkPlace$.
-- Airport = mkPlace "airport" "at" ;
-- Bar = mkPlace "bar" "in" ;
-- Church = mkPlace "church" "in" ;
-- Cinema = mkPlace "cinema" "at" ;
-- Hospital = mkPlace "hospital" "in" ;
-- Hotel = mkPlace "hotel" "in" ;
-- Museum = mkPlace "museum" "in" ;
-- Park = mkPlace "park" "in" ;
-- Restaurant = mkPlace "restaurant" "in" ;
-- School = mkPlace "school" "at" ;
-- Shop = mkPlace "shop" "in" ;
-- Station = mkPlace "station" "at" ;
-- Theatre = mkPlace "theatre" "at" ;
-- Toilet = mkPlace "toilet" "in" ;
-- University = mkPlace "university" "at" ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
-- DanishCrown = mkCN (mkA "Danish") (mkN "crown") | mkCN (mkN "crown") ;
-- Dollar = mkCN (mkN "dollar") ;
-- Euro = mkCN (mkN "euro" "euros") ; -- to prevent euroes
-- Lei = mkCN (mkN "leu" "lei") ;
-- SwedishCrown = mkCN (mkA "Swedish") (mkN "crown") | mkCN (mkN "crown") ;
-- Nationalities
-- Belgian = mkA "Belgian" ;
-- Belgium = mkNP (mkPN "Belgium") ;
-- English = mkNat "English" "England" ;
-- Finnish = mkNat "Finnish" "Finland" ;
-- Flemish = mkNP (mkPN "Flemish") ;
-- French = mkNat "French" "France" ;
-- Italian = mkNat "Italian" "Italy" ;
-- Romanian = mkNat "Romanian" "Romania" ;
-- Swedish = mkNat "Swedish" "Sweden" ;
-- Actions: the predication patterns are very often language-dependent.
-- AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
-- AHasRoom p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "room")) (SyntaxRus.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasTable p num = mkCl p.name have_V2
-- (mkNP (mkNP a_Det (mkN "table")) (SyntaxRus.mkAdv for_Prep (mkNP num (mkN "person")))) ;
-- AHasName p name = mkCl (nameOf p) name ;
-- AHungry p = mkCl p.name (mkA "hungry") ;
-- AIll p = mkCl p.name (mkA "ill") ;
-- AKnow p = mkCl p.name IrregRus.know_V ;
-- ALike p item = mkCl p.name (mkV2 (mkV "like")) item ;
-- ALive p co = mkCl p.name (mkVP (mkVP (mkV "live")) (SyntaxRus.mkAdv in_Prep co)) ;
-- ALove p q = mkCl p.name (mkV2 (mkV "love")) q.name ;
-- AMarried p = mkCl p.name (mkA "married") ;
-- AReady p = mkCl p.name (mkA "ready") ;
-- AScared p = mkCl p.name (mkA "scared") ;
-- ASpeak p lang = mkCl p.name (mkV2 IrregRus.speak_V) lang ;
-- AThirsty p = mkCl p.name (mkA "thirsty") ;
-- ATired p = mkCl p.name (mkA "tired") ;
-- AUnderstand p = mkCl p.name IrregRus.understand_V ;
-- AWant p obj = mkCl p.name (mkV2 (mkV "want")) obj ;
-- AWantGo p place = mkCl p.name want_VV (mkVP (mkVP IrregRus.go_V) place.to) ;
-- miscellaneous
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
--
-- PropOpen p = mkCl p.name open_A ;
-- PropClosed p = mkCl p.name closed_A ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
--
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
-- ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
--
-- QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ;
-- QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
-- HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item IrregRus.cost_V)) ;
-- ItCost item price = mkCl item (mkV2 IrregRus.cost_V) price ;
-- PropOpen p = mkCl p.name open_Adv ;
-- PropClosed p = mkCl p.name closed_Adv ;
-- PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ;
-- PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ;
-- PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ;
-- PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
-- PSeeYou d = mkText (lin Text (ss ("see you"))) (mkPhrase (mkUtt d)) ;
-- PSeeYouPlace p d =
-- mkText (lin Text (ss ("see you")))
-- (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
-- Wife = xOf sing (mkN "wife") ;
-- Husband = xOf sing (mkN "husband") ;
-- Son = xOf sing (mkN "son") ;
-- Daughter = xOf sing (mkN "daughter") ;
-- Children = xOf plur L.child_N ;
-- week days
--
-- Monday = mkDay "ndag" ;
-- Tuesday = mkDay "tisdag" ;
-- Wednesday = mkDay "onsdag" ;
-- Thursday = mkDay "torsdag" ;
-- Friday = mkDay "fredag" ;
-- Saturday = mkDay "rdag" ;
-- Sunday = mkDay "ndag" ;
--
-- oper
-- mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
-- {lang = mkNP (mkPN (nat + "a")) ;
-- prop = mkA nat ; country = mkNP (mkPN co)} ;
--
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- {name = day ;
-- point = SyntaxRus.mkAdv on_Prep day ;
-- habitual = SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
-- } ;
--
-- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
-- name = mkCN p ;
-- at = mkPrep i ;
-- to = to_Prep
-- } ;
--
-- open_A = mkA "öppen" "öppet" ;
-- closed_A = mkA "stängd" "stängt" ;
--
-- nameOf : {name : NP ; isPron : Bool ; poss : Det} -> NP = \p ->
-- case p.isPron of {
-- True => mkNP p.poss (mkN "namn" "namn") ;
-- _ => mkNP (mkNP the_Det (mkN "namn" "namn"))
-- (SyntaxRus.mkAdv possess_Prep p.name)
-- } ;
-- }
-- Monday = mkDay "Monday" ;
-- Tuesday = mkDay "Tuesday" ;
-- Wednesday = mkDay "Wednesday" ;
-- Thursday = mkDay "Thursday" ;
-- Friday = mkDay "Friday" ;
-- Saturday = mkDay "Saturday" ;
-- Sunday = mkDay "Sunday" ;
-- Tomorrow = P.mkAdv "tomorrow" ;
-- auxiliaries
-- oper
-- mkNat : Str -> Str -> NPNationality = \nat,co ->
-- mkNPNationality (mkNP (mkPN nat)) (mkNP (mkPN co)) (mkA nat) ;
-- mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
-- let day = mkNP (mkPN d) in
-- mkNPDay day (SyntaxRus.mkAdv on_Prep day)
-- (SyntaxRus.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
-- mkPlace : Str -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
-- mkCNPlace (mkCN (mkN p)) (P.mkPrep i) to_Prep ;
-- open_Adv = P.mkAdv "open" ;
-- closed_Adv = P.mkAdv "closed" ;
-- xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
-- relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
-- nameOf : NPPerson -> NP = \p -> (xOf sing (mkN "name") p).name ;
--}
}

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

View File

@@ -1,7 +1,7 @@
-- (c) 2009 Aarne Ranta under LGPL
concrete WordsSwe of Words = SentencesSwe **
open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), Prelude in {
open SyntaxSwe, ParadigmsSwe, IrregSwe, (L = LexiconSwe), ExtraSwe, Prelude in {
lin
@@ -11,8 +11,10 @@ concrete WordsSwe of Words = SentencesSwe **
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "ost") ;
Chicken = mkCN (mkN "kyckling") ;
Coffee = mkCN (mkN "kaffe" neutrum) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "kött" "kött") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "pizza") ;
Salt = mkCN L.salt_N ;
@@ -23,12 +25,14 @@ concrete WordsSwe of Words = SentencesSwe **
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "tråkig" ;
Cold = L.cold_A ;
Delicious = mkA "läcker" ;
Expensive = mkA "dyr" ;
Fresh = mkA "färsk" ;
Good = L.good_A ;
Suspect = mkA "suspekt" "suspekt" ;
Warm = L.warm_A ;
-- places
@@ -36,19 +40,26 @@ concrete WordsSwe of Words = SentencesSwe **
Airport = mkPlace (mkN "flygplats" "flygplatser") "på" ;
Bar = mkPlace (mkN "bar" "barer") "i" ;
Church = mkPlace (mkN "kyrka") "i" ;
Cinema = mkPlace (mkN "bio" "bio" "bion" "biona") "på" ; ---- ?
Hospital = mkPlace (mkN "sjukhus" "sjukhus") "på" ;
Hotel = mkPlace (mkN "hotell" "hotell") "på" ;
Museum = mkPlace (mkN "museum" "museet" "museer" "museerna") "på" ;
Park = mkPlace (mkN "park" "parker") "i" ;
Restaurant = mkPlace (mkN "restaurang" "restauranger") "på" ;
Shop = mkPlace (mkN "affär" "affär") "i" ;
School = mkPlace (mkN "skola") "på" ;
Station = mkPlace (mkN "station" "stationer") "på" ;
Theatre = mkPlace (mkN "teater" "teatrar") "på" ;
Toilet = mkPlace (mkN "toalett" "toaletter") "på" ;
University = mkPlace (mkN "universitet" "universitet") "på" ;
-- currencies
DanishCrown = mkCN (mkA "dansk") (mkN "krona") ;
DanishCrown = mkCN (mkA "dansk") (mkN "krona") | mkCN (mkN "krona") ;
Dollar = mkCN (mkN "dollar" "dollar") ;
Euro = mkCN (mkN "euro" "euro") ;
Lei = mkCN (mkN "lei" "lei") ;
SwedishCrown = mkCN (mkA "svensk") (mkN "krona") ;
SwedishCrown = mkCN (mkA "svensk") (mkN "krona") | mkCN (mkN "krona") ;
-- nationalities
@@ -64,13 +75,23 @@ concrete WordsSwe of Words = SentencesSwe **
-- actions
AHasAge p num = mkCl p.name (mkNP num L.year_N) ;
AHasName p name = mkCl p.name (mkV2 (mkV "heter")) name ;
AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;
AHasRoom p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "rum" "rum"))
(SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
AHasTable p num = mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "bord" "bord"))
(SyntaxSwe.mkAdv for_Prep (mkNP num (mkN "person" "personer")))) ;
AHungry p = mkCl p.name (mkA "hungrig") ;
AIll p = mkCl p.name (mkA "sjuk") ;
AKnow p = mkCl p.name (mkV "veta" "vet" "vet" "visste" "vetat" "visst") ;
ALike p item = mkCl p.name (mkV2 (mkV "tycker") (mkPrep "om")) item ;
ALive p co = mkCl p.name (mkVP (mkVP (mkV "bo")) (SyntaxSwe.mkAdv in_Prep co)) ;
ALove p q = mkCl p.name (mkV2 (mkV "älska")) q.name ;
AMarried p = mkCl p.name (mkA "gift") ;
AReady p = mkCl p.name (mkA "färdig") ;
AScared p = mkCl p.name (mkA "rädd") ;
ASpeak p lang = mkCl p.name (mkV2 (mkV "tala")) lang ;
AThirsty p = mkCl p.name (mkA "törstig") ;
@@ -82,6 +103,9 @@ concrete WordsSwe of Words = SentencesSwe **
-- miscellaneous
QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 (mkV "heter"))) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
PropOpen p = mkCl p.name open_A ;
PropClosed p = mkCl p.name closed_A ;
@@ -90,8 +114,23 @@ concrete WordsSwe of Words = SentencesSwe **
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosta"))) ;
ItCost item price = mkCl item (mkV2 (mkV "kosta")) price ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYou d = mkText (lin Text (ss ("vi ses"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p d =
mkText (lin Text (ss ("vi ses")))
(mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;
-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$
-- below. Languages without productive genitives must use an equivalent of
-- "the wife of my son" for non-pronouns.
Wife = xOf sing (mkN "fru" "fruar") ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "son" "söner") ;
Daughter = xOf sing (mkN "dotter" "döttrar") ;
Children = xOf plur L.child_N ;
-- week days
@@ -103,42 +142,25 @@ concrete WordsSwe of Words = SentencesSwe **
Saturday = mkDay "lördag" ;
Sunday = mkDay "söndag" ;
Tomorrow = ParadigmsSwe.mkAdv "imorgon" ;
oper
mkNat : Str -> Str -> {lang : NP ; prop : A ; country : NP} = \nat,co ->
{lang = mkNP (mkPN (nat + "a")) ;
prop = mkA nat ; country = mkNP (mkPN co)} ;
mkNat : Str -> Str -> NPNationality = \nat,co ->
mkNPNationality (mkNP (mkPN (nat + "a"))) (mkNP (mkPN co)) (mkA nat) ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d) in
{name = day ;
point = SyntaxSwe.mkAdv on_Prep day ;
habitual = SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))
} ;
let day = mkNP (mkPN d) in
mkNPDay day (SyntaxSwe.mkAdv on_Prep day)
(SyntaxSwe.mkAdv on_Prep (mkNP a_Quant plNum (mkCN (mkN d)))) ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> {
name = mkCN p ;
at = mkPrep i ;
to = to_Prep
} ;
mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i ->
mkCNPlace (mkCN p) (mkPrep i) to_Prep ;
open_A = mkA "öppen" "öppet" ;
closed_A = mkA "stängd" "stängt" ;
NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (GenNP b) a c) p ;
xOf : Bool -> N -> NPPerson -> NPPerson = \n,x,p ->
let num = if_then_else Num n plNum sgNum in {
name = case p.isPron of {
True => mkNP p.poss num x ;
_ => mkNP (mkNP the_Quant num x)
(SyntaxSwe.mkAdv possess_Prep p.name)
} ;
isPron = False ;
poss = SyntaxSwe.mkQuant he_Pron -- not used because not pron
} ;
nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ;
sing = False ; plur = True ;
}

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
</P>
<UL>
<LI>10 April. Some additions in API, comments in implementation; regenerated clones.
<LI>8 April. Added German.
<LI>7 April. Added the Clone script, applied to initiate the rest of MOLTO languages.
<LI>6 April. Version 0.4: weekdays, nationalities
@@ -193,12 +194,21 @@ The basic things "everyone" can do is
<P>
The missing concrete syntax entries are added to the <CODE>Words</CODE><I>L</I><CODE>.gf</CODE>
files for each language <I>L</I>. The
<A HREF="http://www.grammaticalframework.org/lib/doc/synopsis.html#toc78">morphological paradigms</A>
<A HREF="http://code.haskell.org/gf/lib/doc/synopsis.html#toc78">morphological paradigms</A>
of the GF resource library should be used. Actions (prefixed with <CODE>A</CODE>, as <CODE>AWant</CODE>) are
a little more demanding, since they also require syntax constructors. Greetings (prefixed
with <CODE>G</CODE>) are pure strings.
</P>
<P>
Some explanations can be found in the
<A HREF="Implementation.html">implementation document</A>, which is produced from the
concrete syntax files
<A HREF="http://code.haskell.org/gf/examples/phrasebook/SentencesI.gf"><CODE>SentencesI.gf</CODE></A>
and
<A HREF="http://code.haskell.org/gf/examples/phrasebook/WordsEng.gf"><CODE>WordsEng.gf</CODE></A>
by <CODE>make doc</CODE>.
</P>
<P>
Here are the steps to follow for contributors:
</P>
<OL>

View File

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