Ttcn-3语言的编译执行方法及系统的制作方法

文档序号:6471295阅读:352来源:国知局
专利名称:Ttcn-3语言的编译执行方法及系统的制作方法
技术领域
本发明涉及一种高级语自-的编译执行技术,尤其涉及一种TTCN-3语言的编译执行方法 及系统。
背景技术
TTCN-3是新一代的标准测试语言,相对与TTCN之前版本的树表描述方式,有了可读性 更强,更容易维护的高级语言文本格式。TTCN-3已经广泛的应用于协议测试等工业领域。
目前商用的TTCN-3编译执行工具主要可分为两类基于翻译执行的工具和基于解释执 行的工具。基于翻译执行的工具,大多把TTCN-3语言翻译成C、 〔++或者^73的中间表示, 在借助中间表示语言的编译执行环境,来完成执行任务;基于解释执行的工具,通常在编 译器产生的内存对象上,完成执行任务。
上述现有技术至少存在以下缺点
翻译执行方法的编译生成性能较低;解释执行方法的执行效率会受比较大的影响,且不利于调试器的实现。

发明内容
本发明的目的是提供一种编译生成性能较高、且执行效率高、易于实现的TTCN-3语言 的编译执行方法及系统。
本发明的目的是通过以下技术方案实现的
本发明的TTCN-3语言编译执行方法,包括翻译执行和解释执行,具体包括步骤 对输入的TTCN-3脚本信息,首先进行编译处理,将所述TTCN-3脚本信息存储到内存对 象上;
然后,通过所述翻译执行,先利用所述内存对象将所述TTCN-3脚本翻译成中间表示, 并生成可执行文件,再完成执行任务;或者,通过所述解释执行,在所述内存对象上直接 进行解释执行。
本发明的TTCN-3语言编译执行系统,包括编译器、执行装置;
所述编译器用于对输入的TTCN-3脚本信息进行编译处理,并将所述TTCN-3脚本信息存储到内存对象上;所述执行装置包括翻译执行装置、解释执行装置;所述翻译执行装置用于利用所述内存对象将所述TTCN-3脚本翻译成中间表示,并生成 口丁执行文件,进而完成执行任务;所述解释执行装置用于在所述内存对象上直接进行解释执行。由上述本发明提供的技术方案可以看出,本发明所述的TTCN-3语言的编译执行方法及 系统,由于包括翻译执行和解释执行,在TTCN-3脚本调试阶段,可以采用解释执行的方 法,利用解释执行方法编译效率高、便于调试的优点,有效提高TTCN-3脚本凋试的效率; 在实际利用TTCN-3脚本进行测试的过程中,可以采用翻译执行的方法,利用翻译执行方法 的执行效率高、资源需求低的特点, 一次生成多次执行,提高执行效率。


图1为本发明中TTCN-3语言的编译执行系统的原理框图。
具体实施方式
本发明的TTCN-3语言的编译执行方法,其较佳的具体实施方式
是,包括翻译执行和解 释执行,具体包括步骤对输入的TTCN-3脚本信息,首先进行编译处理,将TTCN-3脚本信息存储到内存对象 上,内存对象也就是语法树;然后,可以通过翻译执行,先利用内存对象将TTCN-3脚本翻译成中间表示,并生成可 执行文件,再完成执行任务;或者,也可以通过解释执行,在内存对象上直接进行解释执 行。上述的编译处理可以包括两遍扫描,其中第一遍扫描可以包括扫描TTCN-3脚本,并进行语法分析、建立所述语法树,处理模 块间的导入导出、处理引用等,也可以包括其它的处理;第二遍扫描包括扫描所述语法树,并进行静态语义检查等,也可以包括其它的处理。在上述的翻译执行中,可以将经过静态语义检査后的语法树翻译成〔++中间表示,并 生成可执行文件。也可以翻译成其它的中间表示,再生成可执行文件。对所述可执行文件 的执行过程可以包括将多个测试组件组成测试组件队列,并根据所述测试组件的状态决定该测试组件是否被调度执行,所述测试组件的状态包括可执行状态、非可执行状态;当所述测试组件处于 可执行状态时,按照所述测试组件队列被调度执行。也可以采用其它的执行方式。
具体应用时,可以在所述TTCN-3脚本调试阶段,采用解释执行;在利用TTCN-3脚本进 行测试的过程中,采用所述翻译。
本发明的TTCN-3语言编译执行系统,其较佳的具体实施方式
如图l所示,包括编译 器、执行装置;执行装置可以包括翻译执行装置、解释执行装置;其中
编译器用于对输入的TTCN-3脚本信息进行编译处理,并将TTCN-3脚本信息存储到内存 对象上;
翻译执行装置用于利用内存对象将TTCN-3脚本翻译成中间表示,并生成可执行文件, 进而完成执行任务;
解释执行装置用于在内存对象上直接进行解释执行,如解释执行器等。
编译器可以包括以下一个或多个模块通用元素模块、符号表模块、类型模块、声明 模块、表达式和语句模块等。还可以包括其它的模块。
翻译执行装置可以包括翻译器、翻译执行器,其中,翻译器可以包括以下一个或多个 模块通用翻译模块、控制翻译模块、表达式翻译模块、自定义类型翻译模块、常量与值 翻译模块、模板翻译模块、函数和外部函数翻译模块、测试例和可选步翻译模块、变量与 定时器翻译模块、组件端口定时器翻译模块、行为语句和基本语句翻译模块、基于实体引 用翻译模块等。还可以包括其它的模块。
翻译执行器可以包括以下至少一个模块测试环境模块、类型值模板模块、组件端口 定时器模块、翻译支持模块、行为管理模块、日志及错误处理模块等。还可以包括其它的 模块。
本发明综合翻译执行和解释执行的TTCN-3语言编译执行方法。能提高TTCN-3测试脚本 调试期的脚本生成速度,又能提高测试实施期的TTCN-3脚本执行速度。
本发明中,首先编译器对输入的TTCN-3脚本文件,进行词法语法分析,进行静态语义 检査,得到保存脚本信息的内存对象,也可以称之为语法树。然后可以选择不同的执行方 式, 一方面,在翻译执行的方式下,先利用编译器给出的语法树把TTCN-3格式的文件翻译 成〔++中间语言,再进一步利用中间语言的编译器,编译成可执行文件,最后在操作系统上 运行;另一方面,在解释执行的方式下,直接在语法树上完成执行语义。
采用本发明,可以在TTCN-3脚本调试期,极大的提高脚本的生成速度,提高脚本调试 效率;在测试实施阶段,免去TTCN-3脚本编译生成的时间,极大的提高TTCN-3执行性能,提高测试效率。 具体实施例-如图1所示,在同一个编译器前端,分别构造基于解释和基于翻译的执行器。下面对 本发明中的各模块进行详细的说明编译器通过常用的词法分析语法分析自动生成工具,如ANTLR,建立TTCN-3语言的编译器。 TTCN-3语言支持前向引用,支持从其他模块导入定义(import),这两点规定导致编译器 在扫描过程中,可能遇到未知定义体(定义体出现在扫描点之后或其他模块),为了让分 析过程继续下去,对于这种情况,必须先假设这个未知定义体的引用在语义上是正确无误 的,同时生成一个引用体对象,记录未知定义体的名称、类型、模块等信息,并把引用体 对象加到语法树相应结点上。在所有的模块都扫描完成,建立起完整的语法树之后,才有 了所有定义体的完整信息,并可以处理模块间定义体的导入导出,如果i卿ort的处理也没 有问题,此时才有足够的信息处理引用体对象,把对未知定义体的引用解析到一个个实际 的定义体。在解析完所有的引用之后,才可以判断在特定的上下文环境中这些引用在语法 和语义上是不是正确的。因此本发明的编译器不像大多数编译器那样一遍扫描,同时完成语法分析和大部分静 态语义检査。本发明采用两遍扫描第一遍扫描TTCN-3脚本,语法分析,建立语法树,处 理模块间的导入导出,并处理所有的引用;第二遍扫描语法树,静态语义检查。其中语法 树用来保存TTCN-3脚本的信息,主要由以下几个模块组成通用元素模块提供值、常数、类型限制,with属性等等通用结构,这些通用结构贯 穿于其他模块,包括类型模块和声明模块以及表达式和语句模块,例如常数可能出现于类 型定义、赋值、参数定义、模板定义;值可能出现于赋值、类型定义、模板定义;类型限 制可能出现于定义子类型、模板定义;with属性可能出现于类型定义、组定义、结构体成 员。主要有以下类C0B语法树中所有定义体的基类,记录定义体的类型、编码、文件名、行号、静态语 义检查结果、是否使用、是否常数,是否带有副作用等信息; CLength表示TTCN3语言中的length (串长度限制); CNamedValue表示结构类型中的显式赋值; CPattern表示TTCN3语言中的pattern (匹配字符模式); CRange表示一个范围;CWtih表示TTCN3语言中的with属性;
CConst及子类记录模块中出现的常数(整数、浮点数、布尔常数、BitString常数、 CharString常数、HexString常数、OctetString常数、verdict常数以及一些特殊的常数例 如-(dash) 、 omit、 infinity、 -infinity、 MJLL、常数列表CVaiueList)。
符号表模块管理各种定义体名称,主要包括添加、査找和匹配各种符号,在类型和 声明模块中出现的定义体名称被添加到符号表中,当表达式和语句引用这些定义体时,符 号表负责査找。主要有以下类
CIdentifier标忐符类,记录标志符及对应的定义体;
CIdPool标志符池类,记录定义体的标志符;
CRef引用体类,记录引用的类型,引用对象的名字和引用对象的模块名; CSymbolTable符号表类,管理所有的identifier和ref;
CLevelChain层次链表类,记录当前层次的定义,和当前层次的直接子块信息; CBlock块结构类,表示一个块结构,记录块中的局部定义和子块信息; CTTC丽odule TTCN3模块类,实现一个TTCN3 module定义;
CImport模块Import类,记录语法分析阶段的import定义(目标模块及从目标模块引 入的具体定义体列表);
Clmportltem记录具体的引入体条目;
CItemList记录欲引入或欲排除的某类定义体列表;
Call记录某类欲引入或欲排除的某类全部定义体;
CGroupItem记录欲引入的组定义体;
CGro叩只在处理import时需要,并不影响层次结构。
类型模块处理TTCN-3的类型机制,包括所有的简单类型、用户自定义类型(结构类 型和子类型)以及特殊的配置类型(component类型、port类型、address类型),主要的 类有CDeclType用户自定义类型,CSimpleType简单类型,CStructType结构类型, CStructOfType集合类型,CAddress地址类型,CComponentType组件类型,CPortType端口 类型,CAnyType任意类型等。
声明模块处理TTCN-3所有的卢明和定义,包括参数声明、变量声明、常量声明、模 板声明、定时器声明、成员声明、Label声明、函数声明、可选步声明、测试例声明、数组 声明和组声明。主要有以下类
CDecl所有声明的基类,记录声明的标志符、ID、上下文环境、with属性等共有属性;
CAltSt印Decl表示可选步声明,包含可选步参数、runson、语句块等信息; CArrayDecl表示数组声明,包含下标说明信息; CFieldDecl表示结构体成员声明,包含是否为叩tional等信息; CArrayFieldDecl表示结构体成员数组声明,包含下标说明等信息; CConstDecl表示常量声明,包含初值和是否为外部变量等信息-,
CFunctionDecl表示函数声明,包含参数、返回类型、语句块、runson,以及是否为 外部函数等信息;
CGroupDecl表示组声明,包含组内包含的定义体,组名等信息; CLabelDecl表示Label声明;
CParmDecl表示参数声明,包含传递方向、传递方式、初值等信息; CTe即lateDecl表示模板声明,包含模板参数、值匹配说明、m。dify说明等信息; CTestCaseDecl表示测试例声明,包含参数、语句块、主component、 system接口说明 等信息;
CTimerDecl表示定时器声明,包含定时器持续时间说明等信息; CVarDecl表示变量声明,包含变量初值、是否为模板变量等信息。
表达式和语句模块处理TTCN-3中各种表达式、基本语句、行为语句和各种操作。主 要的类有CCo隱unicationOp通讯操作等。
翻译执行中的翻译器
在翻译执行的模式下,首先构造翻译器,翻译器接收经过静态检査后的语法树作为输 入,输出对应的[++中间表示。0++中间表示保存71^^-3脚本的执行相关的信息。执行器接 收0++中间表示,完成具体的执行语义。0++执行器表现为动态库,它和0++中间表示通过 〔++编译器,联合编译,生成可执行文件。〔++中间表示通过接口调用把执行信息传递给执 行器。翻译器由一系列的翻译部件组成。主要分为以下几个模块
通用子模块该子模块中定义的类是以下子模块中类的基类,主要提供了通用符号的 翻译,比如逗号,分号等。主要有两个类CGenerator为虚基类,为翻译器的实现提供 接口支持;CCppGenerator则为翻译器的实现提供基类的缺省实现。
模块及模块控制翻译子模块该子模块完成TTCN-3中的模块及TTCN-3中模块控制的翻 译,包括
CModuleGenerator:模i央的翻译;CModuleCtrlGenerator:模块控制部分的翻译; COperatorExprGenerator:运算符表达式的翻译; CSymbolGenerator:特定符号的翻译,包括逗号,分号,冒号,点等。
表达式翻译子模块该子模块完成TTCN-3中所有运算符表达式的翻译; 自定义类型翻译子模块该子模块完成TTCN-3中所有自定义类型的翻译; 常量与值翻译子模块该子模块完成TTCN-3中所有的常量与值的翻译; 模板翻译子模块该子模块完成TTCN-3中所有的模板的翻译;
函数,外部函数,测试例,可选步翻译子模块该子模块完成TTCN-3中函数,外部函 数,测试例,可选歩的翻译;
变量与定时器声明翻译子模块该子模块完成TTCN-3中所有的变量声明和TTCN-3中的 定时器声明的翻译;
组件,端口,定时器操作翻译子模块该子模块完成TTCN-3中所有操作的翻译,包括 配置操作,端口操作和定时器操作;
行为语句与基本语句翻译子模块该子模块完成TTCN-3中所有的语句的翻译,包括基 本语句和行为语句的翻译;
实体引用翻译子模块该子模块完成TTCN-3中所有的引用体的翻译。
翻译执行中的执行器
翻译执行模式下的执行器,接收0++中间表示中的执行信息,完成具体的执行操作。 它主要分为测试对象配置,测试行为执行,测试报告三个部分。
测试对象配置是指测试环境的生成,包括执行机、模块、测试例等对象内存结构的生 成和配置。 一方面涉及到执行机如何管理系统适配器,平台适配器,编解码器,全局判决 等测试环境的信息,另一方面还要负责组织模块和测试例的信息结构,以便于执行。所以 这部分可以分为如上所述的两个部分。本发明称前者为环境配置部分,后者为测试例配置 部分。
测试行为执行是指在测试环境的基础上,执行TTCN-3脚本定义的测试行为。主要包括 模块控制部分的行为,测试例行为,函数行为和可选歩行为等。而要执行测试行为,必须 提供类型、值、模板、组件、端口和定时器的支持。
测试报告是指对测试行为执行结果的处理,主要包括测试日志、Log语句日志和软
件本身的调试日志,还包括错误报告及处理。
本发明将翻译执行模式下的执行器分为6个模块测试环境模块,类型、值和模板模块,组件、端U和定时器模块,翻译支持模块,行为管理模块,日志及错误处理模块。各 个模块的主要功能如下测试环境模块测试环境模块主要负责和测试管理器的通信,用于测试环境和测试例 的配置;主要的类有CTEImpl,保存测试环境,管理测试例配置;类型、值和模板模块提供基本的类型、值和模板支持;主要的类有CData数据共 有信息保存,CSimpleData简单类型数据,CStructedData结构化数据,CConstraint类型约 束信息,CMatchSpec匹配机制信息等;组件、端口和定时器模块提供与运行有关的组件、端口和定时器管理;主要的数据 有CTimer计时器,计时器状态类型nMER—STATE, CPort端口,端口状态类型PORT—STATE 等;翻译支持模块从各个模块中抽取出来的模块,主要实现一些全局函数,为0++中间 表示提供的接口;行为管理模块管理测试过程中的行为,包括模块控制部分、函数、可选步和测试例 的执行;主要的类有CPlatformThread线程控制接口, CBehavior行为对象等;日志及错误处理模块主要实现执行过程中的信息输出和错误定位,它贯穿于各个模 块中。解释执行中的执行器在解释执行的模式下,执行器的输入是优化后的语法树。执行器构造执行时必需的结 构,来完成具体的执行语义。执行机负责调度测试组件,在单线程环境下模拟多测试组件 的并发运行。执行机维护一个测试组件队列,其中存放当前所有的测试组件。测试组件的 状态决定了测试组件是否会被执行机调度执行。测试组件的可能状态有BLOCKED、 ACTIVE、 SNAPSH0T、 REPEAT。只有当测试组件的状态不是BLOCKED时,测试组件才有可能被 调度执行。每个测试组件都由自己的控制栈和值栈。控制栈用来存放可执行对象及其执行 状态;值栈用来存放执行的中间结果。测试组件的运行机制如下取出控制栈顶的可执行 对象,执行这个可执行对象若干个"原子步"。考虑到多测试组件的并发运行,有些可执 行对象,例如函数对象,不能一次执行完毕。如果函数对象中出现死循环,当试图一次执 行完整个函数时,其他的测试组件就得不到调度执行了 (因为函数中有死循环,函数调用 无法返回)。测试组件的控制栈每变化一次就是一个"原子步"。也可以把控制栈的若干 次变化作为一个"原子步"。执行机用类CTtcnExecutor来实现。CTtcnExecutor中有一个非常重要的函数Schedule ,包括接口 Schedule;形式int Schedule (int nSt印Length);输入nSt印Length执行步长,决定了每个测试组件执行的时间片; 输出无;返回测试组件在执行过程中发生的一些"事件"(例如测试例终止、异常等); 描述根据调度算法,从测试组件队列中选择一个可以执行的测试组件作为当前测试 组件,然后让当前测试组件运行一个时间片。测试组件用类CEntity实现。CEntiy中有一个重要的函数Run,包括 接口 Run;形式- int Run (int nStepLength, CTtcnExecutor氺pTtcnExecutor);输入nSt印Length执行歩长,决定了每个测试组件执行的时间片;pTtcnExecutor执行机对象; 输出无;返回测试组件在执行过程中发生的一些"事件"(例如测试例终止、异常等); 描述取出控制栈顶的可执行对象,并执行这个可执行对象若干个"原子步"。 类似翻译执行中的执行器,解释执行中的执行器也有如下三个部分测试对象配置、 测试行为执行、测试报告等。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任 何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都 应涵盖在本发明的保护范围之内。
权利要求
1、一种TTCN-3语言编译执行方法,其特征在于,包括翻译执行和解释执行,具体包括步骤对输入的TTCN-3脚本信息,首先进行编译处理,将所述TTCN-3脚本信息存储到内存对象上;然后,通过所述翻译执行,先利用所述内存对象将所述TTCN-3脚本翻译成中间表示,并生成可执行文件,再完成执行任务;或者,通过所述解释执行,在所述内存对象上直接进行解释执行。
2、 根据权利要求1所述的TTCN-3语言编译执行方法,其特征在于,所述内存对象为语 法树,所述编译处理包括两遍扫描,其中第一遍扫描包括扫描TTCN-3脚本,并进行语法分析、建立所述语法树,处理模块间 的导入导出、处理引用;第二遍扫描包括扫描所述语法树,并进行静态语义检査。
3、 根据权利要求2所述的TTCN-3语言编译执行方法,其特征在于,在所述翻译执行 中,将经过静态语义检査后的语法树翻译成0++中间表示,并生成可执行文件。
4、 根据权利要求3所述的TTCN-3语言编译执行方法,其特征在于,对所述可执行文件 的执行过程包括将多个测试组件组成测试组件队列,并根据所述测试组件的状态决定该测试组件是否 被调度执行,所述测试组件的状态包括可执行状态、非可执行状态;当所述测试组件处于可执行状态时,按照所述测试组件队列被调度执行。
5、 根据权利要求3所述的TTCN-3语言编译执行方法,其特征在于,包括 在所述TTCN-3脚本调试阶段,采用所述解释执行;在利用所述TTCN-3脚本进行测试的过程中,采用所述翻译。
6、 一种TTCN-3语言编译执行系统,其特征在于,包括编译器、执行装置; 所述编译器用于对输入的TTCN-3脚本信息进行编译处理,并将所述TTCN-3脚本信息存储到内存对象上;所述执行装置包括翻译执行装置、解释执行装置;所述翻译执行装置用于利用所述内存对象将所述TTCN-3脚本翻译成中间表示,并生成 可执行文件,进而完成执行任务;所述解释执行装置用于在所述内存对象上直接进行解释执行。
7、 根据权利要求6所述的TTCN-3语言编译执行系统,其特征在于,所述编译器包括以下至少一个模块通用元素模块、符号表模块、类型模块、声明模块、表达式和语句模块。
8、 根据权利要求6所述的TTCN-3语言编译执行系统,其特征在于,所述翻译执行装置 包括翻译器、翻译执行器。
9、 根据权利要求8所述的TTCN-3语言编译执行系统,其特征在于,所述翻译器包括以 下至少一个模块通用翻译模块、控制翻译模块、表达式翻译模块、自定义类型翻译模块、常量与值翻 译模块、模板翻译模块、函数和外部函数翻译模块、测试例和可选歩翻译模块、变量与定 时器翻译模块、组件端口定时器翻译模块、行为语句和基本语句翻译模块、基于实体引用 翻译模块。
10、 根据权利要求8所述的TTCN-3语言编译执行系统,其特征在于,所述翻译执行器 包括以下至少一个模块测试环境模块、类型值模板模块、组件端口定时器模块、翻译支持模块、行为管理模 块、日志及错误处理模块。
全文摘要
本发明公开了一种TTCN-3脚本的编译执行方法及系统,首先编译器对输入的TTCN-3脚本文件,进行词法语法分析,进行静态语义检查,得到保存脚本信息的内存对象;然后提供两种不同的执行方式翻译执行和解释执行,在翻译执行的方式下,先利用编译器给出的语法树把TTCN-3格式的文件翻译成C++中间语言,再进一步利用中间语言的编译器,编译成可执行文件,最后在操作系统上运行;在解释执行的方式下,直接在语法树上完成执行语义。这样可以在TTCN-3脚本调试期,提高脚本的生成速度,提高脚本调试效率;在测试实施阶段,免去TTCN-3脚本编译生成的时间,提高TTCN-3执行性能,提高测试效率。
文档编号G06F9/45GK101408849SQ200810227910
公开日2009年4月15日 申请日期2008年12月1日 优先权日2008年12月1日
发明者凡 蒋, 邢学智 申请人:中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1