论文部分内容阅读
ATLAS (Abbreviated Test Language for All Systems)是一个面向测试的通用语言,这个语言用于描述通常与任何具体测试系统无关的测试过程,并确保可以在自动测试系统ATE(automatic test equipment)上实现[1]。ATLAS语言因其可扩展性、易用性及设备无关性,被广泛应用于军事、工业等领域。 整个ATLAS项目的任务是实现ATLAS语言。整个项目分为三期完成。第一期的工作是完成ATLAS语言的词法分析和语法分析;第二期的工作是进行尽可能多的语义检查,并把ATLAS程序转换成在功能上完全等价的C语言程序;第三期的工作是对转换后的C语言程序进行优化,使其在可读性、可理解性、时间效率和空间效率上都达到比较满意的结果。 作为整个ATLAS项目第二期的一部分,本文完成了ATLAS语言的常规语言部分到C语言的转换。本文的工作主要包括以下几个方面的工作:一、ATLAS的声明部分到C语言的转换。ATLAS的声明部分包括常量声明语句、类型声明语句和变量声明语句。它们可以分别转换成C语言中对应的常量声明语句、类型声明语句和变量声明语句。二、ATLAS的过程相关语句到C语言的转换。ATLAS和过程相关的语句有三种:过程结构体定义、过程调用语句PERFORM、跳出过程语句LEAVE procedure。过程结构体定义执行某一功能的ATLAS语句序列。过程调用语句PERFORM调用已定义的过程来完成需要的任务。使用过程跳出语句LEAVE procedure可以在过程正常结束之前跳出过程。ATLAS的过程声明转换成C语言中的返回类型为void的函数声明。LEAVE procedure语句转换成C语言的从函数中返回的return语句。PERFORM语句转换成C语言的函数调用。三、ATLAS的数据处理语句到C语言的转换。ATLAS数据处理语句包括CALCULATE语句和COMPARE语句。CALCULATE语句提供进行计算的能力,可以是一条赋值语句,也可以是赋值语句序列。COMPARE语句通过把测试值与规定的极限值进行比较,设置GO,NOGO,HI,LO等标志状态字表示<WP=56>测试结果,以供在后续的测试过程进行使用。CALCULATE语句转换为C语言中的赋值或者赋值序列;C语言中没有直接的比较语句,故COMPARE语句在转换时用C语言的IF语句模拟。四、ATLAS的过程控制语句到C语言的转换。ATLAS过程控制语句决定程序的执行顺序,包含IF语句、WHILE语句、FOR语句、LEAVE IF语句、LEAVE WHILE语句、LEAVE FOR语句和GOTO语句。条件语句IF,循环语句WHILE和FOR以及无条件跳转语句GOTO的用法与C语言中的对应语句基本相同,转换时也可以直接对应。LEAVE IF语句、LEAVE WHILE语句、LEAVE FOR语句分别是从IF语句、WHILE语句、FOR语句中跳出,控制转向跳出的结构之后的第一个可执行语句。根据具体语义的不同将它们转换成C语言的break语句或者GOTO语句。五、ATLAS的输入输出语句到C语言的转换。ATLAS输入输出语句的功能是为程序传入或传出数据。包括4类语句:ENABLE FILE ACCESS语句、DISABLE FILE ACCESS语句、INPUT语句、和OUTPUT语句。ENABLE FILE ACCESS语句将一个文件变量和一个实际的文件建立联系,以便以后进行访问。DISABLE FILE ACCESS语句断开由ENABLE FILE ACCESS语句指定的文件变量与实际文件的联系,因而释放文件变量,以便以后使用。 INPUT语句根据输入文件的种类不同分为4类:第一类从一个已知类型的数据项组成的文件读入数据,传输单位是一个已知类型的数据项;第二类从文本文件输入数据,也可以从系统所属的标准输入设备上进行文本输入,传输单位是字符;第三类从未知文件输入数据,以位为单位进行传输;第四类对通过INPUT语句对条件量GO和NOGO进行设置。OUTPUT语句根据写出文件的种类不同分为三类:第一类将表达式的值写入已知类型数据构成的文件中,传输单位是一个已知类型的数据项;第二类向文本文件输出数据,也可一向系统所属的标准输出设备进行文本输出,传输单位是字符;第三类是向未知文件输出数据,以位为单位进行传输。将ATLAS的输入输出语句转换成C语言的输入输出语句。ENABLE FILE ACCESS语句转换成C语言的与之功能类似的fopen函数。DISABLE FILE ACCESS语句转换成C语言的fclose函数。INPUT语句中,对于已知类型文件和未知类型文件的读<WP=57>取转换成C语言中对二进制流文件的读取,对于文本文件的读取转换成C语言中对文件文件的读取操作,分别用C语言的fread或fscanf函数实现。对于设置GO/NOGO值的INPUT语句转换成对布尔变量GO/NOGO的赋值。OUTPUT语句中,对于已知类型文件和未知类型文件的写入转换成C语言中对二进制流文件的写操作,对于文本文件的写入转换成C语言中对文件文件的写操作,分别用C语言的fwrite或fprintf函数实现。本文讨论的ATLAS的常规语言部分到C语言的转换,是项目“ATLAS语言实现”的重要组成部分,为ATLAS语言其它部分(如信号部分和总线部分)的实现构造了语言框架。这部分转换是一个比较完整的开发模块,规模较大,其中用到了一定的编译技术和程序转换技术,在理论上和实际应用上都有一定的价值。