forked from GitHub/gf-core
Add shell script in testsuite/compiler/canonical for replicating known issues
Ideally this is integrated into proper test suite, but that's too much overhead for now
This commit is contained in:
1
testsuite/compiler/canonical/.gitignore
vendored
Normal file
1
testsuite/compiler/canonical/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
canonical/
|
||||||
16
testsuite/compiler/canonical/Foods.gf
Normal file
16
testsuite/compiler/canonical/Foods.gf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
-- (c) 2009 Aarne Ranta under LGPL
|
||||||
|
|
||||||
|
abstract Foods = {
|
||||||
|
flags startcat = Comment ;
|
||||||
|
cat
|
||||||
|
Comment ; Item ; Kind ; Quality ;
|
||||||
|
fun
|
||||||
|
-- Pred : Item -> Quality -> Comment ;
|
||||||
|
-- This, That, These, Those : Kind -> Item ;
|
||||||
|
-- Mod : Quality -> Kind -> Kind ;
|
||||||
|
-- Wine, Cheese, Fish, Pizza : Kind ;
|
||||||
|
-- Very : Quality -> Quality ;
|
||||||
|
-- Fresh, Warm, Italian,
|
||||||
|
-- Expensive, Delicious, Boring : Quality ;
|
||||||
|
Expensive: Quality;
|
||||||
|
}
|
||||||
6
testsuite/compiler/canonical/FoodsFin.gf
Normal file
6
testsuite/compiler/canonical/FoodsFin.gf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
-- (c) 2009 Aarne Ranta under LGPL
|
||||||
|
|
||||||
|
concrete FoodsFin of Foods = FoodsI with
|
||||||
|
(Syntax = SyntaxFin),
|
||||||
|
(LexFoods = LexFoodsFin) ;
|
||||||
102
testsuite/compiler/canonical/FoodsFin.gf.gold
Normal file
102
testsuite/compiler/canonical/FoodsFin.gf.gold
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
concrete FoodsFin of Foods = {
|
||||||
|
param ParamX_Number = ParamX_Sg | ParamX_Pl;
|
||||||
|
param Prelude_Bool = Prelude_False | Prelude_True;
|
||||||
|
param ResFin_Agr = ResFin_Ag ParamX_Number ParamX_Person | ResFin_AgPol;
|
||||||
|
param ParamX_Person = ParamX_P1 | ParamX_P2 | ParamX_P3;
|
||||||
|
param ResFin_Harmony = ResFin_Back | ResFin_Front;
|
||||||
|
param ResFin_NForm =
|
||||||
|
ResFin_NCase ParamX_Number ResFin_Case | ResFin_NComit | ResFin_NInstruct |
|
||||||
|
ResFin_NPossNom ParamX_Number | ResFin_NPossGen ParamX_Number |
|
||||||
|
ResFin_NPossTransl ParamX_Number | ResFin_NPossIllat ParamX_Number |
|
||||||
|
ResFin_NCompound;
|
||||||
|
param ResFin_Case =
|
||||||
|
ResFin_Nom | ResFin_Gen | ResFin_Part | ResFin_Transl | ResFin_Ess |
|
||||||
|
ResFin_Iness | ResFin_Elat | ResFin_Illat | ResFin_Adess | ResFin_Ablat |
|
||||||
|
ResFin_Allat | ResFin_Abess;
|
||||||
|
param ResFin_NPForm = ResFin_NPCase ResFin_Case | ResFin_NPAcc | ResFin_NPSep;
|
||||||
|
lincat Comment = {s : Str};
|
||||||
|
Item =
|
||||||
|
{s : ResFin_NPForm => Str; a : ResFin_Agr; isNeg : Prelude_Bool;
|
||||||
|
isPron : Prelude_Bool};
|
||||||
|
Kind =
|
||||||
|
{s : ResFin_NForm => Str; h : ResFin_Harmony;
|
||||||
|
postmod : ParamX_Number => Str};
|
||||||
|
Quality =
|
||||||
|
{s : Prelude_Bool => ResFin_NForm => Str; hasPrefix : Prelude_Bool;
|
||||||
|
p : Str};
|
||||||
|
lin Expensive =
|
||||||
|
{s =
|
||||||
|
table {Prelude_False =>
|
||||||
|
table {ResFin_NCase ParamX_Sg ResFin_Nom => "kallis";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Gen => "kalliin";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Part => "kallista";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Transl => "kalliiksi";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Ess => "kalliina";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Iness => "kalliissa";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Elat => "kalliista";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Illat => "kalliiseen";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Adess => "kalliilla";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Ablat => "kalliilta";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Allat => "kalliille";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Abess => "kalliitta";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Nom => "kalliit";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Gen => "kalliiden";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Part => "kalliita";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Transl => "kalliiksi";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Ess => "kalliina";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Iness => "kalliissa";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Elat => "kalliista";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Illat => "kalliisiin";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Adess => "kalliilla";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Ablat => "kalliilta";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Allat => "kalliille";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Abess => "kalliitta";
|
||||||
|
ResFin_NComit => "kalliine";
|
||||||
|
ResFin_NInstruct => "kalliin";
|
||||||
|
ResFin_NPossNom ParamX_Sg => "kallii";
|
||||||
|
ResFin_NPossNom ParamX_Pl => "kallii";
|
||||||
|
ResFin_NPossGen ParamX_Sg => "kallii";
|
||||||
|
ResFin_NPossGen ParamX_Pl => "kalliide";
|
||||||
|
ResFin_NPossTransl ParamX_Sg => "kalliikse";
|
||||||
|
ResFin_NPossTransl ParamX_Pl => "kalliikse";
|
||||||
|
ResFin_NPossIllat ParamX_Sg => "kalliisee";
|
||||||
|
ResFin_NPossIllat ParamX_Pl => "kalliisii";
|
||||||
|
ResFin_NCompound => "kallis"};
|
||||||
|
Prelude_True =>
|
||||||
|
table {ResFin_NCase ParamX_Sg ResFin_Nom => "kallis";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Gen => "kalliin";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Part => "kallista";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Transl => "kalliiksi";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Ess => "kalliina";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Iness => "kalliissa";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Elat => "kalliista";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Illat => "kalliiseen";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Adess => "kalliilla";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Ablat => "kalliilta";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Allat => "kalliille";
|
||||||
|
ResFin_NCase ParamX_Sg ResFin_Abess => "kalliitta";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Nom => "kalliit";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Gen => "kalliiden";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Part => "kalliita";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Transl => "kalliiksi";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Ess => "kalliina";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Iness => "kalliissa";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Elat => "kalliista";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Illat => "kalliisiin";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Adess => "kalliilla";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Ablat => "kalliilta";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Allat => "kalliille";
|
||||||
|
ResFin_NCase ParamX_Pl ResFin_Abess => "kalliitta";
|
||||||
|
ResFin_NComit => "kalliine";
|
||||||
|
ResFin_NInstruct => "kalliin";
|
||||||
|
ResFin_NPossNom ParamX_Sg => "kallii";
|
||||||
|
ResFin_NPossNom ParamX_Pl => "kallii";
|
||||||
|
ResFin_NPossGen ParamX_Sg => "kallii";
|
||||||
|
ResFin_NPossGen ParamX_Pl => "kalliide";
|
||||||
|
ResFin_NPossTransl ParamX_Sg => "kalliikse";
|
||||||
|
ResFin_NPossTransl ParamX_Pl => "kalliikse";
|
||||||
|
ResFin_NPossIllat ParamX_Sg => "kalliisee";
|
||||||
|
ResFin_NPossIllat ParamX_Pl => "kalliisii";
|
||||||
|
ResFin_NCompound => "kallis"}};
|
||||||
|
hasPrefix = Prelude_False; p = ""};
|
||||||
|
}
|
||||||
29
testsuite/compiler/canonical/FoodsI.gf
Normal file
29
testsuite/compiler/canonical/FoodsI.gf
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
-- (c) 2009 Aarne Ranta under LGPL
|
||||||
|
|
||||||
|
incomplete concrete FoodsI of Foods =
|
||||||
|
open Syntax, LexFoods in {
|
||||||
|
lincat
|
||||||
|
Comment = Utt ;
|
||||||
|
Item = NP ;
|
||||||
|
Kind = CN ;
|
||||||
|
Quality = AP ;
|
||||||
|
lin
|
||||||
|
Pred item quality = mkUtt (mkCl item quality) ;
|
||||||
|
This kind = mkNP this_Det kind ;
|
||||||
|
That kind = mkNP that_Det kind ;
|
||||||
|
These kind = mkNP these_Det kind ;
|
||||||
|
Those kind = mkNP those_Det kind ;
|
||||||
|
Mod quality kind = mkCN quality kind ;
|
||||||
|
Very quality = mkAP very_AdA quality ;
|
||||||
|
|
||||||
|
Wine = mkCN wine_N ;
|
||||||
|
Pizza = mkCN pizza_N ;
|
||||||
|
Cheese = mkCN cheese_N ;
|
||||||
|
Fish = mkCN fish_N ;
|
||||||
|
Fresh = mkAP fresh_A ;
|
||||||
|
Warm = mkAP warm_A ;
|
||||||
|
Italian = mkAP italian_A ;
|
||||||
|
Expensive = mkAP expensive_A ;
|
||||||
|
Delicious = mkAP delicious_A ;
|
||||||
|
Boring = mkAP boring_A ;
|
||||||
|
}
|
||||||
28
testsuite/compiler/canonical/Greetings.gf
Normal file
28
testsuite/compiler/canonical/Greetings.gf
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
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 ;
|
||||||
|
|
||||||
|
}
|
||||||
31
testsuite/compiler/canonical/GreetingsBul.gf
Normal file
31
testsuite/compiler/canonical/GreetingsBul.gf
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
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 "колко е часът" ;
|
||||||
|
|
||||||
|
}
|
||||||
31
testsuite/compiler/canonical/GreetingsGer.gf
Normal file
31
testsuite/compiler/canonical/GreetingsGer.gf
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
--# -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" ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
15
testsuite/compiler/canonical/LexFoods.gf
Normal file
15
testsuite/compiler/canonical/LexFoods.gf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
-- (c) 2009 Aarne Ranta under LGPL
|
||||||
|
|
||||||
|
interface LexFoods = open Syntax in {
|
||||||
|
oper
|
||||||
|
wine_N : N ;
|
||||||
|
pizza_N : N ;
|
||||||
|
cheese_N : N ;
|
||||||
|
fish_N : N ;
|
||||||
|
fresh_A : A ;
|
||||||
|
warm_A : A ;
|
||||||
|
italian_A : A ;
|
||||||
|
expensive_A : A ;
|
||||||
|
delicious_A : A ;
|
||||||
|
boring_A : A ;
|
||||||
|
}
|
||||||
21
testsuite/compiler/canonical/LexFoodsFin.gf
Normal file
21
testsuite/compiler/canonical/LexFoodsFin.gf
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
-- (c) 2009 Aarne Ranta under LGPL
|
||||||
|
--# -coding=latin1
|
||||||
|
|
||||||
|
instance LexFoodsFin of LexFoods =
|
||||||
|
open SyntaxFin, ParadigmsFin in {
|
||||||
|
oper
|
||||||
|
wine_N = mkN "viini" ;
|
||||||
|
pizza_N = mkN "pizza" ;
|
||||||
|
cheese_N = mkN "juusto" ;
|
||||||
|
fish_N = mkN "kala" ;
|
||||||
|
fresh_A = mkA "tuore" ;
|
||||||
|
warm_A = mkA
|
||||||
|
(mkN "l<>mmin" "l<>mpim<69>n" "l<>mmint<6E>" "l<>mpim<69>n<EFBFBD>" "l<>mpim<69><6D>n"
|
||||||
|
"l<>mpimin<69>" "l<>mpimi<6D>" "l<>mpimien" "l<>mpimiss<73>" "l<>mpimiin"
|
||||||
|
)
|
||||||
|
"l<>mpim<69>mpi" "l<>mpimin" ;
|
||||||
|
italian_A = mkA "italialainen" ;
|
||||||
|
expensive_A = mkA "kallis" ;
|
||||||
|
delicious_A = mkA "herkullinen" ;
|
||||||
|
boring_A = mkA "tyls<6C>" ;
|
||||||
|
}
|
||||||
8
testsuite/compiler/canonical/Phrasebook.gf
Normal file
8
testsuite/compiler/canonical/Phrasebook.gf
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
abstract Phrasebook =
|
||||||
|
Greetings,
|
||||||
|
Words
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phrase ;
|
||||||
|
|
||||||
|
}
|
||||||
9
testsuite/compiler/canonical/PhrasebookBul.gf
Normal file
9
testsuite/compiler/canonical/PhrasebookBul.gf
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
--# -path=.:present
|
||||||
|
|
||||||
|
concrete PhrasebookBul of Phrasebook =
|
||||||
|
GreetingsBul,
|
||||||
|
WordsBul ** open
|
||||||
|
SyntaxBul,
|
||||||
|
Prelude in {
|
||||||
|
|
||||||
|
}
|
||||||
10
testsuite/compiler/canonical/PhrasebookGer.gf
Normal file
10
testsuite/compiler/canonical/PhrasebookGer.gf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--# -path=.:present
|
||||||
|
|
||||||
|
concrete PhrasebookGer of Phrasebook =
|
||||||
|
GreetingsGer,
|
||||||
|
WordsGer ** open
|
||||||
|
SyntaxGer,
|
||||||
|
Prelude in {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
222
testsuite/compiler/canonical/Sentences.gf
Normal file
222
testsuite/compiler/canonical/Sentences.gf
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
--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)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
54
testsuite/compiler/canonical/SentencesBul.gf
Normal file
54
testsuite/compiler/canonical/SentencesBul.gf
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
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)) ;
|
||||||
|
|
||||||
|
}
|
||||||
50
testsuite/compiler/canonical/SentencesGer.gf
Normal file
50
testsuite/compiler/canonical/SentencesGer.gf
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
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 ;
|
||||||
|
}
|
||||||
302
testsuite/compiler/canonical/SentencesI.gf
Normal file
302
testsuite/compiler/canonical/SentencesI.gf
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
--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 ;
|
||||||
|
|
||||||
|
}
|
||||||
254
testsuite/compiler/canonical/Words.gf
Normal file
254
testsuite/compiler/canonical/Words.gf
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
--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 ;
|
||||||
|
-}
|
||||||
|
|
||||||
|
}
|
||||||
305
testsuite/compiler/canonical/WordsBul.gf
Normal file
305
testsuite/compiler/canonical/WordsBul.gf
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
--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 ;
|
||||||
|
|
||||||
|
}
|
||||||
262
testsuite/compiler/canonical/WordsGer.gf
Normal file
262
testsuite/compiler/canonical/WordsGer.gf
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
-- (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 = <>} ;
|
||||||
|
|
||||||
|
}
|
||||||
23
testsuite/compiler/canonical/run.sh
Executable file
23
testsuite/compiler/canonical/run.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# https://github.com/GrammaticalFramework/gf-core/issues/100
|
||||||
|
stack run -- --batch --output-format=canonical_gf PhrasebookBul.gf
|
||||||
|
stack run -- --batch canonical/PhrasebookBul.gf
|
||||||
|
|
||||||
|
# https://github.com/GrammaticalFramework/gf-core/issues/101
|
||||||
|
stack run -- --batch --output-format=canonical_gf 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 "$s found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# https://github.com/GrammaticalFramework/gf-core/issues/102
|
||||||
|
stack run -- --batch --output-format=canonical_gf FoodsFin.gf
|
||||||
|
diff canonical/FoodsFin.gf ./FoodsFin.gf.gold
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Compiled grammar doesn't match gold version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user