This topic explains how to write an integrated preprocessor and describes the interface used to pass information between a preprocessor and the Compiler.
Although a preprocessor could be written in a language other than COBOL, the following description assumes that it is written in COBOL.
The Integrated Preprocessor Interface works on the simple concept that preprocessing is a form of editing. The preprocessor marks each line of the source code as:
When compiling a COBOL program, the compiler calls the preprocessor instead of directly reading the source file and receives the code line by line from the preprocessor.
For your preprocessor to function correctly during a background syntax check in the IDE, it must conform to the preprocessor stacking protocol detailed in the section Multiple Preprocessors.
The operation of the debugger depends on a mapping of each line of object code onto each line of source code. The marking of source lines described above allows this mapping to be valid even though the object code does not match the source code.
Users of non-stacked preprocessors should turn off background parsing in the Preferences dialog box by clicking Window > Preferences > Micro Focus > COBOL > Editor and deselecting Background parsing.
The preprocessor program should be compiled in the same manner as any other program you want to debug. On UNIX platforms, you must also include the --debugme cob flag during compilation.
After compiling your preprocessor program for debugging, you use the debugger as though you want to debug the Compiler itself, that is debug COBOL. You will not see the Compiler debugged, since it is not compiled for debugging, but you will see any programs it calls that have been compiled for debugging, such as your preprocessor.
When debugging preprocessed generated statements, which include WHEN / CATCH / ELSE / END-??? tokens, the debugger does not step on these tokens themselves, but rather the first statement afterwards. This is the case even if the preprocessor has explicitly asked for a verb step\stop; you can only step on actual verbs in preprocessed code.