README.md 3.17 KB
Newer Older
1
# Curry Frontend
2

3
4
The Curry frontend parses source files (`.curry`), emits errors and
warnings, performs various checks and transformations and 
5
generates FlatCurry (`.fcy`, `.fint`) or AbstractCurry (`.acy`, `.uacy`) amonst other formats.
6

7
8
The project originated from a modified version of the
Münster-Curry-Compiler (MCC) for use as a frontend in PAKCS.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
9

10
## Requirements
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
11

12
13
* `cabal-install`
* A recent version of the `curry-base` package, installed locally
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
14

15
## Building
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
16

17
To build the project, run
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
18

19
> cabal v1-build
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
20

21
## Running
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
22

23
To run the project, you can use
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
24

25
> cabal v1-run
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
26

27
Alternatively, you can launch the built executable manually from `dist/build/curry-frontend`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
28

29
## Usage
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
30

31
For a detailed overview of the available options, you can use:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
32

33
> curry-frontend --help
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
34

35
### Available Formats
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
36

37
```
38
39
40
41
--flat  : Generate a FlatCurry (.fcy) and FlatInterface (.fint) file
--xml   : Generate a FlatXML (_flat.xml) file
--acy   : Generate a (type-inferred) AbstractCurry (.acy) file
--uacy  : Generate an untyped AbstractCurry (.uacy) file
42
```
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
43

44
45
46
47
The generation of an untyped AbstractCurry program is performed without
type checking (i.e. programs with type checks will compile). All functions
will either have the type signature specified in the source or, if not
available, the dummy type `prelude.untyped`.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
48

49
50
51
FlatCurry files will always be generated for the imported modules,
since the interfaces are required for static-semantic analysis and type
inference (only for typed AbstractCurry).
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
52

53
## Remarks
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
54

55
56
57
58
- To use the PAKCS libraries (especially for the `Prelude`), the environment
  variable `PAKCS_LIB` has to point to the correct paths, e.g. using
  
  > export PAKCS_LIB=[pakcs path]/pacs/lib:[pakcs path]/pacs/lib/meta:...
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
59

60
  where `[pakcs path]` is the directory containing the PAKCS distribution.
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
61

62
63
64
65
66
67
- In contrast to PAKCS, the frontend allow use of anonymous variables
  (denoted by an underscore `_`) in type declarations, e.g.
  
  ```curry
  data T _ = c
  ```
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
68

69
## Known Issues
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
70

71
72
- 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
73

74
- 'let'-Anweisungen dürfen nicht folgendes Layout besitzen:
Bjoern Peemoeller's avatar
Bjoern Peemoeller committed
75
76
77
78

           let x = <expr>
               in ...

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

82
83
- 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
84
85
86
  einem Fehler). Der Listenkonstruktor (:), sowie Tupel-Konstruktoren
  dagegen sind qualifizierbar.

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

91
92
93
- 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
94
95
96
97
98
99
  Bezeichner.

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

- Das Frontend gibt derzeit noch keinerlei Warnungen aus.