It is possible to defer the processing of a lexical string operator by using the lexical escape operator, which is the percent sign (%). Since all lexical string operators begin with a percent sign, the effect of placing two percent signs before the name of the lexical string operator defers the evaluation of the lexical string operator. If you want to defer processing of a lexical substitution operator, place two percent signs to the left and two percent signs to the right of the lexical string symbol name. This can be useful when you want the evaluation of a lexical string operator that you have used in a default macro argument to occur during macro expansion, rather than during macro definition. Lexical operator processing is suppressed during macro registration. Therefore, lexical operator processing is automatically deferred within the body of a macro. However, the .MACRO directive line that begins the macro definition is subject to normal lexical operator processing. Sometimes you may need to use the value of a lexical string symbol as the default for a macro argument, but you need to use the value of the lexical string symbol that is current when the macro expands, not when the macro is defined. Lexical Processing Without the Escape Operator shows an example of this, but it does not use an escape operator. Example 1 Lexical Processing Without the Escape Operator CODE_PSECT_NAME = "CODE1" .MACRO CODE_PSECT PSECT_NAME=%string(CODE_PSECT_NAME) .PSECT PSECT_NAME .ENDM CODE_PSECT CODE_PSECT CODE_PSECT_NAME = "CODE2" CODE_PSECT Lexical Processing Without the Escape Operator does not process correctly for the following reasons: o The lexical operator in the .MACRO directive line is processed when the macro is defined, not when the macro expands. o The CODE_PSECT macro always defaults to setting the psect to the CODE1 psect because the default for the PSECT_NAME argument will be set to CODE1, not %string(CODE_PSECT_NAME). This is because %string(CODE_PSECT_NAME) is evaluated when the CODE_PSECT macro is defined, not when it expands. Lexical Processing with Escape Operator is similar to Lexical Processing Without the Escape Operator except it uses the lexical escape operator. Example 2 Lexical Processing with Escape Operator CODE_PSECT_NAME = "CODE1" .macro CODE_PSECT PSECT_NAME=%%string(CODE_PSECT_NAME) .psect PSECT_NAME .endm CODE_PSECT CODE_PSECT CODE_PSECT_NAME = "CODE2" CODE_PSECT Lexical Processing with Escape Operator processes correctly for the following reasons: o Lexical operator processing of %%string(CODE_PSECT_NAME) is deferred when the CODE_PSECT macro is defined. The default value for the PSECT_NAME argument is stored as %string(CODE_PSECT_NAME). o During macro expansion, %string(CODE_PSECT_NAME) is evaluated, which results in the current value of the CODE_PSECT_NAME lexical string symbol as desired.