Incremental compilation and code generation
Bruce, Robert Ewing
Kennedy, Kenneth W.
Master of Science
Time sharing compilers are typically batch compilers that have been modified, via inclusion of a symbolic debugger, to "emulate" an interactive environment. The trend is away from interaction with the language processor and toward interaction with a common symbolic debugger. There are several problems with this approach: 1) It causes great time delays when a problem is isolated and a source change is necessary to correct a "bug". The use of an editor, compiler, and linkage editor is required to get back to the symbolic debugger. 2) Using a symbolic debugger requires knowledge of yet another language (the debugger's language). 3) Typically a symbolic debugger is written to work with more than one language and therefore has to house (sometimes incompatible) constructs for all of the languages it supports. The incremental compiler on the other hand has a rapid response to source changes. There is no need for a complete recompilation and linkage edit in order to re-execute the program after a change is made. The time required to make a change is proportional to the size of the change and not to the size of the program. The BASIC language processing system discussed in this work can operate as an incremental language processor as well as a Link-Ready (LR) code generating compiler. The term 'link-ready' denotes a type of relocatable object code that is suitable for linking with the BASIC library as well as with other user-written routines that have been separately compiled by BASIC or any other language processor. The compiler system operates in two modes, a link-ready code generating mode commonly called a batch compiler and an incremental or interactive mode that allows the user to enter source code lines in any order receiving error messages (if the source line is in error) as each line is entered. A BASIC program is first developed using the incremental compiler. Once the program is "debugged", it is compiled using the batch compiler to produce a more efficient executable module.