Kidsgrove Algol compiler on the Web


N.B.Tentative proof-of-concept version.

There is some info that might be useful here (opens in a separate window or tab).

Type in your Algol60 program (paper tape format) here:
Options for the compiler:
  TABLES TEXT
  
Yes 
YesYes
 Yes
    Explanation:
Selection of TABLES outputs tables linking the source code to the locations in memory.
The first section of the tables shows each procedure name followed by its unique internal number (known a a level number)
With the original Usercode compiler there is a second section showing where each P-routine is located in memory.
The numbers of the P-routines are the same as the level numbers in the first section.
This second section is absent if the 21st century version is used, but it produces a listing showing the binary code alongside the Usercode text.
Selection of TEXT outputs the Usercode text as it is generated by the compiler.
Version using original Paper Tape Usercode Compiler
Version using a 21st century Usercode translator written with yacc and C.
       
The output shows the program as it would have looked on a real KDF9 Flexowriter, preceded by links to the printer output and other useful files. There are also links to original documentation describing meaning of error reports.
If the program fails to compile, it may be worth trying to run it on the Whetstone Algol System.
There is a listing output by the compiler on a simulated line-printer.
The diagnostic output is sent to a file.

There are various example programs that are rather more interesting. Just click here, and select the text of the one that appeals to you, do a control-C, and then click back to get to this page, where you can now paste in this program.

A facility offering more options is available at the foot of this page.

To run the program that you have just Compiled

If your program reads data on the paper tape reader, type your data in here:

Switches for the emulator: (To learn about these switches read the first few lines of the emulator.)
       
The diagnostics log is normally sent to a file. If you are running a very small program such as “Hello World!”, you can remove the -d switch above, and have all the diagnostic output coming back to your screen. For running a more realistic program, not only do you need to send the diagnostics to a file using the -d switch, but you should reduce the verbosity level. For examples, look at the use of the emulator switches on the compilation sections.

Here are some links that might be useful.

response from the most recent compilation
output from the conversion to Algol Basic Symbols
diagnostic trace of the compilation
Usercode output by the compiler
line-printer output from the compilation
listing produced by the Usercode assembler
output on the UNIX console (quite possibly blank)
printer output before conversion to HTML
diagnostic trace from the KDF9 emulator
output on the KDF9 monitor flexowriter
stream 30 output from the program
directory listing of the emulator environment
Alternatively, you can create an Algol60 file (paper tape format) and upload it here:
File to upload and run:       
                  
Sorry this option does not allow you to choose the options, but you can do a rerun using the facility at the foot of this page. The default is probably no optimiser, no text. The actual options used are given at the head of the output.

Rerun the compilation with different options

Here you can re-run a file that was uploaded earlier with different switches.

Options for the compiler:
withwith
out
reference tables
generated Usercode text
call matrix and level parameters
print values of assignments
optimisation phase
  Explanation:
Selecting the third option prints the matrix of procedure calls and the internal parameters associated with each procedure
Selecting the fourth option copiles code to print values on all assignments at run-time.
This faclity is described in page L-2-0 and page L-3-0 of the official English Electric Algol Users Manual.
                  Ignore the section on segmented Kidsgrove ALGOL.
The last option invokes the optimiser, which was obviously not finished in the version of the compiler that we have preserved.
Simple loops are optimised correctly, but anything tricky, such as assignment to a for-loop’s control variable, or call of a procedure within a loop is very likely to be compiled incorrectly.
Version using original Paper Tape Usercode Compiler
Version using a 21st century Usercode translator written with yacc and C.