比较和替换规则
本主题介绍了用于比较和替换的详细规则。
- 算术和逻辑运算符被视为文本单词,只能通过伪文本操作数进行替换。
- 文本比较过程中不包含开始和结束空格。 在文本比较过程中使用嵌入空白来分隔多个文本单词。
- 当 operand-1 是象征常量时, operand-1 仅与相同的完全象征常量匹配。 例如,如果在 operand-1中指定了
ALL "AB",那么不会将库文本中的"ABAB"视为匹配项; 仅将ALL "AB"视为匹配项。 - 库文本中最左边的单词前面的任何分隔符逗号,分号或空格都将复制到源文本中。 Beginning with the leftmost library text word and the first operand-1 或 partial-word-1 specified in the REPLACING phrase, the entire REPLACING operand that precedes the keyword BY is compared to an equivalent number of contiguous library text words.
- operand-1 仅当构成 operand-1 的文本字的有序序列与库字的有序序列 (字符字符) 相同时,才匹配库文本。 对于本地字符,本地字符的顺序必须与库字的顺序相同,本地字符的顺序必须与本地字符的顺序相同。
- 当指定前导短语时, partial-word-1 仅当构成 partial-word-1 的连续字符序列与以库文本字的最左边字符位置开头的连续字符数相等时,才匹配库文本。
当指定结尾短语时, partial-word-1 仅当构成 partial-word-1 的连续字符序列与以库文本字的最右边字符位置结尾的连续字符数相等时,才匹配库文本。
- 为了进行匹配,每次出现的分隔符逗号,分隔符分号或一个或多个分隔符空间序列被视为单个空格。
但是,当 operand-1 或 partial-word-1 仅由分隔符逗号或分隔符分号组成时, operand-1 或 partial-word-1 作为文本词参与匹配。 在这种情况下,可以省略逗号或分号分隔符后面的空格。
当库文本包含未紧跟分隔符空格,分隔符逗号,分隔符分号或分隔符句点的右引号时,右引号被视为分隔符引号。
- 如果未发生匹配,那么将与每个连续的 operand-1 或 partial-word-1 (如果已指定) 重复比较,直到找到匹配或不存在进一步的替换操作数为止。
- 每当 operand-1 与库文本之间发生匹配时,都会将相应的 operand-2 复制到源文本中。 每当 partial-word-1 与库文本字之间发生匹配时,该库文本字的匹配字符都将替换为 partial-word-2 或在 partial-word-2 由零个文本字组成时删除。
- 将所有操作数进行比较而不进行匹配时,会将最左边的库文本字复制到源文本中。
- 处理完库文本字并将其复制到源文本中 (未更改或由于匹配而被替换) 后,下一个连续未复制的库文本字将被视为最左边的文本字,并且比较周期将从第一次出现的 operand-1 或 partial-word-1开始再次开始。 此过程将继续,直到比较最右边的库文本字为止。
- 库文本, pseudo-text-1和 partial-word-1 中的文本词序列由参考格式规则确定。 更多信息,请参阅参考格式。
- 在源文本中放置文本字时,仅在已存在空格的文本字之间引入其他空格,包括源行之间假定的空格。
- 以下规则适用于注释行,内联注释和空白行:
- 为了进行匹配,将忽略库文本中的注释行,内联注释或空白行, pseudo-text-1或 partial-word-1 。
- 将库文本中的注释行,内联注释或空白行复制到生成的源文本中,但未发生以下异常: 如果与 pseudo-text-1 或 partial-word-1匹配的文本单词序列中出现该注释行,内联注释或空白行,那么不会复制库文本中的注释行,内联注释或空白行。
- 只要将 pseudo-text-2 或 partial-word-2 作为文本替换结果放入源文本中,就会将 pseudo-text-2 或 partial-word-2 中的注释行,内联注释或空白行按原样复制到生成的程序中。
- 如果单词 COPY 出现在注释条目中,或者出现在注释条目所在的位置,那么会将其视为注释条目的一部分。
- COPY 替换不会影响 EJECT , $TAG1 SKIP1 $TAG2 , $TAG3 SKIP2 $TAG4 , $TAG5 SKIP3 $TAG6 或 TITLE 编译器定向语句。
- 包含 *CONTROL (*CBL) , EJECT , SKIP1, SKIP2, SKIP3或 TITLE 语句的行可以出现在库文本中。 此类行将复制到生成的源文本中,保持不变。
- 以下规则适用于调试行:
- 在库文本和伪文本中允许调试行。 调试行中的文本字参与匹配规则,就像字母 "D" 没有出现在指示符区域中一样。 如果调试行在开始伪文本定界符之后但在匹配的结束伪文本定界符之前在源文本中开始,那么将在伪文本中指定调试行。
- 如果将更多行作为 COPY 语句的结果引入到源文本中,那么如果 COPY 语句在调试行上开始,或者如果引入的文本字在库文本中的调试行上出现,那么引入的每个文本字都将出现在调试行上。 引入 BY 短语中指定的文本字时,如果在调试行上指定了要替换的第一个库文本字,那么它将显示在调试行上。
- 在调试行上指定 COPY 语句时,复制的文本将被视为显示在调试行上,但文本中的注释行在生成的源文本中显示为注释行。
- 在处理完所有 COPY 和 REPLACE 语句之后,如果在 SOURCE-COMPUTER 段中未指定 WITH 调试 MODE 子句,那么调试行将被视为具有注释行的所有特征。
- 在完全处理完所有 COPY 和 REPLACE 语句之前,无法确定整个 COBOL 源文本的语法正确性,因为库文本的语法正确性无法独立确定。
- (此规则仅适用于伪文本。) 如果源文本中出现了由程序文本中的冒号定界的哑元操作数
:TAG:,那么编译器会将哑元操作数替换为 必需 文本。 示例 3 显示了如何将其与哑元操作数:TAG:配合使用。 冒号充当分隔符,并使TAG成为独立操作数。 - 通过使用
LEADING|TRAILING partial-word-1 BY partial-word-2短语或使用伪文本:TAG:方法,可以使用带有 REPLACE 短语的 COPY 语句来替换词的部分。 - 替换后,文本字词将根据 85 COBOL 标准格式规则放置在源文本中。