summaryrefslogtreecommitdiff
path: root/old-examples/mp3
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-06-25 16:54:35 +0000
committeraarne <aarne@cs.chalmers.se>2008-06-25 16:54:35 +0000
commite9e80fc389365e24d4300d7d5390c7d833a96c50 (patch)
treef0b58473adaa670bd8fc52ada419d8cad470ee03 /old-examples/mp3
parentb96b36f43de3e2f8b58d5f539daa6f6d47f25870 (diff)
changed names of resource-1.3; added a note on homepage on release
Diffstat (limited to 'old-examples/mp3')
-rw-r--r--old-examples/mp3/Lexicon.gf6
-rw-r--r--old-examples/mp3/LexiconEng.gf9
-rw-r--r--old-examples/mp3/LexiconFin.gf9
-rw-r--r--old-examples/mp3/LexiconFre.gf9
-rw-r--r--old-examples/mp3/LexiconGer.gf8
-rw-r--r--old-examples/mp3/LexiconSwe.gf9
-rw-r--r--old-examples/mp3/MP3.gf19
-rw-r--r--old-examples/mp3/MP3Eng.gf5
-rw-r--r--old-examples/mp3/MP3Fin.gf5
-rw-r--r--old-examples/mp3/MP3Fre.gf5
-rw-r--r--old-examples/mp3/MP3Ger.gf5
-rw-r--r--old-examples/mp3/MP3I.gf24
-rw-r--r--old-examples/mp3/MP3Swe.gf5
-rw-r--r--old-examples/mp3/mp3-resource.html117
-rw-r--r--old-examples/mp3/mp3-resource.txt90
-rw-r--r--old-examples/mp3/mp3.gfcm840
16 files changed, 1165 insertions, 0 deletions
diff --git a/old-examples/mp3/Lexicon.gf b/old-examples/mp3/Lexicon.gf
new file mode 100644
index 000000000..8d3bccaf9
--- /dev/null
+++ b/old-examples/mp3/Lexicon.gf
@@ -0,0 +1,6 @@
+interface Lexicon = open Structural in {
+
+ oper
+ play : TV ;
+ song : N ;
+}
diff --git a/old-examples/mp3/LexiconEng.gf b/old-examples/mp3/LexiconEng.gf
new file mode 100644
index 000000000..5b5861397
--- /dev/null
+++ b/old-examples/mp3/LexiconEng.gf
@@ -0,0 +1,9 @@
+instance LexiconEng of Lexicon = open StructuralEng, ParadigmsEng in {
+
+ oper
+ play = tvDir (vReg "play") ;
+ song = nReg "song" nonhuman ;
+
+ yesterday = npReg "Yesterday" ;
+
+} \ No newline at end of file
diff --git a/old-examples/mp3/LexiconFin.gf b/old-examples/mp3/LexiconFin.gf
new file mode 100644
index 000000000..757535bbf
--- /dev/null
+++ b/old-examples/mp3/LexiconFin.gf
@@ -0,0 +1,9 @@
+instance LexiconFin of Lexicon = open StructuralFin, ParadigmsFin in {
+
+ oper
+ play = tvDir (vKattaa "soittaa" "soitan") ;
+ song = nRae "kappale" "kappaleena" ;
+
+ yesterday = UsePN (mkPN (nPuu "Yesterday")) ;
+
+} \ No newline at end of file
diff --git a/old-examples/mp3/LexiconFre.gf b/old-examples/mp3/LexiconFre.gf
new file mode 100644
index 000000000..33188ca1b
--- /dev/null
+++ b/old-examples/mp3/LexiconFre.gf
@@ -0,0 +1,9 @@
+instance LexiconFre of Lexicon = open StructuralFre, ParadigmsFre in {
+
+ oper
+ play = tvDir (vAimer "jouer") ;
+ song = nReg "chanson" feminine ;
+
+ yesterday = mkNP "Yesterday" masculine ;
+
+} \ No newline at end of file
diff --git a/old-examples/mp3/LexiconGer.gf b/old-examples/mp3/LexiconGer.gf
new file mode 100644
index 000000000..729a64ac8
--- /dev/null
+++ b/old-examples/mp3/LexiconGer.gf
@@ -0,0 +1,8 @@
+instance LexiconGer of Lexicon = open StructuralGer, ParadigmsGer in {
+
+ oper
+ play = tvDir (vWeak "spielen") ;
+ song = nBuch "lied" "lieder" ;
+
+ yesterday = npReg "Yesterday" ;
+} \ No newline at end of file
diff --git a/old-examples/mp3/LexiconSwe.gf b/old-examples/mp3/LexiconSwe.gf
new file mode 100644
index 000000000..f4b17080f
--- /dev/null
+++ b/old-examples/mp3/LexiconSwe.gf
@@ -0,0 +1,9 @@
+instance LexiconSwe of Lexicon = open StructuralSwe, ParadigmsSwe in {
+
+ oper
+ play = tvDir (vKoka "spela") ;
+ song = nBil "låt" ;
+
+ yesterday = npReg "Yesterday" neutrum ;
+
+} \ No newline at end of file
diff --git a/old-examples/mp3/MP3.gf b/old-examples/mp3/MP3.gf
new file mode 100644
index 000000000..cc4dd882a
--- /dev/null
+++ b/old-examples/mp3/MP3.gf
@@ -0,0 +1,19 @@
+abstract MP3 = {
+ cat
+ Move ;
+ Song ;
+
+ fun
+ Play : Song -> Move ;
+ CanPlay : Song -> Move ;
+ WantPlay : Song -> Move ;
+ WhichPlay : Move ;
+
+ ThisSong : Song ;
+ This : Song ;
+
+ Yesterday : Song ;
+
+---- MkSong : String -> Song ;
+
+}
diff --git a/old-examples/mp3/MP3Eng.gf b/old-examples/mp3/MP3Eng.gf
new file mode 100644
index 000000000..7648c1117
--- /dev/null
+++ b/old-examples/mp3/MP3Eng.gf
@@ -0,0 +1,5 @@
+--# -path=.:resource-0.6/english:resource-0.6/abstract:prelude
+
+concrete MP3Eng of MP3 = MP3I with
+ (Structural = StructuralEng),
+ (Lexicon = LexiconEng) ;
diff --git a/old-examples/mp3/MP3Fin.gf b/old-examples/mp3/MP3Fin.gf
new file mode 100644
index 000000000..099917c18
--- /dev/null
+++ b/old-examples/mp3/MP3Fin.gf
@@ -0,0 +1,5 @@
+--# -path=.:resource-0.6/finnish:resource-0.6/abstract:prelude
+
+concrete MP3Fin of MP3 = MP3I with
+ (Structural = StructuralFin),
+ (Lexicon = LexiconFin) ;
diff --git a/old-examples/mp3/MP3Fre.gf b/old-examples/mp3/MP3Fre.gf
new file mode 100644
index 000000000..2fcd6b8f2
--- /dev/null
+++ b/old-examples/mp3/MP3Fre.gf
@@ -0,0 +1,5 @@
+--# -path=.:resource-0.6/french:resource-0.6/romance:resource-0.6/abstract:prelude
+
+concrete MP3Fre of MP3 = MP3I with
+ (Structural = StructuralFre),
+ (Lexicon = LexiconFre) ;
diff --git a/old-examples/mp3/MP3Ger.gf b/old-examples/mp3/MP3Ger.gf
new file mode 100644
index 000000000..5dfdfe19c
--- /dev/null
+++ b/old-examples/mp3/MP3Ger.gf
@@ -0,0 +1,5 @@
+--# -path=.:resource-0.6/german:resource-0.6/abstract:prelude
+
+concrete MP3Ger of MP3 = MP3I with
+ (Structural = StructuralGer),
+ (Lexicon = LexiconGer) ;
diff --git a/old-examples/mp3/MP3I.gf b/old-examples/mp3/MP3I.gf
new file mode 100644
index 000000000..ab8eb7915
--- /dev/null
+++ b/old-examples/mp3/MP3I.gf
@@ -0,0 +1,24 @@
+--# -path=.:resource-0.6/english:resource-0.6/abstract:prelude
+
+incomplete concrete MP3I of MP3 = open Structural, Lexicon in {
+
+ flags startcat=Move ;
+
+ lincat
+ Move = Phr ;
+ Song = NP ;
+
+ lin
+ Play song = ImperOne (ImperVP (PosVG (PredTV play song))) ;
+ CanPlay song = QuestPhrase (QuestVP ThouNP (PosVG (PredVV CanVV (PredTV play song)))) ;
+ WantPlay song = IndicPhrase (PredVP INP (PosVG (PredVV WantVV (PredTV play song)))) ;
+ WhichPlay = QuestPhrase (IntVP (NounIPOne (UseN song)) (PosVG (PredPassV (VTrans play)))) ;
+
+ ThisSong = DetNP ThisDet (UseN song) ;
+ This = ThisNP ;
+
+ Yesterday = yesterday ;
+
+---- MkSong : String -> Song ;
+
+}
diff --git a/old-examples/mp3/MP3Swe.gf b/old-examples/mp3/MP3Swe.gf
new file mode 100644
index 000000000..54e20171f
--- /dev/null
+++ b/old-examples/mp3/MP3Swe.gf
@@ -0,0 +1,5 @@
+--# -path=.:resource-0.6/swedish:resource-0.6/abstract:prelude
+
+concrete MP3Swe of MP3 = MP3I with
+ (Structural = StructuralSwe),
+ (Lexicon = LexiconSwe) ;
diff --git a/old-examples/mp3/mp3-resource.html b/old-examples/mp3/mp3-resource.html
new file mode 100644
index 000000000..b1125d017
--- /dev/null
+++ b/old-examples/mp3/mp3-resource.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+<META NAME="generator" CONTENT="http://txt2tags.sf.net">
+<TITLE>Using the GF resource grammar library in multilingual grammars: an example</TITLE>
+</HEAD><BODY BGCOLOR="white" TEXT="black">
+<P ALIGN="center"><CENTER><H1>Using the GF resource grammar library in multilingual grammars: an example</H1>
+<FONT SIZE="4">
+<I>Author: Aarne Ranta &lt;aarne (at) cs.chalmers.se&gt;</I><BR>
+Last update: Fri Dec 16 14:30:57 2005
+</FONT></CENTER>
+
+<P></P>
+<HR NOSHADE SIZE=1>
+<P></P>
+ <UL>
+ <LI><A HREF="#toc1">Quick try</A>
+ <LI><A HREF="#toc2">Structure</A>
+ <LI><A HREF="#toc3">Resource library version</A>
+ </UL>
+
+<P></P>
+<HR NOSHADE SIZE=1>
+<P></P>
+<P>
+This document describes the contents of the directory
+<A HREF="http://www.cs.chalmers.se/~aarne/GF/examples/mp3/"><CODE>GF/examples/mp3</CODE></A>.
+</P>
+<P>
+This directory contains a small example of a dialogue system
+grammar built by using the GF resource grammar library. Its sole
+purpose is to demonstrate this usage, i.e.
+</P>
+ <UL>
+ <LI>how the resource API is used to define concrete syntax
+ <P></P>
+ <LI>how to divide the grammar into modules
+ </UL>
+
+<P>
+Thus it is not intended to be (even a part of) a really useful
+system.
+</P>
+<A NAME="toc1"></A>
+<H2>Quick try</H2>
+<P>
+To try out the grammar, do for example
+</P>
+<PRE>
+ gf mk3.gfcm -- start GF
+
+ &gt; gr | l -multi -- random generate
+
+ &gt; p -tr "which song is played ?" | l -multi -- parse and translate
+
+ &gt; gt -tr | l -lang=MP3Swe -- generate Swedish "treebank"
+
+ &gt; si -tr | p | l -multi -- translate speech input
+ [say:] I want to play Yesterday
+</PRE>
+<P>
+The last command only works if you have installed
+<A HREF="http://mi.eng.cam.ac.uk/~sjy/software.htm">ATK</A> and compiled
+<A HREF="http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html">GF version 14/12/2005</A>
+or later.
+</P>
+<A NAME="toc2"></A>
+<H2>Structure</H2>
+<P>
+The directory consists of the following grammars:
+</P>
+<UL>
+<LI><A HREF="MP3.gf"><CODE>MP3.gf</CODE></A> the main abstract syntax
+<LI><A HREF="MP3I.gf"><CODE>MP3I.gf</CODE></A> functor implementation of the main abstract
+<LI><A HREF="MP3Eng.gf"><CODE>MP3Eng.gf</CODE></A> English instantiation of the functor
+<LI><A HREF="MP3Fin.gf"><CODE>MP3Fin.gf</CODE></A> Finnish instantiation of the functor (buggy)
+<LI><A HREF="MP3Fre.gf"><CODE>MP3Fre.gf</CODE></A> French instantiation of the functor
+<LI><A HREF="MP3Ger.gf"><CODE>MP3Ger.gf</CODE></A> German instantiation of the functor
+<LI><A HREF="MP3Swe.gf"><CODE>MP3Swe.gf</CODE></A> Swedish instantiation of the functor
+<LI><A HREF="Lexicon.gf"><CODE>Lexicon.gf</CODE></A> the interface on which <CODE>MP3I.gf</CODE> depends
+<LI><A HREF="LexiconEng.gf"><CODE>LexiconEng.gf</CODE></A> English instance of the interface
+<LI><A HREF="LexiconFin.gf"><CODE>LexiconFin.gf</CODE></A> Finnish instance of the interface
+<LI><A HREF="LexiconFre.gf"><CODE>LexiconFre.gf</CODE></A> French instance of the interface
+<LI><A HREF="LexiconGer.gf"><CODE>LexiconGer.gf</CODE></A> German instance of the interface
+<LI><A HREF="LexiconSwe.gf"><CODE>LexiconSwe.gf</CODE></A> Swedish instance of the interface
+</UL>
+
+<P>
+The main linguistic content is in the functor <CODE>MP3I</CODE> and the
+instances of the <CODE>Lexicon</CODE> interface.
+</P>
+<P>
+The way in which the implementation is divided to a functor
+and an interface depending on it should work as a model for
+building resource grammar applications in general.
+</P>
+<P>
+In order to compile the grammars from source, you must set the
+environment variable <CODE>GF_LIB_PATH</CODE> to point at the root
+of your GF library, e.g. in the bash shell,
+</P>
+<PRE>
+ export GF_LIB_PATH=/usr/local/lib/GF/
+</PRE>
+<P></P>
+<A NAME="toc3"></A>
+<H2>Resource library version</H2>
+<P>
+The example builds on resource v. 0.6. The reason for not building
+on a later version is that German is not yet implemented for them.
+The example will probably be migrated to v. 1.0 soon. The new resource
+version will fix the bugs in the Finnish implementation.
+</P>
+
+<!-- html code generated by txt2tags 2.0 (http://txt2tags.sf.net) -->
+<!-- cmdline: txt2tags -\-toc mp3-resource.txt -->
+</BODY></HTML>
diff --git a/old-examples/mp3/mp3-resource.txt b/old-examples/mp3/mp3-resource.txt
new file mode 100644
index 000000000..60c39fcb7
--- /dev/null
+++ b/old-examples/mp3/mp3-resource.txt
@@ -0,0 +1,90 @@
+Using the GF resource grammar library in multilingual grammars: an example
+Author: Aarne Ranta <aarne (at) cs.chalmers.se>
+Last update: %%date(%c)
+
+% NOTE: this is a txt2tags file.
+% Create an html file from this file using:
+% txt2tags --toc mp3-resource.txt
+
+%!target:html
+
+
+
+This document describes the contents of the directory
+[``GF/examples/mp3`` http://www.cs.chalmers.se/~aarne/GF/examples/mp3/].
+
+This directory contains a small example of a dialogue system
+grammar built by using the GF resource grammar library. Its sole
+purpose is to demonstrate this usage, i.e.
+
+ - how the resource API is used to define concrete syntax
+
+ - how to divide the grammar into modules
+
+
+Thus it is not intended to be (even a part of) a really useful
+system.
+
+
+==Quick try==
+
+To try out the grammar, do for example
+```
+ gf mk3.gfcm -- start GF
+
+ > gr | l -multi -- random generate
+
+ > p -tr "which song is played ?" | l -multi -- parse and translate
+
+ > gt -tr | l -lang=MP3Swe -- generate Swedish "treebank"
+
+ > si -tr | p | l -multi -- translate speech input
+ [say:] I want to play Yesterday
+```
+The last command only works if you have installed the
+[ATK http://mi.eng.cam.ac.uk/~sjy/software.htm] speech recognition library
+and compiled
+[GF version 14/12/2005 http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/GF/doc/darcs.html]
+or later, with support for ATK enabled.
+
+
+==Structure==
+
+The directory consists of the following grammars:
+
+- [``MP3.gf`` MP3.gf] the main abstract syntax
+- [``MP3I.gf`` MP3I.gf] functor implementation of the main abstract
+- [``MP3Eng.gf`` MP3Eng.gf] English instantiation of the functor
+- [``MP3Fin.gf`` MP3Fin.gf] Finnish instantiation of the functor (buggy)
+- [``MP3Fre.gf`` MP3Fre.gf] French instantiation of the functor
+- [``MP3Ger.gf`` MP3Ger.gf] German instantiation of the functor
+- [``MP3Swe.gf`` MP3Swe.gf] Swedish instantiation of the functor
+- [``Lexicon.gf`` Lexicon.gf] the interface on which ``MP3I.gf`` depends
+- [``LexiconEng.gf`` LexiconEng.gf] English instance of the interface
+- [``LexiconFin.gf`` LexiconFin.gf] Finnish instance of the interface
+- [``LexiconFre.gf`` LexiconFre.gf] French instance of the interface
+- [``LexiconGer.gf`` LexiconGer.gf] German instance of the interface
+- [``LexiconSwe.gf`` LexiconSwe.gf] Swedish instance of the interface
+
+
+The main linguistic content is in the functor ``MP3I`` and the
+instances of the ``Lexicon`` interface.
+
+The way in which the implementation is divided to a functor
+and an interface depending on it should work as a model for
+building resource grammar applications in general.
+
+In order to compile the grammars from source, you must set the
+environment variable ``GF_LIB_PATH`` to point at the root
+of your GF library, e.g. in the bash shell,
+
+``` export GF_LIB_PATH=/usr/local/lib/GF/
+
+
+==Resource library version==
+
+The example builds on resource v. 0.6. The reason for not building
+on a later version is that German is not yet implemented for them.
+The example will probably be migrated to v. 1.0 soon. The new resource
+version will fix the bugs in the Finnish implementation.
+
diff --git a/old-examples/mp3/mp3.gfcm b/old-examples/mp3/mp3.gfcm
new file mode 100644
index 000000000..83ea7451f
--- /dev/null
+++ b/old-examples/mp3/mp3.gfcm
@@ -0,0 +1,840 @@
+concrete MP3Eng of MP3=open StructuralEng,LexiconEng in{flags modulesize=n9;flags startcat=Move;lin CanPlay:MP3.Move=\Song@0->{s="can"++("you"++("play"++Song@0.s!<TypesEng.AccP>))++"?";lock_Phr={}};"(can you play Song_0)?";
+lincat Move={s:Str;lock_Phr:{}}={s=str@0;lock_Phr={}};"Move";
+lin Play:MP3.Move=\Song@0->{s="play"++Song@0.s!<TypesEng.AccP>++"!";lock_Phr={}};"(play Song_0)!";
+lincat Song={s:(TypesEng.NPForm=>Str);n:TypesEng.Number;p:TypesEng.Person;lock_NP:{}}={s=table TypesEng.NPForm{(TypesEng.NomP)(TypesEng.AccP)(TypesEng.GenP)(TypesEng.GenSP)=>str@0};n=<TypesEng.Sg>;p=<TypesEng.P1>;lock_NP={}};"Song";
+lin This:MP3.Song=\->{s=table TypesEng.NPForm{(TypesEng.NomP)(TypesEng.AccP)(TypesEng.GenSP)=>"this";(TypesEng.GenP)=>"this's"};n=<TypesEng.Sg>;p=<TypesEng.P3>;lock_NP={}};"this";
+lin ThisSong:MP3.Song=\->{s=table TypesEng.NPForm{(TypesEng.NomP)(TypesEng.AccP)(TypesEng.GenSP)=>"this"++"song";(TypesEng.GenP)=>"this"++"song's"};n=<TypesEng.Sg>;p=<TypesEng.P3>;lock_NP={}};"this song";
+lin WantPlay:MP3.Move=\Song@0->{s="I"++("want"++("to"++("play"++Song@0.s!<TypesEng.AccP>)))++".";lock_Phr={}};"(I want to play Song_0).";
+lin WhichPlay:MP3.Move=\->{s="which"++"song"++("is"++"played")++"?";lock_Phr={}};"((which song)is played)?";
+lin Yesterday:MP3.Song=\->{s=table TypesEng.NPForm{(TypesEng.NomP)(TypesEng.AccP)(TypesEng.GenSP)=>"Yesterday";(TypesEng.GenP)=>"Yesterday's"};n=<TypesEng.Sg>;p=<TypesEng.P3>;lock_NP={}};"Yesterday";
+}
+resource LexiconEng=open StructuralEng,ParadigmsEng in{flags modulesize=n0;}
+resource ParadigmsEng=open Predef,Prelude,SyntaxEng,ResourceEng in{flags modulesize=n0;}
+resource ResourceEng=open Prelude,SyntaxEng in{flags modulesize=n0;}
+resource SyntaxEng=MorphoEng**open Prelude,Coordination in{flags modulesize=n85;AAdj data in TypesEng;
+AAdv data in TypesEng;
+AForm data in TypesEng;
+AccP data in TypesEng;
+AdjDegr in TypesEng;
+Adjective in TypesEng;
+param Anteriority=Simul|Anter;
+Case data in TypesEng;
+CommonNoun in TypesEng;
+Comp data in TypesEng;
+Degree data in TypesEng;
+Gen data in TypesEng;
+GenP data in TypesEng;
+GenSP data in TypesEng;
+Gender data in TypesEng;
+Hum data in TypesEng;
+Indic data in TypesEng;
+InfImp data in TypesEng;
+NPForm data in TypesEng;
+NoHum data in TypesEng;
+Nom data in TypesEng;
+NomP data in TypesEng;
+Number data in TypesEng;
+P1 data in TypesEng;
+P2 data in TypesEng;
+P3 data in TypesEng;
+PPart data in TypesEng;
+Particle in TypesEng;
+Past data in TypesEng;
+Person data in TypesEng;
+Pl data in TypesEng;
+Pos data in TypesEng;
+Pronoun in TypesEng;
+ProperName in TypesEng;
+param QuestForm=DirQ|IndirQ;
+RelPron in TypesEng;
+Sg data in TypesEng;
+Sup data in TypesEng;
+param Tense=Pres|Pas|Fut;
+VForm data in TypesEng;
+Verb in TypesEng;
+param VerbForm=VInd SyntaxEng.Tense SyntaxEng.Anteriority TypesEng.Number TypesEng.Person|VCond SyntaxEng.Anteriority|VInf SyntaxEng.Anteriority|VImp;
+VerbP3 in TypesEng;
+adjDegrIrreg in MorphoEng;
+adjDegrLong in MorphoEng;
+adjDegrReg in MorphoEng;
+artDef in MorphoEng;
+artIndef in MorphoEng;
+contractNot in MorphoEng;
+dont in MorphoEng;
+mkAdjDegrWorst in MorphoEng;
+mkAdjective in MorphoEng;
+mkNoun in MorphoEng;
+mkPronoun in MorphoEng;
+mkVerb in MorphoEng;
+mkVerbP3 in MorphoEng;
+nameReg in MorphoEng;
+nounGen in MorphoEng;
+nounReg in MorphoEng;
+nounS in MorphoEng;
+nounY in MorphoEng;
+plural in TypesEng;
+pronHe in MorphoEng;
+pronI in MorphoEng;
+pronIt in MorphoEng;
+pronShe in MorphoEng;
+pronThey in MorphoEng;
+pronWe in MorphoEng;
+pronYouPl in MorphoEng;
+pronYouSg in MorphoEng;
+regAdjective in MorphoEng;
+regVerbP3 in MorphoEng;
+relPron in MorphoEng;
+singular in TypesEng;
+toCase in TypesEng;
+toNPForm in TypesEng;
+verbBe in MorphoEng;
+verbGen in MorphoEng;
+verbNoPart in MorphoEng;
+verbP3Do in MorphoEng;
+verbP3Have in MorphoEng;
+verbP3e in MorphoEng;
+verbP3s in MorphoEng;
+verbP3y in MorphoEng;
+verbPart in MorphoEng;
+}
+resource MorphoEng=TypesEng**open Prelude,Predef in{flags modulesize=n43;AAdj data in TypesEng;
+AAdv data in TypesEng;
+AForm data in TypesEng;
+AccP data in TypesEng;
+AdjDegr in TypesEng;
+Adjective in TypesEng;
+Case data in TypesEng;
+CommonNoun in TypesEng;
+Comp data in TypesEng;
+Degree data in TypesEng;
+Gen data in TypesEng;
+GenP data in TypesEng;
+GenSP data in TypesEng;
+Gender data in TypesEng;
+Hum data in TypesEng;
+Indic data in TypesEng;
+InfImp data in TypesEng;
+NPForm data in TypesEng;
+NoHum data in TypesEng;
+Nom data in TypesEng;
+NomP data in TypesEng;
+Number data in TypesEng;
+P1 data in TypesEng;
+P2 data in TypesEng;
+P3 data in TypesEng;
+PPart data in TypesEng;
+Particle in TypesEng;
+Past data in TypesEng;
+Person data in TypesEng;
+Pl data in TypesEng;
+Pos data in TypesEng;
+Pronoun in TypesEng;
+ProperName in TypesEng;
+RelPron in TypesEng;
+Sg data in TypesEng;
+Sup data in TypesEng;
+VForm data in TypesEng;
+Verb in TypesEng;
+VerbP3 in TypesEng;
+plural in TypesEng;
+singular in TypesEng;
+toCase in TypesEng;
+toNPForm in TypesEng;
+}
+resource TypesEng=open Prelude in{flags modulesize=n8;param AForm=AAdj|AAdv;
+param Case=Nom|Gen;
+param Degree=Pos|Comp|Sup;
+param Gender=NoHum|Hum;
+param NPForm=NomP|AccP|GenP|GenSP;
+param Number=Sg|Pl;
+param Person=P1|P2|P3;
+param VForm=InfImp|Indic TypesEng.Person|Past TypesEng.Number|PPart;
+}
+concrete MP3Swe of MP3=open StructuralSwe,LexiconSwe in{flags modulesize=n9;flags startcat=Move;lin CanPlay:MP3.Move=\Song@0->{s="kan"++("du"++("spela"++Song@0.s!<TypesSwe.PAcc>))++"?";lock_Phr={}};"(kan du spela Song_0)?";
+lincat Move={s:Str;lock_Phr:{}}={s=str@0;lock_Phr={}};"Move";
+lin Play:MP3.Move=\Song@0->{s="spela"++Song@0.s!<TypesSwe.PAcc>++"!";lock_Phr={}};"(spela Song_0)!";
+lincat Song={s:(TypesSwe.NPForm=>Str);g:TypesSwe.Gender;n:TypesSwe.Number;lock_NP:{}}={s=table TypesSwe.NPForm{(TypesSwe.PNom)(TypesSwe.PAcc)(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Utr)))(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Neutr)))(TypesSwe.PGen(TypesSwe.APl))=>str@0};g=<TypesSwe.Utr>;n=<TypesSwe.Sg>;lock_NP={}};"Song";
+lin This:MP3.Song=\->{s=table TypesSwe.NPForm{(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Utr)))(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Neutr)))(TypesSwe.PGen(TypesSwe.APl))=>"det"++"här"++"s";(TypesSwe.PNom)(TypesSwe.PAcc)=>"det"++"här"};g=<TypesSwe.Neutr>;n=<TypesSwe.Sg>;lock_NP={}};"det här";
+lin ThisSong:MP3.Song=\->{s=table TypesSwe.NPForm{(TypesSwe.PNom)(TypesSwe.PAcc)=>"den"++"här"++"låten";(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Utr)))(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Neutr)))(TypesSwe.PGen(TypesSwe.APl))=>"den"++"här"++"låtens"};g=<TypesSwe.Utr>;n=<TypesSwe.Sg>;lock_NP={}};"(den här)låten";
+lin WantPlay:MP3.Move=\Song@0->{s="jag"++("vill"++("spela"++Song@0.s!<TypesSwe.PAcc>))++".";lock_Phr={}};"(jag vill spela Song_0).";
+lin WhichPlay:MP3.Move=\->{s="vilken"++"låt"++"spelas"++"?";lock_Phr={}};"((vilken låt)spelas)?";
+lin Yesterday:MP3.Song=\->{s=table TypesSwe.NPForm{(TypesSwe.PNom)(TypesSwe.PAcc)=>"Yesterday";(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Utr)))(TypesSwe.PGen(TypesSwe.ASg(TypesSwe.Neutr)))(TypesSwe.PGen(TypesSwe.APl))=>"Yesterdays"};g=<TypesSwe.Neutr>;n=<TypesSwe.Sg>;lock_NP={}};"Yesterday";
+}
+resource LexiconSwe=open StructuralSwe,ParadigmsSwe in{flags modulesize=n0;}
+resource ParadigmsSwe=open Predef,Prelude,SyntaxSwe,ResourceSwe in{flags modulesize=n0;}
+resource ResourceSwe=open Prelude,SyntaxSwe in{flags modulesize=n0;}
+resource SyntaxSwe=MorphoSwe**open Prelude,Coordination in{flags modulesize=n172;AF data in TypesSwe;
+APl data in TypesSwe;
+APron data in TypesSwe;
+ASg data in TypesSwe;
+Act data in TypesSwe;
+Adj in TypesSwe;
+AdjForm data in TypesSwe;
+AdjFormGrad data in TypesSwe;
+AdjFormPos data in TypesSwe;
+AdjFormSup data in TypesSwe;
+AdjPronForm data in TypesSwe;
+Adv in TypesSwe;
+AdvInv in TypesSwe;
+Art in TypesSwe;
+AuxInf data in TypesSwe;
+AuxPres data in TypesSwe;
+AuxPret data in TypesSwe;
+AuxSup data in TypesSwe;
+AuxVerbForm data in TypesSwe;
+AxPl data in TypesSwe;
+AxSg data in TypesSwe;
+Case data in TypesSwe;
+Cnj data in TypesSwe;
+Comp data in TypesSwe;
+Compar data in TypesSwe;
+Conjunct in TypesSwe;
+Def data in TypesSwe;
+Degree data in TypesSwe;
+Gen data in TypesSwe;
+GenNum data in TypesSwe;
+Gender data in TypesSwe;
+Imper data in TypesSwe;
+Imperat data in TypesSwe;
+Ind data in TypesSwe;
+Indef data in TypesSwe;
+Indicat data in TypesSwe;
+Inf data in TypesSwe;
+Infin in TypesSwe;
+Infinit data in TypesSwe;
+Interj in TypesSwe;
+Masc data in TypesSwe;
+Mode data in TypesSwe;
+NPForm data in TypesSwe;
+Neutr data in TypesSwe;
+NoMasc data in TypesSwe;
+Nom data in TypesSwe;
+Number data in TypesSwe;
+param Order=Main|Inv|Sub;
+P1 data in TypesSwe;
+P2 data in TypesSwe;
+P3 data in TypesSwe;
+PAcc data in TypesSwe;
+PGen data in TypesSwe;
+PNm in TypesSwe;
+PNom data in TypesSwe;
+Part in TypesSwe;
+Pass data in TypesSwe;
+Person data in TypesSwe;
+Pl data in TypesSwe;
+Pos data in TypesSwe;
+Posit data in TypesSwe;
+Prep in TypesSwe;
+Preposition in MorphoSwe;
+Pres data in TypesSwe;
+Pret data in TypesSwe;
+ProAdj in TypesSwe;
+ProPN in TypesSwe;
+PtPres data in TypesSwe;
+PtPret data in TypesSwe;
+param QuestForm=DirQ|IndirQ;
+RAcc data in MorphoSwe;
+RGen data in MorphoSwe;
+RNom data in MorphoSwe;
+RPrep data in MorphoSwe;
+RelCase data in MorphoSwe;
+param RelGender=RNoGen|RG TypesSwe.Gender;
+SF data in TypesSwe;
+Sex data in TypesSwe;
+SexNum data in TypesSwe;
+Sg data in TypesSwe;
+Species data in TypesSwe;
+param SpeciesP=IndefP|DefP TypesSwe.Species;
+Strong data in TypesSwe;
+Subjunct in TypesSwe;
+Subst in TypesSwe;
+SubstForm data in TypesSwe;
+Sup data in TypesSwe;
+SupStrong data in TypesSwe;
+SupWeak data in TypesSwe;
+Super data in TypesSwe;
+Supin data in TypesSwe;
+Utr data in TypesSwe;
+VAux in TypesSwe;
+VF data in TypesSwe;
+VFin data in TypesSwe;
+VForm data in TypesSwe;
+VI data in TypesSwe;
+VInf data in TypesSwe;
+VMode data in TypesSwe;
+VPres data in TypesSwe;
+Verb in TypesSwe;
+VerbForm data in TypesSwe;
+Verbum in TypesSwe;
+Voice data in TypesSwe;
+Weak data in TypesSwe;
+aAbstrakt in MorphoSwe;
+aFager in MorphoSwe;
+aFin in MorphoSwe;
+aGrund in MorphoSwe;
+aKorkad in MorphoSwe;
+aVaken in MorphoSwe;
+aVid in MorphoSwe;
+adverbForm in TypesSwe;
+artDef in MorphoSwe;
+artIndef in MorphoSwe;
+de_38 in MorphoSwe;
+den_39 in MorphoSwe;
+det_40 in MorphoSwe;
+du_33 in MorphoSwe;
+extVerb in TypesSwe;
+extVerbPart in TypesSwe;
+farbror_8 in MorphoSwe;
+gammal_16 in MorphoSwe;
+giva_1147 in MorphoSwe;
+gå_1174 in MorphoSwe;
+han_34 in MorphoSwe;
+hava_1198 in MorphoSwe;
+hon_35 in MorphoSwe;
+jag_32 in MorphoSwe;
+liten_1146 in MorphoSwe;
+man_1144 in MorphoSwe;
+mkVerb in MorphoSwe;
+mkVerbPart in MorphoSwe;
+mor_1 in MorphoSwe;
+ni_37 in MorphoSwe;
+pronSådan in MorphoSwe;
+pronVilken in MorphoSwe;
+relPronForms in MorphoSwe;
+sApa in MorphoSwe;
+sBil in MorphoSwe;
+sHus in MorphoSwe;
+sKam in MorphoSwe;
+sKikare in MorphoSwe;
+sLik in MorphoSwe;
+sMuseum in MorphoSwe;
+sNivå in MorphoSwe;
+sNummer in MorphoSwe;
+sNyckel in MorphoSwe;
+sPapper in MorphoSwe;
+sParti in MorphoSwe;
+sPojke in MorphoSwe;
+sProgram in MorphoSwe;
+sRike in MorphoSwe;
+sRum in MorphoSwe;
+sSak in MorphoSwe;
+sVarelse in MorphoSwe;
+stor_25 in MorphoSwe;
+ung_29 in MorphoSwe;
+vByta in MorphoSwe;
+vFinna in MorphoSwe;
+vGömma in MorphoSwe;
+vHyra in MorphoSwe;
+vLeka in MorphoSwe;
+vTala in MorphoSwe;
+vTyda in MorphoSwe;
+vTåla in MorphoSwe;
+vVända in MorphoSwe;
+vara_1200 in MorphoSwe;
+verbFinnas in MorphoSwe;
+verbHava in MorphoSwe;
+verbVara in MorphoSwe;
+vi_36 in MorphoSwe;
+}
+resource MorphoSwe=TypesSwe**open Prelude in{flags modulesize=n99;AF data in TypesSwe;
+APl data in TypesSwe;
+APron data in TypesSwe;
+ASg data in TypesSwe;
+Act data in TypesSwe;
+Adj in TypesSwe;
+AdjForm data in TypesSwe;
+AdjFormGrad data in TypesSwe;
+AdjFormPos data in TypesSwe;
+AdjFormSup data in TypesSwe;
+AdjPronForm data in TypesSwe;
+Adv in TypesSwe;
+AdvInv in TypesSwe;
+Art in TypesSwe;
+AuxInf data in TypesSwe;
+AuxPres data in TypesSwe;
+AuxPret data in TypesSwe;
+AuxSup data in TypesSwe;
+AuxVerbForm data in TypesSwe;
+AxPl data in TypesSwe;
+AxSg data in TypesSwe;
+Case data in TypesSwe;
+Cnj data in TypesSwe;
+Comp data in TypesSwe;
+Compar data in TypesSwe;
+Conjunct in TypesSwe;
+Def data in TypesSwe;
+Degree data in TypesSwe;
+Gen data in TypesSwe;
+GenNum data in TypesSwe;
+Gender data in TypesSwe;
+Imper data in TypesSwe;
+Imperat data in TypesSwe;
+Ind data in TypesSwe;
+Indef data in TypesSwe;
+Indicat data in TypesSwe;
+Inf data in TypesSwe;
+Infin in TypesSwe;
+Infinit data in TypesSwe;
+Interj in TypesSwe;
+Masc data in TypesSwe;
+Mode data in TypesSwe;
+NPForm data in TypesSwe;
+Neutr data in TypesSwe;
+NoMasc data in TypesSwe;
+Nom data in TypesSwe;
+Number data in TypesSwe;
+P1 data in TypesSwe;
+P2 data in TypesSwe;
+P3 data in TypesSwe;
+PAcc data in TypesSwe;
+PGen data in TypesSwe;
+PNm in TypesSwe;
+PNom data in TypesSwe;
+Part in TypesSwe;
+Pass data in TypesSwe;
+Person data in TypesSwe;
+Pl data in TypesSwe;
+Pos data in TypesSwe;
+Posit data in TypesSwe;
+Prep in TypesSwe;
+Pres data in TypesSwe;
+Pret data in TypesSwe;
+ProAdj in TypesSwe;
+ProPN in TypesSwe;
+PtPres data in TypesSwe;
+PtPret data in TypesSwe;
+param RelCase=RNom|RAcc|RGen|RPrep;
+SF data in TypesSwe;
+Sex data in TypesSwe;
+SexNum data in TypesSwe;
+Sg data in TypesSwe;
+Species data in TypesSwe;
+Strong data in TypesSwe;
+Subjunct in TypesSwe;
+Subst in TypesSwe;
+SubstForm data in TypesSwe;
+Sup data in TypesSwe;
+SupStrong data in TypesSwe;
+SupWeak data in TypesSwe;
+Super data in TypesSwe;
+Supin data in TypesSwe;
+Utr data in TypesSwe;
+VAux in TypesSwe;
+VF data in TypesSwe;
+VFin data in TypesSwe;
+VForm data in TypesSwe;
+VI data in TypesSwe;
+VInf data in TypesSwe;
+VMode data in TypesSwe;
+VPres data in TypesSwe;
+Verb in TypesSwe;
+VerbForm data in TypesSwe;
+Verbum in TypesSwe;
+Voice data in TypesSwe;
+Weak data in TypesSwe;
+adverbForm in TypesSwe;
+extVerb in TypesSwe;
+extVerbPart in TypesSwe;
+}
+resource TypesSwe=open Prelude in{flags modulesize=n24;param AdjForm=AF TypesSwe.AdjFormGrad TypesSwe.Case;
+param AdjFormGrad=Posit TypesSwe.AdjFormPos|Compar|Super TypesSwe.AdjFormSup;
+param AdjFormPos=Strong TypesSwe.GenNum|Weak TypesSwe.SexNum;
+param AdjFormSup=SupStrong|SupWeak;
+param AdjPronForm=APron TypesSwe.GenNum TypesSwe.Case;
+param AuxVerbForm=AuxInf|AuxPres|AuxPret|AuxSup;
+param Case=Nom|Gen;
+param Degree=Pos|Comp|Sup;
+param GenNum=ASg TypesSwe.Gender|APl;
+param Gender=Utr|Neutr;
+param Mode=Ind|Cnj;
+param NPForm=PNom|PAcc|PGen TypesSwe.GenNum;
+param Number=Sg|Pl;
+param Person=P1|P2|P3;
+param Sex=NoMasc|Masc;
+param SexNum=AxSg TypesSwe.Sex|AxPl;
+param Species=Indef|Def;
+param SubstForm=SF TypesSwe.Number TypesSwe.Species TypesSwe.Case;
+param VFin=Pres TypesSwe.Mode TypesSwe.Voice|Pret TypesSwe.Mode TypesSwe.Voice|Imper;
+param VForm=VPres TypesSwe.VMode TypesSwe.Voice;
+param VInf=Inf TypesSwe.Voice|Supin TypesSwe.Voice|PtPres TypesSwe.Case|PtPret TypesSwe.AdjFormPos TypesSwe.Case;
+param VMode=Infinit|Indicat|Imperat;
+param VerbForm=VF TypesSwe.VFin|VI TypesSwe.VInf;
+param Voice=Act|Pass;
+}
+concrete MP3Fre of MP3=open StructuralFre,LexiconFre in{flags modulesize=n9;flags startcat=Move;lin CanPlay:MP3.Move=\Song@0->{s=variants{("est-ce"++[pre"que"{"qu'"/"a""â""ā""e""ę""é""č""h""i""î""o""ô""u""û""y"}])[]}++("tu"++("peux"++table Prelude.Bool{(Prelude.True)=>Song@0.s!<TypesFre.Aton<TypesFre.Acc>>++"jouer";(Prelude.False)=>"jouer"++Song@0.s!<TypesFre.Aton<TypesFre.Acc>>}!(table Prelude.Bool{(Prelude.False)=><Prelude.False>;(Prelude.True)=><Prelude.True>}!(table TypesFre.ClitType{(TypesFre.Clit0)=><Prelude.False>;(TypesFre.Clit1)(TypesFre.Clit2)(TypesFre.Clit3)=><Prelude.True>}!(Song@0.c)))))++"?";lock_Phr={}};"((est-ce que)tu peux Song_0 jouer)?";
+lincat Move={s:Str;lock_Phr:{}}={s=str@0;lock_Phr={}};"Move";
+lin Play:MP3.Move=\Song@0->{s=table Prelude.Bool{(Prelude.True)=>Song@0.s!<TypesFre.Aton<TypesFre.Acc>>++"joue";(Prelude.False)=>"joue"++Song@0.s!<TypesFre.Aton<TypesFre.Acc>>}!(table Prelude.Bool{(Prelude.False)=><Prelude.False>;(Prelude.True)=><Prelude.True>}!(table TypesFre.ClitType{(TypesFre.Clit0)=><Prelude.False>;(TypesFre.Clit1)(TypesFre.Clit2)(TypesFre.Clit3)=><Prelude.True>}!(Song@0.c)))++"!";lock_Phr={}};"(Song_0 joue)!";
+lincat Song={s:(TypesFre.NPForm=>Str);g:TypesFre.PronGen;n:TypesFre.Number;p:TypesFre.Person;c:TypesFre.ClitType;lock_NP:{}}={s=table TypesFre.NPForm{(TypesFre.Ton(TypesFre.Nom))(TypesFre.Ton(TypesFre.Acc))(TypesFre.Ton(TypesFre.Gen))(TypesFre.Ton(TypesFre.Dat))(TypesFre.Aton(TypesFre.Nom))(TypesFre.Aton(TypesFre.Acc))(TypesFre.Aton(TypesFre.Gen))(TypesFre.Aton(TypesFre.Dat))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Fem))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Fem))=>str@0};g=<TypesFre.PGen<TypesFre.Masc>>;n=<TypesFre.Sg>;p=<TypesFre.P1>;c=<TypesFre.Clit0>;lock_NP={}};"Song";
+lin This:MP3.Song=\->{s=table TypesFre.NPForm{(TypesFre.Ton(TypesFre.Gen))(TypesFre.Aton(TypesFre.Gen))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Fem))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Fem))=>"de"++"ceci";(TypesFre.Ton(TypesFre.Dat))(TypesFre.Aton(TypesFre.Dat))=>"ā"++"ceci";(TypesFre.Ton(TypesFre.Nom))(TypesFre.Ton(TypesFre.Acc))(TypesFre.Aton(TypesFre.Nom))(TypesFre.Aton(TypesFre.Acc))=>"ceci"};g=<TypesFre.PGen<TypesFre.Masc>>;n=<TypesFre.Sg>;p=<TypesFre.P3>;c=<TypesFre.Clit0>;lock_NP={}};"ceci";
+lin ThisSong:MP3.Song=\->{s=table TypesFre.NPForm{(TypesFre.Ton(TypesFre.Nom))(TypesFre.Ton(TypesFre.Acc))(TypesFre.Aton(TypesFre.Nom))(TypesFre.Aton(TypesFre.Acc))=>"cette"++"chanson";(TypesFre.Ton(TypesFre.Dat))(TypesFre.Aton(TypesFre.Dat))=>"ā"++("cette"++"chanson");(TypesFre.Ton(TypesFre.Gen))(TypesFre.Aton(TypesFre.Gen))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Fem))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Fem))=>[pre"de"{"d'"/"a""â""ā""e""ę""é""č""h""i""î""o""ô""u""û""y"}]++("cette"++"chanson")};g=<TypesFre.PGen<TypesFre.Fem>>;n=<TypesFre.Sg>;p=<TypesFre.P3>;c=<TypesFre.Clit0>;lock_NP={}};"cette chanson";
+lin WantPlay:MP3.Move=\Song@0->{s=[pre"je"{"j'"/"a""â""ā""e""ę""é""č""h""i""î""o""ô""u""û""y"}]++("veux"++table Prelude.Bool{(Prelude.True)=>Song@0.s!<TypesFre.Aton<TypesFre.Acc>>++"jouer";(Prelude.False)=>"jouer"++Song@0.s!<TypesFre.Aton<TypesFre.Acc>>}!(table Prelude.Bool{(Prelude.False)=><Prelude.False>;(Prelude.True)=><Prelude.True>}!(table TypesFre.ClitType{(TypesFre.Clit0)=><Prelude.False>;(TypesFre.Clit1)(TypesFre.Clit2)(TypesFre.Clit3)=><Prelude.True>}!(Song@0.c))))++".";lock_Phr={}};"(je veux Song_0 jouer).";
+lin WhichPlay:MP3.Move=\->{s="quelle"++"chanson"++(variants{("est-ce"++"qui")[]}++("est"++"jouée"))++"?";lock_Phr={}};"((quelle chanson)(est-ce qui)est jouée)?";
+lin Yesterday:MP3.Song=\->{s=table TypesFre.NPForm{(TypesFre.Ton(TypesFre.Gen))(TypesFre.Aton(TypesFre.Gen))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Sg)(TypesFre.Fem))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Masc))(TypesFre.Poss(TypesFre.Pl)(TypesFre.Fem))=>"de"++"Yesterday";(TypesFre.Ton(TypesFre.Dat))(TypesFre.Aton(TypesFre.Dat))=>"ā"++"Yesterday";(TypesFre.Ton(TypesFre.Nom))(TypesFre.Ton(TypesFre.Acc))(TypesFre.Aton(TypesFre.Nom))(TypesFre.Aton(TypesFre.Acc))=>"Yesterday"};g=<TypesFre.PGen<TypesFre.Masc>>;n=<TypesFre.Sg>;p=<TypesFre.P3>;c=<TypesFre.Clit0>;lock_NP={}};"Yesterday";
+}
+concrete MP3I of MP3={flags modulesize=n0;flags startcat=Move;}
+resource LexiconFre=open StructuralFre,ParadigmsFre in{flags modulesize=n0;}
+resource Lexicon={flags modulesize=n0;}
+resource ParadigmsFre=open Prelude,TypesFre,SyntaxFre,MorphoFre,ResourceFre in{flags modulesize=n0;}
+resource ResourceFre=open SyntaxFre,MorphoFre,Prelude in{flags modulesize=n0;}
+resource SyntaxFre=TypesFre**open Prelude,Coordination,MorphoFre in{flags modulesize=n108;AA data in TypesFre;
+AF data in TypesFre;
+AForm data in TypesFre;
+Acc data in TypesFre;
+Adj in TypesFre;
+AdjComp in TypesFre;
+Aton data in TypesFre;
+CNom in TypesFre;
+Case data in TypesFre;
+CaseA in TypesFre;
+Clit0 data in TypesFre;
+Clit1 data in TypesFre;
+Clit2 data in TypesFre;
+Clit3 data in TypesFre;
+ClitType data in TypesFre;
+Comp data in TypesFre;
+Con data in TypesFre;
+Cond data in TypesFre;
+Dat data in TypesFre;
+Degree data in TypesFre;
+Fem data in TypesFre;
+Futur data in TypesFre;
+Gen data in TypesFre;
+Gender data in TypesFre;
+Imparf data in TypesFre;
+Imper data in TypesFre;
+Ind data in TypesFre;
+Indic data in TypesFre;
+Inf data in TypesFre;
+Masc data in TypesFre;
+Mode data in TypesFre;
+NPForm data in TypesFre;
+NPFormA in TypesFre;
+Nom data in TypesFre;
+NumPersI data in TypesFre;
+Number data in TypesFre;
+P1 data in TypesFre;
+P2 data in TypesFre;
+P3 data in TypesFre;
+PGen data in TypesFre;
+PNoGen data in TypesFre;
+PPasse data in TypesFre;
+PPres data in TypesFre;
+Part data in TypesFre;
+Passe data in TypesFre;
+Person data in TypesFre;
+Pl data in TypesFre;
+PlP1 data in TypesFre;
+PlP2 data in TypesFre;
+Pos data in TypesFre;
+Poss data in TypesFre;
+Pres data in TypesFre;
+PronGen data in TypesFre;
+Pronoun in TypesFre;
+param QuestForm=DirQ|IndirQ;
+RComplex data in TypesFre;
+RG data in TypesFre;
+RNoGen data in TypesFre;
+RSimple data in TypesFre;
+RelForm data in TypesFre;
+RelFormA in TypesFre;
+RelGen data in TypesFre;
+SImparf data in TypesFre;
+SPres data in TypesFre;
+Sg data in TypesFre;
+SgP2 data in TypesFre;
+Subjo data in TypesFre;
+Sup data in TypesFre;
+TPart data in TypesFre;
+TSubj data in TypesFre;
+Temps data in TypesFre;
+Ton data in TypesFre;
+VF data in TypesFre;
+VFin data in TypesFre;
+VForm data in TypesFre;
+VImper data in TypesFre;
+VInfin data in TypesFre;
+VPart data in TypesFre;
+VerbPres in TypesFre;
+Verbum in TypesFre;
+accusative in TypesFre;
+adjCompLong in TypesFre;
+case2pform in TypesFre;
+case2pformClit in TypesFre;
+dative in TypesFre;
+elisDe in TypesFre;
+elisLa in TypesFre;
+elisLe in TypesFre;
+elisNe in TypesFre;
+elisQue in TypesFre;
+elisSi in TypesFre;
+elision in TypesFre;
+genitive in TypesFre;
+mkAdjComp in TypesFre;
+nombreVerb in TypesFre;
+nominative in TypesFre;
+pform2case in TypesFre;
+pgen2gen in TypesFre;
+plural in TypesFre;
+prepCase in TypesFre;
+prepositional in TypesFre;
+relPronForms in TypesFre;
+singular in TypesFre;
+stressed in TypesFre;
+unstressed in TypesFre;
+vImper in TypesFre;
+verbPres in TypesFre;
+voyelle in TypesFre;
+}
+resource SyntaxRomance={flags modulesize=n0;}
+resource Coordination=open Prelude in{flags modulesize=n1;param ListSize=TwoElem|ManyElem;
+}
+resource MorphoFre=open Predef,Prelude,TypesFre in{flags modulesize=n0;}
+resource Prelude=open Predef in{flags modulesize=n2;param Bool=True|False;
+param ENumber=E0|E1|E2|Emore;
+}
+resource Predef={flags modulesize=n1;param PBool=PTrue|PFalse;
+}
+resource TypesFre={flags modulesize=n18;param AForm=AF TypesFre.Gender TypesFre.Number|AA;
+param Case=Nom|Acc|Gen|Dat;
+param ClitType=Clit0|Clit1|Clit2|Clit3;
+param Degree=Pos|Comp|Sup;
+param Gender=Masc|Fem;
+param Mode=Ind|Con;
+param NPForm=Ton TypesFre.Case|Aton TypesFre.Case|Poss TypesFre.Number TypesFre.Gender;
+param NumPersI=SgP2|PlP1|PlP2;
+param Number=Sg|Pl;
+param Person=P1|P2|P3;
+param PronGen=PGen TypesFre.Gender|PNoGen;
+param RelForm=RSimple TypesFre.Case|RComplex TypesFre.Gender TypesFre.Number TypesFre.Case;
+param RelGen=RNoGen|RG TypesFre.Gender;
+param TPart=PPres|PPasse TypesFre.Gender TypesFre.Number;
+param TSubj=SPres|SImparf;
+param Temps=Pres|Imparf|Passe|Futur;
+param VF=VFin TypesFre.Mode TypesFre.Number TypesFre.Person|VImper TypesFre.NumPersI|VPart TypesFre.Gender TypesFre.Number|VInfin;
+param VForm=Inf|Indic TypesFre.Temps TypesFre.Number TypesFre.Person|Cond TypesFre.Number TypesFre.Person|Subjo TypesFre.TSubj TypesFre.Number TypesFre.Person|Imper TypesFre.NumPersI|Part TypesFre.TPart;
+}
+resource TypesRomance={flags modulesize=n0;}
+resource Resource={flags modulesize=n0;}
+concrete MP3Ger of MP3=open StructuralGer,LexiconGer in{flags modulesize=n9;flags startcat=Move;lin CanPlay:MP3.Move=\Song@0->{s="kannst"++("du"++(Song@0.s!<TypesGer.NPCase<TypesGer.Acc>>++"spielen"))++"?";lock_Phr={}};"(kannst du Song_0 spielen)?";
+lincat Move={s:Str;lock_Phr:{}}={s=str@0;lock_Phr={}};"Move";
+lin Play:MP3.Move=\Song@0->{s="spiel"++Song@0.s!<TypesGer.NPCase<TypesGer.Acc>>++"!";lock_Phr={}};"(spiel Song_0)!";
+lincat Song={s:(TypesGer.NPForm=>Str);n:TypesGer.Number;p:TypesGer.Person;pro:Prelude.Bool;lock_NP:{}}={s=table TypesGer.NPForm{(TypesGer.NPCase(TypesGer.Nom))(TypesGer.NPCase(TypesGer.Acc))(TypesGer.NPCase(TypesGer.Dat))(TypesGer.NPCase(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Gen))=>str@0};n=<TypesGer.Sg>;p=<TypesGer.P1>;pro=<Prelude.True>;lock_NP={}};"Song";
+lin This:MP3.Song=\->{s=table TypesGer.NPForm{(TypesGer.NPCase(TypesGer.Dat))=>"diesem";(TypesGer.NPCase(TypesGer.Nom))(TypesGer.NPCase(TypesGer.Acc))(TypesGer.NPCase(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Gen))=>"dieses"};n=<TypesGer.Sg>;p=<TypesGer.P3>;pro=<Prelude.False>;lock_NP={}};"dieses";
+lin ThisSong:MP3.Song=\->{s=table TypesGer.NPForm{(TypesGer.NPCase(TypesGer.Dat))=>"diesem"++"lied";(TypesGer.NPCase(TypesGer.Nom))(TypesGer.NPCase(TypesGer.Acc))=>"dieses"++"lied";(TypesGer.NPCase(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Gen))=>"dieses"++"liedes"};n=<TypesGer.Sg>;p=<TypesGer.P3>;pro=<Prelude.False>;lock_NP={}};"dieses lied";
+lin WantPlay:MP3.Move=\Song@0->{s="ich"++("will"++(Song@0.s!<TypesGer.NPCase<TypesGer.Acc>>++"spielen"))++".";lock_Phr={}};"(ich will Song_0 spielen).";
+lin WhichPlay:MP3.Move=\->{s="welches"++"lied"++("wird"++"gespielt")++"?";lock_Phr={}};"((welches lied)wird gespielt)?";
+lin Yesterday:MP3.Song=\->{s=table TypesGer.NPForm{(TypesGer.NPCase(TypesGer.Nom))(TypesGer.NPCase(TypesGer.Acc))(TypesGer.NPCase(TypesGer.Dat))=>"Yesterday";(TypesGer.NPCase(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Masc))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Fem))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GSg(TypesGer.Neut))(TypesGer.Gen))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Nom))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Acc))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Dat))(TypesGer.NPPoss(TypesGer.GPl)(TypesGer.Gen))=>"Yesterdays"};n=<TypesGer.Sg>;p=<TypesGer.P3>;pro=<Prelude.False>;lock_NP={}};"Yesterday";
+}
+abstract MP3={flags modulesize=n9;fun CanPlay:(h_:MP3.Song)->MP3.Move={};
+cat Move[]=;
+fun Play:(h_:MP3.Song)->MP3.Move={};
+cat Song[]=;
+fun This:MP3.Song={};
+fun ThisSong:MP3.Song={};
+fun WantPlay:(h_:MP3.Song)->MP3.Move={};
+fun WhichPlay:MP3.Move={};
+fun Yesterday:MP3.Song={};
+}
+resource LexiconGer=open StructuralGer,ParadigmsGer in{flags modulesize=n0;}
+resource ParadigmsGer=open Prelude,MorphoGer,SyntaxGer,ResourceGer in{flags modulesize=n0;}
+resource ResourceGer=open Prelude,SyntaxGer in{flags modulesize=n0;}
+resource SyntaxGer=MorphoGer**open Prelude,Coordination in{flags modulesize=n132;AForm data in TypesGer;
+AMod data in TypesGer;
+APred data in TypesGer;
+Acc data in TypesGer;
+AdjComp in TypesGer;
+Adjective in TypesGer;
+Adjf data in TypesGer;
+Case data in TypesGer;
+CommNoun in TypesGer;
+Comp data in TypesGer;
+Dat data in TypesGer;
+Degree data in TypesGer;
+Fem data in TypesGer;
+GPl data in TypesGer;
+GSg data in TypesGer;
+Gen data in TypesGer;
+GenNum data in TypesGer;
+Gender data in TypesGer;
+Inv data in TypesGer;
+Main data in TypesGer;
+Masc data in TypesGer;
+NPCase data in TypesGer;
+NPForm data in TypesGer;
+NPPoss data in TypesGer;
+Neut data in TypesGer;
+Nom data in TypesGer;
+Number data in TypesGer;
+Order data in TypesGer;
+P1 data in TypesGer;
+P2 data in TypesGer;
+P3 data in TypesGer;
+Particle in TypesGer;
+Person data in TypesGer;
+Pl data in TypesGer;
+Pos data in TypesGer;
+Preposition in TypesGer;
+ProPN in MorphoGer;
+param QuestForm=DirQ|IndirQ;
+RelPron in MorphoGer;
+Sg data in TypesGer;
+Strong data in TypesGer;
+Sub data in TypesGer;
+Sup data in TypesGer;
+VForm data in TypesGer;
+VImp data in TypesGer;
+VImpfInd data in TypesGer;
+VImpfSubj data in TypesGer;
+VInd data in TypesGer;
+VInf data in TypesGer;
+VPart data in TypesGer;
+VPresPart data in TypesGer;
+VSubj data in TypesGer;
+Verb in TypesGer;
+Verbum in TypesGer;
+Weak data in TypesGer;
+aMod in MorphoGer;
+adde in MorphoGer;
+adjCompReg in MorphoGer;
+adjCompReg3 in MorphoGer;
+adjE in MorphoGer;
+adjEr in MorphoGer;
+adjGen in MorphoGer;
+adjInvar in MorphoGer;
+adjReg in MorphoGer;
+artDef in MorphoGer;
+artIndef in MorphoGer;
+caselist in MorphoGer;
+declN1 in MorphoGer;
+declN1M in MorphoGer;
+declN1e in MorphoGer;
+declN1eM in MorphoGer;
+declN1in in MorphoGer;
+declN2 in MorphoGer;
+declN2i in MorphoGer;
+declN2in in MorphoGer;
+declN2n in MorphoGer;
+declN2u in MorphoGer;
+declN2uF in MorphoGer;
+declN3 in MorphoGer;
+declN3u in MorphoGer;
+declN3uS in MorphoGer;
+declNs in MorphoGer;
+gNumber in MorphoGer;
+impe in MorphoGer;
+mkAdjComp in MorphoGer;
+mkAdjective in MorphoGer;
+mkNoun in MorphoGer;
+mkNoun2es in MorphoGer;
+mkNoun2n in MorphoGer;
+mkNoun2s in MorphoGer;
+mkNoun2ses in MorphoGer;
+mkNoun3 in MorphoGer;
+mkNoun4 in MorphoGer;
+mkPronPers in MorphoGer;
+mkVerb in MorphoGer;
+mkVerbSimple in MorphoGer;
+mkVerbum in MorphoGer;
+numGenNum in MorphoGer;
+plural in TypesGer;
+pronDu in MorphoGer;
+pronEnding in MorphoGer;
+pronEr in MorphoGer;
+pronEs in MorphoGer;
+pronIch in MorphoGer;
+pronIhr in MorphoGer;
+pronSSie in MorphoGer;
+pronSie in MorphoGer;
+pronSiePl in MorphoGer;
+pronWir in MorphoGer;
+regVerb in MorphoGer;
+relPron in MorphoGer;
+singular in TypesGer;
+verbGeben in MorphoGer;
+verbHaben in MorphoGer;
+verbSein in MorphoGer;
+verbWerden in MorphoGer;
+verbumAux in MorphoGer;
+verbumDürfen in MorphoGer;
+verbumGratulieren in MorphoGer;
+verbumHaben in MorphoGer;
+verbumKönnen in MorphoGer;
+verbumMögen in MorphoGer;
+verbumMüssen in MorphoGer;
+verbumSein in MorphoGer;
+verbumSollen in MorphoGer;
+verbumStrongLaufen in MorphoGer;
+verbumStrongSehen in MorphoGer;
+verbumStrongSingen in MorphoGer;
+verbumWeak in MorphoGer;
+verbumWerden in MorphoGer;
+verbumWissen in MorphoGer;
+verbumWollen in MorphoGer;
+}
+resource MorphoGer=TypesGer**open Predef,Prelude in{flags modulesize=n54;AForm data in TypesGer;
+AMod data in TypesGer;
+APred data in TypesGer;
+Acc data in TypesGer;
+AdjComp in TypesGer;
+Adjective in TypesGer;
+Adjf data in TypesGer;
+Case data in TypesGer;
+CommNoun in TypesGer;
+Comp data in TypesGer;
+Dat data in TypesGer;
+Degree data in TypesGer;
+Fem data in TypesGer;
+GPl data in TypesGer;
+GSg data in TypesGer;
+Gen data in TypesGer;
+GenNum data in TypesGer;
+Gender data in TypesGer;
+Inv data in TypesGer;
+Main data in TypesGer;
+Masc data in TypesGer;
+NPCase data in TypesGer;
+NPForm data in TypesGer;
+NPPoss data in TypesGer;
+Neut data in TypesGer;
+Nom data in TypesGer;
+Number data in TypesGer;
+Order data in TypesGer;
+P1 data in TypesGer;
+P2 data in TypesGer;
+P3 data in TypesGer;
+Particle in TypesGer;
+Person data in TypesGer;
+Pl data in TypesGer;
+Pos data in TypesGer;
+Preposition in TypesGer;
+Sg data in TypesGer;
+Strong data in TypesGer;
+Sub data in TypesGer;
+Sup data in TypesGer;
+VForm data in TypesGer;
+VImp data in TypesGer;
+VImpfInd data in TypesGer;
+VImpfSubj data in TypesGer;
+VInd data in TypesGer;
+VInf data in TypesGer;
+VPart data in TypesGer;
+VPresPart data in TypesGer;
+VSubj data in TypesGer;
+Verb in TypesGer;
+Verbum in TypesGer;
+Weak data in TypesGer;
+plural in TypesGer;
+singular in TypesGer;
+}
+resource TypesGer=open Prelude in{flags modulesize=n11;param AForm=APred|AMod TypesGer.Adjf TypesGer.GenNum TypesGer.Case;
+param Adjf=Strong|Weak;
+param Case=Nom|Acc|Dat|Gen;
+param Degree=Pos|Comp|Sup;
+param GenNum=GSg TypesGer.Gender|GPl;
+param Gender=Masc|Fem|Neut;
+param NPForm=NPCase TypesGer.Case|NPPoss TypesGer.GenNum TypesGer.Case;
+param Number=Sg|Pl;
+param Order=Main|Inv|Sub;
+param Person=P1|P2|P3;
+param VForm=VInf|VInd TypesGer.Number TypesGer.Person|VImp TypesGer.Number|VSubj TypesGer.Number TypesGer.Person|VImpfInd TypesGer.Number TypesGer.Person|VImpfSubj TypesGer.Number TypesGer.Person|VPresPart TypesGer.AForm|VPart TypesGer.AForm;
+}