README.md 5.16 KB
Newer Older
1
2
3
4
# Münster-Curry-Compiler
Distribution zur Anwendung als Frontend in PAKCS

Letztes Update: 27.10.05
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
5

6
7
Diese Distribution enthält die modifizierte Version des 
Münster-Curry-Compilers (MCC) für die Verwendung als Frontend in PAKCS. Dieses 
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
8
9
10
11
12
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.

13
## 1 Installation
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
14

15
### 1.1 Installation der Binary-Distribution
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
16
17
18
19
20
21

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

	tar zxvf <Distribution>.tar.gz

22
Danach steht der Compiler im Verzeichnis 'mcc' zur Verfügung.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
23

24
### 1.2 Installation der Source-Distribution
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
25
26
27
28
29
30

Nach dem Entpacken des tar-Archivs mittels

	tar zxvf <Distribution>.tar.gz

kann der Compiler durch Aufruf von 'make' im Verzeichnis 'mcc' installiert
31
32
werden. Bei Recompilierung (z.B. nach Änderungen in der Quelldateien)
wird empfohlen vor einer erneuten Installation 'make clean' auszuführen.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
33

34
35
Nach erfolgreicher Installation befindet sich in beiden Fällen im Verzeichnis 
'mcc/bin/' folgende ausführbare Datei:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
36
37
38

	cymake		- der Curry-Programm-Builder

39
40
Dieses Tool übersetzt Curry-Programme unter Berücksichtigung der Import-
abhängigkeiten.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
41

42
## 2 Kommandoübersicht
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
43
44

In der folgenden Tabelle sind die Optionen zur Generierung der jeweiligen
45
Darstellungen für das Kommando 'cymake' aufgelistet:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
46
47
48
49
50
51

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

52
## 3 Erzeugung von FlatCurry- und FlatXML-Programmen
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
53

54
Die Übersetzung eines Curry-Programms 'file.curry', sowie sämtlicher
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
55
56
57
58
59
60
61
62
63
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.

64
Die analogen Übersetzungen in die FlatXML-Darstellung bewirkt folgendes
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
65
66
67
68
69
70
Kommando:

	cymake --xml <file name>

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

71
## 4 Erzeugung von AbstractCurry-Programmen
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
72

73
Die Übersetzung eines Curry-Programms 'file.curry' nach (typgeprüftem)
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
90
Typüberprüfung statt (d.h. auch Programme mit Typfehlern werden übersetzt).
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
91
92
93
Alle Funktionen besitzen entweder die im Quellprogramm angegebenen Typsignatur,
oder, sofern diese nicht vorhanden ist, den Dummy-Typ "prelude.untyped".

94
95
96
97
In beiden Fällen werden für die Übersetzung FlatCurry-Dateien 
für alle importierten Module erzeugt. Dies ist notwendig, da die 
entsprechenden Interfaces für die Typinferenz (nur im Fall der getypten 
AbstractCurry-Generierung) und die statisch-semantische Analyse benötigt 
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
98
99
werden.

100
## 5 Anmerkungen
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
101

102
103
- Um die PAKCS-Bibliotheken (insbesondere die Prelude) für Übersetzungen 
  nutzen zu können muß die Umgebungsvariable 'PAKCS_LIB' auf die
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
104
105
106
107
108
  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
109
  enthält.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
110
111
112
113
114
115
116

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

	data T _ = C

117
## Bekannte Probleme
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
118

119
120
- Lambda-, do-, if-, case-, oder let-Ausdrücke, die in Argumenten von
  Funktionsaufrufen verwendet werden, müssen immer geklammert werden.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
121

122
- 'let'-Anweisungen dürfen nicht folgendes Layout besitzen:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
123
124
125
126

           let x = <expr>
               in ...

127
- Die Regeln einer Funktionsdeklaration müssen immer zusammenstehen, d.h.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
128
129
  nicht durch andere Deklarationen unterbrochen werden.

130
131
- Es ist bislang nicht möglich, den Konstruktor für leere Listen [], sowie 
  den Unit-Konstruktor () zu qualifizieren (z.B. führt 'prelude.[]' zu 
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
132
133
134
  einem Fehler). Der Listenkonstruktor (:), sowie Tupel-Konstruktoren
  dagegen sind qualifizierbar.

135
- FlatXML-Übersetzungen können derzeit mittels der Funktionen aus dem
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
136
137
138
  PAKCS-Modul "FlatXML" noch nicht eingelesen werden, da es Unstimmigkeiten
  zwischen dem generierten und den erforderlichen Formaten gibt.

139
140
141
- Bei der Erzeugung von typgeprüftem AbstractCurry können die im Quelltext
  verwendeten Bezeichner für Typvariablen nicht ins AbstractCurry-Programm
  übernommen werden. Stattdessen generiert der Übersetzer neue
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
142
143
144
145
146
147
  Bezeichner.

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

- Das Frontend gibt derzeit noch keinerlei Warnungen aus.