ToolMaker is a set of tools to make compilers, analyzers and similar
tools. It creates a lexcial scanner (like lex et.al) and a parser
(like yacc et.al). But in addition it can also generate a lister
(modules handling input text and error messages). It is also build on
top of a powerful macro tool, imp, similar in function to m4 and
others.
The ToolMaker Reference Manual is published online. It is the original 1994 SoftLab manual, ported to AsciiDoc, and covers all five parts:
- Part I — ToolMaker System Description
- Part II — ParserMaker
- Part III — ScannerMaker
- Part IV — ListerMaker
- Part V — Toolmake
Man pages for the individual tools: imp(1), lmk(1), pmk(1), smk(1) and toolmake(1).
The site is rebuilt and republished automatically whenever the documentation
sources change. The scanned paper original the text was transcribed from is
kept in doc/manual.pdf, and to build the HTML yourself
see docs-src/README.md.
This is a project which contains original work by Kenth Ericsson, Jerker Willander and others at SoftLab AB Sweden, including myself. SoftLab was sold to Rational Software in 1997 which then resold that to Ericsson some years later.
Although this would strictly be copyrighted material, but considering
- me being one of its authors and also one of the owners of SoftLab
- the almost 20 years that has gone by
- the low commercial value in this technology, given that there are a multitude of other tools available
- the missing documentation
- that I am willing to take this down if anyone objects
I'm making this repo of resurrected sources available, mostly for my own use. Please consult me before creating forks.
All licensing is removed, but the source for the licensing mechanism
is still here, but not cleaned or compiled recently. The same goes for
the toolmake utility, which creates an initial set of files for your
new ToolMaker-based project.
Otherwise the source compiles on multipe platfoms (Linux, Cygwin, ...) and all tests run (using Jregr).
We, who where at SoftLab at that time, where all involved in this in some way. Special thanks to
-
Kenth Ericsson & Jerker Wilander for the theory behind the error recovery in the parser generated by the ParserMaker.
-
Tony Olsson for the core of the scanner logic.
-
Myself, Reibert Arbring, Michael Dahlgren and Håkan Pettersson for structuring this into a project and filling out all the blanks.
To build you need gcc. A plain make builds natively, which on a
modern machine means 64-bit:
make
To build 32-bit instead, pass the bitness explicitly. This needs a
multilib gcc and binutils:
make BITNESS=-m32
If you want to run tests you need Jregr.
For building the documentation, see docs-src/README.md.