summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorkrangelov <kr.angelov@gmail.com>2021-07-26 16:52:11 +0200
committerkrangelov <kr.angelov@gmail.com>2021-07-26 16:52:11 +0200
commite47042424ee2450c69c509601ddc3c1cc8cd9a39 (patch)
tree5cfad2acca46f8c9aafa3a5f97600ae26bbe0e1c /testsuite
parentecf309a28e9935923308da4b6aa2b1cc6c4b52e2 (diff)
parentd0a881f9038d2ca1620e0d95f90c297a452774d5 (diff)
Merge branch 'master' of https://github.com/GrammaticalFramework/gf-core
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/canonical/.gitignore1
-rw-r--r--testsuite/canonical/gold/FoodsFin.gf102
-rw-r--r--testsuite/canonical/gold/PhrasebookBul.gf29
-rw-r--r--testsuite/canonical/gold/PhrasebookGer.gf251
-rw-r--r--testsuite/canonical/grammars/Foods.gf16
-rw-r--r--testsuite/canonical/grammars/FoodsFin.gf6
-rw-r--r--testsuite/canonical/grammars/FoodsI.gf29
-rw-r--r--testsuite/canonical/grammars/LexFoods.gf15
-rw-r--r--testsuite/canonical/grammars/LexFoodsFin.gf21
-rw-r--r--testsuite/canonical/grammars/Phrasebook.gf9
-rw-r--r--testsuite/canonical/grammars/PhrasebookBul.gf31
-rw-r--r--testsuite/canonical/grammars/PhrasebookGer.gf14
-rwxr-xr-xtestsuite/canonical/run-on-grammar.sh36
-rwxr-xr-xtestsuite/canonical/run.sh54
-rw-r--r--testsuite/compiler/check/cyclic/abs-types/test3.gfs.gold0
-rw-r--r--testsuite/compiler/check/lincat-types/Predef.gf48
-rw-r--r--testsuite/compiler/check/lincat-types/test.gfs.gold12
-rw-r--r--testsuite/compiler/check/lins/lins.gfs.gold80
-rw-r--r--testsuite/compiler/check/oper-definition/test.gfs.gold7
-rw-r--r--testsuite/compiler/check/strMatch/Prelude.gf161
-rw-r--r--testsuite/compiler/check/strMatch/strMatch.gfs.gold1
-rw-r--r--testsuite/compiler/params/params.gfs.gold0
-rw-r--r--testsuite/compiler/typecheck/abstract/LetInDefAbs.gfs.gold15
-rw-r--r--testsuite/compiler/typecheck/abstract/LetInTypesAbs.gfs.gold4
-rw-r--r--testsuite/compiler/typecheck/abstract/LitAbs.gf2
-rw-r--r--testsuite/compiler/typecheck/abstract/LitAbs.gfs1
-rw-r--r--testsuite/compiler/typecheck/abstract/LitAbs.gfs.gold17
-rw-r--r--testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs5
-rw-r--r--testsuite/compiler/typecheck/abstract/test_A.gfs.gold7
-rw-r--r--testsuite/compiler/typecheck/abstract/test_B.gfs.gold7
-rw-r--r--testsuite/compiler/typecheck/abstract/test_C.gfs.gold7
-rw-r--r--testsuite/compiler/typecheck/concrete/test_A.gfs.gold10
-rw-r--r--testsuite/libraries/exx-resource.gfs226
-rw-r--r--testsuite/libraries/exx-resource.gfs.gold1032
-rw-r--r--testsuite/run.hs119
-rw-r--r--testsuite/runtime/linearize/brackets.gfs.gold11
-rw-r--r--testsuite/runtime/linearize/linearize.gfs.gold10
37 files changed, 1008 insertions, 1388 deletions
diff --git a/testsuite/canonical/.gitignore b/testsuite/canonical/.gitignore
new file mode 100644
index 000000000..72988cf10
--- /dev/null
+++ b/testsuite/canonical/.gitignore
@@ -0,0 +1 @@
+canonical/
diff --git a/testsuite/canonical/gold/FoodsFin.gf b/testsuite/canonical/gold/FoodsFin.gf
new file mode 100644
index 000000000..de63d2b36
--- /dev/null
+++ b/testsuite/canonical/gold/FoodsFin.gf
@@ -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 = ""};
+} \ No newline at end of file
diff --git a/testsuite/canonical/gold/PhrasebookBul.gf b/testsuite/canonical/gold/PhrasebookBul.gf
new file mode 100644
index 000000000..eb10cc48c
--- /dev/null
+++ b/testsuite/canonical/gold/PhrasebookBul.gf
@@ -0,0 +1,29 @@
+concrete PhrasebookBul of Phrasebook = {
+param Prelude_Bool = Prelude_False | Prelude_True;
+param ResBul_AGender = ResBul_AMasc ResBul_Animacy | ResBul_AFem | ResBul_ANeut;
+param ResBul_Animacy = ResBul_Human | ResBul_NonHuman;
+param ResBul_Case = ResBul_Acc | ResBul_Dat | ResBul_WithPrep | ResBul_CPrep;
+param ResBul_NForm =
+ ResBul_NF ParamX_Number ResBul_Species | ResBul_NFSgDefNom |
+ ResBul_NFPlCount | ResBul_NFVocative;
+param ParamX_Number = ParamX_Sg | ParamX_Pl;
+param ResBul_Species = ResBul_Indef | ResBul_Def;
+lincat PlaceKind =
+ {at : {s : Str; c : ResBul_Case}; isPl : Prelude_Bool;
+ name : {s : ResBul_NForm => Str; g : ResBul_AGender};
+ to : {s : Str; c : ResBul_Case}};
+ VerbPhrase = {s : Str};
+lin Airport =
+ {at = {s = "на"; c = ResBul_Acc}; isPl = Prelude_False;
+ name =
+ {s =
+ table {ResBul_NF ParamX_Sg ResBul_Indef => "летище";
+ ResBul_NF ParamX_Sg ResBul_Def => "летището";
+ ResBul_NF ParamX_Pl ResBul_Indef => "летища";
+ ResBul_NF ParamX_Pl ResBul_Def => "летищата";
+ ResBul_NFSgDefNom => "летището";
+ ResBul_NFPlCount => "летища";
+ ResBul_NFVocative => "летище"};
+ g = ResBul_ANeut};
+ to = {s = "до"; c = ResBul_CPrep}};
+} \ No newline at end of file
diff --git a/testsuite/canonical/gold/PhrasebookGer.gf b/testsuite/canonical/gold/PhrasebookGer.gf
new file mode 100644
index 000000000..912f3b7b1
--- /dev/null
+++ b/testsuite/canonical/gold/PhrasebookGer.gf
@@ -0,0 +1,251 @@
+concrete PhrasebookGer of Phrasebook = {
+param Prelude_Bool = Prelude_False | Prelude_True;
+param ResGer_Agr = ResGer_Ag ResGer_Gender ParamX_Number ParamX_Person;
+param ParamX_Number = ParamX_Sg | ParamX_Pl;
+param ParamX_Person = ParamX_P1 | ParamX_P2 | ParamX_P3;
+param ResGer_Gender = ResGer_Masc | ResGer_Fem | ResGer_Neutr;
+param ResGer_Control = ResGer_SubjC | ResGer_ObjC | ResGer_NoC;
+param ResGer_PCase = ResGer_NPC ResGer_Case | ResGer_NPP ResGer_CPrep;
+param ResGer_CPrep =
+ ResGer_CAnDat | ResGer_CInAcc | ResGer_CInDat | ResGer_CZuDat |
+ ResGer_CVonDat;
+param ResGer_Case = ResGer_Nom | ResGer_Acc | ResGer_Dat | ResGer_Gen;
+param ResGer_VAux = ResGer_VHaben | ResGer_VSein;
+param ResGer_VForm =
+ ResGer_VInf Prelude_Bool | ResGer_VFin Prelude_Bool ResGer_VFormFin |
+ ResGer_VImper ParamX_Number | ResGer_VPresPart ResGer_AForm |
+ ResGer_VPastPart ResGer_AForm;
+param ResGer_AForm = ResGer_APred | ResGer_AMod ResGer_GenNum ResGer_Case;
+param ResGer_GenNum = ResGer_GSg ResGer_Gender | ResGer_GPl;
+param ResGer_VFormFin =
+ ResGer_VPresInd ParamX_Number ParamX_Person |
+ ResGer_VPresSubj ParamX_Number ParamX_Person;
+param ResGer_VType = ResGer_VAct | ResGer_VRefl ResGer_Case;
+lincat PlaceKind = {s : Str};
+ VerbPhrase =
+ {s :
+ {s : ResGer_VForm => Str; aux : ResGer_VAux; particle : Str;
+ prefix : Str; vtype : ResGer_VType};
+ a1 : Str; a2 : Str; adj : Str; ext : Str;
+ inf : {s : Str; ctrl : ResGer_Control; isAux : Prelude_Bool};
+ infExt : Str; isAux : Prelude_Bool;
+ nn :
+ ResGer_Agr =>
+ {p1 : Str; p2 : Str; p3 : Str; p4 : Str; p5 : Str; p6 : Str};
+ subjc :
+ {s : Str; c : ResGer_PCase; isPrep : Prelude_Bool; s2 : Str}};
+lin VRead =
+ {s =
+ {s =
+ table {ResGer_VInf Prelude_False => "lesen";
+ ResGer_VInf Prelude_True => "zu" ++ "lesen";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Sg ParamX_P1) =>
+ "lese";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Sg ParamX_P2) =>
+ "liest";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Sg ParamX_P3) =>
+ "liest";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Pl ParamX_P1) =>
+ "lesen";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Pl ParamX_P2) =>
+ "lest";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresInd ParamX_Pl ParamX_P3) =>
+ "lesen";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Sg ParamX_P1) =>
+ "lese";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Sg ParamX_P2) =>
+ "lesest";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Sg ParamX_P3) =>
+ "lese";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Pl ParamX_P1) =>
+ "lesen";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Pl ParamX_P2) =>
+ "leset";
+ ResGer_VFin Prelude_False
+ (ResGer_VPresSubj ParamX_Pl ParamX_P3) =>
+ "lesen";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Sg ParamX_P1) =>
+ "lese";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Sg ParamX_P2) =>
+ "liest";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Sg ParamX_P3) =>
+ "liest";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Pl ParamX_P1) =>
+ "lesen";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Pl ParamX_P2) =>
+ "lest";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresInd ParamX_Pl ParamX_P3) =>
+ "lesen";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Sg ParamX_P1) =>
+ "lese";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Sg ParamX_P2) =>
+ "lesest";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Sg ParamX_P3) =>
+ "lese";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Pl ParamX_P1) =>
+ "lesen";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Pl ParamX_P2) =>
+ "leset";
+ ResGer_VFin Prelude_True
+ (ResGer_VPresSubj ParamX_Pl ParamX_P3) =>
+ "lesen";
+ ResGer_VImper ParamX_Sg => "les";
+ ResGer_VImper ParamX_Pl => "lest";
+ ResGer_VPresPart ResGer_APred => "lesend";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Nom) =>
+ "lesender";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Acc) =>
+ "lesenden";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Dat) =>
+ "lesendem";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Gen) =>
+ "lesenden";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Nom) =>
+ "lesende";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Acc) =>
+ "lesende";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Dat) =>
+ "lesender";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Gen) =>
+ "lesender";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Nom) =>
+ "lesendes";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Acc) =>
+ "lesendes";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Dat) =>
+ "lesendem";
+ ResGer_VPresPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Gen) =>
+ "lesenden";
+ ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Nom) =>
+ "lesende";
+ ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Acc) =>
+ "lesende";
+ ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Dat) =>
+ "lesenden";
+ ResGer_VPresPart (ResGer_AMod ResGer_GPl ResGer_Gen) =>
+ "lesender";
+ ResGer_VPastPart ResGer_APred => "gelesen";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Nom) =>
+ "gelesener";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Acc) =>
+ "gelesenen";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Dat) =>
+ "gelesenem";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Masc)
+ ResGer_Gen) =>
+ "gelesenen";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Nom) =>
+ "gelesene";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Acc) =>
+ "gelesene";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Dat) =>
+ "gelesener";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Fem)
+ ResGer_Gen) =>
+ "gelesener";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Nom) =>
+ "gelesenes";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Acc) =>
+ "gelesenes";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Dat) =>
+ "gelesenem";
+ ResGer_VPastPart (ResGer_AMod (ResGer_GSg ResGer_Neutr)
+ ResGer_Gen) =>
+ "gelesenen";
+ ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Nom) =>
+ "gelesene";
+ ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Acc) =>
+ "gelesene";
+ ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Dat) =>
+ "gelesenen";
+ ResGer_VPastPart (ResGer_AMod ResGer_GPl ResGer_Gen) =>
+ "gelesener"};
+ aux = ResGer_VHaben; particle = ""; prefix = "";
+ vtype = ResGer_VAct};
+ a1 = ""; a2 = ""; adj = ""; ext = "";
+ inf = {s = ""; ctrl = ResGer_NoC; isAux = Prelude_True}; infExt = "";
+ isAux = Prelude_False;
+ nn =
+ table {ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Masc ParamX_Sg ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Masc ParamX_Pl ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Sg ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Fem ParamX_Pl ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Sg ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P1 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P2 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""};
+ ResGer_Ag ResGer_Neutr ParamX_Pl ParamX_P3 =>
+ {p1 = ""; p2 = ""; p3 = ""; p4 = ""; p5 = ""; p6 = ""}};
+ subjc =
+ {s = ""; c = ResGer_NPC ResGer_Nom; isPrep = Prelude_False;
+ s2 = ""}};
+} \ No newline at end of file
diff --git a/testsuite/canonical/grammars/Foods.gf b/testsuite/canonical/grammars/Foods.gf
new file mode 100644
index 000000000..aa68d4429
--- /dev/null
+++ b/testsuite/canonical/grammars/Foods.gf
@@ -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;
+}
diff --git a/testsuite/canonical/grammars/FoodsFin.gf b/testsuite/canonical/grammars/FoodsFin.gf
new file mode 100644
index 000000000..962199805
--- /dev/null
+++ b/testsuite/canonical/grammars/FoodsFin.gf
@@ -0,0 +1,6 @@
+
+-- (c) 2009 Aarne Ranta under LGPL
+
+concrete FoodsFin of Foods = FoodsI with
+ (Syntax = SyntaxFin),
+ (LexFoods = LexFoodsFin) ;
diff --git a/testsuite/canonical/grammars/FoodsI.gf b/testsuite/canonical/grammars/FoodsI.gf
new file mode 100644
index 000000000..f4113b724
--- /dev/null
+++ b/testsuite/canonical/grammars/FoodsI.gf
@@ -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 ;
+}
diff --git a/testsuite/canonical/grammars/LexFoods.gf b/testsuite/canonical/grammars/LexFoods.gf
new file mode 100644
index 000000000..12ace208c
--- /dev/null
+++ b/testsuite/canonical/grammars/LexFoods.gf
@@ -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 ;
+}
diff --git a/testsuite/canonical/grammars/LexFoodsFin.gf b/testsuite/canonical/grammars/LexFoodsFin.gf
new file mode 100644
index 000000000..8b12f449f
--- /dev/null
+++ b/testsuite/canonical/grammars/LexFoodsFin.gf
@@ -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�n" "l�mmint�" "l�mpim�n�" "l�mpim��n"
+ "l�mpimin�" "l�mpimi�" "l�mpimien" "l�mpimiss�" "l�mpimiin"
+ )
+ "l�mpim�mpi" "l�mpimin" ;
+ italian_A = mkA "italialainen" ;
+ expensive_A = mkA "kallis" ;
+ delicious_A = mkA "herkullinen" ;
+ boring_A = mkA "tyls�" ;
+}
diff --git a/testsuite/canonical/grammars/Phrasebook.gf b/testsuite/canonical/grammars/Phrasebook.gf
new file mode 100644
index 000000000..eff538f62
--- /dev/null
+++ b/testsuite/canonical/grammars/Phrasebook.gf
@@ -0,0 +1,9 @@
+abstract Phrasebook = {
+
+cat PlaceKind ;
+fun Airport : PlaceKind ;
+
+cat VerbPhrase ;
+fun VRead : VerbPhrase ;
+
+}
diff --git a/testsuite/canonical/grammars/PhrasebookBul.gf b/testsuite/canonical/grammars/PhrasebookBul.gf
new file mode 100644
index 000000000..347d69297
--- /dev/null
+++ b/testsuite/canonical/grammars/PhrasebookBul.gf
@@ -0,0 +1,31 @@
+--# -path=.:present
+
+concrete PhrasebookBul of Phrasebook =
+ open
+ SyntaxBul,
+ (R = ResBul),
+ ParadigmsBul,
+ Prelude in {
+
+ lincat
+ PlaceKind = CNPlace ;
+
+ oper
+ CNPlace : Type = {name : CN ; at : Prep ; to : Prep; isPl : Bool} ;
+
+ mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \n,p ->
+ mkCNPlace (mkCN n) p to_Prep ;
+
+ mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
+ name = p ;
+ at = i ;
+ to = t ;
+ isPl = False
+ } ;
+
+ na_Prep = mkPrep "на" R.Acc ;
+
+ lin
+ Airport = mkPlace (mkN066 "летище") na_Prep ;
+
+}
diff --git a/testsuite/canonical/grammars/PhrasebookGer.gf b/testsuite/canonical/grammars/PhrasebookGer.gf
new file mode 100644
index 000000000..c6402297c
--- /dev/null
+++ b/testsuite/canonical/grammars/PhrasebookGer.gf
@@ -0,0 +1,14 @@
+--# -path=.:present
+
+concrete PhrasebookGer of Phrasebook =
+ open
+ SyntaxGer,
+ LexiconGer in {
+
+ lincat
+ VerbPhrase = VP ;
+
+ lin
+ VRead = mkVP <lin V read_V2 : V> ;
+
+}
diff --git a/testsuite/canonical/run-on-grammar.sh b/testsuite/canonical/run-on-grammar.sh
new file mode 100755
index 000000000..f621035e3
--- /dev/null
+++ b/testsuite/canonical/run-on-grammar.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env sh
+
+# For a given grammar, compile into canonical format,
+# then ensure that the canonical format itself is compilable.
+
+if [ $# -lt 1 ]; then
+ echo "Please specify concrete modules to test with, e.g.:"
+ echo "./run-on-grammar.sh ../../../gf-contrib/foods/FoodsEng.gf ../../../gf-contrib/foods/FoodsFin.gf"
+ exit 2
+fi
+
+FAILURES=0
+
+for CNC_PATH in "$@"; do
+ CNC_FILE=$(basename "$CNC_PATH")
+ stack run -- --batch --output-format=canonical_gf "$CNC_PATH"
+ if [ $? -ne 0 ]; then
+ echo "Failed to compile into canonical"
+ FAILURES=$((FAILURES+1))
+ continue
+ fi
+
+ stack run -- --batch "canonical/$CNC_FILE"
+ if [ $? -ne 0 ]; then
+ echo "Failed to compile canonical"
+ FAILURES=$((FAILURES+1))
+ fi
+done
+
+# Summary
+if [ $FAILURES -ne 0 ]; then
+ echo "Failures: $FAILURES"
+ exit 1
+else
+ echo "All tests passed"
+fi
diff --git a/testsuite/canonical/run.sh b/testsuite/canonical/run.sh
new file mode 100755
index 000000000..81c03c5d1
--- /dev/null
+++ b/testsuite/canonical/run.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env sh
+
+FAILURES=0
+
+# https://github.com/GrammaticalFramework/gf-core/issues/100
+stack run -- --batch --output-format=canonical_gf grammars/PhrasebookBul.gf
+stack run -- --batch canonical/PhrasebookBul.gf
+if [ $? -ne 0 ]; then
+ echo "Canonical grammar doesn't compile: FAIL"
+ FAILURES=$((FAILURES+1))
+else
+ # echo "Canonical grammar compiles: OK"
+ diff canonical/PhrasebookBul.gf gold/PhrasebookBul.gf
+ if [ $? -ne 0 ]; then
+ echo "Canonical grammar doesn't match gold version: FAIL"
+ FAILURES=$((FAILURES+1))
+ else
+ echo "Canonical grammar matches gold version: OK"
+ fi
+fi
+
+echo ""
+
+# https://github.com/GrammaticalFramework/gf-core/issues/101
+stack run -- --batch --output-format=canonical_gf grammars/PhrasebookGer.gf
+diff canonical/PhrasebookGer.gf gold/PhrasebookGer.gf
+if [ $? -ne 0 ]; then
+ echo "Canonical grammar doesn't match gold version: FAIL"
+ FAILURES=$((FAILURES+1))
+else
+ echo "Canonical grammar matches gold version: OK"
+fi
+
+echo ""
+
+# https://github.com/GrammaticalFramework/gf-core/issues/102
+stack run -- --batch --output-format=canonical_gf grammars/FoodsFin.gf
+diff canonical/FoodsFin.gf gold/FoodsFin.gf
+if [ $? -ne 0 ]; then
+ echo "Canonical grammar doesn't match gold version: FAIL"
+ FAILURES=$((FAILURES+1))
+else
+ echo "Canonical grammar matches gold version: OK"
+fi
+
+echo ""
+
+# Summary
+if [ $FAILURES -ne 0 ]; then
+ echo "Failures: $FAILURES"
+ exit 1
+else
+ echo "All tests passed"
+fi
diff --git a/testsuite/compiler/check/cyclic/abs-types/test3.gfs.gold b/testsuite/compiler/check/cyclic/abs-types/test3.gfs.gold
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testsuite/compiler/check/cyclic/abs-types/test3.gfs.gold
diff --git a/testsuite/compiler/check/lincat-types/Predef.gf b/testsuite/compiler/check/lincat-types/Predef.gf
new file mode 100644
index 000000000..fded5ae38
--- /dev/null
+++ b/testsuite/compiler/check/lincat-types/Predef.gf
@@ -0,0 +1,48 @@
+--1 Predefined functions for concrete syntax
+
+-- The definitions of these constants are hard-coded in GF, and defined
+-- in Predef.hs (gf-core/src/compiler/GF/Compile/Compute/Predef.hs).
+-- Applying them to run-time variables leads to compiler errors that are
+-- often only detected at the code generation time.
+
+resource Predef = {
+
+-- This type of booleans is for internal use only.
+
+ param PBool = PTrue | PFalse ;
+
+ oper Error : Type = variants {} ; -- the empty type
+ oper Float : Type = variants {} ; -- the type of floats
+ oper Int : Type = variants {} ; -- the type of integers
+ oper Ints : Int -> PType = variants {} ; -- the type of integers from 0 to n
+
+ oper error : Str -> Error = variants {} ; -- forms error message
+ oper length : Tok -> Int = variants {} ; -- length of string
+ oper drop : Int -> Tok -> Tok = variants {} ; -- drop prefix of length
+ oper take : Int -> Tok -> Tok = variants {} ; -- take prefix of length
+ oper tk : Int -> Tok -> Tok = variants {} ; -- drop suffix of length
+ oper dp : Int -> Tok -> Tok = variants {} ; -- take suffix of length
+ oper eqInt : Int -> Int -> PBool = variants {} ; -- test if equal integers
+ oper lessInt: Int -> Int -> PBool = variants {} ; -- test order of integers
+ oper plus : Int -> Int -> Int = variants {} ; -- add integers
+ oper eqStr : Tok -> Tok -> PBool = variants {} ; -- test if equal strings
+ oper occur : Tok -> Tok -> PBool = variants {} ; -- test if occurs as substring
+ oper occurs : Tok -> Tok -> PBool = variants {} ; -- test if any char occurs
+ oper isUpper : Tok -> PBool = variants {} ; -- test if all chars are upper-case
+ oper toUpper : Tok -> Tok = variants {} ; -- map all chars to upper case
+ oper toLower : Tok -> Tok = variants {} ; -- map all chars to lower case
+ oper show : (P : Type) -> P -> Tok = variants {} ; -- convert param to string
+ oper read : (P : Type) -> Tok -> P = variants {} ; -- convert string to param
+ oper eqVal : (P : Type) -> P -> P -> PBool = variants {} ; -- test if equal values
+ oper toStr : (L : Type) -> L -> Str = variants {} ; -- find the "first" string
+ oper mapStr : (L : Type) -> (Str -> Str) -> L -> L = variants {} ;
+ -- map all strings in a data structure; experimental ---
+
+ oper nonExist : Str = variants {} ; -- a placeholder for non-existant morphological forms
+ oper BIND : Str = variants {} ; -- a token for gluing
+ oper SOFT_BIND : Str = variants {} ; -- a token for soft gluing
+ oper SOFT_SPACE : Str = variants {} ; -- a token for soft space
+ oper CAPIT : Str = variants {} ; -- a token for capitalization
+ oper ALL_CAPIT : Str = variants {} ; -- a token for capitalization of abreviations
+
+} ;
diff --git a/testsuite/compiler/check/lincat-types/test.gfs.gold b/testsuite/compiler/check/lincat-types/test.gfs.gold
index 7e95ec7af..2e14e89e6 100644
--- a/testsuite/compiler/check/lincat-types/test.gfs.gold
+++ b/testsuite/compiler/check/lincat-types/test.gfs.gold
@@ -1,7 +1,9 @@
-testsuite/compiler/check/lincat-types/TestCnc.gf:3:
- Happened in linearization type of S
- type of PTrue
- expected: Type
- inferred: PBool
+testsuite/compiler/check/lincat-types/TestCnc.gf:
+ testsuite/compiler/check/lincat-types/TestCnc.gf:3:
+ Happened in linearization type of S
+ type of PTrue
+ expected: Type
+ inferred: Predef.PBool
+
diff --git a/testsuite/compiler/check/lins/lins.gfs.gold b/testsuite/compiler/check/lins/lins.gfs.gold
index 149912bde..798c91e43 100644
--- a/testsuite/compiler/check/lins/lins.gfs.gold
+++ b/testsuite/compiler/check/lins/lins.gfs.gold
@@ -1,39 +1,41 @@
-checking module linsCnc
- Warning: no linearization type for C, inserting default {s : Str}
- Warning: no linearization of test
-abstract lins {
- cat C Nat ;
- cat Float ;
- cat Int ;
- cat Nat ;
- cat String ;
- fun test : C zero ;
- fun zero : Nat ;
-}
-concrete linsCnc {
- productions
- C1 -> F2[]
- lindefs
- C0 -> F0
- C1 -> F1
- lin
- F0 := (S0) [lindef C]
- F1 := () [lindef Nat]
- F2 := () [zero]
- sequences
- S0 := {0,0}
- categories
- C := range [C0 .. C0]
- labels ["s"]
- Float := range [CFloat .. CFloat]
- labels ["s"]
- Int := range [CInt .. CInt]
- labels ["s"]
- Nat := range [C1 .. C1]
- labels []
- String := range [CString .. CString]
- labels ["s"]
- __gfVar := range [CVar .. CVar]
- labels [""]
- printnames
-}
+abstract lins {
+ cat C Nat ;
+ cat Float ;
+ cat Int ;
+ cat Nat ;
+ cat String ;
+ fun test : C zero ;
+ fun zero : Nat ;
+}
+concrete linsCnc {
+ productions
+ C1 -> F4[]
+ lindefs
+ C0 -> F0[CVar]
+ C1 -> F2[CVar]
+ linrefs
+ CVar -> F1[C0]
+ CVar -> F3[C1]
+ lin
+ F0 := (S2) ['lindef C']
+ F1 := (S1) ['lindef C']
+ F2 := () ['lindef Nat']
+ F3 := (S0) ['lindef Nat']
+ F4 := () [zero]
+ sequences
+ S0 :=
+ S1 := <0,0>
+ S2 := {0,0}
+ categories
+ C := range [C0 .. C0]
+ labels ["s"]
+ Float := range [CFloat .. CFloat]
+ labels ["s"]
+ Int := range [CInt .. CInt]
+ labels ["s"]
+ Nat := range [C1 .. C1]
+ labels []
+ String := range [CString .. CString]
+ labels ["s"]
+ printnames
+}
diff --git a/testsuite/compiler/check/oper-definition/test.gfs.gold b/testsuite/compiler/check/oper-definition/test.gfs.gold
index 240819c74..373ef17bd 100644
--- a/testsuite/compiler/check/oper-definition/test.gfs.gold
+++ b/testsuite/compiler/check/oper-definition/test.gfs.gold
@@ -1,5 +1,6 @@
-testsuite/compiler/check/oper-definition/Res.gf:3:
- Happened in operation my_oper
- No definition given to the operation
+testsuite/compiler/check/oper-definition/Res.gf:
+ testsuite/compiler/check/oper-definition/Res.gf:3:
+ Happened in operation my_oper
+ No definition given to the operation
diff --git a/testsuite/compiler/check/strMatch/Prelude.gf b/testsuite/compiler/check/strMatch/Prelude.gf
new file mode 100644
index 000000000..1c5b50354
--- /dev/null
+++ b/testsuite/compiler/check/strMatch/Prelude.gf
@@ -0,0 +1,161 @@
+--1 The GF Prelude
+
+-- This file defines some prelude facilities usable in all grammars.
+
+resource Prelude = Predef[nonExist, BIND, SOFT_BIND, SOFT_SPACE, CAPIT, ALL_CAPIT] ** open (Predef=Predef) in {
+
+oper
+
+--2 Strings, records, and tables
+
+ SS : Type = {s : Str} ;
+ ss : Str -> SS = \s -> {s = s} ;
+ ss2 : (_,_ : Str) -> SS = \x,y -> ss (x ++ y) ;
+ ss3 : (_,_ ,_: Str) -> SS = \x,y,z -> ss (x ++ y ++ z) ;
+
+ cc2 : (_,_ : SS) -> SS = \x,y -> ss (x.s ++ y.s) ;
+ cc3 : (_,_,_ : SS) -> SS = \x,y,z -> ss (x.s ++ y.s ++ z.s) ;
+
+ SS1 : PType -> Type = \P -> {s : P => Str} ;
+ ss1 : (A : PType) -> Str -> SS1 A = \A,s -> {s = table {_ => s}} ;
+
+ SP1 : Type -> Type = \P -> {s : Str ; p : P} ;
+ sp1 : (A : Type) -> Str -> A -> SP1 A = \_,s,a -> {s = s ; p = a} ;
+
+ constTable : (A : PType) -> (B : Type) -> B -> A => B = \u,v,b -> \\_ => b ;
+ constStr : (A : PType) -> Str -> A => Str = \A -> constTable A Str ;
+
+-- Discontinuous constituents.
+
+ SD2 : Type = {s1,s2 : Str} ;
+ sd2 : (_,_ : Str) -> SD2 = \x,y -> {s1 = x ; s2 = y} ;
+
+
+--2 Optional elements
+
+-- Optional string with preference on the string vs. empty.
+
+ optStr : Str -> Str = \s -> variants {s ; []} ;
+ strOpt : Str -> Str = \s -> variants {[] ; s} ;
+
+-- Free order between two strings.
+
+ bothWays : Str -> Str -> Str = \x,y -> variants {x ++ y ; y ++ x} ;
+
+-- Parametric order between two strings.
+
+ preOrPost : Bool -> Str -> Str -> Str = \pr,x,y ->
+ if_then_Str pr (x ++ y) (y ++ x) ;
+
+--2 Infixes. prefixes, and postfixes
+
+-- Fixes with precedences are defined in [Precedence Precedence.html].
+
+ infixSS : Str -> SS -> SS -> SS = \f,x,y -> ss (x.s ++ f ++ y.s) ;
+ prefixSS : Str -> SS -> SS = \f,x -> ss (f ++ x.s) ;
+ postfixSS : Str -> SS -> SS = \f,x -> ss (x.s ++ f) ;
+ embedSS : Str -> Str -> SS -> SS = \f,g,x -> ss (f ++ x.s ++ g) ;
+
+
+--2 Booleans
+
+ param Bool = False | True ;
+
+oper
+ if_then_else : (A : Type) -> Bool -> A -> A -> A = \_,c,d,e ->
+ case c of {
+ True => d ; ---- should not need to qualify
+ False => e
+ } ;
+
+ andB : (_,_ : Bool) -> Bool = \a,b -> if_then_else Bool a b False ;
+ orB : (_,_ : Bool) -> Bool = \a,b -> if_then_else Bool a True b ;
+ notB : Bool -> Bool = \a -> if_then_else Bool a False True ;
+
+ if_then_Str : Bool -> Str -> Str -> Str = if_then_else Str ;
+
+ onlyIf : Bool -> Str -> Str = \b,s -> case b of {
+ True => s ;
+ _ => nonExist
+ } ;
+
+-- Interface to internal booleans
+
+ pbool2bool : Predef.PBool -> Bool = \b -> case b of {
+ Predef.PFalse => False ; Predef.PTrue => True
+ } ;
+
+ init : Tok -> Tok = Predef.tk 1 ;
+ last : Tok -> Tok = Predef.dp 1 ;
+
+--2 High-level acces to Predef operations
+
+ isNil : Tok -> Bool = \b -> pbool2bool (Predef.eqStr [] b) ;
+
+ ifTok : (A : Type) -> Tok -> Tok -> A -> A -> A = \A,t,u,a,b ->
+ case Predef.eqStr t u of {Predef.PTrue => a ; Predef.PFalse => b} ;
+
+--2 Lexer-related operations
+
+-- Bind together two tokens in some lexers, either obligatorily or optionally
+
+ oper
+ glue : Str -> Str -> Str = \x,y -> x ++ BIND ++ y ;
+ glueOpt : Str -> Str -> Str = \x,y -> variants {glue x y ; x ++ y} ;
+ noglueOpt : Str -> Str -> Str = \x,y -> variants {x ++ y ; glue x y} ;
+
+-- Force capitalization of next word in some unlexers
+
+ capitalize : Str -> Str = \s -> CAPIT ++ s ;
+
+-- These should be hidden, and never changed since they are hardcoded in (un)lexers
+
+ PARA : Str = "&-" ;
+
+-- Embed between commas, where the latter one disappears in front of other punctuation
+
+ embedInCommas : Str -> Str = \s -> bindComma ++ s ++ endComma ;
+ endComma : Str = pre {"," | "." => []; "" => bindComma ; _ => []} ;
+
+ bindComma : Str = SOFT_BIND ++ "," ;
+ optComma : Str = bindComma | [] ;
+ optCommaSS : SS -> SS = \s -> ss (s.s ++ optComma) ;
+
+--2 Miscellaneous
+
+-- Identity function
+
+ id : (A : Type) -> A -> A = \_,a -> a ;
+
+-- Parentheses
+
+ paren : Str -> Str = \s -> "(" ++ s ++ ")" ;
+ parenss : SS -> SS = \s -> ss (paren s.s) ;
+
+-- Zero, one, two, or more (elements in a list etc)
+
+param
+ ENumber = E0 | E1 | E2 | Emore ;
+
+oper
+ eNext : ENumber -> ENumber = \e -> case e of {
+ E0 => E1 ; E1 => E2 ; _ => Emore} ;
+
+-- convert initial to upper/lower
+
+ toUpperFirst : Str -> Str = \s -> case s of {
+ x@? + xs => Predef.toUpper x + xs ;
+ _ => s
+ } ;
+
+ toLowerFirst : Str -> Str = \s -> case s of {
+ x@? + xs => Predef.toLower x + xs ;
+ _ => s
+ } ;
+
+-- handling errors caused by temporarily missing definitions
+
+ notYet : Str -> Predef.Error = \s ->
+ Predef.error ("NOT YET IMPLEMENTED:" ++ s) ;
+
+}
diff --git a/testsuite/compiler/check/strMatch/strMatch.gfs.gold b/testsuite/compiler/check/strMatch/strMatch.gfs.gold
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/testsuite/compiler/check/strMatch/strMatch.gfs.gold
@@ -0,0 +1 @@
+
diff --git a/testsuite/compiler/params/params.gfs.gold b/testsuite/compiler/params/params.gfs.gold
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testsuite/compiler/params/params.gfs.gold
diff --git a/testsuite/compiler/typecheck/abstract/LetInDefAbs.gfs.gold b/testsuite/compiler/typecheck/abstract/LetInDefAbs.gfs.gold
new file mode 100644
index 000000000..e4613af56
--- /dev/null
+++ b/testsuite/compiler/typecheck/abstract/LetInDefAbs.gfs.gold
@@ -0,0 +1,15 @@
+fun f : Int -> Int ;
+def f n = ? ;
+000 CHECK_ARGS 1
+ ALLOC 2
+ PUT_CLOSURE 001
+ SET_PAD
+ TUCK hp(0) 1
+ EVAL f tail(0)
+001 ALLOC 2
+ PUT_LIT 0
+ PUSH_FRAME
+ PUSH hp(0)
+ EVAL f update
+Probability: 1.0
+
diff --git a/testsuite/compiler/typecheck/abstract/LetInTypesAbs.gfs.gold b/testsuite/compiler/typecheck/abstract/LetInTypesAbs.gfs.gold
index 588b1643d..bbd381681 100644
--- a/testsuite/compiler/typecheck/abstract/LetInTypesAbs.gfs.gold
+++ b/testsuite/compiler/typecheck/abstract/LetInTypesAbs.gfs.gold
@@ -1 +1,3 @@
-fun f : (Int -> Int) -> Int -> Int
+fun f : (Int -> Int) -> Int -> Int ;
+Probability: 1.0
+
diff --git a/testsuite/compiler/typecheck/abstract/LitAbs.gf b/testsuite/compiler/typecheck/abstract/LitAbs.gf
index 03f850232..08230b8cf 100644
--- a/testsuite/compiler/typecheck/abstract/LitAbs.gf
+++ b/testsuite/compiler/typecheck/abstract/LitAbs.gf
@@ -5,7 +5,7 @@ cat CStr String ;
CFloat Float ;
data empty : CStr "" ;
- null : CStr [] ;
+ -- null : CStr [] ; -- Commented out by IL 06/2021: causes parse error
other : CStr "other" ;
data zero : CInt 0 ;
diff --git a/testsuite/compiler/typecheck/abstract/LitAbs.gfs b/testsuite/compiler/typecheck/abstract/LitAbs.gfs
index ce10daa20..71c4cca29 100644
--- a/testsuite/compiler/typecheck/abstract/LitAbs.gfs
+++ b/testsuite/compiler/typecheck/abstract/LitAbs.gfs
@@ -1,5 +1,4 @@
i -src testsuite/compiler/typecheck/abstract/LitAbs.gf
-ai null
ai empty
ai other
ai zero
diff --git a/testsuite/compiler/typecheck/abstract/LitAbs.gfs.gold b/testsuite/compiler/typecheck/abstract/LitAbs.gfs.gold
index 83dda9094..2d1e93979 100644
--- a/testsuite/compiler/typecheck/abstract/LitAbs.gfs.gold
+++ b/testsuite/compiler/typecheck/abstract/LitAbs.gfs.gold
@@ -1,5 +1,12 @@
-data null : CStr ""
-data empty : CStr ""
-data other : CStr "other"
-data zero : CInt 0
-data pi : CFloat 3.14
+data empty : CStr "" ;
+Probability: 0.5
+
+data other : CStr "other" ;
+Probability: 0.5
+
+data zero : CInt 0 ;
+Probability: 1.0
+
+data pi : CFloat 3.14 ;
+Probability: 1.0
+
diff --git a/testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs b/testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs
index 0b07b7ed4..1edc94e02 100644
--- a/testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs
+++ b/testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs
@@ -1,2 +1,5 @@
i -src testsuite/compiler/typecheck/abstract/PolyTypes.gf
-i -src testsuite/compiler/typecheck/abstract/RecTypes.gf \ No newline at end of file
+ai f
+
+i -src testsuite/compiler/typecheck/abstract/RecTypes.gf
+ai f \ No newline at end of file
diff --git a/testsuite/compiler/typecheck/abstract/test_A.gfs.gold b/testsuite/compiler/typecheck/abstract/test_A.gfs.gold
index 821a4da2c..d99a5ec08 100644
--- a/testsuite/compiler/typecheck/abstract/test_A.gfs.gold
+++ b/testsuite/compiler/typecheck/abstract/test_A.gfs.gold
@@ -1,5 +1,6 @@
-testsuite/compiler/typecheck/abstract/A.gf:4:
- Happened in the category B
- Prod expected for function A instead of Type
+testsuite/compiler/typecheck/abstract/A.gf:
+ testsuite/compiler/typecheck/abstract/A.gf:4:
+ Happened in the category B
+ Prod expected for function A instead of Type
diff --git a/testsuite/compiler/typecheck/abstract/test_B.gfs.gold b/testsuite/compiler/typecheck/abstract/test_B.gfs.gold
index 1355ff7c5..3c923c6de 100644
--- a/testsuite/compiler/typecheck/abstract/test_B.gfs.gold
+++ b/testsuite/compiler/typecheck/abstract/test_B.gfs.gold
@@ -1,5 +1,6 @@
-testsuite/compiler/typecheck/abstract/B.gf:5:
- Happened in the type of function f
- Prod expected for function S instead of Type
+testsuite/compiler/typecheck/abstract/B.gf:
+ testsuite/compiler/typecheck/abstract/B.gf:5:
+ Happened in the type of function f
+ Prod expected for function S instead of Type
diff --git a/testsuite/compiler/typecheck/abstract/test_C.gfs.gold b/testsuite/compiler/typecheck/abstract/test_C.gfs.gold
index d055b11cd..d86aeda8b 100644
--- a/testsuite/compiler/typecheck/abstract/test_C.gfs.gold
+++ b/testsuite/compiler/typecheck/abstract/test_C.gfs.gold
@@ -1,5 +1,6 @@
-testsuite/compiler/typecheck/abstract/C.gf:6:
- Happened in the definition of function f
- {Int <> S}
+testsuite/compiler/typecheck/abstract/C.gf:
+ testsuite/compiler/typecheck/abstract/C.gf:6:
+ Happened in the definition of function f
+ {Int <> S}
diff --git a/testsuite/compiler/typecheck/concrete/test_A.gfs.gold b/testsuite/compiler/typecheck/concrete/test_A.gfs.gold
index 1bd4dffab..19b66a865 100644
--- a/testsuite/compiler/typecheck/concrete/test_A.gfs.gold
+++ b/testsuite/compiler/typecheck/concrete/test_A.gfs.gold
@@ -1,5 +1,9 @@
-testsuite/compiler/typecheck/concrete/A.gf:5:
- Happened in operation silly
- A function type is expected for a_Det instead of type Str
+testsuite/compiler/typecheck/concrete/A.gf:
+ testsuite/compiler/typecheck/concrete/A.gf:5:
+ Happened in operation silly
+ A function type is expected for a_Det instead of type Str
+
+ ** Maybe you gave too many arguments to a_Det
+
diff --git a/testsuite/libraries/exx-resource.gfs b/testsuite/libraries/exx-resource.gfs
deleted file mode 100644
index 31163a1bd..000000000
--- a/testsuite/libraries/exx-resource.gfs
+++ /dev/null
@@ -1,226 +0,0 @@
-se utf8
-i alltenses/LangEng.gfo
-i alltenses/LangSwe.gfo
-i alltenses/LangBul.gfo
--- Adjective
-
-l -treebank PositA warm_A
-l -treebank ComparA warm_A (UsePron i_Pron)
-l -treebank ComplA2 married_A2 (UsePron she_Pron)
-l -treebank ComplA2 married_A2 (DetNP (DetQuant (PossPron she_Pron) NumPl))
-l -treebank ComplA2 married_A2 (DetNP (DetQuant (PossPron she_Pron) NumSg))
-l -treebank ReflA2 married_A2
-l -treebank PositA (UseA2 married_A2)
-l -treebank SentAP (PositA good_A) (EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseComp (CompAdv here_Adv)))))
-l -treebank AdAP very_AdA (PositA warm_A)
-
-
--- Adverb
-
-l -treebank PositAdvAdj warm_A
-l -treebank PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N))
-l -treebank ComparAdvAdj more_CAdv warm_A (UsePN john_PN)
-l -treebank ComparAdvAdjS more_CAdv warm_A (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV run_V)))
-l -treebank SubjS when_Subj (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))
-l -treebank AdNum (AdnCAdv more_CAdv) (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))
-
-
--- Conjunction
-
-l -treebank ConjS and_Conj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV walk_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-l -treebank ConjAP and_Conj (BaseAP (PositA cold_A) (PositA warm_A))
-l -treebank ConjNP or_Conj (BaseNP (UsePron she_Pron) (UsePron we_Pron))
-l -treebank ConjAdv or_Conj (BaseAdv here_Adv there_Adv)
-l -treebank ConjS either7or_DConj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV walk_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-l -treebank ConjAP both7and_DConj (BaseAP (PositA warm_A) (PositA cold_A))
-l -treebank ConjNP either7or_DConj (BaseNP (UsePron he_Pron) (UsePron she_Pron))
-l -treebank ConjAdv both7and_DConj (BaseAdv here_Adv there_Adv)
-
--- Idiom
-
-l -treebank ImpersCl (UseComp (CompAP (PositA hot_A)))
-l -treebank GenericCl (UseV sleep_V)
-l -treebank CleftNP (UsePron i_Pron) (UseRCl (TTAnt TPast ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a do_V2) (UsePron it_Pron))))
-l -treebank CleftAdv here_Adv (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))
-l -treebank ExistNP (DetCN (DetQuant IndefArt NumSg) (UseN house_N))
-l -treebank ExistIP (IdetCN (IdetQuant which_IQuant NumPl) (UseN house_N))
-l -treebank PredVP (UsePron i_Pron) (ProgrVP (UseV sleep_V))
-l -treebank ImpPl1 (UseV go_V)
-
--- Noun
-
-l -treebank DetCN (DetQuant DefArt NumSg) (UseN man_N)
-l -treebank UsePN john_PN
-l -treebank UsePron he_Pron
-l -treebank PredetNP only_Predet (DetCN (DetQuant DefArt NumSg) (UseN man_N))
-l -treebank PPartNP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) see_V2
-l -treebank AdvNP (UsePN paris_PN) today_Adv
-l -treebank RelNP (UsePN paris_PN) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseComp (CompAdv here_Adv))))
-l -treebank DetNP (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))))
-l -treebank DetCN (DetQuantOrd this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))) (OrdSuperl good_A)) (UseN man_N)
-l -treebank DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN man_N)
-l -treebank DetCN (DetQuant this_Quant NumPl) (UseN man_N)
-l -treebank DetCN (DetQuant this_Quant NumSg) (UseN man_N)
-l -treebank NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))
-l -treebank NumCard (NumDigits (IIDig D_5 (IDig D_1)))
-l -treebank NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1plus n5 pot01)))))
-l -treebank NumCard (AdNum almost_AdN (NumDigits (IIDig D_5 (IDig D_1))))
-l -treebank OrdDigits (IIDig D_5 (IDig D_1))
-l -treebank OrdNumeral (num (pot2as3 (pot1as2 (pot1plus n5 pot01))))
-l -treebank OrdSuperl warm_A
-l -treebank DetCN (DetQuantOrd DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))) (OrdSuperl good_A)) (UseN man_N)
-l -treebank DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN man_N)
-l -treebank DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01))))))) (UseN man_N)
-l -treebank DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01))))))) (UseN man_N)
-l -treebank DetCN (DetQuant DefArt NumSg) (UseN man_N)
-l -treebank DetCN (DetQuant DefArt NumPl) (UseN man_N)
-l -treebank MassNP (UseN beer_N)
-l -treebank DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN house_N)
-l -treebank UseN house_N
-l -treebank ComplN2 mother_N2 (DetCN (DetQuant DefArt NumSg) (UseN king_N))
-l -treebank ComplN2 (ComplN3 distance_N3 (DetCN (DetQuant this_Quant NumSg) (UseN city_N))) (UsePN paris_PN)
-l -treebank UseN2 mother_N2
-l -treebank ComplN2 (Use2N3 distance_N3) (DetCN (DetQuant this_Quant NumSg) (UseN city_N))
-l -treebank ComplN2 (Use3N3 distance_N3) (UsePN paris_PN)
-l -treebank UseN2 (Use2N3 distance_N3)
-l -treebank AdjCN (PositA big_A) (UseN house_N)
-l -treebank RelCN (UseN house_N) (UseRCl (TTAnt TPast ASimul) PPos (RelSlash IdRP (SlashVP (UsePN john_PN) (SlashV2a buy_V2))))
-l -treebank AdvCN (UseN house_N) (PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN hill_N)))
-l -treebank SentCN (UseN question_N) (EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestIAdv where_IAdv (PredVP (UsePron she_Pron) (UseV sleep_V)))))
-l -treebank DetCN (DetQuant DefArt NumSg) (ApposCN (UseN city_N) (UsePN paris_PN))
-l -treebank DetCN (DetQuant (PossPron i_Pron) NumSg) (ApposCN (UseN friend_N) (UsePN john_PN))
-
--- Numeral
-
-l -treebank num (pot2as3 (pot1as2 (pot0as1 (pot0 n6))))
-l -treebank num (pot2as3 (pot1as2 (pot0as1 pot01)))
-l -treebank num (pot2as3 (pot1as2 (pot1 n6)))
-l -treebank num (pot2as3 (pot1as2 pot110))
-l -treebank num (pot2as3 (pot1as2 pot111))
-l -treebank num (pot2as3 (pot1as2 (pot1to19 n6)))
-l -treebank num (pot2as3 (pot1as2 (pot1 n6)))
-l -treebank num (pot2as3 (pot1as2 (pot1plus n6 (pot0 n5))))
-l -treebank num (pot2as3 (pot2 (pot0 n4)))
-l -treebank num (pot2as3 (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))))
-l -treebank num (pot3 (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))))
-l -treebank num (pot3plus (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))) (pot1as2 (pot1plus n8 (pot0 n9))))
-l -treebank IDig D_8
-l -treebank IIDig D_8 (IIDig D_0 (IIDig D_0 (IIDig D_1 (IIDig D_7 (IIDig D_8 (IDig D_9))))))
-
-
--- Phrase
-
-l -treebank PhrUtt but_PConj (UttImpSg PPos (ImpVP (AdvVP (UseV come_V) here_Adv))) (VocNP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN friend_N)))
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (UseV walk_V)))) NoVoc
-l -treebank UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron it_Pron) (UseComp (CompAP (PositA good_A))))))
-l -treebank UttImpSg PNeg (ImpVP (ReflVP (SlashV2a love_V2)))
-l -treebank UttImpPl PNeg (ImpVP (ReflVP (SlashV2a love_V2)))
-l -treebank UttImpPol PNeg (ImpVP (UseV sleep_V))
-l -treebank UttIP whoPl_IP
-l -treebank UttIP whoSg_IP
-l -treebank UttIAdv why_IAdv
-l -treebank UttNP (DetCN (DetQuant this_Quant NumSg) (UseN man_N))
-l -treebank UttAdv here_Adv
-l -treebank UttVP (UseV sleep_V)
-l -treebank VocNP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN friend_N))
-
-
--- Question
-
-l -treebank QuestCl (PredVP (UsePN john_PN) (UseV walk_V))
-l -treebank QuestVP whoSg_IP (UseV walk_V)
-l -treebank QuestSlash whoSg_IP (SlashVP (UsePN john_PN) (SlashV2a love_V2))
-l -treebank QuestIAdv why_IAdv (PredVP (UsePN john_PN) (UseV walk_V))
-l -treebank QuestIComp (CompIAdv where_IAdv) (UsePN john_PN)
-l -treebank IdetCN (IdetQuant which_IQuant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN song_N)
-l -treebank IdetIP (IdetQuant which_IQuant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))))
-l -treebank AdvIP whoSg_IP (PrepNP in_Prep (UsePN paris_PN))
-l -treebank IdetIP (IdetQuant which_IQuant NumSg)
-l -treebank PrepIP with_Prep whoSg_IP
-l -treebank QuestIComp (CompIAdv where_IAdv) (UsePron it_Pron)
-l -treebank QuestIComp (CompIP whoSg_IP) (UsePron it_Pron)
-
-
--- Relative
-
-l -treebank ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelCl (PredVP (UsePN john_PN) (ComplSlash (SlashV2a love_V2) (UsePron she_Pron)))))))
-l -treebank ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a love_V2) (UsePN john_PN))))))
-l -treebank ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePN john_PN) (SlashV2a love_V2))))))
-l -treebank ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash (FunRP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN2 mother_N2)) IdRP) (SlashVP (UsePN john_PN) (SlashV2a love_V2))))))
-
--- Sentence
-
-l -treebank PredVP (UsePN john_PN) (UseV walk_V)
-l -treebank PredSCVP (EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV go_V)))) (UseComp (CompAP (PositA good_A)))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron he_Pron) (SlashV2a see_V2))))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (AdvSlash (SlashVP (UsePron he_Pron) (SlashV2a see_V2)) today_Adv)))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashPrep (PredVP (UsePron he_Pron) (UseV walk_V)) with_Prep)))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVS (UsePron she_Pron) say_VS (UseSlash (TTAnt TPres ASimul) PPos (SlashVP (UsePron he_Pron) (SlashV2a love_V2))))))
-l -treebank ImpVP (ReflVP (SlashV2a love_V2))
-l -treebank EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV go_V)))
-l -treebank EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestVP whoSg_IP (UseV go_V)))
-l -treebank EmbedVP (UseV go_V)
-l -treebank UseCl (TTAnt TCond AAnter) PNeg (PredVP (UsePN john_PN) (UseV walk_V))
-l -treebank UseQCl (TTAnt TCond AAnter) PNeg (QuestCl (PredVP (UsePN john_PN) (UseV walk_V)))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TCond AAnter) PNeg (RelVP IdRP (UseV walk_V)))
-l -treebank RelCN (UseN girl_N) (UseRCl (TTAnt TCond AAnter) PNeg (RelSlash IdRP (SlashPrep (PredVP (UsePron i_Pron) (UseV walk_V)) with_Prep)))
-l -treebank RelS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseComp (CompAP (PositA good_A)))))
-
-
--- Text
-
-l -treebank TEmpty
-l -treebank TFullStop (PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (UseV walk_V)))) NoVoc) TEmpty
-l -treebank TQuestMark (PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron they_Pron) (UseComp (CompAdv here_Adv)))))) NoVoc) TEmpty
-l -treebank TExclMark (PhrUtt NoPConj (ImpPl1 (UseV go_V)) NoVoc) TEmpty
-
--- Verb
-
-l -treebank PredVP (UsePron i_Pron) (UseV sleep_V)
-l -treebank PredVP (UsePron i_Pron) (ComplVV want_VV (UseV run_V))
-l -treebank PredVP (UsePron i_Pron) (ComplVS say_VS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-l -treebank PredVP (UsePron i_Pron) (ComplVQ wonder_VQ (UseQCl (TTAnt TPres ASimul) PPos (QuestVP whoSg_IP (UseV run_V))))
-l -treebank PredVP (UsePron they_Pron) (ComplVA become_VA (PositA red_A))
-l -treebank PredVP (UsePron i_Pron) (ComplSlash (Slash3V3 give_V3 (UsePron he_Pron)) (UsePron it_Pron))
-l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2V beg_V2V (UseV go_V)) (UsePron she_Pron))
-l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2S answer_V2S (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron it_Pron) (UseComp (CompAP (PositA good_A)))))) (UsePron he_Pron))
-l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2Q ask_V2Q (UseQCl (TTAnt TPast ASimul) PPos (QuestVP whoSg_IP (UseV come_V)))) (UsePron he_Pron))
-l -treebank PredVP (UsePron i_Pron) (ComplSlash (SlashV2A paint_V2A (PositA red_A)) (UsePron it_Pron))
-l -treebank RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron i_Pron) (SlashVV want_VV (SlashV2a buy_V2)))))
-l -treebank RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron they_Pron) (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashV2a buy_V2)))))
-l -treebank PredVP (UsePron he_Pron) (ReflVP (SlashV2a love_V2))
-l -treebank PredVP (DetNP (DetQuant this_Quant NumSg)) (UseComp (CompAP (PositA warm_A)))
-l -treebank PredVP (UsePron we_Pron) (PassV2 love_V2)
-l -treebank PredVP (UsePron we_Pron) (AdvVP (UseV sleep_V) here_Adv)
-l -treebank PredVP (UsePron we_Pron) (AdVVP always_AdV (UseV sleep_V))
-l -treebank PredVP (UsePron we_Pron) (UseComp (CompAP (PositA small_A)))
-l -treebank PredVP (UsePron i_Pron) (UseComp (CompNP (DetCN (DetQuant IndefArt NumSg) (UseN man_N))))
-l -treebank PredVP (UsePron i_Pron) (UseComp (CompAdv here_Adv))
-
-
-
--- Janna's and Krasimir's long examples
-
-l -treebank RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron they_Pron) (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashVV want_VV (SlashV2A paint_V2A (PositA red_A)))))))
-l -treebank PhrUtt NoPConj (UttImpSg PPos (ImpVP (AdVVP always_AdV (ComplSlash (SlashV2a listen_V2) (DetCN (DetQuant DefArt NumSg) (UseN sea_N)))))) NoVoc
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (ExistNP (PredetNP only_Predet (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (AdvCN (RelCN (UseN woman_N) (UseRCl (TTAnt TCond ASimul) PPos (RelSlash IdRP (SlashPrep (PredVP (UsePron i_Pron) (ComplVV want_VV (PassV2 see_V2))) with_Prep)))) (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN rain_N))))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttImpSg PPos (ImpVP (ComplSlash (SlashV2A paint_V2A (ConjAP both7and_DConj (BaseAP (ComparA small_A (DetCN (DetQuant DefArt NumSg) (UseN sun_N))) (ComparA big_A (DetCN (DetQuant DefArt NumSg) (UseN moon_N)))))) (DetCN (DetQuant DefArt NumSg) (UseN earth_N))))) NoVoc
-l -treebank PhrUtt NoPConj (ImpPl1 (ComplVS hope_VS (ConjS either7or_DConj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (ComplN2 father_N2 (DetCN (DetQuant DefArt NumSg) (UseN baby_N)))) (UseV run_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN2 (Use2N3 distance_N3))) (UseComp (CompAP (PositA small_A))))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN every_Det (UseN baby_N)) (UseComp (CompNP (ConjNP either7or_DConj (BaseNP (DetCN (DetQuant IndefArt NumSg) (UseN boy_N)) (DetCN (DetQuant IndefArt NumSg) (UseN girl_N))))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttAdv (ConjAdv either7or_DConj (ConsAdv here7from_Adv (BaseAdv there_Adv everywhere_Adv)))) NoVoc
-l -treebank PhrUtt NoPConj (UttVP (PassV2 know_V2)) NoVoc
-l -treebank RelCN (UseN bird_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron i_Pron) (SlashVV want_VV (SlashV2A paint_V2A (PositA red_A))))))
-l -treebank UttImpSg PPos (ImpVP (ComplVV want_VV (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron))))
-l -treebank UttImpSg PPos (ImpVP (ComplVV want_VV (ComplSlash (SlashV2A paint_V2A (PositA red_A)) (UsePron it_Pron))))
-l -treebank UttImpSg PPos (ImpVP (ComplSlash (SlashVV want_VV (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashV2a buy_V2))) (UsePron it_Pron)))
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (UseN fruit_N)) (ReflVP (Slash3V3 sell_V3 (DetCN (DetQuant DefArt NumSg) (UseN road_N))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2V beg_V2V (UseV live_V)))))) NoVoc
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2S answer_V2S (UseCl (TTAnt TPres ASimul) PPos (ImpersCl (ComplVV must_VV (ReflVP (SlashV2a understand_V2)))))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttImpSg PPos (ImpVP (ReflVP (SlashV2Q ask_V2Q (UseQCl (TTAnt TPast ASimul) PPos (QuestVP whoSg_IP (UseV come_V))))))) NoVoc
-l -treebank PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2A paint_V2A (ComparA beautiful_A (UsePN john_PN))))))) NoVoc
-
--- more long examples
-
-l -treebank UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant this_Quant NumSg) (UseN grammar_N)) (ComplSlash (SlashV2a speak_V2) (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1to19 n2))))))) (UseN language_N)))))
-l -treebank UseCl (TTAnt TPast AAnter) PPos (PredVP (UsePron she_Pron) (ComplSlash (SlashV2a buy_V2) (DetCN (DetQuant IndefArt NumSg) (AdjCN (PositA red_A) (UseN house_N)))))
-
diff --git a/testsuite/libraries/exx-resource.gfs.gold b/testsuite/libraries/exx-resource.gfs.gold
deleted file mode 100644
index b9cec44d5..000000000
--- a/testsuite/libraries/exx-resource.gfs.gold
+++ /dev/null
@@ -1,1032 +0,0 @@
-Lang: PositA warm_A
-LangEng: warm
-LangSwe: varm
-LangBul: топъл
-
-
-Lang: ComparA warm_A (UsePron i_Pron)
-LangEng: warmer than I
-LangSwe: varmare än jag
-LangBul: по - топъл от мен
-
-
-Lang: ComplA2 married_A2 (UsePron she_Pron)
-LangEng: married to her
-LangSwe: gift med henne
-LangBul: женен за нея
-
-
-Lang: ComplA2 married_A2 (DetNP (DetQuant (PossPron she_Pron) NumPl))
-LangEng: married to hers
-LangSwe: gift med hennes
-LangBul: женен за нейните
-
-
-Lang: ComplA2 married_A2 (DetNP (DetQuant (PossPron she_Pron) NumSg))
-LangEng: married to hers
-LangSwe: gift med hennes
-LangBul: женен за нейното
-
-
-Lang: ReflA2 married_A2
-LangEng: married to myself
-LangSwe: gift med sig
-LangBul: женен за себе си
-
-
-Lang: PositA (UseA2 married_A2)
-LangEng: married
-LangSwe: gift
-LangBul: женен
-
-
-Lang: SentAP (PositA good_A) (EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseComp (CompAdv here_Adv)))))
-LangEng: good that she is here
-LangSwe: god att hon är här
-LangBul: добър , че тя е тук
-
-
-Lang: AdAP very_AdA (PositA warm_A)
-LangEng: very warm
-LangSwe: mycket varm
-LangBul: много топъл
-
-
-Lang: PositAdvAdj warm_A
-LangEng: warmly
-LangSwe: varmt
-LangBul: топло
-
-
-Lang: PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N))
-LangEng: in the house
-LangSwe: i huset
-LangBul: в къщата
-
-
-Lang: ComparAdvAdj more_CAdv warm_A (UsePN john_PN)
-LangEng: more warmly than John
-LangSwe: mer varmt än Johan
-LangBul: по - топло от Джон
-
-
-Lang: ComparAdvAdjS more_CAdv warm_A (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV run_V)))
-LangEng: more warmly than he runs
-LangSwe: mer varmt än han springer
-LangBul: по - топло от колкото той бяга
-
-
-Lang: SubjS when_Subj (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))
-LangEng: when she sleeps
-LangSwe: när hon sover
-LangBul: когато тя спи
-
-
-Lang: AdNum (AdnCAdv more_CAdv) (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))
-LangEng: more than five
-LangSwe: mer än fem
-LangBul: повече от пет
-
-
-Lang: ConjS and_Conj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV walk_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-LangEng: he walks and she runs
-LangSwe: han går och hon springer
-LangBul: той ходи и тя бяга
-
-
-Lang: ConjAP and_Conj (BaseAP (PositA cold_A) (PositA warm_A))
-LangEng: cold and warm
-LangSwe: kall och varm
-LangBul: студен и топъл
-
-
-Lang: ConjNP or_Conj (BaseNP (UsePron she_Pron) (UsePron we_Pron))
-LangEng: she or we
-LangSwe: hon eller vi
-LangBul: тя или ние
-
-
-Lang: ConjAdv or_Conj (BaseAdv here_Adv there_Adv)
-LangEng: here or there
-LangSwe: här eller där
-LangBul: тук или там
-
-
-Lang: ConjS either7or_DConj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseV walk_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-LangEng: either he walks or she runs
-LangSwe: antingen han går eller hon springer
-LangBul: или той ходи или тя бяга
-
-
-Lang: ConjAP both7and_DConj (BaseAP (PositA warm_A) (PositA cold_A))
-LangEng: both warm and cold
-LangSwe: både varm och kall
-LangBul: и топъл и студен
-
-
-Lang: ConjNP either7or_DConj (BaseNP (UsePron he_Pron) (UsePron she_Pron))
-LangEng: either he or she
-LangSwe: antingen han eller hon
-LangBul: или той или тя
-
-
-Lang: ConjAdv both7and_DConj (BaseAdv here_Adv there_Adv)
-LangEng: both here and there
-LangSwe: både här och där
-LangBul: и тук и там
-
-
-Lang: ImpersCl (UseComp (CompAP (PositA hot_A)))
-LangEng: it is hot
-LangSwe: det är hett
-LangBul: е горещо
-
-
-Lang: GenericCl (UseV sleep_V)
-LangEng: one sleeps
-LangSwe: man sover
-LangBul: някой спи
-
-
-Lang: CleftNP (UsePron i_Pron) (UseRCl (TTAnt TPast ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a do_V2) (UsePron it_Pron))))
-LangEng: it is I who did it
-LangSwe: det är jag som gjorde det
-LangBul: аз съм този който направих него
-
-
-Lang: CleftAdv here_Adv (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))
-LangEng: it is here that she slept
-LangSwe: det är här hon sov
-LangBul: тук тя спа
-
-
-Lang: ExistNP (DetCN (DetQuant IndefArt NumSg) (UseN house_N))
-LangEng: there is a house
-LangSwe: det finns ett hus
-LangBul: има къща
-
-
-Lang: ExistIP (IdetCN (IdetQuant which_IQuant NumPl) (UseN house_N))
-LangEng: which houses are there
-LangSwe: vilka hus finns det
-LangBul: кои къщи са тук
-
-
-Lang: PredVP (UsePron i_Pron) (ProgrVP (UseV sleep_V))
-LangEng: I am sleeping
-LangSwe: jag håller på att sova
-LangBul: аз спя
-
-
-Lang: ImpPl1 (UseV go_V)
-LangEng: let's go
-LangSwe: låt oss gå
-LangBul: нека да отидем
-
-
-Lang: DetCN (DetQuant DefArt NumSg) (UseN man_N)
-LangEng: the man
-LangSwe: mannen
-LangBul: мъжът
-
-
-Lang: UsePN john_PN
-LangEng: John
-LangSwe: Johan
-LangBul: Джон
-
-
-Lang: UsePron he_Pron
-LangEng: he
-LangSwe: han
-LangBul: той
-
-
-Lang: PredetNP only_Predet (DetCN (DetQuant DefArt NumSg) (UseN man_N))
-LangEng: only the man
-LangSwe: bara mannen
-LangBul: само мъжът
-
-
-Lang: PPartNP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) see_V2
-LangEng: the man seen
-LangSwe: mannen sedd
-LangBul: мъжът видян
-
-
-Lang: AdvNP (UsePN paris_PN) today_Adv
-LangEng: Paris today
-LangSwe: Paris idag
-LangBul: Париж днес
-
-
-Lang: RelNP (UsePN paris_PN) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseComp (CompAdv here_Adv))))
-LangEng: Paris , which is here
-LangSwe: Paris , som är här
-LangBul: Париж който е тук
-
-
-Lang: DetNP (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))))
-LangEng: these five
-LangSwe: de här fem
-LangBul: тези пет
-
-
-Lang: DetCN (DetQuantOrd this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))) (OrdSuperl good_A)) (UseN man_N)
-LangEng: these five best men
-LangSwe: de här fem bästa männen
-LangBul: тези петима най - добри мъже
-
-
-Lang: DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN man_N)
-LangEng: these five men
-LangSwe: de här fem männen
-LangBul: тези петима мъже
-
-
-Lang: DetCN (DetQuant this_Quant NumPl) (UseN man_N)
-LangEng: these men
-LangSwe: de här männen
-LangBul: тези мъже
-
-
-Lang: DetCN (DetQuant this_Quant NumSg) (UseN man_N)
-LangEng: this man
-LangSwe: den här mannen
-LangBul: този мъж
-
-
-Lang: NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))
-LangEng: five
-LangSwe: fem
-LangBul: пет
-
-
-Lang: NumCard (NumDigits (IIDig D_5 (IDig D_1)))
-LangEng: 5 1
-LangSwe: 5 1
-LangBul: 5 1
-
-
-Lang: NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1plus n5 pot01)))))
-LangEng: fifty - one
-LangSwe: femtio en
-LangBul: петдесет и един
-
-
-Lang: NumCard (AdNum almost_AdN (NumDigits (IIDig D_5 (IDig D_1))))
-LangEng: almost 5 1
-LangSwe: nästan 5 1
-LangBul: почти 5 1
-
-
-Lang: OrdDigits (IIDig D_5 (IDig D_1))
-LangEng: 5 1st
-LangSwe: 5 1:a
-LangBul: 5 1ви
-
-
-Lang: OrdNumeral (num (pot2as3 (pot1as2 (pot1plus n5 pot01))))
-LangEng: fifty - first
-LangSwe: femtio första
-LangBul: петдесет и първи
-
-
-Lang: OrdSuperl warm_A
-LangEng: warmest
-LangSwe: varmaste
-LangBul: най - топъл
-
-
-Lang: DetCN (DetQuantOrd DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))) (OrdSuperl good_A)) (UseN man_N)
-LangEng: the five best men
-LangSwe: de fem bästa männen
-LangBul: петимата най - добри мъже
-
-
-Lang: DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN man_N)
-LangEng: the five men
-LangSwe: de fem männen
-LangBul: петимата мъже
-
-
-Lang: DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01))))))) (UseN man_N)
-LangEng: one man
-LangSwe: en man
-LangBul: един мъж
-
-
-Lang: DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01))))))) (UseN man_N)
-LangEng: the one man
-LangSwe: den en mannen
-LangBul: единият мъж
-
-
-Lang: DetCN (DetQuant DefArt NumSg) (UseN man_N)
-LangEng: the man
-LangSwe: mannen
-LangBul: мъжът
-
-
-Lang: DetCN (DetQuant DefArt NumPl) (UseN man_N)
-LangEng: the men
-LangSwe: männen
-LangBul: мъжете
-
-
-Lang: MassNP (UseN beer_N)
-LangEng: beer
-LangSwe: öl
-LangBul: бира
-
-
-Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN house_N)
-LangEng: my house
-LangSwe: mitt hus
-LangBul: моята къща
-
-
-Lang: UseN house_N
-LangEng: house
-LangSwe: hus
-LangBul: къща
-
-
-Lang: ComplN2 mother_N2 (DetCN (DetQuant DefArt NumSg) (UseN king_N))
-LangEng: mother of the king
-LangSwe: mor till kungen
-LangBul: майка на царя
-
-
-Lang: ComplN2 (ComplN3 distance_N3 (DetCN (DetQuant this_Quant NumSg) (UseN city_N))) (UsePN paris_PN)
-LangEng: distance from this city to Paris
-LangSwe: avstånd från den här staden till Paris
-LangBul: разстояние от този град до Париж
-
-
-Lang: UseN2 mother_N2
-LangEng: mother
-LangSwe: mor
-LangBul: майка
-
-
-Lang: ComplN2 (Use2N3 distance_N3) (DetCN (DetQuant this_Quant NumSg) (UseN city_N))
-LangEng: distance from this city
-LangSwe: avstånd från den här staden
-LangBul: разстояние от този град
-
-
-Lang: ComplN2 (Use3N3 distance_N3) (UsePN paris_PN)
-LangEng: distance to Paris
-LangSwe: avstånd till Paris
-LangBul: разстояние до Париж
-
-
-Lang: UseN2 (Use2N3 distance_N3)
-LangEng: distance
-LangSwe: avstånd
-LangBul: разстояние
-
-
-Lang: AdjCN (PositA big_A) (UseN house_N)
-LangEng: big house
-LangSwe: stort hus
-LangBul: голяма къща
-
-
-Lang: RelCN (UseN house_N) (UseRCl (TTAnt TPast ASimul) PPos (RelSlash IdRP (SlashVP (UsePN john_PN) (SlashV2a buy_V2))))
-LangEng: house which John bought
-LangSwe: hus som Johan köpte
-LangBul: къща която Джон купи
-
-
-Lang: AdvCN (UseN house_N) (PrepNP on_Prep (DetCN (DetQuant DefArt NumSg) (UseN hill_N)))
-LangEng: house on the hill
-LangSwe: hus på kullen
-LangBul: къща на хълма
-
-
-Lang: SentCN (UseN question_N) (EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestIAdv where_IAdv (PredVP (UsePron she_Pron) (UseV sleep_V)))))
-LangEng: question where she sleeps
-LangSwe: fråga var hon sover
-LangBul: въпрос където тя спи
-
-
-Lang: DetCN (DetQuant DefArt NumSg) (ApposCN (UseN city_N) (UsePN paris_PN))
-LangEng: the city Paris
-LangSwe: staden Paris
-LangBul: градът Париж
-
-
-Lang: DetCN (DetQuant (PossPron i_Pron) NumSg) (ApposCN (UseN friend_N) (UsePN john_PN))
-LangEng: my friend John
-LangSwe: min vän Johan
-LangBul: моят приятел Джон
-
-
-Lang: num (pot2as3 (pot1as2 (pot0as1 (pot0 n6))))
-LangEng: six
-LangSwe: sex
-LangBul: шест
-
-
-Lang: num (pot2as3 (pot1as2 (pot0as1 pot01)))
-LangEng: one
-LangSwe: en
-LangBul: един
-
-
-Lang: num (pot2as3 (pot1as2 (pot1 n6)))
-LangEng: sixty
-LangSwe: sextio
-LangBul: шестдесет
-
-
-Lang: num (pot2as3 (pot1as2 pot110))
-LangEng: ten
-LangSwe: tio
-LangBul: десет
-
-
-Lang: num (pot2as3 (pot1as2 pot111))
-LangEng: eleven
-LangSwe: elva
-LangBul: единадесет
-
-
-Lang: num (pot2as3 (pot1as2 (pot1to19 n6)))
-LangEng: sixteen
-LangSwe: sexton
-LangBul: шестнадесет
-
-
-Lang: num (pot2as3 (pot1as2 (pot1 n6)))
-LangEng: sixty
-LangSwe: sextio
-LangBul: шестдесет
-
-
-Lang: num (pot2as3 (pot1as2 (pot1plus n6 (pot0 n5))))
-LangEng: sixty - five
-LangSwe: sextio fem
-LangBul: шестдесет и пет
-
-
-Lang: num (pot2as3 (pot2 (pot0 n4)))
-LangEng: four hundred
-LangSwe: fyra hundra
-LangBul: четиристотин
-
-
-Lang: num (pot2as3 (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))))
-LangEng: four hundred and sixty - seven
-LangSwe: fyra hundra sextio sju
-LangBul: четиристотин шестдесет и седем
-
-
-Lang: num (pot3 (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))))
-LangEng: four hundred and sixty - seven thousand
-LangSwe: fyra hundra sextio sju tusen
-LangBul: четиристотин шестдесет и седем хиляди
-
-
-Lang: num (pot3plus (pot2plus (pot0 n4) (pot1plus n6 (pot0 n7))) (pot1as2 (pot1plus n8 (pot0 n9))))
-LangEng: four hundred and sixty - seven thousand eighty - nine
-LangSwe: fyra hundra sextio sju tusen åttio nio
-LangBul: четиристотин шестдесет и седем хиляди осемдесет и девет
-
-
-Lang: IDig D_8
-LangEng: 8
-LangSwe: 8
-LangBul: 8
-
-
-Lang: IIDig D_8 (IIDig D_0 (IIDig D_0 (IIDig D_1 (IIDig D_7 (IIDig D_8 (IDig D_9))))))
-LangEng: 8 , 0 0 1 , 7 8 9
-LangSwe: 8 0 0 1 7 8 9
-LangBul: 8 , 0 0 1 , 7 8 9
-
-
-Lang: PhrUtt but_PConj (UttImpSg PPos (ImpVP (AdvVP (UseV come_V) here_Adv))) (VocNP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN friend_N)))
-LangEng: but come here , my friend
-LangSwe: men kom här , min vän
-LangBul: но ела тук , мой приятелю
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (UseV walk_V)))) NoVoc
-LangEng: John walks
-LangSwe: Johan går
-LangBul: Джон ходи
-
-
-Lang: UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron it_Pron) (UseComp (CompAP (PositA good_A))))))
-LangEng: is it good
-LangSwe: är det gott
-LangBul: то е ли добро
-
-
-Lang: UttImpSg PNeg (ImpVP (ReflVP (SlashV2a love_V2)))
-LangEng: don't love yourself
-LangSwe: älska inte dig
-LangBul: не се обичай
-
-
-Lang: UttImpPl PNeg (ImpVP (ReflVP (SlashV2a love_V2)))
-LangEng: don't love yourselves
-LangSwe: älska inte er
-LangBul: не се обичайте
-
-
-Lang: UttImpPol PNeg (ImpVP (UseV sleep_V))
-LangEng: don't sleep
-LangSwe: sov inte
-LangBul: не спете
-
-
-Lang: UttIP whoPl_IP
-LangEng: who
-LangSwe: vilka
-LangBul: кои
-
-
-Lang: UttIP whoSg_IP
-LangEng: who
-LangSwe: vem
-LangBul: кой
-
-
-Lang: UttIAdv why_IAdv
-LangEng: why
-LangSwe: varför
-LangBul: защо
-
-
-Lang: UttNP (DetCN (DetQuant this_Quant NumSg) (UseN man_N))
-LangEng: this man
-LangSwe: den här mannen
-LangBul: този мъж
-
-
-Lang: UttAdv here_Adv
-LangEng: here
-LangSwe: här
-LangBul: тук
-
-
-Lang: UttVP (UseV sleep_V)
-LangEng: to sleep
-LangSwe: att sova
-LangBul: да спи
-
-
-Lang: VocNP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN friend_N))
-LangEng: , my friend
-LangSwe: , min vän
-LangBul: , мой приятелю
-
-
-Lang: QuestCl (PredVP (UsePN john_PN) (UseV walk_V))
-LangEng: does John walk
-LangSwe: går Johan
-LangBul: Джон ходи ли
-
-
-Lang: QuestVP whoSg_IP (UseV walk_V)
-LangEng: who walks
-LangSwe: vem går
-LangBul: кой ходи
-
-
-Lang: QuestSlash whoSg_IP (SlashVP (UsePN john_PN) (SlashV2a love_V2))
-LangEng: whom does John love
-LangSwe: vem älskar Johan
-LangBul: кого обича Джон
-
-
-Lang: QuestIAdv why_IAdv (PredVP (UsePN john_PN) (UseV walk_V))
-LangEng: why does John walk
-LangSwe: varför går Johan
-LangBul: защо ходи Джон
-
-
-Lang: QuestIComp (CompIAdv where_IAdv) (UsePN john_PN)
-LangEng: where is John
-LangSwe: var är Johan
-LangBul: къде е Джон
-
-
-Lang: IdetCN (IdetQuant which_IQuant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5)))))))) (UseN song_N)
-LangEng: which five songs
-LangSwe: vilka fem sånger
-LangBul: кои пет песни
-
-
-Lang: IdetIP (IdetQuant which_IQuant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))))))
-LangEng: which five
-LangSwe: vilka fem
-LangBul: кои пет
-
-
-Lang: AdvIP whoSg_IP (PrepNP in_Prep (UsePN paris_PN))
-LangEng: who in Paris
-LangSwe: vem i Paris
-LangBul: кой в Париж
-
-
-Lang: IdetIP (IdetQuant which_IQuant NumSg)
-LangEng: which
-LangSwe: vilket
-LangBul: кое
-
-
-Lang: PrepIP with_Prep whoSg_IP
-LangEng: with whom
-LangSwe: med vem
-LangBul: с кой
-
-
-Lang: QuestIComp (CompIAdv where_IAdv) (UsePron it_Pron)
-LangEng: where is it
-LangSwe: var är det
-LangBul: къде е то
-
-
-Lang: QuestIComp (CompIP whoSg_IP) (UsePron it_Pron)
-LangEng: who is it
-LangSwe: vem är det
-LangBul: кой е то
-
-
-Lang: ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelCl (PredVP (UsePN john_PN) (ComplSlash (SlashV2a love_V2) (UsePron she_Pron)))))))
-LangEng: there is a woman such that John loves her
-LangSwe: det finns en kvinna sådan att Johan älskar henne
-LangBul: има жена такава че Джон обича нея
-
-
-Lang: ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a love_V2) (UsePN john_PN))))))
-LangEng: there is a woman who loves John
-LangSwe: det finns en kvinna som älskar Johan
-LangBul: има жена която обича Джон
-
-
-Lang: ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePN john_PN) (SlashV2a love_V2))))))
-LangEng: there is a woman whom John loves
-LangSwe: det finns en kvinna som Johan älskar
-LangBul: има жена която Джон обича
-
-
-Lang: ExistNP (DetCN (DetQuant IndefArt NumSg) (RelCN (UseN woman_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash (FunRP possess_Prep (DetCN (DetQuant DefArt NumSg) (UseN2 mother_N2)) IdRP) (SlashVP (UsePN john_PN) (SlashV2a love_V2))))))
-LangEng: there is a woman the mother of whom John loves
-LangSwe: det finns en kvinna modern av vilken Johan älskar
-LangBul: има жена майката на която Джон обича
-
-
-Lang: PredVP (UsePN john_PN) (UseV walk_V)
-LangEng: John walks
-LangSwe: Johan går
-LangBul: Джон ходи
-
-
-Lang: PredSCVP (EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV go_V)))) (UseComp (CompAP (PositA good_A)))
-LangEng: that she goes is good
-LangSwe: att hon går är gott
-LangBul: , че тя отива е добър
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron he_Pron) (SlashV2a see_V2))))
-LangEng: girl whom he sees
-LangSwe: flicka som han ser
-LangBul: момиче което той вижда
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (AdvSlash (SlashVP (UsePron he_Pron) (SlashV2a see_V2)) today_Adv)))
-LangEng: girl whom he sees today
-LangSwe: flicka som han ser idag
-LangBul: момиче което той вижда днес
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashPrep (PredVP (UsePron he_Pron) (UseV walk_V)) with_Prep)))
-LangEng: girl with whom he walks
-LangSwe: flicka med vilken han går
-LangBul: момиче с което той ходи
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVS (UsePron she_Pron) say_VS (UseSlash (TTAnt TPres ASimul) PPos (SlashVP (UsePron he_Pron) (SlashV2a love_V2))))))
-LangEng: girl whom she says that he loves
-LangSwe: flicka som hon säger att han älskar
-LangBul: момиче което тя казва че той обича
-
-
-Lang: ImpVP (ReflVP (SlashV2a love_V2))
-LangEng: love yourself
-LangSwe: älska dig
-LangBul: обичай се
-
-
-Lang: EmbedS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV go_V)))
-LangEng: that she goes
-LangSwe: att hon går
-LangBul: , че тя отива
-
-
-Lang: EmbedQS (UseQCl (TTAnt TPres ASimul) PPos (QuestVP whoSg_IP (UseV go_V)))
-LangEng: who goes
-LangSwe: vem som går
-LangBul: който отива
-
-
-Lang: EmbedVP (UseV go_V)
-LangEng: to go
-LangSwe: att gå
-LangBul: да отида
-
-
-Lang: UseCl (TTAnt TCond AAnter) PNeg (PredVP (UsePN john_PN) (UseV walk_V))
-LangEng: John wouldn't have walked
-LangSwe: Johan skulle inte ha gått
-LangBul: Джон не би ходил
-
-
-Lang: UseQCl (TTAnt TCond AAnter) PNeg (QuestCl (PredVP (UsePN john_PN) (UseV walk_V)))
-LangEng: wouldn't John have walked
-LangSwe: skulle Johan inte ha gått
-LangBul: Джон не би ли ходил
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TCond AAnter) PNeg (RelVP IdRP (UseV walk_V)))
-LangEng: girl who wouldn't have walked
-LangSwe: flicka som inte skulle ha gått
-LangBul: момиче което не би ходило
-
-
-Lang: RelCN (UseN girl_N) (UseRCl (TTAnt TCond AAnter) PNeg (RelSlash IdRP (SlashPrep (PredVP (UsePron i_Pron) (UseV walk_V)) with_Prep)))
-LangEng: girl with whom I wouldn't have walked
-LangSwe: flicka med vilken jag inte skulle ha gått
-LangBul: момиче с което аз не бих ходил
-
-
-Lang: RelS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseComp (CompAP (PositA good_A)))))
-LangEng: she sleeps , which is good
-LangSwe: hon sover , som är gott
-LangBul: тя спи , което е добро
-
-
-Lang: TEmpty
-LangEng:
-LangSwe:
-LangBul:
-
-
-Lang: TFullStop (PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (UseV walk_V)))) NoVoc) TEmpty
-LangEng: John walks .
-LangSwe: Johan går .
-LangBul: Джон ходи .
-
-
-Lang: TQuestMark (PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron they_Pron) (UseComp (CompAdv here_Adv)))))) NoVoc) TEmpty
-LangEng: are they here ?
-LangSwe: är de här ?
-LangBul: те са ли тук ?
-
-
-Lang: TExclMark (PhrUtt NoPConj (ImpPl1 (UseV go_V)) NoVoc) TEmpty
-LangEng: let's go !
-LangSwe: låt oss gå !
-LangBul: нека да отидем !
-
-
-Lang: PredVP (UsePron i_Pron) (UseV sleep_V)
-LangEng: I sleep
-LangSwe: jag sover
-LangBul: аз спя
-
-
-Lang: PredVP (UsePron i_Pron) (ComplVV want_VV (UseV run_V))
-LangEng: I want to run
-LangSwe: jag vill springa
-LangBul: аз искам да бягам
-
-
-Lang: PredVP (UsePron i_Pron) (ComplVS say_VS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron she_Pron) (UseV run_V))))
-LangEng: I say that she runs
-LangSwe: jag säger att hon springer
-LangBul: аз казвам , че тя бяга
-
-
-Lang: PredVP (UsePron i_Pron) (ComplVQ wonder_VQ (UseQCl (TTAnt TPres ASimul) PPos (QuestVP whoSg_IP (UseV run_V))))
-LangEng: I wonder who runs
-LangSwe: jag undrar vem som springer
-LangBul: аз се учудвам кой бяга
-
-
-Lang: PredVP (UsePron they_Pron) (ComplVA become_VA (PositA red_A))
-LangEng: they become red
-LangSwe: de blir röda
-LangBul: те стават червени
-
-
-Lang: PredVP (UsePron i_Pron) (ComplSlash (Slash3V3 give_V3 (UsePron he_Pron)) (UsePron it_Pron))
-LangEng: I give it to him
-LangSwe: jag ger det till honom
-LangBul: аз давам него му
-
-
-Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2V beg_V2V (UseV go_V)) (UsePron she_Pron))
-LangEng: I beg her to go
-LangSwe: jag ber henne att gå
-LangBul: аз моля нея да отиде
-
-
-Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2S answer_V2S (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron it_Pron) (UseComp (CompAP (PositA good_A)))))) (UsePron he_Pron))
-LangEng: I answer to him that it is good
-LangSwe: jag svarar till honom att det är gott
-LangBul: аз отговарям му , че то е добро
-
-
-Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2Q ask_V2Q (UseQCl (TTAnt TPast ASimul) PPos (QuestVP whoSg_IP (UseV come_V)))) (UsePron he_Pron))
-LangEng: I ask him who came
-LangSwe: jag frågar honom vem som kom
-LangBul: аз питам него кой дойде
-
-
-Lang: PredVP (UsePron i_Pron) (ComplSlash (SlashV2A paint_V2A (PositA red_A)) (UsePron it_Pron))
-LangEng: I paint it red
-LangSwe: jag målar det rött
-LangBul: аз рисувам него червено
-
-
-Lang: RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron i_Pron) (SlashVV want_VV (SlashV2a buy_V2)))))
-LangEng: car which I want to buy
-LangSwe: bil som jag vill köpa
-LangBul: кола която аз искам да купя
-
-
-Lang: RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron they_Pron) (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashV2a buy_V2)))))
-LangEng: car which they beg me to buy
-LangSwe: bil som de ber mig att köpa
-LangBul: кола която те молят мен да купя
-
-
-Lang: PredVP (UsePron he_Pron) (ReflVP (SlashV2a love_V2))
-LangEng: he loves himself
-LangSwe: han älskar sig
-LangBul: той се обича
-
-
-Lang: PredVP (DetNP (DetQuant this_Quant NumSg)) (UseComp (CompAP (PositA warm_A)))
-LangEng: this is warm
-LangSwe: det här är varmt
-LangBul: това е топло
-
-
-Lang: PredVP (UsePron we_Pron) (PassV2 love_V2)
-LangEng: we are loved
-LangSwe: vi blir älskade
-LangBul: ние сме обичани
-
-
-Lang: PredVP (UsePron we_Pron) (AdvVP (UseV sleep_V) here_Adv)
-LangEng: we sleep here
-LangSwe: vi sover här
-LangBul: ние спим тук
-
-
-Lang: PredVP (UsePron we_Pron) (AdVVP always_AdV (UseV sleep_V))
-LangEng: we always sleep
-LangSwe: vi sover alltid
-LangBul: ние винаги спим
-
-
-Lang: PredVP (UsePron we_Pron) (UseComp (CompAP (PositA small_A)))
-LangEng: we are small
-LangSwe: vi är små
-LangBul: ние сме малки
-
-
-Lang: PredVP (UsePron i_Pron) (UseComp (CompNP (DetCN (DetQuant IndefArt NumSg) (UseN man_N))))
-LangEng: I am a man
-LangSwe: jag är en man
-LangBul: аз съм мъж
-
-
-Lang: PredVP (UsePron i_Pron) (UseComp (CompAdv here_Adv))
-LangEng: I am here
-LangSwe: jag är här
-LangBul: аз съм тук
-
-
-Lang: RelCN (UseN car_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron they_Pron) (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashVV want_VV (SlashV2A paint_V2A (PositA red_A)))))))
-LangEng: car which they beg me to want to paint red
-LangSwe: bil som de ber mig att vilja måla röd
-LangBul: кола която те молят мен да искам да нарисувам червена
-
-
-Lang: PhrUtt NoPConj (UttImpSg PPos (ImpVP (AdVVP always_AdV (ComplSlash (SlashV2a listen_V2) (DetCN (DetQuant DefArt NumSg) (UseN sea_N)))))) NoVoc
-LangEng: always listen to the sea
-LangSwe: lyssna alltid på havet
-LangBul: винаги слушай морето
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (ExistNP (PredetNP only_Predet (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (AdvCN (RelCN (UseN woman_N) (UseRCl (TTAnt TCond ASimul) PPos (RelSlash IdRP (SlashPrep (PredVP (UsePron i_Pron) (ComplVV want_VV (PassV2 see_V2))) with_Prep)))) (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN rain_N))))))))) NoVoc
-LangEng: there are only two women with whom I would want to be seen in the rain
-LangSwe: det finns bara två kvinnor med vilka jag skulle vilja bli sedd i regnet
-LangBul: има само две жени с които аз бих искал да съм видян в дъжда
-
-
-Lang: PhrUtt NoPConj (UttImpSg PPos (ImpVP (ComplSlash (SlashV2A paint_V2A (ConjAP both7and_DConj (BaseAP (ComparA small_A (DetCN (DetQuant DefArt NumSg) (UseN sun_N))) (ComparA big_A (DetCN (DetQuant DefArt NumSg) (UseN moon_N)))))) (DetCN (DetQuant DefArt NumSg) (UseN earth_N))))) NoVoc
-LangEng: paint the earth both smaller than the sun and bigger than the moon
-LangSwe: måla jorden både mindre än solen och större än månen
-LangBul: нарисувай земята и по - малка от слънцето и по - голяма от луната
-
-
-Lang: PhrUtt NoPConj (ImpPl1 (ComplVS hope_VS (ConjS either7or_DConj (BaseS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (ComplN2 father_N2 (DetCN (DetQuant DefArt NumSg) (UseN baby_N)))) (UseV run_V))) (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN2 (Use2N3 distance_N3))) (UseComp (CompAP (PositA small_A))))))))) NoVoc
-LangEng: let's hope that either the father of the baby runs or the distance is small
-LangSwe: låt oss hoppas att antingen fadern till bebisen springer eller avståndet är litet
-LangBul: нека да се надяваме , че или бащата на бебето бяга или разстоянието е малко
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN every_Det (UseN baby_N)) (UseComp (CompNP (ConjNP either7or_DConj (BaseNP (DetCN (DetQuant IndefArt NumSg) (UseN boy_N)) (DetCN (DetQuant IndefArt NumSg) (UseN girl_N))))))))) NoVoc
-LangEng: every baby is either a boy or a girl
-LangSwe: varje bebis är antingen en pojke eller en flicka
-LangBul: всяко бебе е или момче или момиче
-
-
-Lang: PhrUtt NoPConj (UttAdv (ConjAdv either7or_DConj (ConsAdv here7from_Adv (BaseAdv there_Adv everywhere_Adv)))) NoVoc
-LangEng: either from here , there or everywhere
-LangSwe: antingen härifrån , där eller överallt
-LangBul: или от тук или там или навсякъде
-
-
-Lang: PhrUtt NoPConj (UttVP (PassV2 know_V2)) NoVoc
-LangEng: to be known
-LangSwe: att bli kännd
-LangBul: да е известно
-
-
-Lang: RelCN (UseN bird_N) (UseRCl (TTAnt TPres ASimul) PPos (RelSlash IdRP (SlashVP (UsePron i_Pron) (SlashVV want_VV (SlashV2A paint_V2A (PositA red_A))))))
-LangEng: bird which I want to paint red
-LangSwe: fågel som jag vill måla röd
-LangBul: птица която аз искам да нарисувам червена
-
-
-Lang: UttImpSg PPos (ImpVP (ComplVV want_VV (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron))))
-LangEng: want to buy it
-LangSwe: vilj köpa det
-LangBul: искай да купиш него
-
-
-Lang: UttImpSg PPos (ImpVP (ComplVV want_VV (ComplSlash (SlashV2A paint_V2A (PositA red_A)) (UsePron it_Pron))))
-LangEng: want to paint it red
-LangSwe: vilj måla det rött
-LangBul: искай да нарисуваш него червено
-
-
-Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashVV want_VV (SlashV2VNP beg_V2V (UsePron i_Pron) (SlashV2a buy_V2))) (UsePron it_Pron)))
-LangEng: want it to beg me to buy
-LangSwe: vilj det be mig att köpa
-LangBul: искай да молиш мен да купя него
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumPl) (UseN fruit_N)) (ReflVP (Slash3V3 sell_V3 (DetCN (DetQuant DefArt NumSg) (UseN road_N))))))) NoVoc
-LangEng: the fruits sell themselves to the road
-LangSwe: frukterna säljer sig till vägen
-LangBul: плодовете се продават на пътя
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2V beg_V2V (UseV live_V)))))) NoVoc
-LangEng: I beg myself to live
-LangSwe: jag ber mig att leva
-LangBul: аз се моля да живея
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2S answer_V2S (UseCl (TTAnt TPres ASimul) PPos (ImpersCl (ComplVV must_VV (ReflVP (SlashV2a understand_V2)))))))))) NoVoc
-LangEng: I answer to myself that it must understand itself
-LangSwe: jag svarar till mig att det måste förstå sig
-LangBul: аз си отговарям , че трябва да се разбере
-
-
-Lang: PhrUtt NoPConj (UttImpSg PPos (ImpVP (ReflVP (SlashV2Q ask_V2Q (UseQCl (TTAnt TPast ASimul) PPos (QuestVP whoSg_IP (UseV come_V))))))) NoVoc
-LangEng: ask yourself who came
-LangSwe: fråga dig vem som kom
-LangBul: питай се кой дойде
-
-
-Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron i_Pron) (ReflVP (SlashV2A paint_V2A (ComparA beautiful_A (UsePN john_PN))))))) NoVoc
-LangEng: I painted myself more beautiful than John
-LangSwe: jag målade mig vackrare än Johan
-LangBul: аз се нарисувах по - красив от Джон
-
-
-Lang: UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant this_Quant NumSg) (UseN grammar_N)) (ComplSlash (SlashV2a speak_V2) (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1to19 n2))))))) (UseN language_N)))))
-LangEng: this grammar speaks twelve languages
-LangSwe: den här grammatiken talar tolv språk
-LangBul: тази граматика говори дванадесет езика
-
-
-Lang: UseCl (TTAnt TPast AAnter) PPos (PredVP (UsePron she_Pron) (ComplSlash (SlashV2a buy_V2) (DetCN (DetQuant IndefArt NumSg) (AdjCN (PositA red_A) (UseN house_N)))))
-LangEng: she had bought a red house
-LangSwe: hon hade köpt ett rött hus
-LangBul: тя беше купилa червена къща
-
-
diff --git a/testsuite/run.hs b/testsuite/run.hs
index 6bf3c8158..f8e6bf49f 100644
--- a/testsuite/run.hs
+++ b/testsuite/run.hs
@@ -1,44 +1,35 @@
import Data.List(partition)
import System.IO
import Distribution.Simple.BuildPaths(exeExtension)
-import Distribution.System ( buildPlatform )
+import Distribution.System(buildPlatform, OS (Windows), Platform (Platform) )
import System.Process(readProcess)
import System.Directory(doesFileExist,getDirectoryContents)
import System.FilePath((</>),(<.>),takeExtension)
import System.Exit(exitSuccess,exitFailure)
-main =
+type TestResult = (FilePath, RunResult)
+type RunResult = (String, (String, String, String)) -- (message, (input commands, gold output, actual output))
+
+main :: IO ()
+main =
do res <- walk "testsuite"
let cnt = length res
(good,bad) = partition ((=="OK").fst.snd) res
- ok = length good
+ ok = length good + length (filter ((=="FAIL (expected)").fst.snd) bad)
fail = ok<cnt
putStrLn $ show ok++"/"++show cnt++ " passed/tests"
- let overview = "dist/test/gf-tests.html"
+ let overview = "gf-tests.html"
writeFile overview (toHTML bad)
- if ok<cnt
+ if ok<cnt
then do putStrLn $ overview++" contains an overview of the failed tests"
exitFailure
else exitSuccess
- where
- toHTML res =
- "<!DOCTYPE html>\n"
- ++ "<meta charset=\"UTF-8\">\n"
- ++ "<style>\n"
- ++ "pre { max-width: 600px; overflow: scroll; }\n"
- ++ "th,td { vertical-align: top; text-align: left; }\n"
- ++ "</style>\n"
- ++ "<table border=1>\n<tr><th>Result<th>Input<th>Gold<th>Output\n"
- ++ unlines (map testToHTML res)
- ++ "</table>\n"
-
- testToHTML (in_file,(res,(input,gold,output))) =
- "<tr>"++concatMap td [pre res,in_file++":\n"++pre input,pre gold,pre output]
- pre s = "<pre>"++s++"</pre>"
- td s = "<td>"++s
-
- walk path = fmap concat . mapM (walkFile . (path </>)) =<< ls path
+-- | Recurse through files in path, running a test for all .gfs files
+walk :: FilePath -> IO [TestResult]
+walk path = fmap concat . mapM (walkFile . (path </>)) =<< ls path
+ where
+ walkFile :: FilePath -> IO [TestResult]
walkFile fpath = do
exists <- doesFileExist fpath
if exists
@@ -53,27 +44,71 @@ main =
else return []
else walk fpath
- runTest in_file out_file gold_file = do
- input <- readFile in_file
- writeFile out_file =<< run_gf input
- exists <- doesFileExist gold_file
- if exists
- then do out <- compatReadFile out_file
- gold <- compatReadFile gold_file
- let info = (input,gold,out)
- return $! if out == gold then ("OK",info) else ("FAIL",info)
- else do out <- compatReadFile out_file
- return ("MISSING GOLD",(input,"",out))
- -- Avoid failures caused by Win32/Unix text file incompatibility
- compatReadFile path =
- do h <- openFile path ReadMode
- hSetNewlineMode h universalNewlineMode
- hGetContents h
+-- | Run an individual test
+runTest :: FilePath -> FilePath -> FilePath -> IO RunResult
+runTest in_file out_file gold_file = do
+ input <- readFile in_file
+ writeFile out_file =<< runGF ["-run"] input
+ exists <- doesFileExist gold_file
+ if exists
+ then do out <- compatReadFile out_file
+ gold <- compatReadFile gold_file
+ let info = (input,gold,out)
+ if in_file `elem` expectedFailures
+ then return $! if out == gold then ("Unexpected success",info) else ("FAIL (expected)",info)
+ else return $! if out == gold then ("OK",info) else ("FAIL",info)
+ else do out <- compatReadFile out_file
+ return ("MISSING GOLD",(input,"",out))
+
+-- | Test scripts which should fail
+expectedFailures :: [String]
+expectedFailures =
+ [ "testsuite/runtime/parser/parser.gfs" -- Only parses `z` as `zero` and not also as e.g. `succ zero` as expected
+ , "testsuite/runtime/linearize/brackets.gfs" -- Missing "cannot linearize in the end"
+ , "testsuite/compiler/typecheck/abstract/non-abstract-terms.gfs" -- Gives a different error than expected
+ ]
+
+-- | Produce HTML document with test results
+toHTML :: [TestResult] -> String
+toHTML res =
+ "<!DOCTYPE html>\n"
+ ++ "<meta charset=\"UTF-8\">\n"
+ ++ "<style>\n"
+ ++ "pre { max-width: 600px; overflow: scroll; }\n"
+ ++ "th,td { vertical-align: top; text-align: left; }\n"
+ ++ "</style>\n"
+ ++ "<table border=1>\n<tr><th>Result<th>Input<th>Gold<th>Output\n"
+ ++ unlines (map testToHTML res)
+ ++ "</table>\n"
+ where
+ testToHTML (in_file,(res,(input,gold,output))) =
+ "<tr>"++concatMap td [pre res,in_file++":\n"++pre input,pre gold,pre output]
+ pre s = "<pre>"++s++"</pre>"
+ td s = "<td>"++s
+
+-- | Run commands in GF shell, returning output
+runGF
+ :: [String] -- ^ command line flags
+ -> String -- ^ standard input (shell commands)
+ -> IO String -- ^ standard output
+runGF = readProcess defaultGF
-- Should consult the Cabal configuration!
-run_gf = readProcess default_gf ["-run","-gf-lib-path="++gf_lib_path]
-default_gf = "dist/build/gf/gf"<.>exeExtension buildPlatform
-gf_lib_path = "dist/build/rgl"
+defaultGF :: FilePath
+defaultGF = "gf"<.>exeExtension
+ where
+ -- shadows Distribution.Simple.BuildPaths.exeExtension, which changed type signature in Cabal 2.4
+ exeExtension = case buildPlatform of
+ Platform arch Windows -> "exe"
+ _ -> ""
-- | List files, excluding "." and ".."
+ls :: FilePath -> IO [String]
ls path = filter (`notElem` [".",".."]) `fmap` getDirectoryContents path
+
+-- | Avoid failures caused by Win32/Unix text file incompatibility
+compatReadFile :: FilePath -> IO String
+compatReadFile path =
+ do h <- openFile path ReadMode
+ hSetNewlineMode h universalNewlineMode
+ hGetContents h
diff --git a/testsuite/runtime/linearize/brackets.gfs.gold b/testsuite/runtime/linearize/brackets.gfs.gold
index e356e6521..7337daa9d 100644
--- a/testsuite/runtime/linearize/brackets.gfs.gold
+++ b/testsuite/runtime/linearize/brackets.gfs.gold
@@ -1,28 +1,19 @@
(S:2 (E:1 (_:0 ?1)) is even)
-
(S:3 exists x such that (S:2 (E:1 (_:0 x)) is even))
-
(S:1 (E:0 a))
-
(S:1 (E:0 aa) a)
-
(S:1 (E:0 a) b)
-
(S:1 (String:0 abcd) is string)
-
(S:1 (Int:0 100) is integer)
-
(S:1 (Float:0 12.4) is float)
-
(S:1 (String:0 xyz) is string)
-
-cannot linearize
+ cannot linearize
diff --git a/testsuite/runtime/linearize/linearize.gfs.gold b/testsuite/runtime/linearize/linearize.gfs.gold
index 8a17ab506..7749644f1 100644
--- a/testsuite/runtime/linearize/linearize.gfs.gold
+++ b/testsuite/runtime/linearize/linearize.gfs.gold
@@ -1,30 +1,20 @@
?1 is even
-
exists x such that x is even
-
a
-
aa a
-
a b
-
abcd is string
-
100 is integer
-
12.4 is float
-
xyz is string
-
-