Retrocomputing project: an Algol W Compiler.

I have written an Algol W Compiler, __aw2c__, for historical reasons 1?. One reason: Algol W was the first language to support DataStructures as types, that was a fairly significant step. There are OpenSource implementations of Algol 604? and Algol 685? but none for this third dialect, Algol W. --GlynWebster

aw2c appears to be reliable: it has been used to compile the a68h Algol 68 compiler, which in turn produces correct output, I've been told.

According to Knuth's aw2c "Man or boy test" aw2c is a manly Algol compiler.

Read more about the compiler here:

What is Algol W?

Algol W is one of the first language designs of NicolasWirth. Algol W is Algol 60 with string handling, complex numbers and dynamically allocated records, with some of Algol 60's syntactic idiosyncrasies stripped away. It kept Algol 60's "call by name" argument passing style, and is the probably the only other language to have used it. NicolasWirth presented it to the committee that was designing the successor to Algol 60, but it was rejected as a design basis in favour of a set of vague ideas that later became Algol 68. Which was a shame really, because Algol 68 turned out to be so difficult to implement it never really got off the ground, so programmers were left slogging along with Fortran and COBOL for long time.

Why did Algol W disappear?

It was not Pascal. Then it was not C. OS/360 is not that popular a platform anymore. Algol W was rejected as the template language for Algol 68. NicolasWirth went on to invent Pascal, which superseded Algol 60 and Algol W in schools. The Stanford Algol W Compiler seems to have had annoying (but possibly unavoidable) limitations. And there was that whole "Is this GoTo really necessary?" thing. Historical reasons, like I said. :-)

A little Algol W sample:

 comment statements can be procedure parameters;
   procedure vectoroperation (integer j; integer value n; procedure p);
       j := 1;
       while j <= n do
           j := j + 1
     end vectoroperation;

   integer i;
   real array a, b, c (1::10);
   real prod;

   (initialize a and b here)

   vectoroperation (i, 10, c(i) := a(i) + b(i));
   (c is now the sum of vectors a and b)

   prod := 0.0;
   vectoroperation (i, 10, prod := prod + a(i) * b(i));
   (prod is now the product of vectors a and b)

The Compiler

The aw2c Compiler generates GNU C intermediate code. Algol- and Pascal-like languages can be translated into GNU C simply and directly because of GNU's extensions to the C language: statement expressions, nested functions, variable length arrays and inline functions. They fit so well to this task that I think this is the very reason GNU added them. aw2c does not extend the Algol W language but the Compiler does allow inline C code; this is for interfacing to existing C libraries and replacing System 360 assembly code, not general Algol W programming. The limits placed on the language by the Stanford Compiler have been lifted, nowadays we have the privilege of working on much more powerful computers.

I was originally thinking of modifying the GNU Marst4? Compiler to accept Algol W, but there were too many differences between the languages to make this practical.


I have translated the Algol W Language Description from a partially OCRed photostat3? into LaTeX, but I have not yet obtained permission to republish it. (I jumped the gun there.) But a good PDF of the original man can be found here: Historic Documents in Computer Science.

1? This isn't so odd, people restore old cars and computers, also go look at the Retrocomputing Museum

3? Stanford University Technical Report CS-TR-71-230.pdf [3.5MB?, "This manual refers to the version of the Algol W Compiler dated 1.6 January 1972". It has a formal description of the language and a manual for its standard library is in the back, which is good. (This document was a print-out that sat in a ring-binder for years before someone scanned it with some weird OCR system that starts with a bitmap of the page, then replaces as many characters as it can with PDF text after guessing at their fonts. The system must work well on laser-printed documents, but electric-typewriter and ball-point documents seem to be just on the point were its effectiveness begins to break down. The result is readable but quite weird in places.)

4? GNU Marst is 100 pages of very clear, simple C code, heavily and helpfully commented. I've printed it out and I'm reading it in bed. (Have you tried this? A really good piece of code is readable, and enjoyable. I'm sure I'm learning things. There are several signs of the author being an experienced hacker: he refers to RAM as "main core" for example :-)

5? Marcel van der Veer's Algol68G and Sian Leitch's Algol68toC port

This is a subpage of Projects.