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