===============================================================================
==
==  Mnster-Curry-Compiler
==  Distribution zur Anwendung als Frontend in PAKCS
==
==  Letztes Update: 27.10.05

Diese Distribution enthlt die modifizierte Version des 
Mnster-Curry-Compilers (MCC) fr die Verwendung als Frontend in PAKCS. Dieses 
System ist u.a. in der Lage aus Curry-Programmen (entwickelt nach 
PAKCS-Standard) Flat-Darstellungen (FlatCurry ".fcy", FlatInterface ".fint" 
und FlatXML "_flat.xml"), sowie Abstract-Darstellungen (AbstractCurry ".acy" 
und untyped AbstractCurry ".uacy") zu generieren.



1. Installation
---------------

1.1 Installation der Binary-Distribution

Die Binary-Distribution befindet sich in einem tar-Archiv und wird
durch folgendes Kommando entpackt:

	tar zxvf <Distribution>.tar.gz

Danach steht der Compiler im Verzeichnis 'mcc' zur Verfgung.


1.2 Installation der Source-Distribution

Nach dem Entpacken des tar-Archivs mittels

	tar zxvf <Distribution>.tar.gz

kann der Compiler durch Aufruf von 'make' im Verzeichnis 'mcc' installiert
werden. Bei Recompilierung (z.B. nach nderungen in der Quelldateien)
wird empfohlen vor einer erneuten Installation 'make clean' auszufhren.



Nach erfolgreicher Installation befindet sich in beiden Fllen im Verzeichnis 
'mcc/bin/' folgende ausfhrbare Datei:

	cymake		- der Curry-Programm-Builder

Dieses Tool bersetzt Curry-Programme unter Bercksichtigung der Import-
abhngigkeiten.



2. Kommandobersicht
--------------------

In der folgenden Tabelle sind die Optionen zur Generierung der jeweiligen
Darstellungen fr das Kommando 'cymake' aufgelistet:

	--flat		: Erzeugt FlatCurry- und FlatInterface-Datei
	--xml		: Erzeugt FlatXML-Datei
	--acy		: Erzeugt (typinferierte) AbstractCurry-Datei
	--uacy		: Erzeugt ungetypte AbstractCurry-Datei



3. Erzeugung von FlatCurry- und FlatXML-Programmen
--------------------------------------------------

Die bersetzung eines Curry-Programms 'file.curry', sowie smtlicher
importierter Module nach FlatCurry bzw. FlatInterface, bewirkt folgendes
Kommando:

	cymake --flat <filename>

Hierdurch werden die Dateien mit den entsprechenden Endungen ".fcy" und
".fint" generiert. Der Dateiname <filename> kann hierbei mit oder ohne 
Endung ".curry" bzw. ".lcurry" angegeben werden.

Die analogen bersetzungen in die FlatXML-Darstellung bewirkt folgendes
Kommando:

	cymake --xml <file name>

Die hierdurch generierte Flat-XML-Datei hat die Endung '_flat.xml'.



4. Erzeugung von AbstractCurry-Programmen
-----------------------------------------

Die bersetzung eines Curry-Programms 'file.curry' nach (typgeprftem)
AbstractCurry bewirkt folgendes Kommando:

	cymake --acy <filename>

Hierdurch wird die entsprechende Datei (mit der Endung ".acy") generiert.
Der Dateiname <filename> kann hierbei mit oder ohne Endung ".curry" bzw.
".lcurry" angegeben werden.

Ungetypte, bzw. typsignierte AbstractCurry-Programme werden mit folgendem
Kommando generiert:

	cymake --uacy <filename>

Die hierdurch generierte Datei besitzt die Endung ".uacy".

Die Generierung des ungetypten AbstractCurry-Programms findet ohne
Typberprfung statt (d.h. auch Programme mit Typfehlern werden bersetzt).
Alle Funktionen besitzen entweder die im Quellprogramm angegebenen Typsignatur,
oder, sofern diese nicht vorhanden ist, den Dummy-Typ "prelude.untyped".

In beiden Fllen werden fr die bersetzung FlatCurry-Dateien 
fr alle importierten Module erzeugt. Dies ist notwendig, da die 
entsprechenden Interfaces fr die Typinferenz (nur im Fall der getypten 
AbstractCurry-Generierung) und die statisch-semantische Analyse bentigt 
werden.



5. Anmerkungen
--------------

- Um die PAKCS-Bibliotheken (insbesondere die Prelude) fr bersetzungen 
  nutzen zu knnen mu die Umgebungsvariable 'PAKCS_LIB' auf die
  entsprechenden Pfade verweisen, z.B. mittels

	export PAKCS_LIB=<pakcs path>/pacs/lib:<pakcs path>/pacs/lib/meta:...

  wobei <pakcs path> das Verzeichnis ist, das die PAKCS-Distribution
  enthlt.

- Im Gegensatz zu PAKCS erlaubt das Frontend die Verwendung anonymer
  Variablen (dargestellt durch dem Unterstrich '_') in Typdeklarationen,
  z.B.

	data T _ = C



Bekannte Probleme
------------------

- Lambda-, do-, if-, case-, oder let-Ausdrcke, die in Argumenten von
  Funktionsaufrufen verwendet werden, mssen immer geklammert werden.

- 'let'-Anweisungen drfen nicht folgendes Layout besitzen:

           let x = <expr>
               in ...

- Die Regeln einer Funktionsdeklaration mssen immer zusammenstehen, d.h.
  nicht durch andere Deklarationen unterbrochen werden.

- Es ist bislang nicht mglich, den Konstruktor fr leere Listen [], sowie 
  den Unit-Konstruktor () zu qualifizieren (z.B. fhrt 'prelude.[]' zu 
  einem Fehler). Der Listenkonstruktor (:), sowie Tupel-Konstruktoren
  dagegen sind qualifizierbar.

- FlatXML-bersetzungen knnen derzeit mittels der Funktionen aus dem
  PAKCS-Modul "FlatXML" noch nicht eingelesen werden, da es Unstimmigkeiten
  zwischen dem generierten und den erforderlichen Formaten gibt.

- Bei der Erzeugung von typgeprftem AbstractCurry knnen die im Quelltext
  verwendeten Bezeichner fr Typvariablen nicht ins AbstractCurry-Programm
  bernommen werden. Stattdessen generiert der bersetzer neue
  Bezeichner.

- Bei der Erzeugung von ungetyptem AbstractCurry werden Typsynonyme in
  Typsignaturen von Funktionen nicht dereferenziert.

- Das Frontend gibt derzeit noch keinerlei Warnungen aus.


