Amsterdam Compiler Kit (ACK) information sheet

1. What is ACK?

The Amsterdam Compiler Kit is an integrated collection of programs designed to simplify the task of producing portable (cross) compilers and interpreters. For each language to be compiled, a program (called a front end) must be written to translate the source program into a common intermediate code. This intermediate code can be optimized and then either directly interpreted or translated to the assembly language of the desired target machine.

The current version contains front-ends for Modula-2, C, ANSI C, Fortran, Pascal, Basic, and occam, and back-ends for a.o. DEC PDP-11, DEC VAX, Motorola 68000, Motorola M68020, SPARC, Intel 8080, Intel 8086, Intel 80386, Zilog Z80, Zilog Z8000, NS 16032. Also included are a parser generator called LLgen, a code-generator-generator (the code-generators are table-driven), a peephole optimizer on the intermediate code, a global optimizer on the intermediate code, table-driven machine-dependent peephole optimizers, and many other utilities.

2. What systems does ACK run on?

ACK is expected to run on any decent UNIX system. However, ACK does not produce binaries for systems it does not know about. Producing binaries for a new machine involves

  • writing a back-end table for the processor (if not done already). This may take 2-3 months.
  • writing the machine-dependent part of an assembler for the processor (if not done already). This may take a couple of days.
  • writing a system-call interface. This may again take a couple of days.
  • writing a conversion program, converting the machine-independent object format that ACK produces into a binary for the machine at hand.

3. How can I get ACK?

ACK is available through ftp.

4. How can I find out more about ACK?

References[Tan83a, Tan83b] give an overview of ACK. The intermediate code is described in detail in [Tan83c]. The optimizers are described in [Tan82, Bal85, Bal86]. The parser generator is described in [Jac85, Gru88]. Other ACK programs are described in [Tan84], but this is out of print. Postscript versions are available through ftp.

5. References

H.E. Bal, "The Design and Implementation of the EM Global Optimizer," Rapport IR-99, Vrije Universiteit, Amsterdam, March 1985.
H.E. Bal and A.S. Tanenbaum, "Language- and Machine-independent Global Optimization on Intermediate Code," Computer Languages, vol. 11, no. 2, pp. 105-121, April 1986.
D. Grune and C.J.H. Jacobs, "A Programmer-friendly LL(1) Parser Generator," Software - Practice and Experience, vol. 18, no. 1, pp. 29-38, January 1988.
C.J.H. Jacobs, "Some Topics in Parser Generation," Rapport IR-105, Vrije Universiteit, Amsterdam, October 1985.
A.S. Tanenbaum, H van Staveren, and J.W. Stevenson, "Using Peephole Optimization on Intermediate Code," TOPLAS, vol. 4, no. 1, pp. 21-36, January 1982.
A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. Stevenson, "A Practical Toolkit for Making Portable Compilers," CACM, vol. 26, no. 9, pp. 654-660, September 1983.
A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. Stevenson, "A Unix Toolkit for Making Portable Compilers," Proceedings USENIX conf., vol. 26, pp. 255-261, Toronto, Canada, July 1983.
A.S. Tanenbaum, H. van Staveren, E.G. Keizer, and J.W. Stevenson, "Description of a machine architecture for use with block structured languages," Rapport nr IR-81, Vrije Universiteit, Amsterdam, August 1983.
A.S. Tanenbaum et al., "Amsterdam Compiler Kit documentation," Rapport nr IR-90, Vrije Universiteit, Amsterdam, June 1984.
A.S. Tanenbaum, M.F. Kaashoek, K.G. Langendoen, C.J.H. Jacobs, "The Design of Very Fast Portable Compilers," ACM SIGPLAN notices, vol. 24, pp 125-131, November 1989 (PostScript, PDF).

6. Contacts

Andrew S. Tanenbaum

Ceriel J.H. Jacobs