TMG Meta Compiler

Brief Description

The designation "meta" means that the TMG compiler compiles compilers. That is, take a grammar of a language, run it through TMG, and you get a compiler for that language: grammar in, compiler out! The user need not know anything about the design of compilers. The language of the TMG compiler, TMGL, is a superset of the BNF (= Bacchus Nauer (or Normal) Form). If one so desires, one may refrain from employing anything outside of the BNF, however. Finally, the TMG compiler compiles itself. An extra cycle of compilation of TMG itself, we call "confirmation". It should yield a byte-wise identical executable file.Such a confirmation compilation is an excellent validity check for a new version of TMG.

Brief History

TMG was invented by Robert McClure, in 1968, on an even-then obscure computer. He promptly ported it to the UNIVAC and IBM top mainframe computers. During its undeservedly-brief popularity, it was employed to construct the MULTIX operating system. (MULTIX was the name of the first-generation of UNIX.) The "local variable" capability was added to TMG by the MULTIX developers, at Bell Laboratories.

At JPL (= Jet Propulsion Laboratories), around 1970, a team lead by me expanded TMG and made it completely self-compiling.

TMG's requirement for resources exceeded that available on even the largest mainframes (like our IBM 360/75H). Thus, TMG became neglected. Today, even the smallest desktop computer vastly exceeds those old mainframes. It is time to revive TMG!

In a private communication, Mr. McClure indicated that "TMG" was an abbridement of "transmogrification". He never revealed this information in print.


Bacchus Nauer Form or Bacchus Normal Form [I am not going to enter into this naming controversy] was devised, in the early 1960's, as a meta-language, to describe the Algol compiler language. This was the original defining document of Algol, upon which the Algol compilers subsequently were based.

The BNF notation is very concise. This conciseness is both its strength and its weakness. If the names are just a few characters, they have scant mnemonic content; but, if the names are a whole sentence, they obscure the BNF notation. Unless the BNF is type-set in a larger-size font; but, then, the typists complain. Especially with verbose names, it is difficult to see the forest for the trees. In an attempt to improve the human-readability, an equivalent graphical notation has become popular; but BNF purists object. You cannot win!

In either the origiinal or graphical version, BNF (to the exclusion of any other) has been adopted by both the Computer Scientists for describing computer languages and by Human Linguists for describing human languages. In the latter case, it has become apparent how inadequate was our prior knowledge of the details of the grammars of human languages.


BNF was devised to describe the Algol language. Only afterwards were compilers designed for Algol. The purpose of BNF had been to define the Algol language. There had been no intention, at that time, to specify what the output of the yet-to-be-written compilers should be. Thus, BNF has no provisions for describing the output (formally called "production") of the compiler. The TMG has its own grammar for the production. BNF purists will insisst that the production is implicit in the BNF notation. They are welcome to employ the default (BNF implicit) production, provided by TMG.

Self Compiling

While there are several other meta-compilers (even one called "Meta"), I do not know of any other compiler than TMG that is self-compiling. If anyone knows of any other selfl-compiling compiler, please inform me.

Self-compilation of TMG, from a description of TMGL in TMGL has two ramifications


This is an announcement of my intention to commence recreating TMG, to run under Windows NT, in my spare time. Future developments will be posted here. Inquiries, encouragements, suggestions, and assistance are welcome.
last revised Sunday 01-st June (VI) 1997
copyright R. I. 'Scibor-Marchocki 1997 all rights reserved