吉林大学硕士学位论文ATLAS语言的语义分析技术.doc_第1页
吉林大学硕士学位论文ATLAS语言的语义分析技术.doc_第2页
吉林大学硕士学位论文ATLAS语言的语义分析技术.doc_第3页
吉林大学硕士学位论文ATLAS语言的语义分析技术.doc_第4页
吉林大学硕士学位论文ATLAS语言的语义分析技术.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

论文分类号: TP31 单 位 代 码 10183密 级: 内 部 研 究 生 学 号2001532025吉 林 大 学硕 士 学 位 论 文ATLAS语言的语义分析技术The Semantic Analysis of ATLAS and its Realization 作者姓名:刘 雷专 业:计算机软件与理论导师姓名 刘 磊及 职 称 教 授论文起止年月: 2002年9月至2004 年 4 月提 要C/ATLAS全称Common / Abbreviated Test Language for All Systems(全系统公共/简明测试语言)是一个广泛用于军事和航空测试的标准化语言。由IEEE负责对该语言标准进行管理维护,许多国家都参加了这个语言的开发。本文介绍的正是我国开发的ATLAS编译器中的语义分析部分。语义分析是编译中的重点,在语义分析中不仅要进行程序的上下文语义一致性的检查,还要为目标代码生成提供足够的信息。本文介绍了ATLAS语义分析的实现方法,并对ATLAS系统的实现技术、运行环境的实现方法进行了简单的介绍。对于ATLAS语义中要求的特殊问题,我们采用了面向对象技术加以实现,并取得了很好的结果。具体的实现采用静态语义分析和动态语义分析相结合的方法。本文对ATLAS系统中的设备管理系统、运行环境系统等也进行了简单的介绍,为ATLAS系统的进一步开发奠定了基础。目录目 录第一章 系统简介111 ATLAS 系统简介1111 进行ATLAS 测试的硬件环境2112ATLAS 系统结构312 本文完成的工作5第二章 ATLAS语言621 ATLAS 2000622 ATLAS 语义分析特点8第三章 ATLAS语言分析环境1131 ATLAS的语义分析环境1132 ATLAS语义环境实现16第四章 ATLAS的静态语义分析1941 静态语义分析综述1942 非设备操作部分的语义分析20421 ATLAS中的常规语句部分20422 ATLAS类型分析的属性文法描述21423 ATLAS常规声明分析的属性文法描述25424 ATLAS常规语句分析的属性文法描述2643 设备操作部分的语义分析33431 ATLAS设备操作部分语句33432 设备操作部分的上下文一致检查35433 设备操作部分的语义实现36第五章 ATLAS 的动态语义分析4151 ATLAS的运行环境4152 设备相关部分的动态语义检查4253动态语义检查的实现43结束语44参考文献45致 谢中文摘要Abstract- 2 -系统简介第一章 系统简介11 ATLAS 系统简介C/ATLAS是全系统公共/简明测试语言(Common / Abbreviated Test Language for All Systems)的缩写,它是一种功能十分强大的全系统标准测试语言,在军事、航空事业中具有广泛的应用。20世纪60年代,ARINC公司为了对航空器上的电子设备系统进行测试,主办开发了一个测试语言ATLAS,当时ATLAS的含义是指Abbreviated Test Language for Avionics Systems 。随后,美国陆军、海军、航空部队以及北大西洋公约组织也加入到这个语言的开发。1976年,C/ATLAS的控制权由ARINC移交给IEEE,此时ATLAS的含义更为广泛:Abbreviated Test Language for All Systems 。同时ARINC发布了IEEE格式的ARINC416-13A标准。1988年,IEEE发布了ATLAS716-1988/9标准,同年ARINC也发布了标准ARINC626-1988/9,之后IEEE和ARINC每三、四年就更新一次各自的标准。2000年,IEEE发布了C/ATLAS的最新版本ATLAS2000标准,我们实现的系统采用的就是IEEE的ATLAS2000标准。C/ATLAS具有如下的特点:一、它是一个标准的测试语言。为了防止语言的日益庞大和不利于维护,该语言由IEEE负责发布相应的标准,以达到语言的规范和统一。参与该标准的主要用户有美国国防部、德国国防部、法国国防部、英国国防部、瑞典国防部和航空工业的航空无线电公司等。二、C/ATLAS具有和测试设备无关的特性,可应用于所有的测试系统。用ATLAS语言编写的程序可以测试各种仪器设备,测试的代码中不包括任何测试所采用的硬件信息。也就是说,只要测试使用的自动测试设备(ATE)支持ATLAS,便可以不经过修改地使用在另外一个测试系统中编写的ATLAS程序。三、ATLAS的功能十分强大,提供了真正的自动测试。在以往的测试中,测试人员不仅要考虑测试的算法和流程,还要花很多精力用于选择测试使用的设备甚至设计测试所需的硬件等,进行不同的测试需要不同的测试设备和相应的测试流程。在ATLAS中则不需要测试人员考虑测试硬件,而由ATLAS系统自动处理,这样测试人员就能够更加专心地进行测试算法和测试流程设计。ATLAS系统的ATE(自动测试资源)中提供了大量的测试设备,一个ATE能进行很多测试,这样不仅简化了测试系统的规模,也大大提高了测试的效率和水平。111 进行ATLAS 测试的硬件环境ATLAS语言可以应用于各种电子类和非电类仪器设备的测试,随着测试技术和测试设备的不断发展,ATLAS语言也在不断的进行修改。在遵循IEEE标准的基础上,为了方便用户的使用,ATLAS语言自身提供了一种的扩展机制,以完成由于当前标准的限制而不能进行的测试。ATLAS 语言中不提供测试硬件信息。用户使用过程中,ATLAS系统根据程序中的设备特征信息,自动地进行设备分配并调用相应的硬件操作来完成对UUT(被测试单元)的测试。可以说ATLAS系统是一个对测试软件和硬件进行管理的虚拟机,它不仅负责对ATLAS源程序编译、生成机器码;还要对测试资源设备进行管理,设备管理包括:添加和删除设备,管理被测试单元(UUT)到自动测试系统(ATE)设备的开关连接通路;此外,ATLAS系统还要在测试的执行过程中,处理测试中产生的事件,并监控测试资源的工作情况。下图是ATLAS测试的硬件环境。 ,ATLAS测试系统硬件结构图ATLAS测试系统硬件主要有以下几个部分组成:1. ATE(auto test equipment):自动测试设备,使整个测试系统的核心,采用VXI或IEEE488 总线将设备连接到主机上。ATE机柜中的设备主要包括:1)测试使用的资源,如各种可控直流电源、可控信号发生器、数字万用表、示波器等;2)开关设备,用于连接ATE外部的阵列接口和ATE内部的设备。3)ATE阵列接口,是ATE的输出接口,外接测试使用的适配器。2. UUT(unit under test):被测试单元,即测试的对象,在测试过程中和ATE外部的适配器相连接。3. 适配器:用于连接ATE和UUT。在测试过程中,ATE负责提供给UUT (被测试单元)电源、输入的激励信号,并从UUT (被测试单元)中读出测试点的内容。适配器的作用就是进行从ATE(自动测试设备)到UUT(被测试单元)建立相应的连接,并根据UUT 情况进行电气转换,电信号到非电信号的转换等。4. VXI 总线等:用于连接主机和ATE(自动测试资源)中的测试设备、可控开关等,进行ATE控制和数据通信。5. 主机:测试主控计算机,其上面运行ATLAS系统。112ATLAS 系统结构ATLAS系统负责编译执行ATLAS编写的测试程序,提供调试环境,测试仿真环境,管理ATE中的各种设备和开关。ATLAS系统由ATLAS编译器、ATLAS运行环境、ATLAS环境管理程序、设备库、扩展协议、总线描述文件、设备描述文件、开关描述文件和适配器描述文件组成。系统的结构如下图所示: ATLAS系统测试流程图ATLAS 环境管理程序将测试使用的设备描述文件、开关描述文件、总线描述文件和适配器描述文件转换为内部的设备信息、开关信息、总线信息和适配器引脚信息。ATLAS编译器将测试程序编译成可执行的目标代码,并交给ATLAS运行系统执行。在编译的过程中,ATLAS编译器根据系统中的设备信息,开关信息,总线和适配器引脚信息,进行测试设备的分配,生成相应测试设备的操作代码,并在测试结束后回收设备。ATLAS运行系统负责执行目标代码,完成最终的测试。在运行系统中要监控设备的执行情况,处理来自测试设备的信号和中断,管理测试执行的进程,并给程序员提供相应的调试环境。 在执行中,ATLAS的运行系统调用设备DLL库中的设备函数来执行测试。设备管理系统负责添加测试设备,修改开关通路,修改测试设备信息,删除测试设备等等。添加和修改一个设备则相应的修改设备DLL库。ATLAS编译器根据源程序中设备的特征信息,结合系统内部的设备信息、引脚信息和开关信息,来查找设备。如果找到满足条件的设备,则分配该设备并调用这个设备的操作。如果更改系统的设备,比如添加新设备或修改当前设备的某些信息,这时要修改系统内部的设备信息,以便在ATLAS编译时能够找到满足条件的设备。12 本文完成的工作本文介绍的工作是我们的项目ATLAS系统的一部分,主要是ATLAS语言的语义分析部分,给出了ATLAS形式化语义,ATLAS编译环境、运行环境,ATLAS的动态语义分析技术和静态语义分析技术。本文完成的工作有: 实现了ATLAS语言的语义分析 利用面向对象的技术56解决了ATLAS要求的语义扩展和设备无关性 阐述了ATLAS系统的组成和各部分的功能 实现了ATLAS的语义分析器7,给出了ATLAS静态语义检查和动态语义检查的内容,并利用属性文法加以描述- 46 -ATLAS语言第二章 ATLAS语言21 ATLAS 2000ATLAS是一个十分有趣的语言,与一般的过程式语言不同,ATLAS更接近于自然语言。在这个语言中每一个语句由动词、名词和它们的修饰信息组成,一个ATLAS语句中至少包含一个动词和一个名词2。1. ATLAS2000语句结构如下图所示:固定域 分隔符标志 标号VERB语句剩余部分$ ,l 固定域中的标志域,用来说明这条语句的含义,如果忽略标志说明是一条普通的语句,是注释语句则标志为“C” 或“B”,如果是“E”表示可以从标志的这条语句开始执行测试,而与前面的测试无关。l VERB动词,包括ATLAS中的动词和动词修饰词。动词有:APPLY、DEFINE、DECLARE、REQUIRE、DISCONNECT、REMOVE、DO等。动词的修饰词用来辅助动词如:“DO ,SIMULTANEOUS” 语句中的SIMULANEOUS,信号语句中的“THEN RESET”等。l 分隔符,在ATLAS中不同的语法成分由分隔符“,”隔开。l 每一条都有一个终止符“$”。l 每个语句的语句剩余部分根据情况而定。2. ATLAS2000结构:ATLAS2000 是一个有多层结构的语言4,一个ATLAS程序由核子原语、语句、模型、TTF和模块组成。ATLAS核子部分和ATLAS原语构成了这个语言的基础,用户通过预定义和这些基本语素来建立测试项目的需求。模型结构使用户通过对底层部件的操作组合,抽象出具有更高层次的结构并对更复杂的测试功能加以描述。TTF(Test Technology Frameworks)测试技术框架,ATLAS2000测试技术框架包括并定义一些由ATLAS2000基础组成的特殊的测试环境。模块用来封装那些可重复使用的测试代码。具体结构如下图所示: ATLAS 2000 结构图注释:l ATLAS核子部分(NUCLEUS)定义了ATLAS语言典型的性能和功能。ATLAS核子由形式语法、保留字和规则三个部分组成。l ATLAS原语(PRIMITIVES)是描述和说明ATLAS信号、动作、属性和性能必需的元素。这些基本元素不能再分,其中包括名词、名词修饰词、动词、动词修饰词、操作符以及它们的功能定义。l ATLAS模型(MODELS)是一系列函数和过程的表示,在ATLAS中,模型用来描述测试设备和被测试单元(UUT)的特征。ATLAS模型是文法元素的描述基础,ATLAS关键字根据ATLAS2000模型来定义,所有的关键字必须模型化。一旦一个模型被定义并且成为测试技术框架(TTF)的一部分,就可以在ATLAS的语句中作为一个关键字来使用。l ATLAS的模块(MODULE)是包含在ATLAS程序中的一个实体,可以说它是一个包含ATLAS过程和非ATLAS过程的容器。在ATLAS中用“INCLUDE”语句来使用模块。在模块内通过声明过程的属性是全局的还是局部的,来决定过程的作用域,全局的过程可以在模块外使用。在模块内部可使用本模块定义的所有过程,通过对其它的模块进行引用声明,也可使用外部过程。22 ATLAS 语义分析特点ATLAS语言是用于测试的标准语言。尽管在ATLAS语言中没有关于测试设备硬件的具体信息,如设备的物理地址、设备驱动程序和设备的操作函数等,但是ATLAS提供了描述设备特征的原语和模型13,其中包括:名词、动词、修饰词、连接和信号保留字等。ATLAS编译器正是根据在ATLAS程序中的由这些原语和模型组成的信息,来自动地完成设备查找,设备分配、去配和操作。和常见的程序语言相比,ATLAS最大的特点就是包括了一些与测试设备或被测单元相关的信息和语句1,而对测试设备进行操作也就是ATLAS语义的重要部分。现在我们来对比一个非ATLAS语言和ATLAS语言是如何编写测试程序的。我们从C语言的测试程序和ATLAS语言编写的同样功能的程序进行一下对比。 例:将一个电压是28v的直流电源连接到被测试设备(UUT)上。实现:用C语言编写测试程序的具体操作步骤是:首先将要使用的电源连接到测试系统上,将电源到UUT的开关置为连接,然后设置电源电压为28V,接下来检查电源的输出电压是否是28V,工作电流是否小于1A,如果满足条件则允许该电源工作。在ATLAS中,通过一条简单的语句就可以完成了这些操作,在ATLAS程序中不需要指出要使用哪一个电源,我们可以看出ATLAS和C语言的不同之处。在C的程序中由测试员指定要使用的电源并连接这个电源的使用的开关这样来完成测试,在ATLAS这些工作中则由编译器自动完成。 C语言和ATLAS语言编写的代码比较如下: ATLAS 和 C 对比注释:上述C中使用的函数都是具体设备的操作函数,通过调用具体硬件的驱动程序来实现。ATLAS实现时不一定要采用和C程序一样的设备操作,具体采用什么设备由ATLAS设备分配函数决定。从上可知,ATLAS中的语义分析除了要进行和常规语言一样的语义处理之外,还要对设备相关的部分进行分析。ATLAS语义分析的特点如下:一、 ATLAS中的语义分析要考虑设备相关部分的处理。二、 ATLAS的语义分析采用动态语义分析和静态语义分析相接合的方法来实现。一些ATLAS原语或模型和设备的执行状态有关,不同种类设备的操作有不同的执行状态序列。因此在编译阶段我们不可能检查出信号语句的动作是否正确,而只能在执行的过程中检测出来。此外,如果测试资源(ATE)中的设备出现了硬件的故障,而ATLAS编译器恰恰分配了这个坏的设备,这种情况也只能在测试程序运行时检查出来。三、 ATLAS语言提供一定的扩展功能,允许测试人员根据测试的要求,添加新的ATLAS原语和模型来完成测试。在语义分析中我们还要处理这种语义扩展,检查用户编写的扩展语句是否正确,并将这些扩展的语义对应到实际设备的操作,从而生成相应的代码。四、 ATLAS语言在执行测试时,允许不同的测试可以并行执行和同步执行,并处理并行执行条件,操作间的消息等。五、 ATLAS的语义动作要对测试资源中的设备状态和开关的状态进行维护和管理,并处理信号语句中的事件。ATLAS语言分析环境第三章 ATLAS语言分析环境31 ATLAS的语义分析环境在编译程序中,符号表用来存放程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。这些符号表构成了语义分析的静态环境,符号表的主要作用8有:一、收集符号的属性。二、上下文语义的合法性检查的依据。三、作为目标代码生成阶段提供依据。ATLAS语义中的具有设备相关的特点决定了ATLAS的语义分析环境将和普通的语义分析环境略有不同,ATLAS语义分析环境除了以上三种作用外,还要负责设备的分配和设备操作代码的生成。ATLAS静态语义分析中的特殊符号表主要有:a)、ATLAS名词表,b)、ATLAS设备信息表,c)、ATLAS的开关信息表,d)、适配器描述表,e)、分配的设备表。f)、ATLAS设备需求表,g)、程序中定义的计时器、事件等,h)、程序员要求测试中是用的测试使用的源设备表,测试设备表,负载设备表。ATLAS符号表的组成如下图所示:ALTAS 符号表结构图 ATLAS 符号表结构 在ATLAS中存在一些设备操作相关的语句和信息,在语义分析时,需要将这些描述信号的ATLAS原语或模型信息记录下来,以便于进行语义检查并生成目标代码。ATLAS的语义中和设备相关的信息有ATE设备、开关连接信息和测试使用的适配器等。这些信息用来对设备进行分配和操作。其中设备分配是ATLAS语义处理的关键,设备分配所需要的信息要在语义分析后才能得到。在处理的具体过程中,ATLAS的特殊符号表中记录程序内的设备相关信息,ATLAS设备分配函数根据这些特殊符号表中的信息进行设备查找。设备分配的具体过程是首先根据从程序中得到的设备种类信息,设备特征信息来对设备类进行判断,看是否是存在满足条件的设备,如果所有的设备都不能满足条件,则说明设备分配不成功,否则得到所有满足条件的设备名称,再通过引脚来查找开关通路判断是否存在连接到该设备的通路,如果不存在则说明设备分配不成功,否则取其中一个满足条件的设备来进行分配。具体的设备分配过程如下图所示: 设备分配过程图ATLAS语义分析中用到的特殊符号表一、ATLAS的名词表。ATLAS的名词表和一般符号表的不同之处在于ATLAS中的名词是作为保留字出现在程序中的,而不是通过词法分析得到的。ATLAS提供扩展,对于扩展的名词或名词的修饰成分,要修改相应的ATLAS名词表项。ATLAS的名词表作用有:a) 用于上下文语义检查,检查信号语句中动词和名词是否匹配,一个名词可以使用的动词是确定的,检查名词中的修饰词是否正确,是否属于这个名词,修饰的类型是否正确,修饰词的单位量纲是否正确,修饰词的用法是否正确等。b) ATLAS的名词表还用于设备分配和设备操作的代码生成。设备分配函数需要从程序中得到设备相关信息,来对ATE中的设备进行判断,看是否存在满足条件的设备。要从程序中得到设备相关信息,来进行设备分配和设备操作,需使用ATLAS名词表中的修饰词类型、量纲等信息。 二、ATLAS设备信息表。设备信息表由ATLAS系统中的设备管理系统提供。ATLAS系统要求在编译的阶段进行设备静态分配,这些设备信息和ATLAS语言无关,而和具体的测试设备环境相关。不同的ATLAS系统提供不同的设备环境,设备系统生成并维护ATE中所有设备的信息,其中主要有:设备名称,设备种类,设备对应的ATLAS名词原语或扩展的ATLAS模型,设备特征,设备可控制部分,设备的连接信息,该设备相应的保护设置等。如果一个设备分配成功,则将改变这个设备的状态,以便于下一次分配时,尽量不考虑这个设备。当然如果现有满足条件的设备都被分配了,此时设备分配函数再考虑去重新安排已分配的设备,尽量地找出可以使用的设备。三、ATLAS开关信息表。ATLAS中的开关可以看成是一种特殊的设备。ATE系统中的仪器,通过系统中的开关连接来选择到ATE的阵列接口的通路,并通过测试使用的适配器连接到UUT上。开关的信息对于设备分配是必不可少的,其中的主要信息有开关的设备名称,开关两端连接的设备名称和设备连接端口,开关的种类和开关内部可以连接的通路。四、适配器描述表。和设备描述表、开关表不同,适配器描述表由程序员提供给编译器。一个不同的测试可能需要不同的适配器,测试员在设计测试程序算法的同时,也要考虑被测单元(UUT)和ATE阵列接口的连接问题。适配器的作用就是连接ATE的阵列接口和UUT,必要的时候还要进行一定的电气转换,模数转换等。在ATLAS中有一个特殊的类型连接类型,其中包括连接的引脚名称,这个名称就是适配器的接脚。在语义分析中需要检查适配器的引脚是否有定义,如果没有定义则给出错误信息,表示没有这个适配器引脚。五、已分配设备表。在ATLAS中不是所有的信号语句都要求重新分配一个设备,仅当设备初始操作时才进行设备分配。ATLAS的设备一共有三种,源类设备、负载类设备和测试器类设备。源类设备和测试器类设备的初始操作是设置操作,负载类设备的初始操作是连接操作。其它的操作语句使用的设备都是已经分配过的设备。为此,需要将已经分配的设备记录下来,在非设备初始化语句中得到这个分配了的设备,这个过程称作设备搜索。一个已分配设备表中包含的主要信息有设备的标识,设备名称,连接引脚信息,设备种类信息,设备所属的名词或ATLAS模型,设备的能力描述信息、功能信息、限制信息等。 六、ATLAS需求表。为了提高设备分配的效率和便于代码的重复利用,ATLAS为设备提供了一种预定义的功能REQUIER需求语句。在需求声明时,就要进行设备分配,这样在信号语句中可以直接使用分配好的设备,从而提高了效率。一个需求表中的信息主要有,需求的名称,相应的设备名称,设备的开关连接信息,设备的可控制部分和能力限制部分等。 七、ATLAS事件、计时器表。ATLAS中存在描述事件和计数器的语句。在信号语句中,设备操作要等事件和计时条件都满足的情况下才能执行,如果这些事件和时间条件不满足,则操作不能进行。通过定义事件,可以根据测试的要求动态的执行测试,异步执行或者同步执行。在ATLAS系统中专有一种称作虚拟监视器的设备,该设备在测试运行阶段,来处理事件响应并对事件进行控制。事件表和计时器表的作用是将这些事件的信息记录下来,进行上下文语义检查,检查事件的定义是否正确,使用是否正确,并将这些具体的事件信息提供给ATLAS运行系统,在测试执行时来控制监视器来处理事件,并控制测试的执行,如实现并发的测试操作,异步执行测试等。八、用ATLAS定义的设备表。 ATLAS的数字信号的处理语句中,要求使用定义的数字资源和数字操作环境,这些信息规定了数字设备的基本属性和数字操作时序等。利用这些数字信息描述表来检测语句的上下文语义是否正确,并在代码生成阶段将这些数字信息交给ATLAS运行系统执行。以上这些定义的符号表加上用于类型分析,过程分析中使用的类型标识符表、变量和常量标识表、过程表等,统称为ATLAS的符号表,尽管和传统的符号表略有不同,但是符号表处理的方法基本类似8。这些定义和使用的符号表构成了ATLAS的静态语义分析环境。32 ATLAS语义环境实现ATLAS的设备信息环境是语义分析中不可缺少的部分,ATLAS的设备环境主要有:ATLAS系统的设备信息,已分配的设备表,设备的状态信息,开关信息,适配器信息等。由于设备的多样性和复杂性,我们采用了面向对象技术实现ATALS语义到设备操作的对应。一类属性相同的设备可以作为一个抽象类并且提供抽象方法来表示对应的操作,而每一个具体的设备是这个抽象类的一个子类并且实现了父类定义的接口。这样在设备分配处理中就可以用共同的代码形式来处理对不同设备的查询。如果不采用面向对象方法,无法通过定义一个数据结构来满足每一种设备,因为不能保证添加了一个新的设备,该数据结构依然可用。采用面向对象来实现设备环境的方法如下。根据ALTAS的特点,名词中包含名词修饰词,修饰词用来描述名词的具体信息和功能。我们将一个名词对应一类设备。这类设备具有三种描述特征:一、设备的可控能力描述,二、设备的能力描述,三、设备的限制信息描述。每个特征都名词的修饰词相对应,每一个特征的修饰词又对应设备的具体操作。当得到ATLAS信号语句中的具体描述信息时,通过检查相应的设备的属性特征来判断是否满足要求。为此,建立一个设备类库。一个具体的设备对应一个设备种类抽象类的子类,设备种类抽象类和ATLAS中的名词相对应。同时为了便于ATLAS的扩展(对应的是在系统中添加一个新的设备),应该提供一种灵活的机制来更新类库,同时不影响ATLAS编译程序。实现时设备的类库可以采用动态连接库的形式或者组件的方法,这样能够做到单独编译类库或添加这个组件,而又不影响编译程序。ATLAS的语义分析和生成的目标代码中使用设备种类类的对象指针。设备分配时,将该指针指向具体的设备类对象。语义分析中的设备分配的算法如下:u 第一步、调用一个设备路径搜索函数,根据适配器的描述信息和开关状态信息,查找能够连接到的设备。如果没有可以试探的路径则转到第四步。u 第二步、调用设备判定函数,判断这个设备是否满足条件。u 第三步、如果当前的设备满足所有的条件,则返回该设备句柄。否则说明这个设备不满足条件,转到第一步。u 第四步、设备分配不成功,返回。 设备分配中用到的类关系图 其中类DevNounOfXXX是一个名词的抽象类,其中的成员变量implement是一个指向设备对象的指针。NounOfXXX是一个子类,类NounOfXXX的每一个函数实现时调用implement所指向的设备对象函数。类Imp-ClassOfXXX是设备种类的抽象类,它和当前的这个名词一一对应。添加一个新种类的设备即扩展的时候,则有设备管理系统建立一个新的抽象类。类ConcreateImp1和ConcreateImp2是具体设备类,它们也由设备管理系统负责添加或修改。采用设计模式中的抽象工厂类Abstractor Factory来实现从设备类到ATLAS的名词类的对应。在设备分配时,设备判定函数是通过调用设备属性的判别函数来实现的。设备判定函数的实现方法如下:一、 分析ATLAS的信号语句得到具体的描述信息,其中包括设备的三种特征信息,设备的可控性信息、设备功能信息和限制信息。二、 得到具体的设备。三、 判断当前的设备能否满足这三种特征,具体的判定方法通过调用该设备的特征属性判别函数完成。在例子中调用函数isModXXXOK( ),特征的每个修饰词都对应一个这样的函数。开关设备的实现方法也采用面向对象的方法。一个开关对应一个具体的开关设备类,开关的使用状态信息记录在每一个开关对象中,如果分配了一个设备则修改相应的开关对象中的开关连接状态。适配器的描述信息采用文件的形式。在语义分析时,需要检查信号语句的连接信息是否正确。实现中通过检查当前的测试适配器文件中的引脚是否存在定义来进行判断。我们已经分析过并不是所有的信号语句都要分配一个新的设备,事实上只是在设备的初始操作时才分配一个设备,而其他的情况要求使用已经分配的设备。这个时候我们采用已分配设备表来记录分配了的设备。在其他的情况下,通过检查已分配设备表来得到要操作的设备,从而调用相应的设备函数。以上我们简单的介绍了一下ATLAS编译器中的语义分析环境,它们是语义分析的基础。并对ATLAS的设备环境的实现技术进行了简单的介绍。对于符号表的具体操作和实现方法将在后面的静态语义分析和动态语义分析中加以详细的介绍。ATLAS的静态语义分析第四章 ATLAS的静态语义分析41 静态语义分析综述ATLAS编译器由于存在一些设备操作相关的分析和检查,导致一些操作只能在程序执行时才能进行分析。一些设备操作相关的语句如果在编译阶段进行语义分析则不能保证分析的准确性。因此实现的时候采用了静态语义分析和动态语义分析相结合的方法。静态的语义检查具有一些非常好的优点,静态语义分析可以在编译的阶段检查出错误或者是可能会发生的错误。越早的给出程序错误将更好的帮助程序员来提高代码质量和开发效率,静态的语义分析的缺点是实现的难度较大,错误检查不精确。具体而言,程序的静态语义分析的主要任务有3个方面8:语义检查,语义推理,为程序的动态语义分析和目标代码生成提供信息支持。对于通常的常规命令式语言如PASCAL、C等,静态的语义分析的主要分成9:数据流分析、类型检查、作用域约束和静态的地址分配。其中的数据流分析包括类型、数据、过程(函数)的定义,说明与引用关系的分析。类型的检查主要是检查类型的相容性。作用域约束和静态地址分配均是为程序动态语义分析和代码生成提供信息的支持。ATLAS语言的静态语义分析可以分成两大部分,一个是非设备操作部分的静态语义分析,另一个是设备操作部分的静态语义分析。其中的非设备操作部分的静态语义分析和常规命令式语言的静态语义分析方法一样。设备操作部分的语义分析主要包括:设备分配、设备搜索,检查ATLAS信号语句上下文语义一致性,建立相应的设备分配记录并保存信号设备操作的具体细节信息以便于后面的动态语义分析和生成目标代码。对于非设备操作部分的语义分析,我们采用L属性文法98进行分析。在非设备操作部分的分析过程中我们忽略L属性文法的具体实现方法。42 非设备操作部分的语义分析421 ATLAS中的常规语句部分非设备操作部分的语义分析和我们常见的过程式语言C语言、PASCAL语言等基本类似,我们也将这些非设备操作部分的语义分析称为ATLAS的常规语言部分。现在我们对ATLAS非设备操作部分先进行一个简单介绍。ATLAS的非设备操作部分的主要内容有1:n 变量、常量和类型的声明。n 过程声明。n 程序控制语句。n 文件操作的输入和输出。ATLAS常规语言部分具有如下特点:一、 ATLAS的每一条语句都有一个语句标号,这个语句标号是一个有序的正整数值,这点和FORTRAN语言相似。在程序跳转语句中,要说明跳转到的目标语句标号。二、 ATLAS中的类型是按结构等价,一个结构类型的变量允许直接赋值,类型中包括子界类型,而没有指针等需要先使用后声明的类型,类型检查满足L属性文法,不需要多次遍历求解属性值。三、 ATLAS采用先进行定义后使用的方法。程序的结构是先由程序的声明和定义语句组成,然后是程序的执行体部分。四、 ATLAS只有过程而没有函数,在过程的定义中存在值参变量和变参变量。过程不允许嵌套的过程定义,即在过程中不能定义新的过程。过程允许递归调用。五、 ATLAS中定义的标识符具有三种作用域:局部、全局和外部引用,对于定义的局部变量和类型只能在定义处使用。在主程序中声明的全局变量可以在其中定义的过程中是用,外部引用的作用域确定了ATLAS模块之间或者模块和主程序之间使用的规则,一个模块通过引用可以使用在其它模块或主程序中声明的全局量,如果主程序使用其他模块中定义的全局量必须在主程序中声明中加上一个外部引用声明(EXTERNAL)语句。六、 ATLAS的文件操作有两种,一个输入操作另一个是输出操作。如果程序中的输入或者输出操作没有给出文件名信息,则系统将认为是对基本的输入输出设备的操作,基本的输入和输出设备在默认的情况下指键盘和显示器。七、 ATLAS中的表达式运算的优先级关系从小到大为,判断(比较)运算、逻辑运算、数学运算、括号。简单的介绍了一下ATLAS常规语言部分语义的基本特点之后,我们将分别的给出这几个非设备操作部分的属性文法。属性文法(Attribute Grammar)的概念是由Knuth在1968年提出,非常的适合描述程序语言的静态语义。给出了一个语言的属性文法对于这个语言语义分析的实现有很大的帮助,属性文法的具体实现通过在产生式的具体位置上插入相应的语义动作来完成。属性文法的主要思想是:l 首先对每个语法符号引进相关的属性符号。l 其次对于每个产生式写出计算属性值的属性规则。一个完整定义的属性文法需要两部分内容:一、文法部分,二、语义方面的内容。其中语义方面的主要内容也有两个,一个是属性符号的定义,另一个是属性规则的定义。一个属性规则的形式为:属性变量=属性表达式。属性表达式是由一些常量属性变量和函数调用组成的表达式。属性文法中的每一个语法符号都有一些属性,并给这些属性起名,其中的属性分成继承属性和综合属性两种。其中开始符没有继承属性,在开始时要确定;终极符则只能有综合属性,而不能有继承属性。综合属性的值依赖于属性文法树中儿子节点的属性,而继承属性的一般特点是它的值依赖于树中父节点或兄弟节点的属性。下面几个小节中我们给出ATLAS非信号部分的语义分析的属性文法描述,在语义分析的目的主要是进行语义检查和为代码生成做准备而建立的信息,而不考虑生成中间代码的语义动作。422 ATLAS类型分析的属性文法描述一个语言的类型分析是静态语义分析中的重点。在ATLAS中允许用户根据需要自定义类型,并且可以定义复杂的结构类型。ATLAS的数据类型有基本数据类型,子界类型,预定义的数据类型和结构类型。其中基本类型有整数类型、实数类型、枚举类型、字符类型、字节类型和连接类型;子界类型定义了一个具有范围的类型,其中只有整数类型、实数类型、字符类型和枚举类型允许定义它们的子界类型;预定义的类型有布尔类型、测试使用的标准字符集类型和数的进制类型;ATLAS定义的结构类型有数组类型、记录类型、串类型和文件类型。限于篇幅,我们不能将ATLAS类型的具体语义分析全部介绍出来,我只给出几种有代表性的类型来进行分析,对于其它的类型处理方法与之类似在此忽略。仅分析整数的子界类型、枚举类型、数组类型和记录类型。一个ATLAS类型节点的数据结构可以简单的描述成下面的形式:typedef TNode=TNodeRecord *;typedef TNodeRecord=struct tkind :enum( int_sub, enum, arr, rec, ) ; unionswitch (tkind) case int_sub : (low_sub,up_sub: integer);case enum: (ename: String;econs:CNode);case arr: (low, up:BaseTNode;ctp:TNode );case rec: (fields :Fields ); value;typedef Fields = FieldsRecord*;typedef FieldsRecord= struct fieldName: String;fieldType : TNode;next : Fields;;其中一个整数的子界类型节点由上界和下界组成;枚举类型则由枚举类型名称和枚举常量组成;数组类型由下标类型和数组的基类型组成,其中下标类型只能是整数类型、字符类型和枚举类型,数组的基类型可以是所有除了文件的类型;记录类型是类型名和类型组成的序列。下面是属性文法:其中属性符号Tab表示符号表,tnode表示类型结点,fields表示域表结点。其中用到了下面一些函数:l searchtnode( tab, name ):表示用name查符号表tab并返回其类型指针值l searchcnode( tab, name ):表示用name查常量符号表tab并返回一个和表中相等的新的常量指针节点l islablenew( ) :检查标识符是否有重复定义l mkintsub(int i,j):建立integer类型结点并返回其地址l mkenum :建立enum枚举类型节点并返回其地址l mkarray:建立array类型结点并返回其地址l mkrecord:建立record类型结点并返回其地址l mkfields:建立fields域表的结点并返回其地址l mkconstnode :建立一个常量节点并返回其地址l insertconst :将定义的常量插入到常量表中一个语法符号的属性如下:其中INT表示继承属性SYN表示综合属性。 T :INH tab SYN tnode Field:INH tab SYN name, type FieldL:INH tab SYN fields N:INH tab SYN val , type id:INH SYN name CL :INH tab SYN cnodelist,tab C :INH tab SYN cnodelist,tab 产生式中的属性描述如下:T INTEGER SUBRANGE N1 THRU N2 / if(N1.valN2.val|N1.type!=N2.type|N1.type!=integer|N2.type!= integer)then ERROR;else T.tnode := mkintnode (N1.val,N2.val); /T id / if (!islablenew( T.tab, )then ERROR; T.tnode := searchtnode( T.tab, ); / T ENUMERATION ( CL ) / if(CL.cnodelist=nil) then ERROR ; else T.tnode := mkenumnode (CL.cnodelist); /T1 ARRAY ( N1 THRU N2 ) OF T2/ T2.tab := T1.tab; if(N1.type!=N2.type)then ERROR; else if(N1.type!=integer| N1.type!=enum| N1.type!=char) then ERROR; else T1.tnode:=mkarray(arr,N1.val, N2.val,T2.tnode ); /T RECORD OF FieldL / FieldL.tab := T.tab;T.tnode := mkrecord(rec, FieldL.fields ) ; /CL id / Cnode= searchcnode( CL.tab, ); if(Cnode!=nil) then ERROR;CL.cnodelist=nil; else CL.cnodelist=mkenumconst(nil,); Cnode:=mkenumconst(nil,,); CL.tab=insertconst(CL.tab,Cnode); /CL1 CL2 , id/ Cnode= searchcnode( CL2.tab, ); if(Cnode=nil) then ERROR;CL1.cnodelist=nil; else CL.cnodelist=mkenumconst(nil,); if(CL2.cnodelist=nil) then ERROR;CL1.cnodelist=nil; else CL1.cnodelistnext=CL2.cnodel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论