1、中华人民共和国国家标准程序设计语言预备知识发布实施国家技术监督局发布中华人民共和国国家标准程序设计语言预备知识代替国家技术监督局批准实施总则主题内容与适用范围本标准规定了程序的形式及其解释它的目的是在这样的程序中提高和机器无关的程度以便在各种自动数据处理系统中均可使用它们语言功能表述的结构本标准中功能表述的组织基于功能处理模块概念本系列标准定义了如下个功能处理模块核心顺序相对索引程序间的通信排序合并源正文管理报表编制通信排错和程序分段其中九个模块分为级成分和级成分同一模块的级成分是级成分的子集另外两个模块仅包含级成分核心模块包含程序四个部的基本结构中内部数据处理所需的语言成分核心模块分成两级核
2、心级提供执行基本内部操作所需的成分即各种子句和动词的较基本的任选成分核心级提供更广泛和更完善的内部处理能力顺序模块包含定义和存取顺序组织文卷所需的语言成分该模块分成两级级提供定义和存取顺序文卷的基本设施所需的成分级提供定义和存取顺序文卷的完备设施相对模块包含定义和存取海量存储文卷所需的语言成分在海量存储文卷中记录用相对记录号来标识相对模块分成两级级提供定义和存取相对文卷的基本设施所需的成分级提供更完备的设施包括在同一程序里既可以顺序又可以随机地存取文卷的能力索引模块包含定义和存取海量存储文卷所需的语言成分在海量存储文卷中记录用键值来标识并通过索引来存取索引模块分成两级级提供定义和存取索引文卷的
3、基本设施所需的成分级提供更完备的设施包括选择键和在同一程序里既可顺序又可随机地存取文卷的能力程序间的通信模块包括这样的语言成分它使一个程序能与另一个或多个其他程序进行通信该模块分成两级级提供了把控制转向到另一个编译时已知的程序的能力以及两个程序都能存取某一个公共数据项的能力级提供了把控制转向到编译时未被标识的程序的能力以及嵌套在其他程序里的能力排序合并模块含有一个或多个文卷的排序所需的语言成分还包含两个或多个相同顺序文卷的合并所需的语言成分用户可以任意选择地利用输入或输出过程把某些特殊的处理应用到每个个别记录上排序合并模块仅含有级成分源正文管理模块含有这样的语言成分它们是把源程序正文的插入和替
4、换作为源程序编译的一部分而需要的部分该模块分成两级级提供把正文从单个库拷贝到源程序的设施级提供在拷贝处理期间替换库正文在编译时指定多于一个的库和替代源程序正文的能力报表编制模块含有半自动产生报表所需的语言成分该模块仅包含级成分通信模块含有存取处理和创建消息或其消息段所需的语言成分以及通过消息控制系统与通信设备通信所需的语言成分该模块分成两级级提供发送或接收完整消息的基本设施级提供更完善的设施包括发送或接收消息段的能力排错模块使用户能指出他的排错算法即指出在程序执行期间监视数据或过程项的条件该模块分成两级级提供基本排错能力包括指明选定的或全段的监视能力级提供完备的排错能力程序分段模块提供过程部各
5、节在目标运行时进行覆盖的能力该模块分成两级级提供节的程序段号和固定的程序段限级增加了改变程序段限的能力标准的组织本系列标准由个标准和个附录组成由引言模块成分表部成分表概念词汇语言总论和语言组成的构架所组成详细表述了核心模块和其他功能处理模块在每个标准里仅属级的功能表述括在方框内标准的使用法可从不同角度来查阅本系列标准除了目次外模块成分表和部的成分表也可用作对本标准的检索为了确定模块中任何一级的内容应使用中的模块成分表该表包含给定模块中国家标准的每个成分的细目例如为了弄清顺序模块级的内容就要在模块成分表里查阅那个模块见顺序模块的成分在那里可以找到一张关于顺序模块的成分表其中包括语言总论环境部款数
6、据部款和过程部的动词为了确定特定的语言特征出现在哪个模块和模块的哪一级应使用中的部的成分表该表详细指明国家标准的全部成分及它们在各模块中的出现对于那些不完全包含在一级中的成分详细指出每个子成分的位置例如语句出现在顺序模块相对模块和索引模块的级里由于语句的某些短语仅出现在这些模块的级中因此分别列出语句的子成分见过程部成分的语句表必需模块子集需要任选模块子集不需要核心顺序相对索引程序间通信排序合并源正文管理报表编制通信排错程序分段子集高中低表构成国家标准内容的个功能处理模块的图解表示该表给出每个功能处理模块内各级的层次表内简写记号例如指明功能模块中的级位置以及模块分级数目这种简写记号从左到右由指明
7、级位置的一个数字一个三个字母的模块缩写和指明所属模块最低级和最高级的两个数字组成例如表示这一级是索引模块的第个非空级级该模块包含两个非空级级和级三个字母的模块缩写如下核心顺序相对索引程序间通信排序合并源正文管理报表编制通信排错程序分段国家标准实现的定义本条提供组成国家标准的语言特征的定义国家标准由个模块组成个是必需的而个是任选的下面给出为了使某实现与国家标准相符而必须满足的准则子集定义国家标准分三级高子集中子集低子集每个子集由七个必需模块的某一级组成这七个模块是核心顺序相对索引程序间的通信排序合并和源正文管理根据上面的示意图国家标准的子集在必需模块列里用三个横行之一表示在这三个子集里并不必有任
8、选的四个模块报表编制通信排错和程序分段高子集由全部必需模块的最高级的所有语言成分组成就是核心顺序相对索引程序间的通信和源正文管理的级成分排序合并的级成分中子集由全部必需模块的级的所有语言成分组成就是核心顺序相对索引程序间的通信排序合并和源正文管理的级成分低子集由核心顺序和程序间的通信的级语言成分组成符合实现的定义国家标准的符合实现必须完全支撑上面条中定义的三个子集中的任何一个而且可以包括全部任选模块的各级或包括一部分任选模块的某些级或根本就不包括任选模块国家标准的给定子集的符合实现必须完全支撑那个子集的所有语言成分除了条限定的以外国家标准的某任选模块的给定级的符合实现必须完全支撑该任选模块的那
9、个级的全部语言成分除了条限定的以外进一步说任何实现还必须满足条的要求替代或附加的语言成分实现不能在源程序中包含一些替代或附加的语言成分这些成分企图完成与国家标准语言之某成分相同的功能另外在整个国家标准功能表述中存在一些语言成分其语法或功能可以部分地由实现者定义见附录参考件实现者定义的语言成分表对于国家标准中规定的可以由实现者定义其语法和规则的那一部分语言成分当实现者指出某些限制时则这种限制不能要求在源程序中含替代的或附加的语言成分标准语言成分的接受假如一个模块被包含在其实现中的话那么除了那些在条中指出的与特定硬部件有关的语言成分外该实现必须接受该模块中给定级里规定的全部标准语言成分的语法并提供
10、其功能如果某个实现不是完全按本标准语言规定的语法来实现某个模块某一级的成分那么该实现必须提供本标准中有关那个语法所规定的功能或者必须把那些语言成分标识为非标准的扩充见条过时的语言成分过时的语言成分在国家标准参考件中被标识为这样的语言成分它们将在本标准的以后的修定版本中删除见附录参考件过时的语言成分表过时的语言成分在制订本版本时既不增加也不修改在国家标准中的定义过时语言成分与其他语言成分之间的相互作用是无定义的除非在国家标准中别处有规定国家标准的符合实现需要支撑这些过时的语言成分它们出现在该实现所声明的任选模块的诸级及子集中与其实现相关的文档必须标识该实现中全部的过时的语言成分国家标准的符合实现
11、必须提供警告机制用户在编译时可以任选地引用他们以便指出如果适当的话程序包括过时语言成分外部提供的功能在某个实现中对本标准一个模块中的语言成分所规定的功能假如想在源程序之外被提供那么该实现一定不能用外部功能的功能表述来替代本标准的语言成分也不能在本标准语言成分之外再附加外部功能但为了与操作环境接口该实现可以请求源程序之外的功能表述来支撑源程序中规定的功能限定下面的限定应用于国家标准的功能表述的实现依赖硬件的语言成分存在某些语言成分它们与特定的硬部件类型有关系见附录参考件依赖硬件的语言成分表为了使某实现满足本标准的要求该实现必须规定它支撑的硬部件进而当一个特定的硬部件被要求支撑而且与该部件相关的所
12、有语言成分所处的模块又包含在实现中时则所有这些语言成分都必须实现而对于和未被要求支撑的硬部件相关的语言成分就不必实现然而必须指出国家标准实现中缺少的那些语言成分扩充语言成分一个实现如果包含除子集及要求支撑的任选模块的诸级以外的语言成分这种实现仍然是满足本标准要求的即使实现者可以扩充保留字表而且还会影响到满足本标准要求的程序的正常编译也认为是正确的与实现有关的文档必须标出在该实现中包含的标准扩充在被支撑的子集或被支撑的任选模块的诸级中没有定义但在本标准的别处有定义的语言成分或非标准扩充本标准中未定义的语言成分或功能本标准的符合实现必须提供警告机制用户在编译时可以任选地引用它们以便指出如果适当的话
13、程序中包含实现中包括的非标准扩充保留字本系列标准的实现必须把个必需的和个任选的模块中出现的全部保留字作为保留字字符替代在本标准的条中定义的字符集代表本标准的完全的字符集当实现对全部字符集不提供图形表示时实现者可以规定替代图形以便代替不能表示的字符语句本标准的实现可以包含也可以不包含语句这由实现者决定符合源程序的定义符合源程序是这样的程序即它不明显违背本标准所述的条款和功能表述为了使源程序与本标准相符它一定不能包含本标准中没有指明的任何语言成分与本标准相符的源正文程序的运行在本标准定义范围内是可预测的除非在本标准别处被指明否则违反本标准的格式或规则的结果是无定义的为了使源程序与本标准规定的子集相
14、符它必须仅包含那个子集的语言成分在国家标准中存在这样的情况即执行一个语句的结果是无定义的或不确定的见附录参考件无定义语言成分表虽然运行结果不由国家标准定义但允许该情况发生的源程序仍然算是一个符合程序符合程序与符合实现的关系由符合实现来编译符合源程序并继而运行其目标程序这一点仅在国家标准的规定范围内被定义然而这并不意味程序一定会成功地编译或运行因为这与其他因素有关例如使用实现者定义的语言成分程序的逻辑正确性和程序在其上操作的数据一般而言有些问题并未在国家标准的功能表述中指出来诸如一个程序中所含语句的最大数目某些语句中运算对象的最大数目等本标准认为这些界限可随实现的不同而不同但它可能影响满足本标准
15、的程序的成功编译模块成分表一般描述本章包括按功能处理模块组织的国家标准中全部成分一览表列标题级指明该模块的级成分列标题级指明该模块的级成分列中字母指示该模块指定级中的指定成分是出现的字母是指示该模块指定级中的指定成分是缺少的列中字母指示该模块指定级中的指定成分是出现的但该成分在国家标准的本次版本中属过时成分因为在国家标准的以后的版本中将被删除下面是模块成分一览表共有核心模块成分表顺序模块成分表相对模块成分表索引模块成分表程序间通信模块成分表排序合并模块成分表源正文管理模块成分表报表编制模块成分表通信模块成分表排错模块成分表程序分段模块成分表核心成分级级语言概念字符集组成字的字符连字符成分级级用
16、作标点符号的字符引号左括号句号逗号分号空格用作标点符号的字符冒号用于编辑的字符空格正号负号句号逗号零抑制数值保护货币符零贷方借方斜杠用于算术运算的字符加减乘除乘幂用于关系条件的字符等于成分级级大于小于大于或等于小于或等于用于下标的字符允许的单字符置换允许的双字符置换分隔符空格字符串字不多于个字符用户自定义的字字母表名类别名条件名数据名位标名层号助忆名段名程序名例行程序名节名符号字符系统名计算机名成分级级实现名语言名保留字必需字基字特定字符字算术运算符用于下标的算术运算符关系字符任选字特定目标字象征常量象征常量符号字符字值象征常量符号字符字值数值字值到个数字非数值字值到个字符字符串注解款引用的唯
17、一性限定不可限定如果引用的话名字必须是唯一的个限定下标层下标层下标字值下标成分级级数据名下标位标名下标相对下标引用修改基准格式序号行的接续非数值字值的接续字数值字值字符串的接续空白行注解行星号注解行斜杠注解行在指示符域有的排错行源程序的结构必需的标识部任选的环境部任选的数据部任选的过程部程序末端标题标识部段程序名段段段段段环境部配置节成分级级段计算机名子句段计算机名子句子句段子句任选任选任选实现名任选字值任选子句子句子句实现名子句助忆名任选条件名任选条件名任选子句数据部工作存储节记录描述款层描述款数据描述款子句数据名子句子句成分级级子句层号子句到位或位数字表示子句整数子句短语整数到整数短语子句
18、字符串最大可包含个字符数据字符运算符号固定嵌入字符替换或浮动嵌入字符货币符号代换十进小数点代换子句不能嵌套允许嵌套子句子句子句子句成分级级子句字值字值序列字值字值字值域序列过程部算术表达式双目算术运算符单目算术运算符条件表达式简单条件关系条件关系运算符数值运算对象的比较非数值运算对象的比较位标名和或位标数据项的比较类别条件成分级级类别名条件名条件正负号条件开关状态条件复合条件逻辑运算符否定条件组合条件括号条件省写的组合关系条件算术语句算述运算对象不超过位数字运算对象的组合不超过位数字语句标识符仅传送数据一次对数据传送次数无限制助忆名短语短语语句标识符字值标识符字值序列标识符标识符序列标识符字值
19、标识符标识符字值标识符序列短语短语成分级级短语短语短语语句只有一个过程名过程名序列语句算术表达式标识符序列短语短语短语短语语句语句仅传送数据一次对数据传送的次数不限标识符字值标识符字值序列助忆名短语短语语句标识符字值标识符标识符序列标识符标识符序列短语短语短语成分级级短语短语语句语句标识符字值算术表达式条件表达式短语短语短语短语短语语句语句过程名是必需的过程名是任选的短语语句仅命令条件命令和或条件语句嵌套语句任选字短语短语短语语句标识符序列短语序列成分级级语句仅单个字符的数据项多字符数据项短语短语短语序列短语序列短语短语短语序列短语序列和短语短语语句标识符标识符序列数值编辑项的去编辑短语语句标
20、识符标识符序列标识符标识符序列短语短语短语短语语句过程名是任选的过程名短语成分级级命令语句任选短语短语短语短语短语短语短语至少允许六个短语语句短语短语短语短语序列短语语句短语短语短语语句位标名标识符位标名助忆名条件名语句字值语句序列短语成分级级短语短语短语语句标识符字值标识符字值序列标识符标识符序列标识符标识符序列短语短语短语短语短语语句短语短语短语短语短语短语短语短语顺序成分级级语言概念用户自定义的字成分级级文卷名记录名保留字特殊寄存器状态环境部输入输出节段文卷控制款子句短语仅为输入和扩展文卷子句子句实现名字值子句子句子句子句子句段子句子句子句子句数据部文卷节文卷描述款层指示符成分级级子句整
21、数整数整数子句子句子句子句短语短语短语子句整数短语整数整数短语整数整数子句实现名字值实现名字值序列实现名数据名实现名数据名序列记录描述款过程部申述过程任选任选语句文卷名文卷名序列短语成分级级短语短语语句文卷名文卷名序列短语短语短语短语短语短语短语和序列序列语句短语短语短语短语短语语句短语语句短语文卷名文卷名序列成分级级语句短语短语整数标识符助忆名短语短语短语相对成分级级语言概念用户自定义字文卷名记录名状态环境部输入输出节段文卷控制款子句短语仅为输入和扩展文卷子句成分级级短语子句实现名字值子句子句子句段子句子句子句数据部文卷节文卷描述款层指示符子句整数整数整数子句子句子句整数短语整数整数短语整数
22、整数子句实现名字值实现名字值序列实现名数据名成分级级实现名数据名序列记录描述款过程部申述过程任选任选语句文卷名文卷名序列短语语句短语短语短语语句文卷名文卷名序列短语短语短语短语和序列序列语句短语短语短语短语短语短语成分级级短语语句短语短语短语短语语句短语短语短语短语语句短语文卷名文卷名序列语句短语短语成分级级短语短语索引成分级级语言概念用户自定义字文卷名记录名状态环境部输入输出节段文卷控制款子句短语仅为输入和扩展文卷子句子句短语子句实现名字值子句子句子句成分级级子句段子句子句子句数据部文卷节文卷描述款层指示符子句整数整数整数子句子句子句整数短语整数整数短语整数整数短语实现名字值实现名字值序列实
23、现名数据名实现名数据名序列记录描述款过程部申述过程任选任选成分级级语句文卷名文卷名序列短语语句短语短语语句文卷名文卷名序列短语短语短语短语和序列序列语句短语短语短语短语短语短语短语短语语句短语短语短语成分级级短语语句短语短语短语短语语句短语文卷名文卷名序列语句短语短语短语短语程序间的通信成分级级语言概念源程序结构嵌套源程序标识部段子句子句数据部文卷节文卷描述款层指示符子句子句数据描述款层号子句工作存储节数据描述款层号子句子句连接节记录描述款层描述款报表节报表描述款层指示符子句过程部过程部首短语至少允许个操作分量操作分量个数不限语句成分级级字值标识符短语标识符至少允许个操作分量操作分量个数不限短
24、语短语短语短语短语短语格式短语格式语句字值标识符语句语句短语短语语句短语排序合并成分级语言概念用户自定义的字文卷名记录名成分级环境部输入输出节段文卷控制款子句子句实现名字值段子句子句数据部文卷节排序合并文卷描述款层指示符子句子句整数短语整数整数短语整数整数记录描述款过程部语句短语短语短语短语过程名成分级短语语句短语语句短语短语短语短语语句短语短语短语短语过程名短语短语过程名短语源正文管理成分级级语言概念字符集用作标点符号的字符用户自定义的字库名正文名所有各部语句成分级级库名短语短语伪正文标识符字值字语句伪正文伪正文报表编制成分级语言概念用户自定义的字文卷名报表名保留字特殊寄存器环境部输入输出节
25、段文卷控制款子句段仅为扩展文卷子句子句成分级实现名字值子句子句子句子句子句段子句子句数据部文卷节文卷描述款层指示符子句整数整数整数子句子句子句整数整数整数子句子句实现名字值实现名字值序列实现名数据名实现名数据名序列报表节报表描述款成分级层指示符子句子句子句报表栏描述款子句子句数据名子句子句子句层号子句到位或位数字表示子句子句子句子句子句子句子句子句子句字值过程部申述过程任选任选语句短语短语成分级短语语句数据名报表名语句语句短语短语短语语句语句语句短语文卷名文卷名序列短语通信成分级级语言概念用户自定义的字名数据部通信节通信描述款层指示符子句成分级级短语子句子句子句子句子句子句子句子句子句子句子句
26、数据名序列子句子句必须是一个必须是一个或多个子句短语子句子句子句子句子句短语子句子句子句子句子句成分级级子句数据名序列记录描述款过程部语句语句短语短语短语短语短语语句短语短语短语短语短语语句语句短语短语标识符短语短语短语语句标识符部分消息标识符完整消息标识符短语短语成分级级短语短语短语整数标识符助忆名排错成分级级语言概念保留字特殊寄存器环境部配置节段子句过程部申述过程任选任选语句过程名标识符名文卷名程序分段成分级级语言概念用户自定义的字段号环境部段子句过程部永久段的段号为到独立段的段号为到具有同一段号的所有节必须在一个源程序里在源程序里具有同一段号的诸节不必物理上相邻部成分表一般描述本章包括按
27、各个部组织的本标准的全部成分一览表列标题指明该成分所属的模块以及级别模块用三个字符的模块缩写来标明见下表缩写意义核心顺序相对索引程序间通信排序合并源正文管理报表编制通信排错程序分段用模块缩写前的数指示某成分在该模块里的级别例如表示该成分是核心中的级成分而表示该成分是索引模块中的级成分若某成分是本标准中的过时成分那么字母跟在三个字符的模块缩写之后语言概念成分模块语言概念字符集组成字的字符连字符用作标点符号的字符引号左括号右括号句号逗号分号空格用作标点符号的字符冒号用作标点符号的字符等于用于编辑的字符空格正号负号句号逗号零抑制数值保护货币符成分模块零贷方借方斜杠用于算术运算的字符加减乘除乘幂用于关
28、系条件的字符等于大于小于大于或等于小于或等于用于下标的字符允许的单字符置换允许的双字符置换分隔符空格冒号字符串字不多于个字符用户自定义的字字母表名名成分模块类别名条件名数据名文卷名位标名层号库名助忆名段名程序名记录名报表名例行程序名节名段号符号字符正文名系统名计算机名实现名语言名保留字必需字成分模块基字特定字符字算术运算符用于下标的算术运算符关系字符任选字专用目标字象征常量象征常量符号字符字值象征常量符号字符专用寄存器字值数值字值到个数字非数值字值到个字符字符串注解款引用的唯一性限定不可限定名字必须是唯一的个限定符下标层下标层下标成分模块字值下标数据名下标位标名下标相对下标引用修改基准格式序号
29、行的接续非数值字值的接续字数值字值字符串的接续空白行注解行星号注解行斜杠注解行在指示符域中有的排错行源程序结构必需的标识部任选的环境部任选的数据部任选的过程部程序末端标题嵌套源程序标识部成分模块标识部段程序名子句成分模块子句段段段段段标识部的源正文管理语句库名短语伪正文标识符字值字语句伪正文伪正文环境部成分模块环境部配置节段计算机名子句段计算机名子句成分模块子句子句段子句任选任选任选实现名任选字值任选子句子句子句实现名子句助忆名任选条件名任选条件名任选子句输入输出节段文卷控制款成分模块子句短语仅为输入和扩展文卷仅为扩展文卷子句短语子句短语子句成分模块实现名字值子句子句子句子句子句子句成分模块段
30、子句子句子句子句子句环境部的源正文管理语句库名短语伪正文标识符字值字语句伪正文伪正文数据部成分模块数据部文卷节文卷描述款层指示符子句整数整数整数子句子句成分模块子句子句子句子句短语短语短语子句整数短语整数整数子句子句实现名字值实现名字值序列成分模块实现名数据名实现名数据名序列排序合并文卷描述款层指示符子句子句整数短语整数整数文卷节中的记录描述款工作存储节记录描述款层描述款连接节记录描述款层描述款通信节通信描述款层指示符成分模块子句短语子句子句子句子句子句子句子句子句子句子句子句数据名序列子句子句必须一个必须一个或多个子句短语子句子句子句子句子句短语子句子句子句子句成分模块子句子句数据名序列记录
31、描述款报表节报表描述款层指示符子句子句子句子句报表栏描述款下列子句出现在记录描述款数据描述款层描述款或报表栏描述款中子句子句数据名子句子句子句子句子句子句层号子句到用位或位数字表示成分模块子句子句子句整数子句子句整数整数短语子句最多有个字符的字符串数据字符操作符号固定嵌入字符替换或浮动嵌入字符货币符号替代十进小数点替代子句不能嵌套允许嵌套子句子句子句成分模块子句子句子句子句子句字值字值序列字值字值字值范围序列数据部的源正文管理语句库句短语伪正文标识符字值字语句伪正文伪正文过程部成分模块过程部过程部首短语至少允许个操作分量允许操作分量个数不限申述过程任选任选算术表达式双目算术运算符单目算术运算符
32、条件表达式简单条件关系条件关系运算符成分模块数值运算对象的比较非数值运算对象的比较位标名和或位标数据项的比较类别条件类别名条件名条件正负号条件开关状态条件复合条件逻辑运算符否定条件组合条件括号条件省写的组合关系条件算术语句算术运算对象不超过位数字运算对象的组合不超过位数字语句成分模块标识符仅传送数据一次对数据传送次数不加限制助忆名短语短语语句语句标识符字值标识符字值序列标识符标识符序列标识符字值标识符标识符字值标识符序列短语短语短语短语短语语句仅为一个过程名过程名序列语句字值标识符短语标识符至少允许个操作分量允许操作分量不限个数短语短语成分模块短语短语短语短语格式短语格式语句字值标识符语句文卷
33、名文卷名序列短语短语短语短语成分模块语句算术表达式标识符序列短语短语短语短语语句语句短语短语短语语句短语短语短语短语短语语句仅能传送数据一次对数据传送次数不加限制标识符字值标识符字值序列助忆名短语短语语句成分模块标识符字值标识符标识符序列标识符标识符序列短语短语短语短语短语语句短语短语短语短语短语语句标识符字值算术表达式条件表达式短语短语短语短语短语语句语句语句数据名成分模块报表名语句过程名是必需的过程名是任选的短语语句仅为命令语句命令和或条件语句嵌套语句任选字短语短语短语语句标识符序列短语序列语句语句仅为单字符数据项多字符数据项短语短语短语序列短语序列短语短语短语序列短语序列和短语成分模块短
34、语语句短语短语短语短语过程名短语语句标识符标识符序列短语数值编辑项的去编辑语句标识符标识符序列标识符标识符序列短语短语短语短语语句文卷名成分模块文卷名序列短语短语短语短语短语短语和序列序列语句过程名是任选的成分模块过程名短语命令语句任选短语短语短语短语短语短语短语至少允许个短语语句语句短语短语短语短语短语短语短语成分模块短语语句短语短语短语短语短语短语语句语句语句短语短语短语短语语句短语短语短语短语成分模块语句短语短语短语短语序列短语语句短语短语短语语句标识符短语部分消息标识符短语完整消息标识符短语短语短语短语短语整数标识符助忆名短语语句位标名标识符位标名助忆名条件名语句短语成分模块短语短语短
35、语过程名短语短语过程名短语语句短语短语成分模块短语短语语句字值语句序列短语短语短语短语语句标识符字值标识符字值序列标识符标识符序列标识符标识符序列短语短语短语短语短语语句语句语句短语短语成分模块短语短语短语短语短语短语语句短语短语文卷名文卷名序列成分模块短语短语短语过程名标识符名文卷名语句短语短语整数标识符助忆名短语短语短语成分模块短语短语程序分段永久段段号为独立段段号为具有同一段号的所有节必须在一个源程序里在一个源程序里具有同一段号的诸节不必物理上相邻过程部的源正文管理语句库名短语短语伪正文标识符字值字语句伪正文伪正文概念引言提供了许多特征以允许用户获得需要的功能而这些功能无须详细地进行程序
36、设计本章讨论这些特征中的每一个考虑为何在语言中包括这些内容及其使用和组织的概念文卷文卷是记录的集合它可以在存储媒体上放入或检索出来用户不但可以选择文卷的组织而且也可以选择文卷的处理方法和顺序虽然文卷的组织和处理方法受到顺序媒体的限制但对海量存储媒体这种限制是不存在的当描述程序处理文卷的能力时用到下列约定术语文卷名意指在源程序中引用一个文卷时所用的用户自定义的字术语由文卷名引用的文卷和文卷意指物理文卷而不考虑到程序中使用的文卷名术语文卷连接区意指包含有关文卷信息的实体所有对物理文卷的存取都是通过文卷连接区进行的在不同的实现中文卷连接区可以是一张文卷信息表一个文卷控制块等等文卷属性在文卷创建时有几
37、种应用于文卷的属性它们在文卷生存期间不能被改变主要的属性是文卷的组织它描述了文卷的逻辑结构有三种组织顺序相对和索引由程序提供的文卷的其他固有属性主要是记录键次记录键代码集最小和最大逻辑记录长度记录类型固定或可变索引文卷键的对比序列块因子填充字符和记录定界符顺序组织顺序文卷是这样组织的文卷中的每一个记录除第一个外有唯一的先行记录以及除最后一个外每个记录有唯一的后继记录这些先行后继关系是在文卷建立时按语句的执行次序建立的一旦建立了这种先行后继关系便不能改变但在文卷的末尾增加记录时却除外一个顺序组织的海量存储文卷在任何顺序媒体上的文卷有相同的逻辑结构而一个顺序的海量存储文卷可以在某处更改数据在用这种
38、技术时新的记录不能被加到文卷中去而每一个替代记录必须同原来的记录长度相同相对组织相对组织的文卷是一种海量存储文卷它上面的任何记录可以通过提供其相对记录号的值来存储或检索从概念上讲相对组织的文卷是由一串区域组成的每个区域能存放一个逻辑记录每个区域由一个相对记录号命名相对文卷中的每个逻辑记录是通过记录其存储区的相对记录号来标识的例如第个记录是相对号为且在第个记录区域中的一个记录不管第到第个记录区域是否已写过为了在一个相对文卷中对记录进行更有效的存取保留在媒体上用于存储一个特定逻辑记录的字符位置数目可以不同于在程序中描述的那个记录的字符位置数索引组织用索引方法组织的文卷是海量存储文卷它里面的记录可以
39、通过键的值来存取每一个键数据项定义了一个文卷的记录并有一个索引被维护每一个这样的索引代表了每一个记录中对应键数据项的值集因此每一个索引是能够提供存取文卷中的任何记录的机制每一个索引文卷有一个表示文卷中每个记录主记录键的主索引文卷中每个记录的插入修改或删除唯一地依靠其主记录键的值文卷中每个记录的主记录键值必须是唯一的并在修改记录时它也不能改变主记录键在文卷的文卷控制款的子句中说明次记录键提供了检索一个文卷的记录的次要意义这种键在文卷控制款的子句中命名在每个记录中专用的次记录键的值不必唯一当这些值不唯一时可在子句中的短语中规定逻辑记录一个逻辑记录是可以从一个文卷中检索或放入文卷的数据单位可以存在一
40、个文卷中的记录的数目仅受存储媒体容量的限制有两种类型的记录定长和变长的在一个文卷被创建时它被说明含有定义和变长记录在任何情况下记录区的内容不反映任何实现者可以在物理存储媒体上附加于记录的信息例如记录长度标题也不反映由程序员使用的外加的记录长度定长记录定长记录指在文卷中的所有记录必须包含相同的字符位置数对文卷的所有输入输出操作只能处理这一种记录长度定长记录可以通过规定的文卷描述款中子句的格式来显式地选取不管单独的记录描述变长记录变长记录指文卷记录中可以包含不同的字符位置数为了显式定义变长记录可以在文卷描述款的子句或排序合并文卷描述款中规定的短语来定义影响一个记录长度的有在引用子句的短语或子句的短
41、语中引用的数据项或文卷的记录描述款的长度实现者定义的记录类型在文卷的文卷描述款中没有规定子句或者子句中规定了字符位置区域这就由实现者来定义获得定长或变长记录文卷处理可以通过对单独的记录或把文卷作为一个单位执行操作来处理一个文卷在处理期间发生的不正常条件被反馈给程序记录操作文卷描述款的子句规定了在一个文卷中目标程序对记录进行操作的方式存取方式可以是顺序随机或动态的对相对或索引方式组织的文卷不管用于创建文卷的存取方式如何均可以用三种存取方式的任何一种来存取文卷一个顺序组织的文卷只能以顺序方式来存取输出报表的组织格式和内容可以用报表编写特征来规定见顺序存取方式一个文卷能够顺序存取而不考虑其文卷组织对
42、顺序组织顺序存取的次序是记录原始写入时的次序对相对组织顺序存取的次序是根据相对记录号值的升序只有当前存在于文卷中的记录是有效的语句可以用来确定一系列顺序检索的子序列的一个开始位置对索引组织顺序存取的次序是根据同自然字符集有关的对比序列的引用键值的升序进行的任何同文卷有关的键可以在处理文卷期间作为引用键来建立具有重复键引用值的记录集合的检索次序就是这些记录被放入集合时的原始次序语句可以用于在一个索引文卷内对一系列顺序检索的子序列建立一个开始位置随机存取方式当一个文卷以随机方式存取时输入输出语句用来按照程序员规定的次序存取记录随机存取方式只能用于相对或索引文卷组织对于一个相对组织的文卷程序员通过在
43、相对键数据项中放上相对记录号来指定所考虑的记录对索引文卷程序员通过在一个记录键或一个次记录键数据项中放入一个记录键的值来指定所考虑的记录动态存取方式用动态存取方式用适当的输入输出语句形式程序员可以根据愿望从顺序存取改为随机存取动态存取方式只能用于相对或索引组织的文卷打开方式文卷的打开方式同对文卷中的记录执行的动作有关打开方式及其目的是输入检索记录输出把记录放入文卷延伸对一个已存在的文卷扩展记录检索和更新记录打开方式在语句中规定当打开方式是输入时一个文卷可以通过语句读入语句也可以用来组织顺序或动态存取方式的索引或相对文卷当打开方式是输出时记录通过执行或语句来放入文卷当打开方式是扩展时通过执行或语
44、句把新的记录加到文卷的逻辑尾部在打开方式中只能引用海量存储文卷海量存储设备的增加的能力允许更新因此总可以使用和语句一个海量存储文卷在顺序媒体上可以按象一个文卷一样的方式被更新通过用或语句把整个文卷传送给另一个文卷也许在不同的海量存储区然而有时更新一个海量存储文卷是更有效的这个海量存储文卷的维护技术是用语句送回到那些在存储媒体上已被改变的记录的原先所在的位置和语句仅是在更新顺序组织文卷时所允许的操作然而对索引或相对组织的文卷可以应用下列增加的功能语句可以用在顺序或动态存取方式中以改变检索的顺序语句可以用在任何存取方式中从一个文卷里逻辑地删除一个记录语句可以用于随机或动态存取方式中将一个新的记录插
45、入文卷当前卷指针当前卷指针是这个标准文本中所用的一个概念实体以便于确切指明一个顺序文卷的当前物理卷和语句可以影响当前卷指针的状态文卷位置指示符文卷位置指示符在本标准文本中是一个概念实体便于确切指明在某些输入输出操作序列执行期间对一个给定文卷内的下一个要存取的记录对文卷位置指示符的设置仅受到和语句的影响一个文卷位置指示符的概念对于在输出或扩展方式下打开的文卷是无意义的行数概念当指定一个输出报表时可以使用子句它设定一个逻辑页的定义并指定逻辑页内的顶部和底部边界和一个尾区子句的使用隐式地定义了一个有关的专用寄存器它对页体内的一行确定一个指针文卷操作有几种语句把文卷作为实体或作为记录的集合来进行操作这
46、些语句是和语句排序与合并排序在许多排序应用中有必要对一个排序文卷的内容进行某些专门的处理专门的处理可以包括对文卷中的单个记录进行增加删除建立更新编辑以及其他的修改可能有必要通过排序在记录被重新确定次序之前或之后进行专门的处理专门处理也可能在之前和之后都是重要的排序特征允许用户表达这些过程并指明它们是在排序之前或之后执行一个程序可以包含任何数目的排序它们中的每一个可以有自己的输入输出过程排序特征在指定处自动地引发这些过程的执行在输入过程中语句用来创建排序文卷这就是在输入过程执行完成时已经通过语句的使用而被处理而不是用语句的记录组成了排序文卷这个文卷仅对语句有效语句的执行根据在其中规定的键重新编排
47、在排序文卷中的所有记录在执行输出过程间可以通过使用语句使得从排序文卷中得到适用的已排序过的记录排序文卷没有程序员可以控制的标号过程并且分块与分配内部存储的规则对语句是特殊的和语句并不隐含有考虑缓冲区块或卷的意思一个排序文卷可以被看成一个从输入文卷建立的内部文卷语句然后被处理语句然后成为适用的输出文卷语句排序文卷本身只能由语句来引用或存取排序合并文卷描述可以看作是一种特定的文卷描述类型这就是说一个排序文卷象任何文卷一样它是一组记录合并在某些应用中有必要对一个合并文卷的内容作一些特定的处理这种特定的处理可以包括对文卷中的单个记录进行增加删除更新编辑以及其他的修改合并特征允许用户表达为建立合并输出将
48、要被执行的一个输出过程可以通过在输出过程中使用语句来使得从合并文卷中得到适用的合并记录合并文卷没有程序员可以控制的标号过程并且为分块和分配内部存储的规则对合并语句是特殊的语句并不隐含有考虑缓冲区块或卷的意思一个合并文卷可以看作一个从若干输入文卷通过组合语句而建立的一种内部文卷且构成适用的输出文卷语句合并文卷本身只能由语句提供和存取一个排序合并文卷描述可以被看作是一种特定类型的文卷描述这就是说一个合并文卷象其他任何文卷一样是一组记录例外处理在执行任何输入输出操作期间可能出现一些不正常的条件会妨碍操作的正常完成有三种方法可以使这些条件同目标程序通信状态键例外申述和同命令语句相关的任选短语输入输出状态输入输出状态是本标准中使用的一个概念实体它对一个输入出操作执行的状态进行确切的规定建立输入输出状态仅受到和语句的影响对一个给定文卷的输入输出状态值通过在那个文卷的文卷控制款的子句中指明的数据名来使其对程序成为适用的在执行输入输出语句期间和预先执行同那个输入输出语句有关的任何命令语句或预先执行的任何例外申述时输入输出状态值被放到这个数据项中例外申述当对文卷指明一个过程时此过程在导致一个不成功的输入输出操作的