Reduce Phrasebook grammars in testsuite/canonical to bare minimum

This commit is contained in:
John J. Camilleri
2021-07-01 09:22:57 +02:00
parent 587004f985
commit 32be75ca7d
15 changed files with 313 additions and 1560 deletions

View File

@@ -0,0 +1,251 @@
concrete PhrasebookGer of Phrasebook = {
param Prelude_Bool = Prelude_False | Prelude_True;
param ResGer_Agr = ResGer_Ag ResGer_Gender ParamX_Number ParamX_Person;
param ParamX_Number = ParamX_Sg | ParamX_Pl;
param ParamX_Person = ParamX_P1 | ParamX_P2 | ParamX_P3;
param ResGer_Gender = ResGer_Masc | ResGer_Fem | ResGer_Neutr;
param ResGer_Control = ResGer_SubjC | ResGer_ObjC | ResGer_NoC;
param ResGer_PCase = ResGer_NPC ResGer_Case | ResGer_NPP ResGer_CPrep;
param ResGer_CPrep =
ResGer_CAnDat | ResGer_CInAcc | ResGer_CInDat | ResGer_CZuDat |
ResGer_CVonDat;
param ResGer_Case = ResGer_Nom | ResGer_Acc | ResGer_Dat | ResGer_Gen;
param ResGer_VAux = ResGer_VHaben | ResGer_VSein;
param ResGer_VForm =
ResGer_VInf Prelude_Bool | ResGer_VFin Prelude_Bool ResGer_VFormFin |
ResGer_VImper ParamX_Number | ResGer_VPresPart ResGer_AForm |
ResGer_VPastPart ResGer_AForm;
param ResGer_AForm = ResGer_APred | ResGer_AMod ResGer_GenNum ResGer_Case;
param ResGer_GenNum = ResGer_GSg ResGer_Gender | ResGer_GPl;
param ResGer_VFormFin =
ResGer_VPresInd ParamX_Number ParamX_Person |
ResGer_VPresSubj ParamX_Number ParamX_Person;
param ResGer_VType = ResGer_VAct | ResGer_VRefl ResGer_Case;
lincat PlaceKind = {s : Str};
VerbPhrase =
{s :
{s : ResGer_VForm => Str; aux : ResGer_VAux; particle : Str;
prefix : Str; vtype : ResGer_VType};
a1 : Str; a2 : Str; adj : Str; ext : Str;
inf : {s : Str; ctrl : ResGer_Control; isAux : Prelude_Bool};
infExt : Str; isAux : Prelude_Bool;
nn :
ResGer_Agr =>
{p1 : Str; p2 : Str; p3 : Str; p4 : Str; p5 : Str; p6 : Str};
subjc :
{s : Str; c : ResGer_PCase; isPrep : Prelude_Bool; s2 : Str}};
lin VRead =
{s =
{s =
table {ResGer_VInf Prelude_False => "lesen";
ResGer_VInf Prelude_True => "zu" ++ "lesen";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Sg ParamX_P1) =>
"lese";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Sg ParamX_P2) =>
"liest";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Sg ParamX_P3) =>
"liest";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Pl ParamX_P1) =>
"lesen";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Pl ParamX_P2) =>
"lest";
ResGer_VFin Prelude_False
(ResGer_VPresInd ParamX_Pl ParamX_P3) =>
"lesen";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Sg ParamX_P1) =>
"lese";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Sg ParamX_P2) =>
"lesest";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Sg ParamX_P3) =>
"lese";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Pl ParamX_P1) =>
"lesen";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Pl ParamX_P2) =>
"leset";
ResGer_VFin Prelude_False
(ResGer_VPresSubj ParamX_Pl ParamX_P3) =>
"lesen";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Sg ParamX_P1) =>
"lese";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Sg ParamX_P2) =>
"liest";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Sg ParamX_P3) =>
"liest";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Pl ParamX_P1) =>
"lesen";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Pl ParamX_P2) =>
"lest";
ResGer_VFin Prelude_True
(ResGer_VPresInd ParamX_Pl ParamX_P3) =>
"lesen";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Sg ParamX_P1) =>
"lese";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Sg ParamX_P2) =>
"lesest";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Sg ParamX_P3) =>
"lese";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Pl ParamX_P1) =>
"lesen";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Pl ParamX_P2) =>
"leset";
ResGer_VFin Prelude_True
(ResGer_VPresSubj ParamX_Pl ParamX_P3) =>
"lesen";
ResGer_VImper ParamX_Sg => "les";
ResGer_VImper ParamX_Pl => "lest";
ResGer_VPresPart ResGer_APred => "lesend";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Nom) =>
"lesender";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Acc) =>
"lesenden";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Dat) =>
"lesendem";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Gen) =>
"lesenden";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Nom) =>
"lesende";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Acc) =>
"lesende";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Dat) =>
"lesender";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Gen) =>
"lesender";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Nom) =>
"lesendes";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Acc) =>
"lesendes";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Dat) =>
"lesendem";
ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Gen) =>
"lesenden";
ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Nom) =>
"lesende";
ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Acc) =>
"lesende";
ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Dat) =>
"lesenden";
ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Gen) =>
"lesender";
ResGer_VPastPart ResGer_APred => "gelesen";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Nom) =>
"gelesener";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Acc) =>
"gelesenen";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Dat) =>
"gelesenem";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
ResGer_Gen) =>
"gelesenen";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Nom) =>
"gelesene";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Acc) =>
"gelesene";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Dat) =>
"gelesener";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
ResGer_Gen) =>
"gelesener";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Nom) =>
"gelesenes";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Acc) =>
"gelesenes";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Dat) =>
"gelesenem";
ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
ResGer_Gen) =>
"gelesenen";
ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Nom) =>
"gelesene";
ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Acc) =>
"gelesene";
ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Dat) =>
"gelesenen";
ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Gen) =>
"gelesener"};
aux = ResGer_VHaben; particle = ""; prefix = "";
vtype = ResGer_VAct};
a1 = ""; a2 = ""; adj = "";
ext = ""; inf = {s = ""; ctrl = ResGer_NoC; isAux = Prelude_True};
infExt = ""; isAux = Prelude_False;
nn =
table {ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P1 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P2 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P3 =>
{p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""}};
subjc =
{s = ""; c = ResGer_NPC ResGer_Nom; isPrep = Prelude_False;
s2 = ""}};
}

View File

@@ -1,28 +0,0 @@
abstract Greetings = Sentences [Greeting] ** {
fun
GBye : Greeting ;
GCheers : Greeting ;
GDamn : Greeting ;
GExcuse, GExcusePol : Greeting ;
GGoodDay : Greeting ;
GGoodEvening : Greeting ;
GGoodMorning : Greeting ;
GGoodNight : Greeting ;
GGoodbye : Greeting ;
GHello : Greeting ;
GHelp : Greeting ;
GHowAreYou : Greeting ;
GLookOut : Greeting ;
GNiceToMeetYou : Greeting ;
GPleaseGive, GPleaseGivePol : Greeting ;
GSeeYouSoon : Greeting ;
GSorry, GSorryPol : Greeting ;
GThanks : Greeting ;
GTheCheck : Greeting ;
GCongratulations : Greeting ;
GHappyBirthday : Greeting ;
GGoodLuck : Greeting ;
GWhatTime : Greeting ;
}

View File

@@ -1,31 +0,0 @@
concrete GreetingsBul of Greetings = SentencesBul [Greeting,mkGreeting] ** open Prelude in {
flags
coding=utf8;
lin
GBye = mkGreeting "чао" ;
GCheers = mkGreeting "наздраве" ;
GDamn = mkGreeting "по дяволите" ;
GExcuse, GExcusePol = mkGreeting "извинете" ;
GGoodDay = mkGreeting "добър ден" ;
GGoodEvening = mkGreeting "добра вечер" ;
GGoodMorning = mkGreeting "добро утро" ;
GGoodNight = mkGreeting "лека нощ" ;
GGoodbye = mkGreeting "довиждане" ;
GHello = mkGreeting "здравей" ;
GHelp = mkGreeting "помощ" ;
GHowAreYou = mkGreeting "как си" ;
GLookOut = mkGreeting "погледни" ;
GNiceToMeetYou = mkGreeting "радвам се да се видим" ;
GPleaseGive, GPleaseGivePol = mkGreeting "моля" ;
GSeeYouSoon = mkGreeting "до скоро" ;
GSorry, GSorryPol = mkGreeting "извинете" ;
GThanks = mkGreeting "благодаря ти" ;
GTheCheck = mkGreeting "сметката" ;
GCongratulations = mkGreeting "поздравления";
GHappyBirthday = mkGreeting "честит рожден ден" ;
GGoodLuck = mkGreeting "успех" ;
GWhatTime = mkGreeting "колко е часът" ;
}

View File

@@ -1,31 +0,0 @@
--# -path=.:abstract:prelude:german:api:common
--# -coding=latin1
concrete GreetingsGer of Greetings = SentencesGer [Greeting,mkGreeting] ** open Prelude in {
lin
GBye = mkGreeting "tschüß" ;
GCheers = mkGreeting "zum Wohl" ;
GDamn = mkGreeting "verdammt" ;
GExcuse, GExcusePol = mkGreeting "Entschuldigung" ;
GGoodDay = mkGreeting "guten Tag" ;
GGoodEvening = mkGreeting "guten Abend" ;
GGoodMorning = mkGreeting "guten Morgen" ;
GGoodNight = mkGreeting "gute Nacht" ;
GGoodbye = mkGreeting "auf Wiedersehen" ;
GHello = mkGreeting "Hallo" ;
GHelp = mkGreeting "Hilfe" ;
GHowAreYou = mkGreeting "wie geht's" ;
GLookOut = mkGreeting "Achtung" ;
GNiceToMeetYou = mkGreeting "nett, Sie zu treffen" ;
GPleaseGive, GPleaseGivePol = mkGreeting "bitte" ;
GSeeYouSoon = mkGreeting "bis bald" ;
GSorry, GSorryPol = mkGreeting "Entschuldigung" ;
GThanks = mkGreeting "Danke" ;
GTheCheck = mkGreeting "die Rechnung" ;
GCongratulations = mkGreeting "herzlichen Glückwunsch";
GHappyBirthday = mkGreeting "alles Gute zum Geburtstag" ;
GGoodLuck = mkGreeting "viel Glück" ;
GWhatTime = mkGreeting "wieviel Uhr ist es" | mkGreeting "wie spät ist es" ;
}

View File

@@ -1,8 +1,9 @@
abstract Phrasebook =
Greetings,
Words
** {
abstract Phrasebook = {
flags startcat = Phrase ;
cat PlaceKind ;
fun Airport : PlaceKind ;
cat VerbPhrase ;
fun VRead : VerbPhrase ;
}

View File

@@ -1,9 +1,31 @@
--# -path=.:present
concrete PhrasebookBul of Phrasebook =
GreetingsBul,
WordsBul ** open
concrete PhrasebookBul of Phrasebook =
open
SyntaxBul,
(R = ResBul),
ParadigmsBul,
Prelude in {
lincat
PlaceKind = CNPlace ;
oper
CNPlace : Type = {name : CN ; at : Prep ; to : Prep; isPl : Bool} ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n,p ->
mkCNPlace (mkCN n) p to_Prep ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
isPl = False
} ;
na_Prep = mkPrep "на" R.Acc ;
lin
Airport = mkPlace (mkN066 "летище") na_Prep ;
}

View File

@@ -1,10 +1,14 @@
--# -path=.:present
concrete PhrasebookGer of Phrasebook =
GreetingsGer,
WordsGer ** open
concrete PhrasebookGer of Phrasebook =
open
SyntaxGer,
Prelude in {
LexiconGer in {
lincat
VerbPhrase = VP ;
lin
VRead = mkVP <lin V read_V2 : V> ;
}

View File

@@ -1,222 +0,0 @@
--1 The Ontology of the Phrasebook
--2 Syntactic Structures of the Phrasebook
-- This module contains phrases that can be defined by a functor over the
-- resource grammar API. The phrases that are likely to have different implementations
-- are in the module Words. But the distinction is not quite sharp; thus it may happen
-- that the functor instantiations make exceptions.
abstract Sentences = Numeral ** {
-- The ontology of the phrasebook is defined by the following types. The commented ones
-- are defined in other modules.
cat
Phrase ; -- complete phrase, the unit of translation e.g. "Where are you?"
Word ; -- word that could be used as phrase e.g. "Monday"
Message ; -- sequence of phrases, longest unit e.g. "Hello! Where are you?"
Greeting ; -- idiomatic greeting e.g. "hello"
Sentence ; -- declarative sentence e.g. "I am in the bar"
Question ; -- question, either yes/no or wh e.g. "where are you"
Proposition ; -- can be turned into sentence or question e.g. "this pizza is good"
Object ; -- the object of wanting, ordering, etc e.g. "three pizzas and a beer"
PrimObject ; -- single object of wanting, ordering, etc e.g. "three pizzas"
Item ; -- a single entity e.g. "this pizza"
Kind ; -- a type of an item e.g. "pizza"
MassKind ; -- a type mass (uncountable) e.g. "water"
PlurKind ; -- a type usually only in plural e.g. "noodles"
DrinkKind ; -- a drinkable, countable type e.g. "beer"
Quality ; -- qualification of an item, can be complex e.g. "very good"
Property ; -- basic property of an item, one word e.g. "good"
Place ; -- location e.g. "the bar"
PlaceKind ; -- type of location e.g. "bar"
Currency ; -- currency unit e.g. "leu"
Price ; -- number of currency units e.g. "eleven leu"
Person ; -- agent wanting or doing something e.g. "you"
Action ; -- proposition about a Person e.g. "you are here"
Nationality ; -- complex of language, property, country e.g. "Swedish, Sweden"
LAnguage ; -- language (can be without nationality) e.g. "Flemish"
Citizenship ; -- property (can be without language) e.g. "Belgian"
Country ; -- country (can be without language) e.g. "Belgium"
Day ; -- weekday type e.g. "Friday"
Date ; -- definite date e.g. "on Friday"
Name ; -- name of person e.g. "NN"
Number ; -- number expression 1 .. 999,999 e.g. "twenty"
Transport ; -- transportation device e.g. "car"
ByTransport ; -- mean of transportation e.g. "by tram"
Superlative ; -- superlative modifiers of places e.g. "the best restaurant"
fun
-- To build a whole message
MPhrase : Phrase -> Message ;
MContinue : Phrase -> Message -> Message ;
-- Many of the categories are accessible as Phrases, i.e. as translation units.
-- To regulate whether words appear on the top level, change their status between
-- Word and Phrase, or uncomment PWord,
-- PWord : Word -> Phrase ;
PGreetingMale : Greeting -> Phrase ; -- depends on speaker e.g. in Thai
PGreetingFemale : Greeting -> Phrase ;
PSentence : Sentence -> Phrase ;
PQuestion : Question -> Phrase ;
PNumber : Number -> Phrase ;
PPrice : Price -> Phrase ;
PObject : Object -> Word ;
PKind : Kind -> Word ;
PMassKind : MassKind -> Word ;
PQuality : Quality -> Word ;
PPlace : Place -> Word ;
PPlaceKind : PlaceKind -> Word ;
PCurrency : Currency -> Word ;
PLanguage : LAnguage -> Word ;
PCitizenship : Citizenship -> Word ;
PCountry : Country -> Word ;
PDay : Day -> Word ;
PByTransport : ByTransport -> Word ;
PTransport : Transport -> Word ;
PYes, PNo, PYesToNo : Greeting ; -- yes, no, si/doch (pos. answer to neg. question)
-- To order something.
GObjectPlease : Object -> Greeting ; -- a pizza and beer, please!
-- This is the way to build propositions about inanimate items.
Is : Item -> Quality -> Proposition ; -- this pizza is good
IsMass : MassKind -> Quality -> Proposition ; -- Belgian beer is good
-- To use propositions on higher levels.
SProp : Proposition -> Sentence ; -- this pizza is good
SPropNot : Proposition -> Sentence ; -- this pizza isn't good
QProp : Proposition -> Question ; -- is this pizza good
WherePlace : Place -> Question ; -- where is the bar
WherePerson : Person -> Question ; -- where are you
-- This is the way to build propositions about persons.
PropAction : Action -> Proposition ; -- (you (are|aren't) | are you) Swedish
-- Here are some general syntactic constructions.
ObjItem : Item -> PrimObject ; -- this pizza
ObjNumber : Number -> Kind -> PrimObject ; -- five pizzas
ObjIndef : Kind -> PrimObject ; -- a pizza
ObjPlural : Kind -> PrimObject ; -- pizzas
ObjPlur : PlurKind -> PrimObject ; -- noodles
ObjMass : MassKind -> PrimObject ; -- water
ObjAndObj : PrimObject -> Object -> Object ; -- this pizza and a beer
OneObj : PrimObject -> Object ; -- this pizza
SuchKind : Quality -> Kind -> Kind ; -- Italian pizza
SuchMassKind : Quality -> MassKind -> MassKind ; -- Italian water
Very : Property -> Quality ; -- very Italian
Too : Property -> Quality ; -- too Italian
PropQuality : Property -> Quality ; -- Italian
MassDrink : DrinkKind -> MassKind ; -- beer
DrinkNumber : Number -> DrinkKind -> PrimObject ; -- five beers
-- Determiners.
This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas
The, Thes : Kind -> Item ; -- the pizza, the pizzas
ThisMass, ThatMass, TheMass : MassKind -> Item ; -- this/that/the water
ThesePlur, ThosePlur, ThesPlur : PlurKind -> Item ; -- these/those/the potatoes
AmountCurrency : Number -> Currency -> Price ; -- five euros
ThePlace : PlaceKind -> Place ; -- the bar
APlace : PlaceKind -> Place ; -- a bar
IMale, IFemale, -- I, said by man/woman (affects agreement)
YouFamMale, YouFamFemale, -- familiar you, said to man/woman (affects agreement)
YouPolMale, YouPolFemale : Person ; -- polite you, said to man/woman (affects agreement)
LangNat : Nationality -> LAnguage ; -- Swedish
CitiNat : Nationality -> Citizenship ; -- Swedish
CountryNat : Nationality -> Country ; -- Sweden
PropCit : Citizenship -> Property ; -- Swedish
OnDay : Day -> Date ; -- on Friday
Today : Date ; -- today
PersonName : Name -> Person ; -- person referred by name
NameNN : Name ; -- the name "NN"
---- 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.
SHave : Person -> Object -> Sentence ; -- you have beer
SHaveNo : Person -> Kind -> Sentence ; -- you have no apples
SHaveNoMass : Person -> MassKind -> Sentence ; -- you have no beer
QDoHave : Person -> Object -> Question ; -- do you have beer
AHaveCurr : Person -> Currency -> Action ; -- you have dollars
ACitizen : Person -> Citizenship -> Action ; -- you are Swedish
ABePlace : Person -> Place -> Action ; -- you are in the bar
ByTransp : Transport -> ByTransport ; -- by bus
AKnowSentence : Person -> Sentence -> Action ; -- you know that I am in the bar
AKnowPerson : Person -> Person -> Action ; -- you know me
AKnowQuestion : Person -> Question -> Action ; -- you know how far the bar is
------------------------------------------------------------------------------------------
-- New things added 30/11/2011 by AR
------------------------------------------------------------------------------------------
cat
VerbPhrase ; -- things one does, can do, must do, wants to do, e.g. swim
Modality ; -- can, want, must
fun
ADoVerbPhrase : Person -> VerbPhrase -> Action ; -- I swim
AModVerbPhrase : Modality -> Person -> VerbPhrase -> Action ; -- I can swim
ADoVerbPhrasePlace : Person -> VerbPhrase -> Place -> Action ; -- I swim in the hotel
AModVerbPhrasePlace : Modality -> Person -> VerbPhrase -> Place -> Action ; -- I can swim in the hotel
QWhereDoVerbPhrase : Person -> VerbPhrase -> Question ; -- where do you swim
QWhereModVerbPhrase : Modality -> Person -> VerbPhrase -> Question ; -- where can I swim
MCan, MKnow, MMust, MWant : Modality ;
-- lexical items given in the resource Lexicon
VPlay, VRun, VSit, VSleep, VSwim, VWalk : VerbPhrase ;
VDrink, VEat, VRead, VWait, VWrite, VSit, VStop : VerbPhrase ;
V2Buy, V2Drink, V2Eat : Object -> VerbPhrase ;
V2Wait : Person -> VerbPhrase ;
PImperativeFamPos, -- eat
PImperativeFamNeg, -- don't eat
PImperativePolPos, -- essen Sie
PImperativePolNeg, -- essen Sie nicht
PImperativePlurPos, -- esst
PImperativePlurNeg : -- esst nicht
VerbPhrase -> Phrase ;
-- other new things allowed by the resource
--- PBecause : Sentence -> Sentence -> Phrase ; -- I want to swim because it is hot
He, She, -- he, she
WeMale, WeFemale, -- we, said by men/women (affects agreement)
YouPlurFamMale, YouPlurFamFemale, -- plural familiar you, said to men/women (affects agreement)
YouPlurPolMale, YouPlurPolFemale, -- plural polite you, said to men/women (affects agreement)
TheyMale, TheyFemale : Person ; -- they, said of men/women (affects agreement)
}

View File

@@ -1,54 +0,0 @@
concrete SentencesBul of Sentences =
NumeralBul ** SentencesI - [IMale, IFemale, YouFamMale, YouFamFemale, YouPolMale,
YouPolFemale, ACitizen, Citizenship, PCitizenship,
LangNat, CitiNat, CountryNat, PropCit,
Nationality, Country, LAnguage, PLanguage, PCountry
] with
(Syntax = SyntaxBul),
(Symbolic = SymbolicBul),
(Lexicon = LexiconBul) ** open ExtraBul, (R = ResBul) in {
lincat
Citizenship = {s1 : R.Gender => R.NForm => Str; -- there are two nouns for every citizenship - one for males and one for females
s2 : A -- furthermore, adjective for Property
} ;
Nationality = {s1 : R.Gender => R.NForm => Str; -- there are two nouns for every citizenship - one for males and one for females
s2 : A; -- furthermore, adjective for Property
s3 : PN -- country name
} ;
LAnguage = A ;
Country = PN ;
lin IMale = mkPerson i_Pron ;
IFemale = mkPerson i8fem_Pron ;
lin YouFamMale = mkPerson youSg_Pron ;
YouFamFemale = mkPerson youSg8fem_Pron ;
YouPolMale, YouPolFemale = mkPerson youPol_Pron ;
lin ACitizen p cit =
let noun : N
= case p.name.gn of {
R.GSg g => lin N {s = \\nf => cit.s1 ! g ! nf;
rel = cit.s2.s; relType = R.AdjMod;
g = case g of {R.Masc=>R.AMasc R.Human; R.Fem=>R.AFem; R.Neut=>R.ANeut}
} ;
R.GPl => lin N {s = \\nf => cit.s1 ! R.Masc ! nf;
rel = cit.s2.s; relType = R.AdjMod;
g = R.AMasc R.Human
}
} ;
in mkCl p.name noun ;
PCitizenship cit =
mkPhrase (mkUtt (mkAP cit.s2)) ;
LangNat n = n.s2 ;
CitiNat n = n ;
CountryNat n = n.s3 ;
PropCit cit = cit.s2 ;
PLanguage x = mkPhrase (mkUtt (mkAP x)) ;
PCountry x = mkPhrase (mkUtt (mkNP x)) ;
}

View File

@@ -1,50 +0,0 @@
concrete SentencesGer of Sentences = NumeralGer ** SentencesI -
[PYesToNo,SHaveNo,SHaveNoMass,
Proposition, Action, Is, IsMass, SProp, SPropNot, QProp,
AHaveCurr, ACitizen, ABePlace, AKnowSentence, AKnowPerson, AKnowQuestion,
Nationality, LAnguage,
ADoVerbPhrase, AModVerbPhrase, ADoVerbPhrasePlace, AModVerbPhrasePlace,
YouPlurPolMale, YouPlurPolFemale
] with
(Syntax = SyntaxGer),
(Symbolic = SymbolicGer),
(Lexicon = LexiconGer) ** open Prelude, SyntaxGer in {
lin
PYesToNo = mkPhrase (lin Utt (ss "doch")) ;
SHaveNo p k = mkS (mkCl p.name have_V2 (mkNP no_Quant plNum k)) ;
SHaveNoMass p k = mkS (mkCl p.name have_V2 (mkNP no_Quant k)) ;
lincat
Proposition, Action = Prop ;
oper
Prop = {pos : Cl ; neg : S} ; -- x F y ; x F nicht/kein y
mkProp : Cl -> S -> Prop = \pos,neg -> {pos = pos ; neg = neg} ;
prop : Cl -> Prop = \cl -> mkProp cl (mkS negativePol cl) ;
lin
Is i q = prop (mkCl i q) ;
IsMass m q = prop (mkCl (mkNP m) q) ;
SProp p = mkS p.pos ;
SPropNot p = p.neg ;
QProp p = mkQS (mkQCl p.pos) ;
AHaveCurr p curr = prop (mkCl p.name have_V2 (mkNP aPl_Det curr)) ;
ACitizen p n = prop (mkCl p.name n) ;
ABePlace p place = prop (mkCl p.name place.at) ;
AKnowSentence p s = prop (mkCl p.name Lexicon.know_VS s) ;
AKnowQuestion p s = prop (mkCl p.name Lexicon.know_VQ s) ;
AKnowPerson p q = prop (mkCl p.name Lexicon.know_V2 q.name) ;
lincat
Nationality = {lang : CN ; country : NP ; prop : A} ;
LAnguage = CN ; -- kein Deutsch
-- the new things
lin
ADoVerbPhrase p vp = prop (mkCl p.name vp) ;
AModVerbPhrase m p vp = prop (mkCl p.name (mkVP m vp)) ;
ADoVerbPhrasePlace p vp x = prop (mkCl p.name (mkVP vp x.at)) ;
AModVerbPhrasePlace m p vp x = prop (mkCl p.name (mkVP m (mkVP vp x.at))) ;
YouPlurPolMale, YouPlurPolFemale = mkPerson youPol_Pron ;
}

View File

@@ -1,302 +0,0 @@
--1 Implementation of MOLTO Phrasebook
--2 The functor for (mostly) common structures
incomplete concrete SentencesI of Sentences = Numeral **
open
Syntax,
Lexicon,
Symbolic, -- for names as strings
Prelude
in {
lincat
Phrase = Text ;
Word = Text ;
Message = Text ;
Greeting = Text ;
Sentence = S ;
Question = QS ;
Proposition = Cl ;
Item = NP ;
Kind = CN ;
MassKind = CN ;
MassKind = CN ;
PlurKind = CN ;
DrinkKind = CN ;
Quality = AP ;
Property = A ;
Object = NP ;
PrimObject = NP ;
Place = NPPlace ; -- {name : NP ; at : Syntax.Adv ; to : Syntax.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 : Syntax.Adv ; habitual : Syntax.Adv} ;
Date = Syntax.Adv ;
Name = NP ;
Number = Card ;
ByTransport = Syntax.Adv ;
Transport = {name : CN ; by : Syntax.Adv} ;
Superlative = Det ;
lin
MPhrase p = p ;
MContinue p m = mkText p m ;
PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.'
PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?'
PGreetingMale, PGreetingFemale = \g -> mkText (lin Phr (ss g.s)) exclMarkPunct | g ;
-- PWord w = w ;
PNumber x = mkSentence (mkUtt x) ;
PPrice x = mkSentence (mkUtt x) ;
PObject x = mkPhrase (mkUtt x) ;
PKind x = mkPhrase (mkUtt x) ;
PMassKind x = mkPhrase (mkUtt x) ;
PQuality x = mkPhrase (mkUtt x) ;
PPlace x = mkPhrase (mkUtt x.name) ;
PPlaceKind x = mkPhrase (mkUtt x.name) ;
PCurrency 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) ;
PTransport t = mkPhrase (mkUtt t.name) ;
PByTransport t = mkPhrase (mkUtt t) ;
PYes = mkPhrase yes_Utt ;
PNo = mkPhrase no_Utt ;
PYesToNo = mkPhrase yes_Utt ;
GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkUtt o) ;
Is = mkCl ;
IsMass m q = mkCl (mkNP m) q ;
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 ;
ObjPlural k = mkNP aPl_Det k ;
ObjPlur k = mkNP aPl_Det k ;
ObjMass k = mkNP k ;
ObjAndObj = mkNP and_Conj ;
OneObj o = o ;
MassDrink d = d ;
DrinkNumber n k = mkNP n 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 ;
Thes kind = mkNP the_Quant plNum kind ;
ThisMass kind = mkNP this_Quant kind ;
ThatMass kind = mkNP that_Quant kind ;
TheMass kind = mkNP the_Quant kind ;
ThesePlur kind = mkNP this_Quant plNum kind ;
ThosePlur kind = mkNP that_Quant plNum kind ;
ThesPlur kind = mkNP the_Quant plNum kind ;
SuchKind quality kind = mkCN quality kind ;
SuchMassKind 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 dd : Det = if_then_else Det kind.isPl thePl_Det theSg_Det
in placeNP dd kind ;
APlace kind = let dd : Det = if_then_else Det kind.isPl aPl_Det aSg_Det
in placeNP dd kind ;
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
---- NameString s = symb s ; --%
NameNN = symb "NN" ;
NNumeral n = mkCard <lin Numeral n : Numeral> ;
SHave p obj = mkS (mkCl p.name have_V2 obj) ;
SHaveNo p k = mkS negativePol (mkCl p.name have_V2 (mkNP aPl_Det k)) ;
SHaveNoMass p m = mkS negativePol (mkCl p.name have_V2 (mkNP m)) ;
QDoHave p obj = mkQS (mkQCl (mkCl p.name have_V2 obj)) ;
AHaveCurr p curr = mkCl p.name have_V2 (mkNP aPl_Det curr) ;
ACitizen p n = mkCl p.name n ;
ABePlace p place = mkCl p.name place.at ;
ByTransp t = t.by ;
AKnowSentence p s = mkCl p.name Lexicon.know_VS s ;
AKnowQuestion p s = mkCl p.name Lexicon.know_VQ s ;
AKnowPerson p q = mkCl p.name Lexicon.know_V2 q.name ;
oper
-- These operations are used internally in Sentences.
mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
mkGreeting : Str -> Text = \s -> lin Text (ss s) ; -- no punctuation
mkSentence : Utt -> Text = \t -> lin Text (postfixSS "." t | t) ; -- optional .
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 : Syntax.Adv ; habitual : Syntax.Adv} ;
mkNPDay : NP -> Syntax.Adv -> Syntax.Adv -> NPDay = \d,p,h ->
{name = d ;
point = p ;
habitual = h
} ;
NPPlace : Type = {name : NP ; at : Syntax.Adv ; to : Syntax.Adv} ;
CNPlace : Type = {name : CN ; at : Prep ; to : Prep; isPl : Bool} ;
mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
isPl = False
} ;
mkCNPlacePl : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
name = p ;
at = i ;
to = t ;
isPl = True
} ;
placeNP : Det -> CNPlace -> NPPlace = \det,kind ->
let name : NP = mkNP det kind.name in {
name = name ;
at = Syntax.mkAdv kind.at name ;
to = Syntax.mkAdv kind.to name
} ;
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 ;
phrasePlease : Utt -> Text = \u -> --- lin Text (mkPhr noPConj u please_Voc) |
lin Text u ;
------------------------------------------------------------------------------------------
-- New things added 30/11/2011 by AR
------------------------------------------------------------------------------------------
lincat
VerbPhrase = VP ;
Modality = VV ;
lin
ADoVerbPhrase p vp = mkCl p.name vp ;
AModVerbPhrase m p vp = mkCl p.name (mkVP m vp) ;
ADoVerbPhrasePlace p vp x = mkCl p.name (mkVP vp x.at) ;
AModVerbPhrasePlace m p vp x = mkCl p.name (mkVP m (mkVP vp x.at)) ;
QWhereDoVerbPhrase p vp = mkQS (mkQCl where_IAdv (mkCl p.name vp)) ;
QWhereModVerbPhrase m p vp = mkQS (mkQCl where_IAdv (mkCl p.name (mkVP m vp))) ;
MWant = want_VV ;
MCan = can_VV ;
MKnow = can8know_VV ;
MMust = must_VV ;
VPlay = mkVP play_V ;
VRun = mkVP run_V ;
VSit = mkVP sit_V ;
VSleep = mkVP sleep_V ;
VSwim = mkVP swim_V ;
VWalk = mkVP walk_V ;
VSit = mkVP sit_V ;
VStop = mkVP stop_V ;
VDrink = mkVP <lin V drink_V2 : V> ;
VEat = mkVP <lin V eat_V2 : V> ;
VRead = mkVP <lin V read_V2 : V> ;
VWait = mkVP <lin V wait_V2 : V> ;
VWrite = mkVP <lin V write_V2 : V> ;
V2Buy o = mkVP buy_V2 o ;
V2Drink o = mkVP drink_V2 o ;
V2Eat o = mkVP eat_V2 o ;
V2Wait o = mkVP wait_V2 o.name ;
PImperativeFamPos v = phrasePlease (mkUtt (mkImp v)) ;
PImperativeFamNeg v = phrasePlease (mkUtt negativePol (mkImp v)) ;
PImperativePolPos v = phrasePlease (mkUtt politeImpForm (mkImp v)) ;
PImperativePolNeg v = phrasePlease (mkUtt politeImpForm negativePol (mkImp v)) ;
PImperativePlurPos v = phrasePlease (mkUtt pluralImpForm (mkImp v)) ;
PImperativePlurNeg v = phrasePlease (mkUtt pluralImpForm negativePol (mkImp v)) ;
-- other new things allowed by the resource
--- PBecause a b = SSubjS a because_Subj b ;
He = mkPerson he_Pron ;
She = mkPerson she_Pron ;
WeMale, WeFemale = mkPerson we_Pron ;
YouPlurFamMale, YouPlurFamFemale = mkPerson youPl_Pron ;
YouPlurPolMale, YouPlurPolFemale = mkPerson youPl_Pron ;
TheyMale, TheyFemale = mkPerson they_Pron ;
}

View File

@@ -1,254 +0,0 @@
--2 Words and idiomatic phrases of the Phrasebook
-- (c) 2010 Aarne Ranta under LGPL --%
abstract Words = Sentences ** {
fun
-- kinds of items (so far mostly food stuff)
Apple : Kind ;
Beer : DrinkKind ;
Bread : MassKind ;
Cheese : MassKind ;
Chicken : MassKind ;
Coffee : DrinkKind ;
Fish : MassKind ;
Meat : MassKind ;
Milk : MassKind ;
Pizza : Kind ;
Salt : MassKind ;
Tea : DrinkKind ;
Water : DrinkKind ;
Wine : DrinkKind ;
-- properties of kinds (so far mostly of food)
Bad : Property ;
Boring : Property ;
Cheap : Property ;
Cold : Property ;
Delicious : Property ;
Expensive : Property ;
Fresh : Property ;
Good : Property ;
Suspect : Property ;
Warm : Property ;
-- kinds of places
Airport : PlaceKind ;
AmusementPark : PlaceKind ;
Bank : PlaceKind ;
Bar : PlaceKind ;
Cafeteria : PlaceKind ;
Center : PlaceKind ;
Cinema : PlaceKind ;
Church : PlaceKind ;
Disco : PlaceKind ;
Hospital : PlaceKind ;
Hotel : PlaceKind ;
Museum : PlaceKind ;
Park : PlaceKind ;
Parking : PlaceKind ;
Pharmacy : PlaceKind ;
PostOffice : PlaceKind ;
Pub : PlaceKind ;
Restaurant : PlaceKind ;
School : PlaceKind ;
Shop : PlaceKind ;
Station : PlaceKind ;
Supermarket : PlaceKind ;
Theatre : PlaceKind ;
Toilet : PlaceKind ;
University : PlaceKind ;
Zoo : PlaceKind ;
CitRestaurant : Citizenship -> PlaceKind ;
-- currency units
DanishCrown : Currency ;
Dollar : Currency ;
Euro : Currency ; -- Germany, France, Italy, Finland, Spain, The Netherlands
Lei : Currency ; -- Romania
Leva : Currency ; -- Bulgaria
NorwegianCrown : Currency ;
Pound : Currency ; -- UK
Rouble : Currency ; -- Russia
Rupee : Currency ; -- India
SwedishCrown : Currency ;
Zloty : Currency ; -- Poland
Yuan : Currency ; -- China
-- nationalities, countries, languages, citizenships
Belgian : Citizenship ;
Belgium : Country ;
Bulgarian : Nationality ;
Catalan : Nationality ;
Chinese : Nationality ;
Danish : Nationality ;
Dutch : Nationality ;
English : Nationality ;
Finnish : Nationality ;
Flemish : LAnguage ;
French : Nationality ;
German : Nationality ;
Hindi : LAnguage ;
India : Country ;
Indian : Citizenship ;
Italian : Nationality ;
Norwegian : Nationality ;
Polish : Nationality ;
Romanian : Nationality ;
Russian : Nationality ;
Spanish : Nationality ;
Swedish : Nationality ;
-- means of transportation
Bike : Transport ;
Bus : Transport ;
Car : Transport ;
Ferry : Transport ;
Plane : Transport ;
Subway : Transport ;
Taxi : Transport ;
Train : Transport ;
Tram : Transport ;
ByFoot : ByTransport ;
-- Actions (which can be expressed by different structures in different languages).
-- Notice that also negations and questions can be formed from these.
AHasAge : Person -> Number -> Action ; -- I am seventy years
AHasChildren: Person -> Number -> Action ; -- I have six children
AHasName : Person -> Name -> Action ; -- my name is Bond
AHasRoom : Person -> Number -> Action ; -- you have a room for five persons
AHasTable : Person -> Number -> Action ; -- you have a table for five persons
AHungry : Person -> Action ; -- I am hungry
AIll : Person -> Action ; -- I am ill
AKnow : Person -> Action ; -- I (don't) know
ALike : Person -> Item -> Action ; -- I like this pizza
ALive : Person -> Country -> Action ; -- I live in Sweden
ALove : Person -> Person -> Action ; -- I love you
AMarried : Person -> Action ; -- I am married
AReady : Person -> Action ; -- I am ready
AScared : Person -> Action ; -- I am scared
ASpeak : Person -> LAnguage -> Action ; -- I speak Finnish
AThirsty : Person -> Action ; -- I am thirsty
ATired : Person -> Action ; -- I am tired
AUnderstand : Person -> Action ; -- I (don't) understand
AWant : Person -> Object -> Action ; -- I want two apples
AWantGo : Person -> Place -> Action ; -- I want to go to the hospital
-- Miscellaneous phrases. Notice that also negations and questions can be formed from
-- propositions.
QWhatAge : Person -> Question ; -- how old 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
PropOpenDate : Place -> Date -> Proposition ; -- the museum is open today
PropClosedDate : Place -> Date -> Proposition ; -- the museum is closed today
PropOpenDay : Place -> Day -> Proposition ; -- the museum is open on Mondays
PropClosedDay : Place -> Day -> Proposition ; -- the museum is closed on Mondays
PSeeYouPlaceDate : Place -> Date -> Greeting ; -- see you in the bar on Monday
PSeeYouPlace : Place -> Greeting ; -- see you in the bar
PSeeYouDate : Date -> Greeting ; -- see you on Monday
-- family relations
Wife, Husband : Person -> Person ; -- my wife, your husband
Son, Daughter : Person -> Person ; -- my son, your husband
Children : Person -> Person ; -- my children
-- week days
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday : Day ;
Tomorrow : Date ;
-- transports
HowFar : Place -> Question ; -- how far is the zoo ?
HowFarFrom : Place -> Place -> Question ; -- how far is the center from the hotel ?
HowFarFromBy : Place -> Place -> ByTransport -> Question ;
-- how far is the airport from the hotel by taxi ?
HowFarBy : Place -> ByTransport -> Question ; -- how far is the museum by bus ?
WhichTranspPlace : Transport -> Place -> Question ; -- which bus goes to the hotel
IsTranspPlace : Transport -> Place -> Question ; -- is there a metro to the airport ?
-- modifiers of places
TheBest : Superlative ;
TheClosest : Superlative ;
TheCheapest : Superlative ;
TheMostExpensive : Superlative ;
TheMostPopular : Superlative ;
TheWorst : Superlative ;
SuperlPlace : Superlative -> PlaceKind -> Place ; -- the best bar
--------------------------------------------------
-- New 30/11/2011 AR
--------------------------------------------------
{- 28/8/2012 still only available in Bul Eng Fin Swe Tha
fun
Thai : Nationality ;
Baht : Currency ; -- Thailand
Rice : MassKind ;
Pork : MassKind ;
Beef : MassKind ;
Noodles : PlurKind ;
Shrimps : PlurKind ;
Chili : MassKind ;
Garlic : MassKind ;
Durian : Kind ;
Mango : Kind ;
Pineapple : Kind ;
Egg : Kind ;
Coke : DrinkKind ;
IceCream : DrinkKind ; --- both mass and plural
OrangeJuice : DrinkKind ;
Lemonade : DrinkKind ;
Salad : DrinkKind ;
Beach : PlaceKind ;
ItsRaining : Proposition ;
ItsWindy : Proposition ;
ItsWarm : Proposition ;
ItsCold : Proposition ;
SunShine : Proposition ;
Smoke : VerbPhrase ;
ADoctor : Person -> Action ;
AProfessor : Person -> Action ;
ALawyer : Person -> Action ;
AEngineer : Person -> Action ;
ATeacher : Person -> Action ;
ACook : Person -> Action ;
AStudent : Person -> Action ;
ABusinessman : Person -> Action ;
-}
}

View File

@@ -1,305 +0,0 @@
--2 Implementations of Words, with English as example
concrete WordsBul of Words = SentencesBul **
open
SyntaxBul,
(R = ResBul),
ParadigmsBul,
(L = LexiconBul),
(P = ParadigmsBul),
ExtraBul,
MorphoFunsBul,
Prelude in {
flags
coding=utf8;
lin
-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN066 "сирене") ;
Chicken = mkCN (mkN065 "пиле") ;
Coffee = mkCN (mkN065 "кафе") ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN054 "месо") ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN041 "пица") ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN028 "чай") ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.
Bad = L.bad_A ;
Boring = mkA079 "еднообразен" ;
Cheap = mkA076 "евтин" ;
Cold = L.cold_A ;
Delicious = mkA079 "превъзходен" ;
Expensive = mkA076 "скъп" ;
Fresh = mkA076 "свеж" ;
Good = L.good_A ;
Suspect = mkA079 "подозрителен" ;
Warm = L.warm_A ;
-- Places require different prepositions to express location; in some languages
-- also the directional preposition varies, but in English we use $to$, as
-- defined by $mkPlace$.
Airport = mkPlace (mkN066 "летище") na_Prep ;
AmusementPark = mkCompoundPlace (mkA079 "увеселителен") (mkN001 "парк") in_Prep ;
Bank = mkPlace (mkN041 "банка") in_Prep ;
Bar = mkPlace (mkN001 "бар") in_Prep ;
Cafeteria = mkPlace (mkN065 "кафе") in_Prep ;
Center = mkPlace (mkN009a "център") in_Prep ;
Cinema = mkPlace (mkN054 "кино") na_Prep ;
Church = mkPlace (mkN041 "църква") in_Prep ;
Disco = mkPlace (mkN041 "дискотека") in_Prep ;
Hospital = mkPlace (mkN041 "болница") in_Prep ;
Hotel = mkPlace (mkN007 "хотел") in_Prep ;
Museum = mkPlace (mkN032 "музей") in_Prep ;
Park = mkPlace (mkN001 "парк") in_Prep ;
Parking = mkPlace (mkN007 "паркинг") na_Prep ;
Pharmacy = mkPlace (mkN041 "аптека") in_Prep ;
PostOffice = mkPlace (mkN041 "поща") in_Prep ;
Pub = mkPlace (mkN001 "бар") in_Prep ;
Restaurant = mkPlace (mkN007 "ресторант") in_Prep ;
School = mkPlace (mkN007 "училище") in_Prep ;
Shop = mkPlace (mkN007 "магазин") in_Prep ;
Station = mkPlace (mkN041 "гара") na_Prep ;
Supermarket = mkPlace (mkN007 "супермаркет") in_Prep ;
Theatre = mkPlace (mkN009 "театър") na_Prep ;
Toilet = mkPlace (mkN041 "тоалетна") in_Prep ;
University = mkPlace (mkN007 "университет") in_Prep ;
Zoo = mkPlace (mkN001 "зоопарк") in_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit.s2 (mkN007 "ресторант")) in_Prep to_Prep ;
-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.
DanishCrown = mkCN (mkA078 "датски") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Dollar = mkCN (mkN007 "долар") ;
Euro = mkCN (mkN054 "евро") ;
Lei = mkCN (mkN047 "лея") ;
Leva = mkCN (mkN001 "лев") ;
NorwegianCrown = mkCN (mkA078 "норвежки") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Pound = mkCN (mkN007 "паунд") ;
Rouble = mkCN (mkN041 "рубла") ;
SwedishCrown = mkCN (mkA078 "шведски") (mkN041 "крона") | mkCN (mkN041 "крона") ;
Zloty = mkCN (mkN041 "злота") ;
Baht = mkCN (mkN007a "бат") ;
-- Nationalities
Belgian = mkCitizenship (mkN013 "белгиец") (mkN041 "белгийка") (mkA078 "белгийски") ;
Belgium = mkPN "Белгия" R.Fem ;
Bulgarian = mkNat (mkN018 "българин") (mkN041 "българка") (mkA078 "български") (mkPN "България" R.Fem) ;
Catalan = mkNat (mkN008a "каталонец") (mkN041 "каталонка") (mkA078 "каталонски") (mkPN "Каталуния" R.Fem) ;
Danish = mkNat (mkN018 "датчанин") (mkN041 "датчанка") (mkA078 "датски") (mkPN "Дания" R.Fem) ;
Dutch = mkNat (mkN008a "холандец") (mkN041 "холандка") (mkA078 "холандски") (mkPN "Холандия" R.Fem) ;
English = mkNat (mkN018 "англичанин") (mkN041 "англичанка") (mkA078 "английски") (mkPN "Англия" R.Fem) ;
Finnish = mkNat (mkN008a "финландец") (mkN041 "финландка") (mkA078 "финландски") (mkPN "Финландия" R.Fem) ;
Flemish = mkA078 "фламандски" ;
French = mkNat (mkN018 "французин") (mkN041 "французойка") (mkA078 "френски") (mkPN "Франция" R.Fem) ;
German = mkNat (mkN008a "германец") (mkN041 "германка") (mkA078 "немски") (mkPN "Германия" R.Fem) ;
Italian = mkNat (mkN008a "италианец") (mkN041 "италианка") (mkA078 "италиански") (mkPN "Италия" R.Fem) ;
Norwegian = mkNat (mkN008a "норвежец") (mkN041 "норвежка") (mkA078 "норвежки") (mkPN "Норвегия" R.Fem) ;
Polish = mkNat (mkN014 "поляк") (mkN047 "полякиня") (mkA078 "полски") (mkPN "Полша" R.Fem) ;
Romanian = mkNat (mkN008a "румънец") (mkN041 "румънка") (mkA078 "румънски") (mkPN "Румъния" R.Fem) ;
Russian = mkNat (mkN014 "руснак") (mkN047 "рускиня") (mkA078 "руски") (mkPN "Русия" R.Fem) ;
Swedish = mkNat (mkN007 "швед") (mkN041 "шведка") (mkA078 "шведски") (mkPN "Швеция" R.Fem) ;
Spanish = mkNat (mkN008a "испанец") (mkN041 "испанка") (mkA078 "испански") (mkPN "Испания" R.Fem) ;
Thai = mkNat (mkN008a "тайландец") (mkN041 "тайландка") (mkA078 "тайландски") (mkPN "Тайланд" R.Masc) ;
-- Means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN007 "автобус") ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN007 "ферибот") ;
Plane = mkTransport (mkN007 "самолет") ;
Subway = mkTransport (mkN054 "метро") ;
Taxi = mkTransport (mkN073 "такси") ;
Train = mkTransport (mkN001 "влак") ;
Tram = mkTransport (mkN032 "трамвай") ;
ByFoot = P.mkAdv "пеша" ;
-- Actions: the predication patterns are very often language-dependent.
AHasAge p num = mkCl p.name (SyntaxBul.mkAdv na_Prep (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 (mkN047 "стая")) (SyntaxBul.mkAdv (mkPrep "за" R.Acc) (mkNP num (mkN014 "човек")))) ;
AHasTable p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (mkN041 "маса")) (SyntaxBul.mkAdv (mkPrep "за" R.Acc) (mkNP num (mkN014 "човек")))) ;
AHasName p name = mkCl p.name (dirV2 (medialV (actionV (mkV186 "казвам") (mkV156 "кажа")) R.Acc)) name ;
AHungry p = mkCl p.name (mkA079 "гладен") ;
AIll p = mkCl p.name (mkA079 "болен") ;
AKnow p = mkCl p.name (actionV (mkV186 "знам") (mkV162 "зная")) ;
ALike p item = mkCl p.name (dirV2 (actionV (mkV186 "харесвам") (mkV186 "харесам"))) item ;
ALive p co = mkCl p.name (mkVP (mkVP (stateV (mkV160 "живея"))) (SyntaxBul.mkAdv in_Prep (mkNP co))) ;
ALove p q = mkCl p.name (dirV2 (actionV (mkV186 "обичам") (mkV152 "обикна"))) q.name ;
AMarried p = mkCl p.name (mkA076 (case p.name.gn of {
R.GSg R.Fem => "омъжен" ;
_ => "женен"
})) ;
AReady p = mkCl p.name (mkA076 "готов") ;
AScared p = mkCl p.name (mkA076 "уплашен") ;
ASpeak p lang = mkCl p.name (dirV2 (stateV (mkV173 "говоря"))) (mkNP (substantiveN lang (R.AMasc R.NonHuman))) ;
AThirsty p = mkCl p.name (mkA079 "жаден") ;
ATired p = mkCl p.name (mkA076 "уморен") ;
AUnderstand p = mkCl p.name (actionV (mkV186 "разбирам") (mkV170 "разбера")) ;
AWant p obj = mkCl p.name (dirV2 (stateV (mkV186 "искам"))) obj ;
AWantGo p place = mkCl p.name want_VV (mkVP (mkVP (actionV (mkV186 "отивам") (mkV146 "отида"))) place.to) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name (medialV (actionV (mkV186 "казвам") (mkV156 "кажа")) R.Acc))) ;
QWhatAge p = mkQS (mkQCl (MorphoFunsBul.mkIAdv "на колко") (mkCl p.name (mkNP a_Quant plNum L.year_N))) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (stateV (mkV186 "струвам")))) ;
ItCost item price = mkCl item (dirV2 (stateV (mkV186 "струвам"))) price ;
PropOpen p = mkCl p.name open_AP ;
PropClosed p = mkCl p.name closed_AP ;
PropOpenDate p d = mkCl p.name (mkVP (mkVP open_AP) d) ;
PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_AP) d) ;
PropOpenDay p d = mkCl p.name (mkVP (mkVP open_AP) d.habitual) ;
PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_AP) d.habitual) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("ще се видим"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("ще се видим"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("ще се видим")))
(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 (mkN041 "съпруга") ;
Husband = xOf sing (mkN015 "съпруг") ;
Son = xOf sing (mkN018 "син") ;
Daughter = xOf sing (mkN047 "дъщеря") ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay (mkN014 "понеделник") ;
Tuesday = mkDay (mkN014 "вторник") ;
Wednesday = mkDay (mkN043 "сряда") ;
Thursday = mkDay (mkN014 "четвъртък") ;
Friday = mkDay (mkN014 "петък") ;
Saturday = mkDay (mkN041 "събота") ;
Sunday = mkDay (mkN047 "неделя") ;
Tomorrow = P.mkAdv "утре" ;
-- modifiers of places
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA076 "евтин") ;
TheMostExpensive = mkSuperl (mkA076 "скъп") ;
TheMostPopular = mkSuperl (mkA079 "известен") ;
TheWorst = mkSuperl L.bad_A ;
SuperlPlace sup p = placeNP sup p ;
-- transports
HowFar place = mkQS (mkQCl far_IAdv place.name) ;
HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP y.name (SyntaxBul.mkAdv from_Prep x.name))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxBul.mkAdv from_Prep x.name)) t)) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkNP y.name t)) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
Rice = mkCN (mkN040a "ориз") ;
Pork = mkCN (mkN054 "свинско") ;
Beef = mkCN (mkN054 "телешко") ;
Egg = mkCN (mkN066 "яйце") ;
Noodles = mkCN (mkN075 "спагети") ;
Shrimps = mkCN (mkN041 "скарида") ;
Chili = mkCN (mkN065 "чили") ;
Garlic = mkCN (mkN007 "чесън") ;
Durian = mkCN (mkN007 "дуриан") ;
Mango = mkCN (mkN065 "манго") ;
Pineapple = mkCN (mkN007 "ананас") ;
Coke = mkCN (mkN041 "кола") ;
IceCream = mkCN (mkN007 "сладолед") ;
Salad = mkCN (mkN041 "салата") ;
OrangeJuice = mkCN (mkA076 "портокалов") (mkN001 "сок") ;
Lemonade = mkCN (mkN041 "лимонада") ;
Beach = mkPlace (mkN001 "плаж") na_Prep ;
ItsRaining = mkCl (mkVP (stateV (mkV174 "валя"))) ;
ItsCold = mkCl (mkVP (mkA076 "студен")) ;
ItsWarm = mkCl (mkVP (mkA080 "топъл")) ;
ItsWindy = mkCl (mkVP (mkA076 "ветровит")) ;
SunShine = mkCl (progressiveVP (mkVP (actionV (mkV186 "пеквам") (mkV148 "пека")))) ;
Smoke = mkVP (stateV (mkV176 "пуша")) ;
ADoctor = mkProfession (mkN007a "доктор") ;
AProfessor = mkProfession (mkN007a "професор") ;
ALawyer = mkProfession (mkN007a "адвокат") ;
AEngineer = mkProfession (mkN007a "инженер") ;
ATeacher = mkProfession (mkN031a "учител") ;
ACook = mkProfession (mkN007b "готвач") ;
AStudent = mkProfession (mkN007a "студент") ;
ABusinessman = mkProfession (mkN007a "бизнесмен") ;
-- auxiliaries
oper
mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;
mkCitizenship : N -> N -> A -> Citizenship
= \male, female, adj -> lin Citizenship {s1 = table {R.Fem => female.s; _ => male.s}; s2 = adj} ;
mkNat : N -> N -> A -> PN -> Nationality
= \male, female, adj, country -> lin Nationality {s1 = table {R.Fem => female.s; _ => male.s}; s2 = adj; s3 = country} ;
mkDay : N -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day : NP = mkNP d ;
in mkNPDay day
(SyntaxBul.mkAdv in_Prep day)
(SyntaxBul.mkAdv in_Prep (mkNP the_Quant plNum (mkCN d))) ;
mkCompoundPlace : A -> N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \a, n, p ->
mkCNPlace (mkCN a n) p to_Prep ;
mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n,p ->
mkCNPlace (mkCN n) p to_Prep ;
open_AP = mkAP (mkA076 "отворен") ;
closed_AP = mkAP (mkA076 "затворен") ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p ->
relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxBul.mkAdv (mkPrep "" R.Dat) b)) p ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxBul.mkAdv with_Prep (mkNP n)
} ;
mkSuperl : A -> Det = \a -> SyntaxBul.mkDet the_Art (SyntaxBul.mkOrd a) ;
far_IAdv = ExtraBul.IAdvAdv (ss "далече") ;
na_Prep = mkPrep "на" R.Acc ;
}

View File

@@ -1,262 +0,0 @@
-- (c) 2009 Aarne Ranta under LGPL
--# -coding=latin1
concrete WordsGer of Words = SentencesGer **
open SyntaxGer, ParadigmsGer, IrregGer, (L = LexiconGer), ExtraGer, Prelude in {
lin
-- kinds of food
Apple = mkCN L.apple_N ;
Beer = mkCN L.beer_N ;
Bread = mkCN L.bread_N ;
Cheese = mkCN (mkN "Käse" "Käse" "Käse" "Käse" "Käse" "Käse" masculine) ;
Chicken = mkCN (mkN "Huhn" "Huhn" "Huhn" "Huhn" "Hühner" "Hühner" neuter) ;
Coffee = mkCN (mkN "Kaffee" "Kaffee" "Kaffee" "Kaffee" "Kaffees" "Kaffee" masculine) ;
Fish = mkCN L.fish_N ;
Meat = mkCN (mkN "Fleisch" "Fleisch" "Fleisch" "Fleisch" "Fleisch" "Fleisch" neuter) ;
Milk = mkCN L.milk_N ;
Pizza = mkCN (mkN "Pizza" "Pizzen" feminine) ;
Salt = mkCN L.salt_N ;
Tea = mkCN (mkN "Tee" "Tee" "Tee" "Tee" "Tees" "Tees" masculine) ;
Water = mkCN L.water_N ;
Wine = mkCN L.wine_N ;
-- properties
Bad = L.bad_A ;
Cheap = mkA "billig" ;
Boring = mkA "langweilig" ;
Cold = L.cold_A ;
Delicious = mkA "lecker" ;
Expensive = mkA "teuer" ;
Fresh = mkA "frisch" ;
Good = L.good_A ;
Warm = L.warm_A ;
Suspect = mkA "verdächtig" ;
-- places
Airport = mkPlace (mkN "Flughafen" "Flughäfen" masculine) on_Prep zu_Prep ;
Church = mkPlace (mkN "Kirche") in_Prep inAcc_Prep ;
Hospital = mkPlace (mkN "Krankenhaus" "Krankenhäuser" neuter) in_Prep inAcc_Prep ;
Restaurant = mkPlace (mkN "Restaurant" "Restaurants" neuter) in_Prep inAcc_Prep ;
Station = mkPlace (mkN "Bahnhof" "Bahnhöfe" masculine) on_Prep zu_Prep ;
University = mkPlace (mkN "Universität" "Universitäten" feminine) in_Prep zu_Prep ;
AmusementPark = mkPlace (mkN "Vergnügungspark" "Vergnügungspark" "Vergnügungspark" "Vergnügungspark" "Vergnügungsparks" "Vergnügungsparks" masculine) in_Prep inAcc_Prep ;
Bank = mkPlace (mkN "Bank" "Bank" "Bank" "Bank" "Banken" "Banken" feminine) in_Prep zu_Prep ;
Bar = mkPlace (mkN "Bar" "Bar" "Bar" "Bar" "Bars" "Bars" feminine) in_Prep inAcc_Prep ;
Cafeteria = mkPlace (mkN "Cafeteria" "Cafeteria" "Cafeteria" "Cafeteria" "Cafeterien" "Cafeterien" feminine) in_Prep inAcc_Prep ;
Center = mkPlace (mkN "Zentrum" "Zentrum" "Zentrum" "Zentrum" "Zentren" "Zentren" neuter) in_Prep zu_Prep ;
Cinema = mkPlace (mkN "Kino" "Kino" "Kino" "Kino" "Kinos" "Kinos" neuter) in_Prep inAcc_Prep ;
Disco = mkPlace (mkN "Disco" "Disco" "Disco" "Disco" "Discos" "Discos" feminine) in_Prep inAcc_Prep ;
Hotel = mkPlace (mkN "Hotel" "Hotel" "Hotel" "Hotel" "Hotels" "Hotels" neuter) in_Prep inAcc_Prep ;
Museum = mkPlace (mkN "Museum" "Museum" "Museum" "Museum" "Museen" "Museen" neuter) in_Prep inAcc_Prep ;
Park = mkPlace (mkN "Park" "Park" "Park" "Park" "Parks" "Parks" masculine) in_Prep inAcc_Prep ;
Parking = mkPlace (mkN "Parkplatz" "Parkplatz" "Parkplatz" "Parkplatz" "Parkplatzen" "Parkplatzen" masculine) on_Prep zu_Prep ;
Pharmacy = mkPlace (mkN "Apotheke" "Apotheke" "Apotheke" "Apotheke" "Apotheken" "Apotheken" feminine) in_Prep zu_Prep ;
PostOffice = mkPlace (mkN "Post" "Post" "Post" "Post" "Posten" "Posten" feminine) in_Prep inAcc_Prep ;
Pub = mkPlace (mkN "Kneipe" "Kneipe" "Kneipe" "Kneipe" "Kneipen" "Kneipen" feminine) in_Prep inAcc_Prep;
School = mkPlace (mkN "Schule" "Schule" "Schule" "Schule" "Schulen" "Schule" feminine) in_Prep inAcc_Prep ;
Shop = mkPlace (mkN "Geschäft" "Geschäft" "Geschäft" "Geschäft" "Geschäfte" "Geschäfte" neuter) in_Prep inAcc_Prep ;
Supermarket = mkPlace (mkN "Supermarkt" "Supermarkt" "Supermarkt" "Supermarkt" "Supermärkten" "Supermärkte" masculine) in_Prep inAcc_Prep ;
Theatre = mkPlace (mkN "Theater" "Theater" "Theater" "Theaters" "Theatern" "Thaters" neuter) in_Prep inAcc_Prep ;
Toilet = mkPlace (mkN "Toilette" "Toilette" "Toilette" "Toilette" "Toiletten" "Toiletten" feminine) in_Prep (mkPrep "auf" accusative) ;
Zoo = mkPlace (mkN "Zoo" "Zoo" "Zoo" "Zoo" "Zoos" "Zoos" masculine) in_Prep inAcc_Prep ;
CitRestaurant cit = mkCNPlace (mkCN cit (mkN "Restaurant" "Restaurants" neuter)) in_Prep inAcc_Prep ;
-- currencies
DanishCrown = mkCN (mkA "Dänisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Dollar = mkCN (mkN "Dollar" "Dollar" "Dollar" "Dollar" "Dollar" "Dollar" masculine) ;
Euro = mkCN (mkN "Euro" "Euro" "Euro" "Euro" "Euro" "Euro" neuter) ;
Lei = mkCN (mkN "Leu" "Leu" "Leu" "Leu" "Lei" "Lei" masculine) ;
SwedishCrown = mkCN (mkA "Schwedisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Leva = mkCN (mkN "Lewa" "Lewa" "Lewa" "Lewa" "Lewa" "Lewa" feminine);
NorwegianCrown = mkCN (mkA "Norwegisch") (mkN "Krone" "Kronen" feminine) | mkCN (mkN "Krone" "Kronen" feminine) ;
Pound = mkCN (mkN "Pfund" "Pfund" "Pfund" "Pfund" "Pfund" "Pfund" neuter) ;
Rouble = mkCN (mkN "Rubel" "Rubel" "Rubel" "Rubel" "Rubels" "Rubels" masculine);
Zloty = mkCN (mkN "Zloty" "Zloty" "Zloty" "Zloty" "Zloty" "Zloty" masculine);
-- nationalities
Belgian = mkA "belgisch" ;
Belgium = mkNP (mkPN "Belgien") ;
Bulgarian = mkNat "Bulgarien" "Bulgarisch" "bulgarisch" ;
Catalan = mkNat "Katalonien" "Katalanisch" "katalanisch" ;
Danish = mkNat "Dänemark" "Dänisch" "dänisch" ;
Dutch = mkNat "den Niederlanden" "Niederländisch" "niederländisch" ;
English = mkNat "England" "Englisch" "englisch" ;
Finnish = mkNat "Finnland" "Finnisch" "finnisch" ;
Flemish = mkCN (mkN "Flämisch" "Flämisch" neuter) ;
French = mkNat "Frankreich" "Französisch" "französisch" ;
German = mkNat "Deutschland" "Deutsch" "deutsche" ;
Italian = mkNat "Italien" "Italienisch" "italienisch" ;
Norwegian = mkNat "Norwegen" "Norwegisch" "norwegisch" ;
Polish = mkNat "Polen" "Polnisch" "polnisch" ;
Romanian = mkNat "Rumänien" "Rumänisch" "rumänisch" ;
Russian = mkNat "Russland" "Russisch" "russisch" ;
Spanish = mkNat "Spanien" "Spanisch" "spanisch" ;
Swedish = mkNat "Schweden" "Schwedisch" "schwedisch" ;
-- actions
AHasAge p num = prop (mkCl p.name (mkNP num L.year_N)) ;
AHasName p name = prop (mkCl p.name (mkV2 heißen_V) name) ;
AHungry p = prop (mkCl p.name (mkA "hungrig")) ;
AHasChildren p num = prop (mkCl p.name have_V2 (mkNP num L.child_N)) ;
AHasRoom p num = prop (mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "Zimmer" "Zimmer" neuter))
(SyntaxGer.mkAdv for_Prep (mkNP num (mkN "Persone"))))) ;
AHasTable p num = prop (mkCl p.name have_V2
(mkNP (mkNP a_Det (mkN "Tisch"))
(SyntaxGer.mkAdv for_Prep (mkNP num (mkN "Persone"))))) ;
AIll p = prop (mkCl p.name (mkA "krank")) ;
AKnow p = prop (mkCl p.name wissen_V) ;
ALike p item = prop (mkCl p.name (mkV2 mögen_V) item) ;
ALive p co = prop (mkCl p.name (mkVP (mkVP (mkV "wohnen")) (SyntaxGer.mkAdv in_Prep co))) ;
ALove p q = prop (mkCl p.name (mkV2 (mkV "lieben")) q.name) ;
AMarried p = prop (mkCl p.name (mkA "verheiratet")) ;
AReady p = prop (mkCl p.name (mkA "bereit")) ;
AScared p = prop (mkCl p.name have_V2 (mkNP (mkN "Angst" "Angsten" feminine))) ;
ASpeak p lang = mkProp (mkCl p.name (mkV2 sprechen_V) (mkNP lang))
(mkS (mkCl p.name (mkV2 sprechen_V) (mkNP no_Quant lang))) ;
AThirsty p = prop (mkCl p.name (mkA "durstig")) ;
ATired p = prop (mkCl p.name (mkA "müde")) ;
AUnderstand p = prop (mkCl p.name (fixprefixV "ver" stehen_V)) ;
AWant p obj = prop (mkCl p.name want_VV (mkVP have_V2 obj)) ;
AWantGo p place = prop (mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to)) ;
-- miscellaneous
QWhatName p = mkQS (mkQCl how_IAdv (mkCl p.name heißen_V)) ;
QWhatAge p = mkQS (mkQCl (ICompAP (mkAP L.old_A)) p.name) ;
PropOpen p = prop (mkCl p.name open_Adv) ;
PropClosed p = prop (mkCl p.name closed_Adv) ;
PropOpenDate p d = prop (mkCl p.name (mkVP (mkVP d) open_Adv)) ;
PropClosedDate p d = prop (mkCl p.name (mkVP (mkVP d) closed_Adv)) ;
PropOpenDay p d = prop (mkCl p.name (mkVP (mkVP d.habitual) open_Adv)) ;
PropClosedDay p d = prop (mkCl p.name (mkVP (mkVP d.habitual) closed_Adv)) ;
HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "kosten"))) ;
ItCost item price = prop (mkCl item (mkV2 (mkV "kosten")) price) ;
-- Building phrases from strings is complicated: the solution is to use
-- mkText : Text -> Text -> Text ;
PSeeYouDate d = mkText (lin Text (ss ("wir sehen uns"))) (mkPhrase (mkUtt d)) ;
PSeeYouPlace p = mkText (lin Text (ss ("wir sehen uns"))) (mkPhrase (mkUtt p.at)) ;
PSeeYouPlaceDate p d =
mkText (lin Text (ss ("wir sehen uns")))
(mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ;
-- 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 "Frau" "Frauen" feminine) ;
Husband = xOf sing L.man_N ;
Son = xOf sing (mkN "Sohn" "Söhne" masculine) ;
Daughter = xOf sing (mkN "Tochter" "Töchter" feminine) ;
Children = xOf plur L.child_N ;
-- week days
Monday = mkDay "Montag" ;
Tuesday = mkDay "Dienstag" ;
Wednesday = mkDay "Mittwoch" ;
Thursday = mkDay "Donnerstag" ;
Friday = mkDay "Freitag" ;
Saturday = mkDay "Samstag" ;
Sunday = mkDay "Sonntag" ;
Tomorrow = ParadigmsGer.mkAdv "morgen" ;
TheBest = mkSuperl L.good_A ;
TheClosest = mkSuperl L.near_A ;
TheCheapest = mkSuperl (mkA "billig") ;
TheMostExpensive = mkSuperl (mkA "teuer") ;
TheMostPopular = mkSuperl (mkA "beliebt") ;
TheWorst = mkSuperl (mkA "schlimm") ;
SuperlPlace sup p = placeNP sup p ;
-- means of transportation
Bike = mkTransport L.bike_N ;
Bus = mkTransport (mkN "Bus" "Bus" "Bus" "Bus" "Buss" "Buss" masculine) ;
Car = mkTransport L.car_N ;
Ferry = mkTransport (mkN "Fähre" "Fähre" "Fähre" "Fähre" "Fähren" "Fähren" feminine) ;
Plane = mkTransport (mkN "Flugzeug" "Flugzeug" "Flugzeug" "Flugzeug" "Flugzeuge" "Flugzeuge" neuter) ;
Subway = mkTransport (mkN "U-Bahn" "U-Bahn" "U-Bahn" "U-Bahn" "U-Bahnen" "U-Bahnen" feminine) ;
Taxi = mkTransport (mkN "Taxi" "Taxi" "Taxi" "Taxi" "Taxis" "Taxis" neuter) ;
Train = mkTransport (mkN "Zug" "Zug" "Zug" "Zug" "Züge" "Züge" masculine) ;
Tram = mkTransport (mkN "Straßenbahn" "Straßenbahn" "Straßenbahn" "Straßenbahn" "Straßenbahnen" "Straßenbahnen" feminine) ;
ByFoot = ParadigmsGer.mkAdv "zu Fuß" ;
HowFar place = mkQS (mkQCl far_IAdv place.name) ;
HowFarFrom x y = mkQS (mkQCl far_IAdv (mkNP (mkNP y.name (SyntaxGer.mkAdv von_Prep x.name)) (ParadigmsGer.mkAdv "entfernt"))) ;
HowFarFromBy x y t =
mkQS (mkQCl far_IAdv (mkCl (mkVP (SyntaxGer.mkAdv zu_Prep (mkNP (mkNP y.name (SyntaxGer.mkAdv von_Prep x.name)) t))))) ;
HowFarBy y t = mkQS (mkQCl far_IAdv (mkCl (mkVP (SyntaxGer.mkAdv zu_Prep (mkNP y.name t))))) ;
WhichTranspPlace trans place =
mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;
IsTranspPlace trans place =
mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ;
oper
mkNat : Str -> Str -> Str -> {lang : CN ; prop : A ; country : NP} = \co, la, adj ->
{lang = mkCN (mkN la la neuter) ;
prop = mkA adj ; country = mkNP (mkPN co)} ;
mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->
let day = mkNP (mkPN d masculine) in
{name = day ;
point = SyntaxGer.mkAdv (mkPrep "am" dative) day ; ---- am
habitual = ParadigmsGer.mkAdv (d + "s") ----
} ;
mkPlace : N -> Prep -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p,at,to -> {
name = mkCN p ;
at = at ;
to = to ;
isPl = False
} ;
open_Adv = ParadigmsGer.mkAdv "geöffnet" ; ---- Adv to get right word order easily
closed_Adv = ParadigmsGer.mkAdv "geschlossen" ;
xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ;
mkSuperl : A -> Det = \a -> SyntaxGer.mkDet the_Art (SyntaxGer.mkOrd a) ;
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
name = mkCN n ;
by = SyntaxGer.mkAdv by8means_Prep (mkNP the_Det n)
} ;
far_IAdv = ss "wie weit" ** {lock_IAdv = <>} ;
}

View File

@@ -12,17 +12,28 @@ else
echo "Canonical grammar compiles: OK"
fi
echo ""
# https://github.com/GrammaticalFramework/gf-core/issues/101
stack run -- --batch --output-format=canonical_gf grammars/PhrasebookGer.gf
for s in c2 objCtrl; do
grep VRead --after-context=216 canonical/PhrasebookGer.gf | grep "$s" > /dev/null
if [ $? -ne 1 ]; then
echo "Canonical grammar contains `$s`: FAIL"
FAILURES=$((FAILURES+1))
else
echo "Canonical grammar does not contain `$s`: OK"
fi
done
# for s in c2 objCtrl; do
# grep VRead --after-context=216 canonical/PhrasebookGer.gf | grep "$s" > /dev/null
# if [ $? -ne 1 ]; then
# echo "Canonical grammar contains \`$s\`: FAIL"
# FAILURES=$((FAILURES+1))
# else
# echo "Canonical grammar does not contain \`$s\`: OK"
# fi
# done
diff canonical/PhrasebookGer.gf gold/PhrasebookGer.gf
if [ $? -ne 0 ]; then
echo "Canonical grammar doesn't match gold version: FAIL"
FAILURES=$((FAILURES+1))
else
echo "Canonical grammar matches gold version: OK"
fi
echo ""
# https://github.com/GrammaticalFramework/gf-core/issues/102
stack run -- --batch --output-format=canonical_gf grammars/FoodsFin.gf
@@ -34,6 +45,9 @@ else
echo "Canonical grammar matches gold version: OK"
fi
echo ""
# Summary
if [ $FAILURES -ne 0 ]; then
echo "Failures: $FAILURES"
exit 1