The input text may contain preprocessor conditional inclusion lines, and also general symbol substitution sequences. The preprocessor conditional inclusion commands have the form
#if [not] symbol [then] lines #elsif [not] symbol [then] lines #elsif [not] symbol [then] lines ... #else lines #end if;
For these Boolean tests, the symbol must have either the value True or False. If the value is True, then the corresponding lines are included, and if the value is False, they are excluded. It is an error to reference a symbol not defined in the symbol definitions file, or to reference a symbol that has a value other than True or False. The use of the not operator inverts the sense of this logical test, so that the lines are included only if the symbol is not defined. The THEN keyword is optional as shown
The # must be in column one, but otherwise the format is free form. Spaces or tabs may appear between the # and the keyword. The keywords and the symbols are case insensitive as in normal Ada code. Comments may be used on a preprocessor line, but other than that, no other tokens may appear on a preprocessor line. Any number of #elsif clauses can be present, including none at all. The #else is optional, as in Ada.
The # marking the start of a preprocessor line must be the first non-blank character on the line, that is it must be preceded only by spaces or horizontal tabs.
Symbol substitution is obtained by using the sequence:
anywhere within a source line, except in a comment. The identifier following the $ must match one of the symbols defined in the symbol definition file, and the result is to substitute the value of the symbol in place of $symbol in the output file.