Actually... I am still confused..
I tried to find out how I can explain them, I went through some examples given in IBM manuals. What I concluded that Compiler Directing Statements just provide direction to the compiler to compile the program with different compiler options; and at the same time it can change the structure of the program as well at compilation time. See the examples below:
This extended source program library statement provides a complete COBOL program as the source for a compilation. For rules of formation and processing, see the description of text-name for the COPY statement.
*CONTROL (*CBL) statement
This compiler-directing statement selectively suppresses or allows output to be produced. The names *CONTROL and *CBL are synonymous.
This library statement places prewritten text into a COBOL program. A user-defined word can be the same as a text-name or a library-name. The uniqueness of text-name and library-name is determined after the formation and conversion rules for a system-dependent name have been applied. If library-name is omitted, SYSLIB is assumed.
This extended source library statement removes COBOL statements from the BASIS source program.
This compiler-directing statement specifies that the next source statement is to be printed at the top of the next page.
The compiler handles this statement as a comment.
This library statement adds COBOL statements to the BASIS source program.
PROCESS (CBL) statement
This statement, which is placed before the IDENTIFICATION DIVISION header of an outermost program, indicates which compiler options are to be used during compilation of the program.
This statement is used to replace source program text.
SERVICE LABEL statement
This statement is generated by the CICS translator to indicate control flow, and should be used at the resume point for a call to CEE3SRP. It is not intended for general use.
These statements indicate lines to be skipped in the source listing.
This statement specifies that a title (header) should be printed at the top of each page of the source listing.
The USE statement provides declaratives to specify these elements:
Error-handling procedures: EXCEPTION/ERROR
User label-handling procedures: LABEL
Debugging lines and sections: DEBUGGING
May be my conclusion is wrong, but the examples says the same thing.
Coming to the Compiler Options, it have nothing to do with structure of the program. It will just describe, how program should behave at run time. Some examples like:
ARITH: The maximum number of digit positions in the PICTURE clause for packed-decimal, zoned-decimal, and numeric-edited data items is 18 with COMPAT option and 31 with EXTEND option
CICS: The CICS compiler option enables the integrated CICS translator and allows specification of CICS suboptions. You must use the CICS option if your COBOL source program contains EXEC CICS statements and the program has not been processed by the separate CICS translator.
MAP: Use MAP to produce a listing of the items defined in the DATA DIVISION.
OPTIMIZE: Use OPTIMIZE to reduce the run time of your object program. Optimization might also reduce the amount of storage your object program uses. Optimizations performed include the propagation of constants and the elimination of computations whose results are never used. Because OPTIMIZE increases compile time and can change the order of statements in your program, you should not use it when debugging.
and lots more.
Please correct me if I am wrong