Generating a Compiler


To generate a compiler from a Gentle specification the Gentle compiler has to be invoked for each Gentle module. Then the Reflex program is used to produce a Lex specification. Lex and Yacc are used to generate a scanner and a parser. The C compiler then translates the generated and (possibly user supplied) C modules. This Figure shows the way these tools cooperate:


The Gentle compiler is invoked by the command

   gentle module.g
This translates a Gentle module module.g into a C module module.c (file names for Gentle modules must have the suffix .g).

If the module contains a grammar specification, then the following files are generated in addition: gen.lit contains Lex specifications for terminal symbols that appear literally in the specification. gen.tkn contains a list of tokens introduced in the specification. gen.h is a C header file that introduces a data type for token attributes and defines the codes of the tokens. gen.y is a Yacc specification of the underlying grammar.

See the Language Reference Manual for a description of Gentle.


Reflex assembles various files and combines them to form a Lex specification.

For each token Token introduced in the specification, there must be a token description file Token.t . This file must specify a regular expression for the token and an action that computes the attributes of the token.

A block Block of the Lex specification may be overridden by a file Block.b . This allows the specific definition of white space and comment conventions ( LAYOUT.b, COMMENTS.b).

The directory reflex contains reusable token description and block files.

Reflex is invoked by the command

This creates a Lex specification gen.l .

See the Reflex Reference Manual for details.


The command

   lex gen.l
invokes the scanner generator Lex with the specification gen.l . This creates a C module lex.yy.c .


The command

   yacc gen.y
invokes the parser generator Yacc with the specification gen.y . This creates a C module y.tab.c .

C Compiler

The command

   cc file.c ... grts.o
creates an executable program. file.c ... is a list of generated or user-written C files. One of these modules must supply a function main that invokes the generated function ROOT(). The library provides such a function (module main.c).

See the Library Reference Manual for a description of library modules.