123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- .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
|