法律状态公告日
法律状态信息
法律状态
2016-06-01
授权
授权
2013-03-20
实质审查的生效 IPC(主分类):G06F9/45 申请日:20121031
实质审查的生效
2013-02-13
公开
公开
技术领域
本发明涉及一种虚拟试验分布式对象模型框架代码自动生成方法,属于 虚拟试验技术领域。
背景技术
当前,由于虚拟试验具有多模型、多节点、广分布、异构性等特点,在 各试验节点间多采用分布式架构。如何高效、可靠的构建分布式对象模型, 并实现模型的可重用和可组合成为虚拟试验领域的一大研究方向。
然而,现有的分布式虚拟试验体系架构,如HLA(high level architecture)、 DIS(Distributed Interactive Simulation)等,只规定了试验仿真规则、对象 模型模板和试验仿真成员接口规范,缺乏对对象模型框架代码自动生成技术 的研究。因此分布式虚拟试验的对象模型需要应用开发人员手工编写代码, 应用效率和可靠性不高,并且由于模型缺乏统一的描述,对试验资源的共享 和重用带来困难。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提出一种虚拟试验分 布式对象模型框架代码自动生成方法,提高虚拟试验应用构建效率,促进对 象模型资源的重用。
本发明的技术解决方案是:一种虚拟试验分布式对象模型框架代码自动 生成方法,步骤如下:
(1)定义一种虚拟试验分布式对象模型的描述语言;
(2)对使用步骤(1)中所述语言描述的虚拟试验分布式对象模型而生 成的文本文件进行词法分析;
(3)根据所述描述语言的元模型,利用语法分析器生成工具生成语法 分析器;
(4)根据词法分析的结果,使用所述语法分析器对所述文本文件进行 语法分析,并将得到的语法分析结果存放到中间表示数据结构中;
(5)建立所述描述语言与IDL语言的映射关系,将步骤(4)中间表示 数据结构中存放的语法分析结果中的数据类型转化为IDL语言中的数据类 型,并调用IDL编译器生成数据类型所对应的虚拟试验分布式对象模型框架 代码,所述IDL语言为CORBA接口定义语言;
(6)构建分布式对象模型模板,之后利用所述文本文件中对虚拟试验 分布式对象模型进行的描述替换所述分布式对象模型模板中相应的标签,从 而直接转化为虚拟试验分布式对象模型框架代码,
所述模板描述了虚拟试验分布式对象模型之间的交互功能
所述语法分析器生成工具为YACC。
所述步骤(4)中的数据结构与所述元模型相对应。步骤(2)中所述进 行词法分析具体为:
以字符为单位扫描所述文本文件,跳过空白符号,若扫描到的单词为所 述描述语言的保留字,则返回该保留字所对应的属性编码,否则返回该单词 的字符串,直到该文本文件扫描完毕,即完成了对该文本文件的词法分析;
本发明与现有技术相比的有益效果是:
(1)本发明给出的虚拟试验分布式对象描述语言元模型,描述了虚拟 试验分布式对象的类和数据结构,以及它们之间的关系,实现了虚拟试验分 布式对象的标准化描述,有助于虚拟试验分布式对象的重用和组合,实现试 验资源的充分利用。
(2)本发明给出的虚拟试验分布式对象模型框架代码自动生成方法, 支持对虚拟试验分布式对象描述语言语法进行正确性、一致性的检查,提高 应用开发的可靠性。
(3)本发明给出的虚拟试验分布式对象模型框架代码自动生成方法, 完成对象模型从描述语言文本到标准C++语法格式的对象模型框架的转变, 减少应用开发人员的工作量,提高应用开发效率。
附图说明
图1为本发明流程图。
图2为虚拟试验分布式对象描述语言的元模型描述图
具体实施方式
下面结合附图对本发明的具体实施方式进行进一步的详细描述。
如图1所示,本发明提供了一种虚拟试验分布式对象模型框架代码自动 生成方法,实施步骤如下:
(1)定义一种虚拟试验分布式对象模型的描述语言;
本发明采用如下定义方式:如图2所示为虚拟试验分布式对象描述语言 的元模型描述图,描述了虚拟试验分布式对象的状态分布对象(Class)、 消息对象(Message)、本地对象(Local Class)、向量(Vector)、接口 (Interface)、枚举(Enumeration)、状态分布对象指针(Class Pointer)、 基本类型(Fundamental Type),以及它们之间的继承、组合、聚合关系。
状态分布对象是复杂数据类型,描述虚拟试验的对象模型,具有状态发 布和远程方法调用功能。状态分布对象包含成员及方法。其中,状态分布对 象的成员具有状态发布的功能,可以是其他状态分布对象、基本类型、指向 自身或者指向其他状态分布对象的指针、向量、枚举、本地对象;状态分布 对象的方法是远程方法,可被虚拟试验中的其他分布式对象远程调用。状态 分布对象可以实现接口。状态分布对象可以继承状态分布对象,支持多重继 承,不支持多继承。
消息对象是复杂数据类型,描述虚拟试验的突发事件,具有消息发布的 功能。消息对象包含成员及方法。其中,消息对象的成员具有状态发布的功 能,可以是其他消息对象、基本类型、状态分布对象指针、向量、枚举、本 地对象;消息对象的方法是本地方法,只能在本地调用。消息对象可以继承 消息对象,支持多重继承,不支持多继承。
本地对象是复杂数据类型,描述虚拟试验对象模型中的结构体。本地对 象包含成员及方法。其中,本地对象的成员不具有状态发布的功能,可以是 其他本地对象、基本类型、状态分布对象指针、向量、枚举;本地对象的方 法是本地方法。本地对象可以继承本地对象,支持多重继承,不支持多继承。 本地对象可以作为方法的参数和/或返回值的类型。
向量是一个可以在运行时动态调整大小的线性表,其所有成员是同一种 类型。向量只包含成员,成员可以是基本类型、状态分布对象指针、枚举、 本地对象。向量可以作为方法的参数和/或返回值的类型。
接口主要作用是封装方法,并可以由状态分布对象实现。接口只包含方 法,且至少包含一个方法。接口可以继承接口,支持多继承和多重继承。
枚举类型用于定义有名符号的集合,提高模型的可读性,本质上是一种 取值范围受限的整数类型。枚举可以作为方法的参数和/或返回值的类型。
状态分布对象指针指向状态分布对象,便于描述状态分布对象的聚合关 系。状态分布对象指针可以作为方法的参数和/或返回值的类型。
基础类型用于定义虚拟试验分布式对象的基本属性。基础类型包含 short、unsigned short、long、unsigned long、long long、usigned long long、 float、double、char、boolean、octet、string、void,其含义等同于C语言 中的数据基础类型。基础类型可以作为方法的参数和/或返回值的类型。
本发明中的保留字包括PACKAGE、ENUM、identifier、EXCEPTION、 LOCAL、CLASS、EXTENDS、IMPLEMENTS、PRIVATE、READONLY、 ONEWAY、VECTOR、VOID、RAISES、IN、OUT、INOUT、MESSAGE、 INTERFACE、SHORT、UNSIGNED、LONG、FLOAT、DOUBLE、CHAR、 BOOLEAN、OCTET、STRING、NAME_DELIMITER。
(2)对使用步骤(1)中所述语言描述的虚拟试验分布式对象模型而生 成的文本文件进行词法分析,即以字符为单位扫描所述文本文件,跳过空白 符号,若扫描到的单词为所述描述语言的保留字,则返回该保留字所对应的 属性编码,否则返回该单词的字符串,直到该文本文件扫描完毕,即完成了 对该文本文件的词法分析。
(3)根据所述描述语言的元模型,利用语法分析器生成工具生成语法 分析器;本发明中语法分析器生成工具采用YACC(Yet Another Compiler Compiler)。
(4)根据词法分析的结果,使用所述语法分析器对所述文本文件进行 语法分析,并将得到的语法分析结果存放到中间表示数据结构中。
本发明采用的中间表示数据结构与所述元模型相对应。中间表示数据结 构有一个主表(顶层列表),它记录了所述元模型中的状态分布对象、消息 对象、本地对象。主表的每一项所要表示的数据结构是不同的,它们的共性 部分有名字和类型。而相异部分用一个联合数据结构来表示。该联合数据结 构可以表示的是记录状态分布对象的数据结构、记录消息对象的数据结构、 记录本地对象定义的结构。以记录状态分布对象的数据结构为例,它包含4 个方面的主要信息:该状态分布对象所实现的接口、该状态分布对象所继承 的VIO(可以是0个或1个)、该状态分布对象所包含的所有方法成员的结 构、该状态分布对象所包含的所有数据成员的结构。
(5)建立所述描述语言与I DL语言(接口定义语言,Interface Description Language)的映射关系,所述IDL语言为CORBA(公共对象 请求代理体系结构,Common Oject Request Broker Architecture)接口定 义语言,提供了一套通用的数据类型,用来描述产生对象调用请求的客户对 象和服务对象之间的接口的语言。将步骤(4)中间表示数据结构中存放的 语法分析结果中的数据类型转化为IDL语言的数据类型,如本地方法的映射 规则为:
规则1:虚拟试验分布式对象描述语言中localclass数据类型映射为IDL 的valuetype类型。
规则2:localclass类型的属性成员映射到valuetype的属性成员。
规则3:localclass类型中的保留字private、readonly,映射为valuetype 中的public保留字。
规则4:localclass类型中定义的方法不进行映射,在步骤6中通过模 板生成。
将所述描述语言数据类型转化为IDL语言的数据类型后,利用已有的成 熟技术CORBA实现虚拟试验分布式对象模型间的底层数据通讯,即调用 IDL编译器生成数据类型所对应的虚拟试验分布式对象模型框架代码。
(6)构建虚拟试验分布式对象模型的分布式架构功能模板,所述模板 描述了虚拟试验分布式对象模型之间的交互功能,为应用层提供发布/订阅、 远程方法调用等基础服务,是一系列C++头文件及源文件的集合。本发明中, 设计了如状态更新回调功能、对象销毁回调功能、远程方法调用功能等模板。 之后利用所述文本文件中对虚拟试验分布式对象模型进行的描述替换所述 分布式对象模型模板中相应的标签,从而直接转化为虚拟试验分布式对象模 型框架代码。应用开发人员在开发虚拟试验分布式对象模型时,不需要关心 虚拟试验分布式对象模型之间交互功能的具体实现机制,只需要在相关功能 模板中填写虚拟试验分布式对象模型的逻辑代码即可。
本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知 技术。
机译: 一种检查分布式对象的方法
机译: 一种基于复制的分布式对象系统,该复制对象能够根据客户端系统和实体之间的情况来复制必要程度的仅状态信息或唯一信息,并提供其方法
机译: 一种在分布式对象环境中动态解组数据流的系统和方法