57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.NH
 | 
						|
Outline of the program
 | 
						|
.PP
 | 
						|
The program can be divided into three parts. A first pass, which
 | 
						|
parses C program files and outputs definitions, a second pass which
 | 
						|
processes the definitions and a driver,
 | 
						|
which feeds the set of files to the first pass and
 | 
						|
directs its output to the second pass. Both passes produce the
 | 
						|
warnings on standard error output, which are redirected to standard
 | 
						|
output by the driver.
 | 
						|
.PP
 | 
						|
The first pass is based on an existing C front end, called
 | 
						|
.I cem
 | 
						|
[3].
 | 
						|
.I Cem
 | 
						|
is part of the Amsterdam Compiler Kit (ACK), as described in [4].
 | 
						|
.PP
 | 
						|
Most of the code of
 | 
						|
.I cem
 | 
						|
is left unchanged. This has several reasons. A lot of work, which
 | 
						|
is done by
 | 
						|
.I cem
 | 
						|
, must also be done by
 | 
						|
.I lint.
 | 
						|
E.g. the lexical analysis, the macro expansions,
 | 
						|
the parsing part and the semantical analysis.
 | 
						|
Only the code generation part is turned off.
 | 
						|
An advantage of this approach is, that a person who understands 
 | 
						|
.I cem
 | 
						|
will not have to spend to much time in understanding
 | 
						|
.I lint.
 | 
						|
.PP
 | 
						|
All changes and extensions to
 | 
						|
.I cem
 | 
						|
can be turned off by not defining the compiler directive
 | 
						|
.ft CW
 | 
						|
LINT.
 | 
						|
.R
 | 
						|
Compiling should then result in the original C compiler.
 | 
						|
.PP
 | 
						|
The second pass is a much less complex program.
 | 
						|
It reads simple definitions generated by the first pass and
 | 
						|
checks their consistency.
 | 
						|
This second pass gives warnings
 | 
						|
about wrong usage of function arguments, their results and
 | 
						|
about external variables, which are used and defined in more
 | 
						|
than one file.
 | 
						|
.PP
 | 
						|
The driver is a shell program, to be executed by the
 | 
						|
.UX
 | 
						|
shell
 | 
						|
.I sh.
 | 
						|
It executes the two passes and let them communicate through a
 | 
						|
filter (sort).
 | 
						|
Actually it is simplex communication: the first pass only talks to
 | 
						|
the second pass through the filter.
 | 
						|
.bp
 |