CAN CSA Z243.180-89 (2004) 标准详解——PL/I 程序设计语言规范

加拿大国家标准中 PL/I 语言的语法、语义与实施要求

标准概况与适用范围

CAN/CSA Z243.180-89 (R2004) 是加拿大标准协会(CSA)针对 PL/I 程序设计语言发布的加拿大国家标准。该标准于 1989 年首次发布,2004 年经确认继续有效,至 2026 年仍为加拿大采纳的国家标准之一。本标准等效采用国际标准 ISO 6160:1984 及美国国家标准 ANSI X3.53-1984,是 PL/I 语言领域最为权威的规范之一。

本标准适用于以下范围:

  • PL/I 编译器的设计、开发与测试;
  • PL/I 程序在不同平台与实现之间的可移植性控制;
  • 软件开发人员理解 PL/I 语言所要求的标准语义与语法;
  • 系统维护与遗留代码升级时需要处理 PL/I 程序的安全性和正确性。

任何声称“符合 CAN CSA Z243.180-89”的 PL/I 实现都必须满足标准中规定的所有必需特性,不得省略核心功能(如基本数据类型、语句或输入输出机制)。

强制性要求: 标准明确列出“必备”与“可选”要素。任何缺失必备特性的实现不得宣称符合本标准,否则视为严重违反标准合规性要求。开发者务必查阅标准中的符合性条款(§20)以确保实现符合要求。

主要技术内容与要求

CAN CSA Z243.180-89 对 PL/I 程序设计语言进行了全面而严格的规范,涵盖词法、语法、语义以及程序执行模型。以下为重点技术领域。

词法与数据结构

标准定义了三类字符(字母、数字、特殊字符)、标识符规则以及预处理(COMPILE)指令。数据分成若干基本类型和复合类型,下表总结了核心数据类型及其典型精度要求。

PL/I 标准要求的基本数据类型(部分)
数据类型 关键字 精度 / 长度 存储属性 备注
算术固定二进制 FIXED BINARY (p,q) 或 (p) 0–31 位;若未指定则默认 15 p 为总位数,q 为小数位数
算术浮点二进制 FLOAT BINARY 单精度 (6) / 双精度 (16) 默认单精度 满足 ISO 浮点要求
算术固定十进制 FIXED DECIMAL (p,q) p 最高 15 位 常用于财政计算
算术浮点十进制 FLOAT DECIMAL 精度最少 6 位 具体实现定义范围 较少使用
字符串 CHARACTER VARYING / NONVARYING 最大长度 32767 必要时可变长度
位串 BIT 长度 1–32767 固定或可变 用于真值及位操作

语句与控制结构

标准包含完整的程序流程语句:IF-THEN-ELSE 条件分支、DO 组(含 DO WHILE/UNTIL)、GOTOLEAVE(循环退出)以及 CALLRETURN。语句定义严格遵循语义规则,例如所有标签必须在同一过程中可见。

过程与块结构

PL/I 采用块结构(PROCEDURE / BEGIN 块),允许嵌套且变量作用域遵循 BLOCK 层级的可见性规则。标准同时定义了内部和外部过程以及入口名(ENTRY)的接口规范,包括参数传递(按引用或按值)和可选参数的支持。

输入输出

标准规定了两种 I/O 模型:流式 I/O(GET FILE / PUT FILE,包括 LIST、DATA、EDIT 数据格式)和记录式 I/O(READ / WRITE,面向文件记录块)。此外还定义了文件的 OPEN、CLOSE 以及环境装订(ENVIRONMENT)参数,用于控制文件属性(记录长度、文件组织等)。

异常处理

ON 语句用于定义条件处理,涵盖 ERRORZERODIVIDEENDFILEIONFLOW 等条件。标准要求条件处理可嵌套并能恢复执行或改变控制流,是 PL/I 安全编程的关键特性。

常见陷阱: 使用 ON 语句时必须注意处理块的作用域与恢复机制;不清除的处理程序可能导致未预期的控制流。标准要求编译器至少提供“默认忽略”(硬件条件)或“终止”(严重错误)行为,但实现可提供额外选项。

实施与应用要点

遵循 CAN CSA Z243.180-89 标准实施 PL/I 语言时,开发者与工具链需关注以下要点:

  • 符合性策略: 编译器应提供严格模式(STRICT)来禁止历史方言扩展,只接受标准定义的语言特性。
  • 类型检查: 标准要求对变量在分配或表达式混用时不兼容类型应发出诊断,但可以由实现选择是否继续编译。
  • 存储类与分配: STATIC、AUTOMATIC、CONTROLLED 等属性必须按标准描述实现存储管理与作用域。尤其 CONTROLLED 的空间释放应由程序员显式 FREE 完成。
  • I/O 环境设置: 建议使用标准定义的 ENVIRONMENT 列表进行文件控制,以保证不同操作系统间的移植性。
遵循标准的好处: 程序行为在 ANSI/ISO/CSA 三方兼容的实现间保持高度一致,减少移植成本;代码长期维护时的可读性与可预测性显著提升;人员培训亦可基于统一标准文档,降低跨组织协作难度。
实施技巧: 利用标准草案附录中的“格式规范”指导源代码风格编写,例如使用预处理指令 %INCLUDE 管理头文件,这将提高代码与标准参考实现的一致性。

与其他标准的关系

CAN CSA Z243.180-89 在内容上与以下标准保持等效:

  • ISO 6160:1984 — 国际标准化组织的 PL/I 标准,本标准的直接来源;
  • ANSI X3.53-1984 — 美国国家标准,技术内容相同;
  • ECMA-90 (1987) — 欧洲计算机制造商协会的 PL/I 标准,完全兼容。

自 1989 年以来,本标准一直是加拿大 PL/I 领域的法定参照。由于三方标准内容一致,开发者只需任意一份即可理解全部要求。此外,CSA 标准在 2004 年的确认并未引入技术变动,确保了向后兼容性。

本标准与更早的 PL/I 方言(如 IBM 的 OS PL/I)之间存在少数差异(例如 DEFAULT 语句的默认属性、某些 ON 条件的标识符)。实现者应仔细比对标准条款与编译器扩展,避免方言专用代码影响符合性。

注意: 尽管 ANSI 与 ISO 旧版标准已被新标准或超集取代,CAN CSA Z243.180-89 (2004) 仍然是加拿大官方认可的唯一 PL/I 基础标准。在涉及政府或合同合规性审查时,需以本标准的条款为准。

常见问题(FAQ)

问:该标准现在还在用吗?
答: 是的。CSA 于 2004 年确认后,该标准持续至 2026 年仍为加拿大国家采纳标准。虽然 PL/I 已非主流新项目首选,但在大量金融、航空器等遗留系统中仍广泛使用,本标准的规范至关重要。
问:本标准和 ANSI X3.53-1984 的主要区别是什么?
答: 两者技术内容完全一致,唯一的区别是封面和美国单位换算等国家性附录。加拿大的标准引用以及某些法规语境下认可用 CAN CSA 作为等效技术规范。
问:实现本标准的编译器必须支持哪些最低特性?
答: 标准定义的基本数据类型(例中所示)、五大类语句(赋值、过程、流程、I/O、存储分配)、条件和 DEFAULT 机制等均为必备。可选特性包括某些 I/O 方式或双字节字符集支持。详见标准符合性部分。
问:PL/I 标准与 C 或 COBOL 标准有接口规范吗?
答: 本标准不直接规定跨语言接口,但 PL/I 的通用 PROCEDURE 及 ENTRY 属性可以实现参数传递。通常通过遵循具体操作系统的调用约定即可,部分编译器提供 LANGUAGE 选项(如 LANGUAGE(COBOL))。不属于本标准范畴。

📥 标准文件下载

🔒
请等待 10 秒,广告加载完成后将自动显示下载链接

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注