D0I:10.13374/j.issn1001-053x.1986.s2.004 1986年9月 北京钢铁学院学报 Special issue Journal of Beijing University 专翔2 of Iron and Steel Technology No2,1986.9 冶金热力学数据库应用系统怎样检 查用户命令 王秀美 沈怡平 摘 要 本文介绍了M已THEDAS.怎样检查用户命令。根据用户命令的语法结构,对其进行三方面检查, (1)命令关健字及格式。 (2)参数关键字及格式,参数的数据类型。 (3)命令与参数的搭配关系。 上述任务由用户命令解释程序的换时模块和语法检查梭块元成。 METHEDAS的用户命令解释程序用FORTRAN-IV实现。它简单、实用、使F移他。在编制程序过程中较 地快拟了FORTRAN77的字符处理功能。 Checking of User's Commands in METHEDAS Wang Xiumei Shen Yiping abstract Checking of user's commands in METHEDAS is the main subject in this paper,On basis of the syntactic structures of user's com mands,the checking on following items, 1.command keywords and formats 2.parameter keywords,formats and their data types 3.rules of jointing commands with parameters is completed by means of a code conversion module and a syntax parsing mo- dule,which compose an interpreter. This interpreter,constructedwithin the FORTRAN-4 framework,is very successful in its simplicity,usefulness,and ability of simulating the string processing function,possessed by FORTRAN-77. ·14
年 。 月 北 京 钢 铁 学 院 学 报 犷 ,, 专辑 , 。 匀 , 二二二二二二戈二二二二二二二 二 一 二 冶金热力学数据库应用系统怎样检 查 用户命令 王 秀美 摘 之干 私 军 , 刀 口 要 本 文介绍了 已 怎样检 查 用 户 命令 。 根据用 户 命令的 语 法结 构 , 对其 进 行三 方面 检查 命 令关键字及格式 。 名 参数 关键 字 及格式 , 参数的 数 据 类型 。 命 令 与参数的 搭 配关 系 。 上 述任 务由用 户 命 令解 释程序的 换 码 模块 和语 法检查模块 完 成 。 的 用 户 命 令解释程序 用 一 实现 。 它 简 单 、 实 用 、 便 于移值 。 在 编 制 程序 过 程 中较 杠 地 按拟 了 的 字 符处理 功 能 。 ‘ ’ 王 , 。 尸 , , , 华 , 二 一 吐 。 , 、 , , , , 一 DOI :10.13374/j .issn1001-053x.1986.s2.004
前 言 研制治金热力学数据库应用系统(METHEDAS)是为了满足用户的使用要求,而 以 用户的使用要求是用命令来体现的。使用METHEDAS时,首先启动它,然后根据使用 要求从终端投入相应的命令。命令是正确的,系统正常运行,能得出予期结果。如果命 令是错的,系统则不能正常运行。因此保证所投人的命令正确,是使用METHEDAS的 首要条件。METHEDAS主要的用户是治金物理化学方面的专业人员,不能要求他们都 具备良好的计算机知识。即使用户精通计算机技术,一时疏忽,输错命令也在所难免。 因而,执行命令前系统对其进行检查,尽可能保证它的正确性,这是系统的用户友好性 的重要标志之一。 1 METHEDAS的命令形式 METHEDAS命令形式如下: 命令关键字/{N1=a们,CN2=bJ,…,[Nj=]}/ 其中N1,N2…Nj为参数关键字,a1,b1,c1,c2,…为参数值。图(1)是命 令的语法图。 w Parameter Command Paraneter Parameter keyword keyword Parameter 一 图1 METHEDAS命令的语法图 Fig.1 Syntax chart of command of METHEDAS 命令关键字:GET,MOD,DELTA,BINARY,EOUICOMP等共二十个。 参数关键字:STF,ZPH,TU,JOULE,SYSTEMM等共六十个。 参数值可以是整型数,实型数,逻辑型或字符型。 2怎样检查命令 METHEDAS从三方面入手检查用户投入的命令。(1),命令关键字和命今格式。(2)、 参数关键字、参数格式以及参数值的类型。(3)、命令与参数之间的搭配关系。其实质是 检查命令的语法结构是否正确。下面是一条METHEDAS命令: DELTA/TU=1200.,TO=1600.,CONCNS=/ 怎样检查这条命令呢?DELTA是命令关键字,TU、TO、CONCNS是参数关键字。 符号“/”是规定的命今格式,“=”,“=<”是规定的参数格式。TO、TU、CO- N、NS的参数值都是实型数。 15
前 言 研制冶金热力学数据库应 用系统 是 为 了满足用 户的使 用要求 , 而 用户的使用要 求是 用命令来体现的 。 使用 时 , 首先 启动它 , 然后根据 使 用 要 求从终端 投 入 相应的命令 。 命 令是正确的 , 系统 正常运行 , 能得 出予 期结果 。 如果 命 令是错的 , 系统 则不能正常运行 。 因此保证 所 投人的命令正 确 , 是 使 用 的 首要条件 。 主要 的用 户是 冶金 物理化学方 面的 专业 人 员 , 不 能要 求 他们 都 具备良好的计算机知 识 。 即使用户精通计算机技术 , 一时疏忽 , 输错命 令也 在所难 免 。 因 而 , 执行命令前系统 对其进行检 查 , 尽 可 能保证 它的正 确性 , 这是 系统的 用 户 友好性 的重要 标志之一 。 的命令形式 命令 形式 如 下 命令关 键字 〔 , 〕 , 〔 , 〕 , · 一 , 〔 , , … … 〕 其 中 , ” … 为参 数关 键 字 , , , , , , · ” 一 为参 数 值 。 图 是 命 令的 语法 图 。 图 命令的语法图 命 令关 键 字 , , , , 公 等共二十个 。 参 数关 键字 , , , , 等共六十个 。 参 数值 可以是 整型数 , 实型 数 、 逻辑型或字符型 。 怎样检查命令 从三方面人 手检 查 用户 投入的命令 。 , 命令关键字和 命令格式 。 、 参数关键字 、 参 数格式 以及参 数值的 类型 。 、 命令与参数之 间的搭配关 系 。 其实质是 检 查 命令的 语 法结构是 否正确 。 下 面是一 条 命令 , , , 怎样检 查这 条命令呢 是命令关键字 , 、 、 是参数关键字 。 符 号 “ ” 是 规定的 命令格式 , “ 二 ” , “ 二 ” 是 规 定 的 参 数格式 。 、 、 、 的参数值 都是 实 型数
对于这样一条命令,首先检查DELTA是不是METHEDAS的命令关键字,TU、TO、 CON:NS是不是METHEDAS的参数关键字。然后检查TU、TO、CON.NS的数值是不是 实型数。进一步则检查TU、TO、CONCNS是不是DELTA命令允许使用的参数。此外, 规定的格式也列为检查项目。DELTA后,命令结束时都为符号“/”,TU、TO后为 “=”,而CON NS后为“=<”等。 ·要完成上述任务,需要编写一个简化了的解释程序。作为高级语言的解释程序,一 般包括换码,语句编辑、语法检查,命令处理,键盘运算,解释执行等功能。METHE- DAS的解释程序(它隶属于监控系统部分,参见本专辑文章《冶金热力学数据库应用系 统的系统构成》)具有换码,语法检查、解释执行等功能。检查用户命令的任务,正是 由解释程序中换码模块和语法检查模块具体完成。 换码和语法检查都已是成熟的技术。研制METHEAS时,在这一方面所做的工作是: 用FORTRAN-V语言书写的简单易行,便于移植的解释程序。目前FORTRAN-V在我 国是最普便使用的应用于科研计算的高级程序设计语言之一。许多复杂的应用程序需用 它编写。用FORTRAN-V编写解释程序能使大型的计算机应用软件在语言工具上保持 一致性。避免了用多种语言工具设计一个应用软件系统所造成的一些问题。 编写程序实现换码和语法检查的功能,要大量进行字符处理,因而选用具有字符处 理功能的语言较为合适,例如FORTRAN77。迫于北京钢铁学院M-150计算机的软件环 境所限,我们选用了FORTRAN.-V作为语宫工具。用FORTRAN-V实现换码和语法检 查的功能,必须设法解决字符变量定义、位字符的处理,字符型数据换成整型数据,字 符型数据换成实型数据等一系列问题。简言之,要用FORTRAN-W模拟FORTRAN77的 字符处理功能。这正是METHEDAS在换码和语法检查过程中努力解决的问题。 3怎样实现换码功能 METHEDAS的用户命令包括命令关键字,参数关键字,参数值等,其中命令关键字 参数关键字为字符型,而参数值有整型数,实型数,布尔型数。系统从终端读入命令时 只能把整条命令统-一作为字符型一次读入。命令的读人若采用FORTRAN77语言是很简 单的。因为它可以定义CHARACTER型变量和变量的长度。读人一条不超过150个字符 的命令程序如下: CHARA(TER◆150(SB WRITE (9,516) 516 FORMAT(12×,'*#COMMAND,PLEASE···') READ (8,400,END=10)CSB 400 FORMAT (150A1) 而FORTRAN N语言不能定义(HARA(TER型变量,不得不通过定义整型数组变 量或实型数组变量做为字符变量。在定义变量时尽可能用最少字节数变量。具体到M- 150计算机为半字长(一字长为4字节)的变量。如此可得出FORTRAN-V等价的命令 ·16
对于这样一 条命令 , 首先检查 是 不 是 的命令关键字 , 、 、 一 是不是 的参 数关键字 。 然 后检查 、 、 · 的 数值是不是 实型 数 。 进一步 则检查 、 、 州 是不是 命令允许使 用的参数 。 此 外 , 规定的 格式也 列 为检查 项 目 。 后 , 、 命令 结束 时 都 为 符号 “ ” , 、 后 为 “ ” , 而 后 为 “ 、 ” 等 。 一 要完成 上述任 务 , 需要编 写 一个简化了的解释程 序 。 作为 高级 语言的解释程 序 , 一 般包括换码 , 语句编辑 、 语 法检 查 , 命令处理 , 键盘运算 , 解释执行等功 能 。 的解释程 序 它隶属 于监控 系统部分 , 参 见本专辑文 章 《 冶金 热 力学数据库应用系 统的 系统构成》 具 有换 码 , 语法检查 、 解释执 行等功 能 。 检查 用户命令的 任务 , 正是 由解释程 序 中换 码模块和 语 法检查 模块具体 完成 。 换 码和 语法检查都 已 是 成熟的 技术 。 研制 时 , 在这一方 面 所做的工作是 用 一 语言 书写的简单易行 , 便 于移植 的解释程 序 。 目前 一 在我 国是 最普便 使 用的 应 用 于科 研计算的 高级程 序设计 语言之一 。 许 多复杂的应 用程序需 用 它编写 。 用 一 编 写解释程 序能 使大 型的计算机应 用软件在 语 言 工具上保持 一致性 。 避 免 了用 多种语 言工 具设计一个应 用软件 系统 所 造成 的一些 问题 。 编 写程 序实 现换 码和 语法检查 的功 能 , 要 大 量进行 字符处理 , 因而选 用具 有字符处 理功 能 的语 言较 为合 适 , 例 如 。 迫 于北 京钢铁 学院 一 计算机的软件环 境所 限 , 我们选 用 了 一 作为语言 工具 。 用 一 实 现换码和语法检 查 的功 能 , 必 须设法解决 字符 变量 定义 、 位字 符的处理 , 字符型数据换成 整型 数据 , 字 符 型 数据换成实型数据等一 系列 问题 。 简言之 , 要 用 一 模拟 的 字符处理功 能 。 这 正是 在换码和 语法检查 过程 中努 力解决 的 问题 。 怎样实现换码功能 的用户命 令包括 命令关 键字 , 参数关键字 , 参数值等 。 其 中 命令关 键字 , 参 数关 键 字为 字 符型 , 而 参 数值 有整型 数 , 实 型 数 , 布尔 型 数 。 系统 从终 端读 人 命令时 只能把整 条命令统一 作 为字符 型一次读 人 。 命令的读人若采用 语言是很简 单 的 。 因为它可 以定义 人 型变量和变量 的长 度 。 读 人一 条不超过 个字符 的命 令程 序如 下 〔 〔 · , , 产 , 二 , , 。 · 尸 , , 而 语言 不能 定义〔 仁 型 变量 , 不 得不 通 过定义 整 型 数组 变 量或 实 型 数组变 量做为 字符 变量 。 在 定义 变量时尽可能用 最 少 字节 数变量 。 具体到 计算机为半 字 长 一 字 长为 字 节 的 变量 。 如此 可得 出 一 等价的命令
读人程序。 INTEGER◆2CSB(150) : WRITE (9,516) 516 FORMAT(12X,'··COMMAND,PLEASE·*◆') READ (8,400,END=10)(SB 400 FORMAT (150A1) 这样处理的缺点是,内存空间有一定的浪费。比相应的FORTRAN?7程序多使用 (血-1)1字节的空间(n为计算机允许使用的最小变量字节数,1为要读入的字符数), 1不太大时,空间浪费是微不足到的。 用户命令以字符型读入后,需要把它改造成另一种比较便于处理的中间形式,这就是 换码的主要任务。经换码以后,作为“字符串”的用户命令,变成了“单词申”,并且按 照单词的类别(命令关键字,参数关健字,参数值)分别用一定的内部码表示,使之便 于进一步解释执行。 例如把字符串‘CONCNS=’,换码,以“=” 为界,把字符串分解成“单词串”,进而识别出它们的数据类型,并生成内部码。结果 是,由该字符串被分解且生成“(ONNS”,“·0008”,“·000016”个内部码。 并标识出“、ON(NS”为字符型,“·0008”和“·000016”为实型数。 METHEDAS用TXTDEC子程序完成换码任务,先将它作简单介绍。 (1)功能:把字符串依次分解成唯个宁符,按要求再拼装成“单词串”,标识出 它的数据类型,并生成内部码。 (2)输入: (SB:存放命令字符串的数组 N:命令字符串的长度 (3)输出, PAK:存放.“单词串”的数组 INT,存放整型数 REAL,存放实型数 Kind,标识数据类型的变量 Kind=1,为整型数 Kind=2,为实型数 Kind=9。为字符型 Kind=22,为出错标志 一 在换码过程中,频繁地进行字符处理,把一个指定字符从字符串中分解出米,再将 它写入另一变量中指定位置。用FORTRAN77做这种处理是轻而易举的事情。例CSB与 PAK都是字符型变量。把SB中第K个字符写入PA'K中第1位置上。 PA:K(l:1)=SB(k:k) ,17·
读人 程序 。 , , , ‘ · 一 , · , · ’ , , 〔 这样处理 的缺 点是 , 内存空 间有一定 的浪 费 。 比 相应的 程 序 多 使 用 一 字节的空 间 为计算机 允许使 用 的最小 变量 字节 数 , 为要读入 的字符 数 , ‘场 不太大 时 , 空 间浪 费是微不足 到的 。 用户命令 以字符 型读入 后 , 需 要把它改造 成 另一 种 比较便于处理 的 中间形式 , 这就是 换码 的主要任 务 。 经换码 以后 , 作为 “ 字符 串 ” 的用 户命令 , 变成 了 “ 单词串 ” , 少 按 照 单词 的类别 命令关键字 , 参数关键 字 , 参 数值 分 别 用一 定 的 内部码 表示 , 使之便 于进一 步解释执行 。 例 如把 字符 串 ‘ 二 , ’ , 换码 , 以 “ 二 , “ , ” , ” ” 为界 , 把字符 串分解成 “ 单词 串 ” , 进而识别 出它们 的 数据类 型 , 并 生成 内部码 。 结果 是 , 由该 字符 串被分解且 生成 ‘气 ” , “ · ” , “ · ” 三个 内部码 。 并标识 出 “ 、 , 为字符型 , ,’ · , 和 “ · ” 为实 型 数 。 用 子程 序完成换码任务 , 先将它作简 单介绍 。 功能 把字符 串依次分 解成 单个 字符 , 按要求再拼装 成 “ 单词 串 ” , 标 识 出 它的 数据类 型 , 并生成 内部 码 。 输入 。 存 放命令字符 串的 数红 命令 字符 串的长度 输 出 存 放 “ 单词 串 ” 的 数组 存放整型 数 存放实 型 数 标 识 数据类 型的 变量 , 为整型 数 “ , 为实 型 数 “ 。 为 字符 型 二 , 为 出错 标志 在换码 过程 中 , 频 繁地进行 字符处理 , 把一 个指定字符从 字符 串 中分解 出来 , 再 将 它写人 另一 变量 中指定位 置 。 用 做 这种处理是 轻而 易 举 的事情 。 例 与 都是 字符型 变量 。 把 中第 个字符写人 ’ 中第 位 置 上 。
用F(ORTRAN-Y完成这个任务,则必须模棋FORTRAN7?的字位处理功能。 INTEGER SB·2(150),PAK·4(33),END,(OUNT : K=1 I=1 片 DO 90 J1,OUNT G0T0(10,20,30,40),I 10 EN ODE (4,15,PACK(K))SB (END) 15 FORMAT (A1) I=2 G0T01000 20ENCODE (4,25,PACK(K))SB (END) 25 FORMAT (2A1) I=3 G0T01000 30 ENCODE (4,35,PAK(K))PA"K (K),SB (END) 35 FORMAT (A2,A1) I=4 G0T01000 40 EN:ODE (4,45,PAK(K))PA'K(K),(SB (END) 45 FORMAT (A3,A1) I=1 K=K+1 1000 END=END+1 90 CONTILNUE 该程序完成把SB中第END字符写入PAK的第K个数组元素中的第I字节位置上。 有了字位处理功能,把“单词串”从命令字符串中分离出来就不困难了。“单词串”仍 是字符型数据,还需进一步处理,分析并标识出每个“单词串”所含信息的数据类型, 并将其换成相应类型的数据。 INTEGER+2 NO,N9,SYB,(SB (8) DATA NO/2H0/,N9/2H9/,SYB/2H./ D010I=1,8 IF (CSB(I).LT.NO,OR,(SB (I).GT.N9. ·18·
用 ’ 完成 这 个任 务 , 贝小必须 模拟 的 字位处 理功 能 。 · , · , , 心 ,月几盈几 ‘︸夕口 八 八勺 任 八 二 , ‘ 一 , , , , , , 七 飞 二 、 , , 二 , , ‘ 、 一 ’ , ‘ , 二 几 , , 一 , 〔 , “ 〔 该 程 序完成把 中第 字符写 入 的第 个 数组元素 中的第 字节位 置 。 有 了字位处理功 能 , 把 “ 单词 串” 从 命令字符 串中分 离 出来就 不 困难 了 。 “ 单词 串 ” 仍 是 字符型 数据 , 还需进一 步处理 , 分析并标识 出侮 个 “ 单词 串” 所 含信 息的 数据 类型 , 并将其换成 相应类 型 的 数据 。 一 , , , , , , 〔 , 。
.OR,(SB (I).EQ.SYB)GOTO20 10 CONTINUE 20 WRITE (6,200)CSB 200 FORMAT (5X,9A1,'IS NOT INTEGER' 以上程序可检查(SB中的“单词中”所含信息的数据类型是否是整型数。同理也 可检查实型数,使用DECODE语句即可将字符型的“单词申”转换成整型数或实型数。 从而完成换码的功能。 4在METHEDAS中怎样实现命令的检查 METHEDAS监控系统接收用户投入的命令后,调用TEXDE'子程序,把该命令‘字 符串分解成单个字符,从左至右逐个扫描。按“/”,“=”,“=”, “(”,“)”等符号,依次把命令关键字,参数关健字,参数值从命令字符申中分解 出来,重新拼装成“单词串”存入PACK中,继而检查“单词串”所含们息的数据类 型,对整型数,实型数进行数转换存入INT和REAL中,PACK,INT、REAL中的数 据类型由Kind指示。返回主序后,对PAK、INT、REAL带回的命令关健字,参数 键字,参数值分别处理。 4,1怎样检查命令关键字 对命令关健字做如下几方面检:a.它是否是字符型?b.其后是否紧根符号“/”? ('.它是否是二十个命令关键字中的…个?系统义件中有命令关键字表、参数关键字表 等信息。监挖系统开始工作后,将这些信息读入PTAB数组中。从PTAB数组中顺序读 出命令关键字跟所检查的命令关键字相比较,就能待知所检的命令关键字是不是ME- THEDAS的二十个命令关犍宁:之-·。 (1) ('ALL TXTDE.(150,CSB,PACK) (2) IF (KIND.EQ.9.AND.(SB(END).EQ.SLASH) ◆GOTO4 (3) WRITE (9,500)PACK(1),PACK(2) (4) 500 FORMAT(2X,'SYNTAX ERROR:',2A4,'TRY AGAIN PLEASE ' (5) 4N=(TL·2-1 (6) D051=1,N,2 (7) (I=I/2+1 (8) IF (TAB(I).EQ.PAK(1).AND. TAB (I+1).EQ.PACK(2))GOTO 6 (9) CONTINUE ,19
〔 只 , 〔 , , ’ ’ 以上程 序可检查 出 中的 “ 单词 串 ” 所 含信 息的 数据 类型是 否是 整 型 数 。 同理 电 可检查 实 型数 。 使 用 语 句即可将 字符 塑 的 “ 单词 串” 转换 成 整 型数或 实 型 数 。 从而完成换 码的功 能 。 在 中怎样实现命令的检查 监 控系统 接收 用 户 投入 的命令后 , 调用 子程 序 , 把 该命令 ‘ 补 符 串分解 成单个 字符 , 从左 至 右 逐 个 扫描 。 按 “ ” , “ ” , “ 二 ” , “ ” , “ ’, , “ ” 等符号 , 依 次把命 令关键 字 , 参 数关键字 , 参 数值从 命令 字符 串 中分 解 出来 , 重新拼装 成 “ 一 单词 串” 存人 中 , 继而检查 “ 单词 串 ” 所 含 信 息 的 数 据 类 型 , 对整型 数 , 实 塑 数进 行 数据转换 存入 和 中 , , 、 中 的数 据 类型 由 指示 。 返 回主程 序后 , 对 ‘ 一 、 、 带 回 的命令 关键 字 , 参 数解 键字 , 参 数值分 别 处理 。 门 怎样检 查 命令关被 字 对 命令 关键字做 如下几 方面检杳 , 它是 否是 字符 型 其后是 否紧根符 号 “ ” 它是 否是 二 卜个 命令关键 字 中的一个 系统 文件 中有 命 今 关键 字表 、 参 数关键 字表 等信息 。 监控 系统 开 始工 作后 , 将这些 信 ‘ 白 、 读 入 数封 中 。 从 数 组 中 顺 序读 出命令关键字跟所 检 查的命 令 关键 字 相比 较 , 就 能得 知所 检 查的 命令关键 字是不是 的二十 个命 令 关键 字 之一 。 〔 ’ , , 、 , 一 , ’ , ’ ’ , , ’ 〔 一 , , 〔 、 丸 , 、 十 〔 、产、产、 、 、 一 、产户万 匕 ‘了了、 ‘吸‘、了
(10) WRITE (9,600)PACK(1),PA'K(2) (11) 600 FORMAT (2X,'ILLEGAL COMMAND:',2A4, 4 .TRY IT ONE MOREI') 注释:语句①,第一次调用TXTDEC。命令字符串长度不超过150,存放在SB数 组中。执行TXTDEC后,命令关键字从命令字符串中分解出来,山PACK代回主程序。 语句②,命令关键字为字符型,其后紧跟“/”,继续检查,否则打印错误信息。语句 ⑤,计算出命令关键字表的长度,用来控制从PTAB中逐条读出命令关键字。语句⑦, CI是命令关键字在命令关键字表中的序号。语句⑧,在逐条读出的命令关健字中只要有 一条与PACK中的命令关键字相符,继续检查其他项日。否则给出错误信息。 参数关键字的检查采取与命令关键字的检查相同的方法,不在赘述。 4,2怎样检查命令与参数的搭配关系 METHEDAS共有用户命令20条,60个参数。-一条命令只允许使用60个参数中的某 。 些参数,一个参数允许出现在不同命令中。在用户投入的命令中,如果命令关键字和参数 关键字均正确,但是命令与参数之间的搭配关系不正确,仍是错误命令。监控系统怎样 杜绝这种情况发生呢? 在系统信息文件中,给每一个参数建立了命令,参数搭配控制字。该字是这样做成 的。设一个二十位二进制数,每一位代表一条命令,其次序按命令关键字表的次序排 列。该参数能被第几个命令使用,就在该位上填写“1”,否则写“0”。将这样得到 的二进制数化成十进制数。就是该参数的命令,参数搭配控制字。 使用命令、参数搭配控制字,如下编写程序,就能完成检查命令、参数搭配合法与 否的任务。 (41) CCW=PTAB(PTL◆2+G0·4+P1) (42) D07I=1,1 (43) M=CCW/2 (44) CCW=M (45) CONTINUE (46) R=CCW-M◆2 (47) IF (R.EQ.0)GOTO 3 (48) 3 WRITE (9,110)PACK(10),PACK(2) (49) 110 FORMAT(2X,'◆*ILLEGAL PARAMETER NAME◆◆◆', .2A4,'RETRY PLEASE) 注释:语句(41),从PTAB中取出被查参数的命令,参数控制字,存入CCW中。语句 (42)至(45),对CCW做CI次整除2运算。(I为当前被检查的命令在命令关键字表中的序号。 语句(46),求出与被查命令相对应位上的值存入RR为“0”,给出错误信息。R为“1”, ·20:
, , ‘ 一 , ’ ’ , 叮 ’ 注释 语 句① , 第一 次调 用 。 命 令字符 串长 度 不超 过 , 存 放 在 数 组 中 。 执行 后 , 命 令关键 字从命 令字符 串 中分 解 出来 , 由 代 回 主程 序 。 语 句② , 命令关 键字为 字符型 , 其后紧 跟 “ ” , 继 续检查 , 否则打 印错 误信息 。 语句 ⑤ , 计算 出命令关键字 表的 长度 , 用 来控制 从 中逐 条读 出命令关 键 字 。 语 句⑦ , 是 命令关 键字在命 令关 键 字表 中的序 号 。 语句⑧ , 在逐 条 读 出的命 令关 键 字 中只要 有 一 条与 中的命 令关键 字相符 , 继续检 查其他 项 。 否 则给 出错 误 信 、 。 参 数关 键 字 的检查采取 与命 令关 键字 的检 杳 相 同的方 法 , 不 在 赘述 。 。 怎样检变命令与参数的 搭配关 系 共 有用 户 命令 条 , 个参 数 。 一 条命令只 允许 使 用 个参 数 中的某 些参 数 , 一个 参 数允许 出现在 不 同命令 中 。 在用 户 投入 的命令 中 , 如果命 令关键 字和参 数 关键 字 均正确 , 但是命令 与参 数之 间的搭 配关 系不正 确 , 仍 是错 误命令 。 监控系统 怎 样 杜绝这 种情况发生呢 在系统 信息文件 中 , 给每一个参 数建 立 了命 令 , 参数搭 配控制 字 。 该字是这 样做成 的 。 设一个二十 位二进制 数 , 每 一 位代 表一 条命 令 , 其次 序按 命 令 关 键字 表的次 序排 列 。 该 参 数能被第几个命 令使 用 , 就在该位上填写 “ ” , 否则写 “ ” 。 将这样得 到 的二进制 数化成十进制数 。 就是该参 数的命令 , 参 数搭 配控 制字 。 使用命 令 、 参 数搭 配控制 字 , 如下编 写程序 , 就能 完 成检查命 令 、 参 数搭 配合 法 与 否 的任务 。 一 · , 二 心 一 一 。 。 , , , ’ , , 二 , , ’ 注释 语 句 , 从 中取 出被 查参 数 的命 令 , 参 数控制 字 , 存 入 中 。 语 句 至 , 对 做 次整 除 运 算 。 〔 为 当前被检 查 的命 令在命 令关 键字 表 中的序号 。 语句 , 求 出与被 查命令相对应位 上 的值存人 。 为 “ ’ , 给出错误信息 。 为 “ 王”
继续梳查。 用这种方法检查命令与参数之闻的搭配关系,结果精确。川十逃制数存贮,节约了 存贮单元。 4.3如何检查参数格式和参数值类型 为了检查参数格式和参数值类型,在系统文件中给每-·个参数建立参数格式,类型 控制字。此字是.二位十进制数。在位数上,只能取值1,2或3。取值1,在参数关 键字后为“=”。取值2,为“(”。取值3,为“=<”。在个位数上,只能取值1, 2,3或4。取值1,参数值应为整型。取值2,为实型。取值3,为字符型。取值4,为 逻辑型。借助于格式、类型控制字,不难完成参数格式和类型的检查。 (51) TYP(1)=PTAB (PTL.2+PI)/10 (52) T=TYP(1) (53) G0T0(100,200,300),T (54) WRITE (9.120) (55) 120 FORMAT(2X,'◆*ERROR ON SYSFIL···') (56) 100 IF (CSB(END).NE.GLEIH)GOTO 900 (57) 200 IF (CSB(END),NE.RAUF)GOTO 900 (58) 300 IF (CSB (END).NE,GLEIH,OR.CSB(END+1).NE.SAUF *GOT0900 (59) 900 WRITE(9,140)(PA(K(I),I=1,5) (60) 140 FORMAT(2X,'···SYNTAX ERROR IN PARAMETER··', 5A4,/RETYPE IT!) 注释:语句(51),从PTAB中取出参数格式,类型控制字中的十位数,存入TYPE(1) 中。语句(53),按T的值(TYPE(1)的值)分别进行处理。语句(55),(56),若T值不等于1, 2,3中的某-个值,打出错误信息。语句(57),T=1,参数关键字之后是“=”,格式 对,继续检查。否则打印错误信息。语句(58),T=2,参数关键字之后是“(”,继续执 行。否则打出错误信息,语句(59),T=3,参数关键字后是“=<”,继续执行,否则格 式出错。 下面程序完成参数值类型的检查任务。 (71) TYPE(2)=PTAB(PTL·2+PI)-TYB(1)·10 (72) SKIP=TYPE (2) (73) G0TO(10,20,30,40),SKIP (74) G0T01000 (75) 100 PNTR=END+1 (76) COUNT=150-PNTR+I (77) CALL TXTDEC (150,(SB,PACK) (78) IF (KIND.NE.1)GOTO 906 (79) PB (DISP+INDEX)=INT ·21·
继续检 夜 。 用这利 ,方 法检 查命令 与参数之 间的搭配关 系 , 结果精 确 。 十进制 数存 贮 , ‘ 约 了 存 贮单元 。 如何检查参数格式 和参数值类型 为 了检查参 数格式和参 数值 类型 , 在 系统文件 中给标一个参 数建 立 参数格式 , 类型 控 制字 。 此字是 二 位 一 一 进 制 数 。 在 十位 数上 , 只能取值 , 或 。 取 值 , 在 参 数关 键字后为 “ ” 。 取依 , 为 “ ’ 。 取值 , 为 “ ” 。 在个 位 数上 , 只 能 取值 ’ , 或 。 取值 , 参 数值应为整型 。 取值 , 为实 型 。 取值 , 为 字符 型 。 取值 , 为 逻辑 型 。 借助 干格式 、 类 型控制 字 , 不难 完 成参 数格式 和 类型 的检 查 。 二 , 八。 , , , , , ‘ … , · 产 万 。 、 。 , 七 , , 连 , 广 , 二 , · , , , ’ 往释 语句 , 从 中取 出参 数格式 , 类型控 制 字 中的十 位 数 , 存入 中 。 语句 , 按 的值 的 值 分别 进行处 理 。 语句 , , 若 值不等 于 , , 中的某一个值 , 打 出错 误信息 。 语句 , , 参 数关键 字 之 后是 “ 二 ” , 格式 对 , 继续检查 。 否 则打 印错 误信息 。 语句 , “ , 参 数关 键字 之后是 “ , , 继续执 行 。 否 则打 出错误信 息 、 。 语句 , 二 , 参 数关 键 字后是 “ “ ” , 继 续执 行 , 否则格 式 出错 。 下面程序完成参 数值类型的检查任 务 。 , 一 · , , , , 一 一 , , ‘ 。 二 · ·
(80) 20 PNTR=END+1 (81) COUNT=150-PNTR+1 (82) CALL TXTDEC (150,CSB,PACK) (83) IF (KIND,NE,2)GOTO 906 (84) RPB (DISP+INDEX)=REAL (85) 30 PNTR=END+1 (8G) IF(.SB(PNTR).EQ.TRUE.OR.SB(PNTR).EQ.FALSE) ·GOT031 (87) WRITE(9,9000)CSB(PNTR (88) 9000 FORMAT(2X,′·◆SYNTAX ERROR IN PARAME TER◆·:',A2 (89) G0T01000 (90) 31 PB(DISP-INDEX)=-1 (1) ((SB(PNTR).EQ.FALSE)PB(DISP+INDEX)=0 (2) 40DO43=1,L 注释:语句(71),从PTAB数组中读参数格式,类型控制字巾的各位数,存入TYPE (2)中。语句(73),积挪SKIP(即TYPE(2))的值传入不同的分支,处理不同类型的参数 值。语句(74),TYPE(2)中的值不是1,2,3,4中的某个数,出错,语句(75)至(70), SKIP=1处理整型参数值。语句(75),调整指针PNTR,以指示被处理字符在命令字符串 中位置。语句(76),计算还没被检查的字符串长度。语句(77),调用TXTDE对参数值换 码。语句(7$),该参数值不是整型数,给出错误信息。语句(7),参数值是整型数,做进一· 步处理。语句(80)到悟句(84),SKIP=2检查实型参数值。语句(85)至语句(91),SKIP-3检 查逻辑型参数值。语句(2)应SKIP=4时,去处理宇符型参数值。 METHEDAS监控系统接收用户投入的命令后,对命令的语法结构进行检查。语法 检查后再做一些其他处理。例如,把参数按规定位置填入命令参数表中去等。妥当地完 成这些任务后,进而对命令解释执行完成相立的数据管理任务或计算任务。值得注意的 是,通过语法检查的命令,只能在一定范围外保证命令的正确性。对具体参数值只保证 其数据类型的正确,具体值是无法确切判断它的对否。例如,-·个参数值应是实型数 0.0008,而投入了0.0016。命令将顺利道过检查并被执行。但计算结果并不正确。由于 命令关键字,参数关键字,命令格式、参数格式、命令与参数搭配关系的检查是严格 的,检查后在这些方面确保正确。因此,监控系统对用户命令做的语法结构检查在极大 的范围内保证命令不出错或少出错,这对保证METHEDAS正常运行是十分重要的。 参考文献 〔1)郑国梁等:计算机的知译方法,人民邮电出版社,1982. 〔2)DJS-100系列电子数字计算机软件联合设计绀,单用户BASI(解释程序框图3清 单,北京,1976 •22·
二 二 一 ‘ , , 。 。 二 十 ‘ ‘ ‘ , , 产 二 又 气 · , 尹 , ‘ 一 卜 二 一 冬, 犷 “ , 二 , 注 释 语句 , 从 数组 中读参 数格式 , 类塑 控 制 字 中的 各位 数 , 存 入 中 。 语句 , 平民据 即 的仔〔转人 不 同 的分 支 , 处 理 不 , 类 型 的参 数 值 。 谱句 , 中的值 不是 , , , 中的某一个 数 , 出错 。 语句 至 , 二 处理整 型参 数值 。 语句 , 调 雄指针 , 以指 示被处理 字 符 在命 今 字符 串 中位 置 。 语句 , 计算 出还 没被 检 查 的字符 串长度 。 语句 , 调 用 汉寸参 数值换 码 。 语句 , 该 参 数值 不是 整型 数 , 给 出错 误信 自 、 。 语句 , , 参 数值 是整 塑数 , 做进 一 步处理 。 语句 到语句 , 二 检查实 型参 数值 。 语句 至 语 句 , · 检 查 逻辑 型参 数值 。 语句 , 应 时 , 去 处理 字符 型参数值 。 监 控系统 接收 用 户 投入 的命 令后 , 对命 令的 语法结 构进 行检查 。 语 法 检 查后再 做一 些 其他 处 理 。 例 如 , 把参 数按规 定位 置填 入命 令参 数 表 中去等 。 妥 当地完 成这 些任 务后 , 进 而对命 令解释执 行完 成 相应 的 数 据管理任 务或计 算任 务 。 值得注意的 是 , 通 过语法检 查的 命令 , 只能在一定范围 外保证 命令 的正确性 。 对具 体参 数值只保证 其 数据 类 型 的正 确 , 具 体值 是无 法确 切判 断 它 的对否 。 例如 , 一个参 数 值 应 是 实型 数 , 而 投人 了 。 命 令将顺 利通 过检 查并被执 行 。 但计算 结果 井不正确 。 由于 命 令关 键字 , 参 数关 键字 , 命 令格式 、 参数格式 、 命 令 与参 数搭 配 关 系 的检查是严格 的 , 检 查后 在这 些方 面确 保正 确 。 因此 , 监 控 系统 对 用 户 命 令做 的 语 法结 构 检 查在极大 的范围 内保证命 令不 出错 或少 出错 , 这 对保证 正常运 行 是十分 重要 的 。 参 考 文 献 〔 〕 郑 国 梁等 计算机的编译 方 法 , 人民 邮 电 出版社 , 〔 〕 一 系 列 电子 数字计算 机软 件联合 设 计夕小 单 用 户 解释程 序框 图卞 青 单 , 北 京 , 甲