| This is the GNU Algol 68 compiler. |
| |
| This compiler implements the Algol 68 programming language |
| (https://www.algol68-lang.org) as defined in the Revised Report, along |
| with several GNU extensions to the language which are oriented to |
| enhance its application in systems programming and to achieve a good |
| integration in POSIX systems. |
| |
| The parser component used in this front-end has been adapted from |
| Algol 68 Genie, an Algol 68 interpreter written by Marcel van der |
| Veer. It is worth noting that this parser is not your typical garden |
| variety parser, as it is capable of effectively parsing the two-level |
| grammar of Algol 68, which is no small task. Parsing Algol 68 is |
| notoriously difficult, and without Marcel's careful work of many years |
| this front-end would most probably not exist. It is also a beautiful |
| implementation that is a delight to both read and work with. |
| |
| The syntax tree built by the parser is lowered into a GENERIC tree by |
| a lowering pass, which then invokes the gimplifier and hands the |
| resulting gimple IR over to the rest of the compilation, down the |
| rabbit hole all the way to optimized assembly code. |
| |
| The compiler driver is called `ga68'. |
| The compiler proper is called `a681'. |
| |
| Programs built by this compiler make use of the libga68 run-time |
| library. |
| |
| Building |
| ======== |
| |
| Configure and build GCC with: |
| |
| $ mkdir build-algol68 |
| $ cd build-algol68 |
| $ ../configure --enable-languages=algol68 |
| $ make |
| $ make install |
| |
| Alternatively you can configure and build a non-bootstrapped compiler, |
| which is much faster to build. But note that in this case you better |
| pass some flags so the compiler gets built optimized, or the resulting |
| compiler will be rather slow: |
| |
| $ mkdir build-algol68 |
| $ cd build-algol68 |
| $ ../configure --enable-languages=algol68 BOOT_CFLAGS="-O2 -g" \ |
| BOOT_CXXFLAGS="-O2 -g" \ |
| STAGE1_CFLAGS="-O2 -g" \ |
| STAGE1_CXXFLAGS="-O2 -g" |
| $ make |
| $ make install |
| |
| Debugging |
| ========= |
| |
| A few front-end specific options useful for debugging are: |
| |
| '-fa68-dump-ast' |
| Emits a textual representation of the parse tree as produced by the parser. |
| |
| '-fa68-dump-modes' |
| Emits a list of all parsed modes. |
| |
| See the Developer Options section in the GNU Algol Compiler manual for |
| more hacking related options. |
| |
| Testing |
| ======= |
| |
| Invoke the full testsuite from the build directory: |
| |
| $ make check-algol68 |
| |
| You can pass -jN to run tests in parallel: |
| |
| $ make -jN check-algol68 |
| |
| Invoke a subset of the testsuite. For example, to only run tests that |
| involve compilation but not running: |
| |
| $ make check-algol68 RUNTESTFLAGS="compile.exp" |
| |
| There are the following sets of tests: |
| |
| compile.exp - compilation tests |
| |
| Invoke only a specific test: |
| |
| $ make check-algol68 RUNTESTFLAGS="--all compile.exp=bad-coercion-1.a68" |
| |
| Test in both 32-bit and 64-bit in multilib arches: |
| |
| $ make check-algol68 RUNTESTFLAGS="--target_board=unix\{-m64,-m32\}" |
| |
| Test that integration with the GCC GC is correct: |
| |
| $ make check-algol68 RUNTESTFLAGS="CFLAGS_FOR_TARGET='--param=ggc-min-expand=0 --param=ggc-min-heapsize=0'" |
| |
| Logs (with corresponding commands) can be found in |
| BUILD/gcc/testsuite/algol68/algol68.log. |
| |
| See https://gcc.gnu.org/install/test.html for more details. |
| |
| Useful Resources |
| ================ |
| |
| - An Emacs mode for editing Algol 68 programs can be found at |
| https://git.sr.ht/~jemarch/a68-mode. It supports automatic |
| indentation, pretty-printing of bold tags, an auto-stropping minor |
| mode and other features. |
| |
| - The Algol 68 Jargon File at https://jemarch.net/a68-jargon provides |
| a comprehensive list of definitions of many of the technical and |
| non-technical terms used in the context of Algol 68. |
| |
| - The very formal Revised Report on the Algorithmic Language ALGOL 68 |
| can be found at [1]. |
| |
| - The truly delightful Informal Introduction to ALGOL 68 by C.H |
| Lindsey and van der Meulen can be found at [2]. |
| |
| Community |
| ========= |
| |
| mailing list: algol68@gcc.gnu.org |
| irc: irc.oftc.net - #gnualgol |
| |
| [1] https://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB-600dpi.pdf |
| [2] https://inria.hal.science/hal-03027689/file/Lindsey_van_der_Meulen-IItA68-Revised.pdf |