專利名稱:一種虛擬試驗分布式對象模型框架代碼自動生成方法
技術領域:
本發(fā)明涉及一種虛擬試驗分布式對象模型框架代碼自動生成方法,屬于虛擬試驗技術領域。
背景技術:
當前,由于虛擬試驗具有多模型、多節(jié)點、廣分布、異構性等特點,在各試驗節(jié)點間多采用分布式架構。如何高效、可靠的構建分布式對象模型,并實現模型的可重用和可組合成為虛擬試驗領域的一大研究方向。然而,現有的分布式虛擬試驗體系架構,如HLA (high level architecture)、DIS(Distributed Interactive Simulation)等,只規(guī)定了試驗仿真規(guī)則、對象模型模板和
試驗仿真成員接口規(guī)范,缺乏對對象模型框架代碼自動生成技術的研究。因此分布式虛擬試驗的對象模型需要應用開發(fā)人員手工編寫代碼,應用效率和可靠性不高,并且由于模型缺乏統一的描述,對試驗資源的共享和重用帶來困難。
發(fā)明內容
本發(fā)明的技術解決問題是克服現有技術的不足,提出一種虛擬試驗分布式對象模型框架代碼自動生成方法,提高虛擬試驗應用構建效率,促進對象模型資源的重用。本發(fā)明的技術解決方案是一種虛擬試驗分布式對象模型框架代碼自動生成方法,步驟如下(I)定義一種虛擬試驗分布式對象模型的描述語言;(2)對使用步驟(I)中所述語言描述的虛擬試驗分布式對象模型而生成的文本文件進行詞法分析;(3)根據所述描述語言的元模型,利用語法分析器生成工具生成語法分析器;(4)根據詞法分析的結果,使用所述語法分析器對所述文本文件進行語法分析,并將得到的語法分析結果存放到中間表示數據結構中;(5)建立所述描述語言與IDL語言的映射關系,將步驟(4)中間表示數據結構中存放的語法分析結果中的數據類型轉化為IDL語言中的數據類型,并調用IDL編譯器生成數據類型所對應的虛擬試驗分布式對象模型框架代碼,所述IDL語言為CORBA接口定義語言;(6)構建分布式對象模型模板,之后利用所述文本文件中對虛擬試驗分布式對象模型進行的描述替換所述分布式對象模型模板中相應的標簽,從而直接轉化為虛擬試驗分布式對象模型框架代碼,所述模板描述了虛擬試驗分布式對象模型之間的交互功能所述語法分析器生成工具為YACC。所述步驟(4)中的數據結構與所述元模型相對應。步驟(2)中所述進行詞法分析具體為
以字符為單位掃描所述文本文件,跳過空白符號,若掃描到的單詞為所述描述語言的保留字,則返回該保留字所對應的屬性編碼,否則返回該單詞的字符串,直到該文本文件掃描完畢,即完成了對該文本文件的詞法分析;本發(fā)明與現有技術相比的有益效果是(I)本發(fā)明給出的虛擬試驗分布式對象描述語言元模型,描述了虛擬試驗分布式對象的類和數據結構,以及它們之間的關系,實現了虛擬試驗分布式對象的標準化描述,有助于虛擬試驗分布式對象的重用和組合,實現試驗資源的充分利用。(2)本發(fā)明給出的虛擬試驗分布式對象模型框架代碼自動生成方法,支持對虛擬試驗分布式對象描述語言語法進行正確性、一致性的檢查,提高應用開發(fā)的可靠性。(3)本發(fā)明給出的虛擬試驗分布式對象模型框架代碼自動生成方法,完成對象模型從描述語言文本到標準C++語法格式的對象模型框架的轉變,減少應用開發(fā)人員的工作量,提高應用開發(fā)效率。
圖I為本發(fā)明流程圖。圖2為虛擬試驗分布式對象描述語言的元模型描述圖
具體實施例方式下面結合附圖對本發(fā)明的具體實施方式
進行進一步的詳細描述。如圖I所示,本發(fā)明提供了一種虛擬試驗分布式對象模型框架代碼自動生成方法,實施步驟如下(I)定義一種虛擬試驗分布式對象模型的描述語言;本發(fā)明采用如下定義方式如圖2所示為虛擬試驗分布式對象描述語言的元模型描述圖,描述了虛擬試驗分布式對象的狀態(tài)分布對象(Class)、消息對象(Message)、本地對象(Local Class)、向量(Vector)、接口 (Interface)、枚舉(Enumeration)、狀態(tài)分布對象指針(Class Pointer)、基本類型(Fundamental Type),以及它們之間的繼承、組合、聚合關系。狀態(tài)分布對象是復雜數據類型,描述虛擬試驗的對象模型,具有狀態(tài)發(fā)布和遠程方法調用功能。狀態(tài)分布對象包含成員及方法。其中,狀態(tài)分布對象的成員具有狀態(tài)發(fā)布的功能,可以是其他狀態(tài)分布對象、基本類型、指向自身或者指向其他狀態(tài)分布對象的指針、向量、枚舉、本地對象;狀態(tài)分布對象的方法是遠程方法,可被虛擬試驗中的其他分布式對象遠程調用。狀態(tài)分布對象可以實現接口。狀態(tài)分布對象可以繼承狀態(tài)分布對象,支持多重繼承,不支持多繼承。消息對象是復雜數據類型,描述虛擬試驗的突發(fā)事件,具有消息發(fā)布的功能。消息對象包含成員及方法。其中,消息對象的成員具有狀態(tài)發(fā)布的功能,可以是其他消息對象、基本類型、狀態(tài)分布對象指針、向量、枚舉、本地對象;消息對象的方法是本地方法,只能在本地調用。消息對象可以繼承消息對象,支持多重繼承,不支持多繼承。本地對象是復雜數據類型,描述虛擬試驗對象模型中的結構體。本地對象包含成員及方法。其中,本地對象的成員不具有狀態(tài)發(fā)布的功能,可以是其他本地對象、基本類型、狀態(tài)分布對象指針、向量、枚舉;本地對象的方法是本地方法。本地對象可以繼承本地對象,支持多重繼承,不支持多繼承。本地對象可以作為方法的參數和/或返回值的類型。向量是一個可以在運行時動態(tài)調整大小的線性表,其所有成員是同一種類型。向量只包含成員,成員可以是基本類型、狀態(tài)分布對象指針、枚舉、本地對象。向量可以作為方法的參數和/或返回值的類型。接口主要作用是封裝方法,并可以由狀態(tài)分布對象實現。接口只包含方法,且至少包含一個方法。接口可以繼承接口,支持多繼承和多重繼承。枚舉類型用于定義有名符號的集合,提高模型的可讀性,本質上是一種取值范圍受限的整數類型。枚舉可以作為方法的參數和/或返回值的類型。狀態(tài)分布對象指針指向狀態(tài)分布對象,便于描述狀態(tài)分布對象的聚合關系。狀態(tài)分布對象指針可以作為方法的參數和/或返回值的類型。 基礎類型用于定義虛擬試驗分布式對象的基本屬性?;A類型包含short、unsigned short、long、unsigned long、long long、usigned long long、float、double、char、boolean、octet、string、void,其含義等同于C語言中的數據基礎類型?;A類型可以作為方法的參數和/或返回值的類型。本發(fā)明中的保留字包括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_DEUMITER。(2)對使用步驟(I)中所述語言描述的虛擬試驗分布式對象模型而生成的文本文件進行詞法分析,即以字符為單位掃描所述文本文件,跳過空白符號,若掃描到的單詞為所述描述語言的保留字,則返回該保留字所對應的屬性編碼,否則返回該單詞的字符串,直到該文本文件掃描完畢,即完成了對該文本文件的詞法分析。(3)根據所述描述語言的元模型,利用語法分析器生成工具生成語法分析器;本發(fā)明中語法分析器生成工具采用YACC(Yet Another Compiler Compiler)。(4)根據詞法分析的結果,使用所述語法分析器對所述文本文件進行語法分析,并將得到的語法分析結果存放到中間表示數據結構中。本發(fā)明采用的中間表示數據結構與所述元模型相對應。中間表示數據結構有一個主表(頂層列表),它記錄了所述元模型中的狀態(tài)分布對象、消息對象、本地對象。主表的每一項所要表示的數據結構是不同的,它們的共性部分有名字和類型。而相異部分用一個聯合數據結構來表示。該聯合數據結構可以表示的是記錄狀態(tài)分布對象的數據結構、記錄消息對象的數據結構、記錄本地對象定義的結構。以記錄狀態(tài)分布對象的數據結構為例,它包含4個方面的主要信息該狀態(tài)分布對象所實現的接口、該狀態(tài)分布對象所繼承的VIO (可以是O個或I個)、該狀態(tài)分布對象所包含的所有方法成員的結構、該狀態(tài)分布對象所包含的所有數據成員的結構。(5)建立所述描述語言與I DL語言(接口定義語言,Interface DescriptionLanguage)的映射關系,所述IDL語言為CORBA (公共對象請求代理體系結構,Common OjectRequest Broker Architecture)接口定義語言,提供了一套通用的數據類型,用來描述產生對象調用請求的客戶對象和服務對象之間的接口的語言。將步驟(4)中間表示數據結構中存放的語法分析結果中的數據類型轉化為IDL語言的數據類型,如本地方法的映射規(guī)則為規(guī)則I :虛擬試驗分布式對象描述語言中l(wèi)ocalclass數據類型映射為IDL的valuetype 類型。規(guī)則2 :localclass類型的屬性成員映射到valuetype的屬性成員。規(guī)則3 localclass 類型中的保留字 private、readonly,映射為 valuetype 中的public保留字。規(guī)則4 =Iocalclass類型中定義的方法不進行映射,在步驟6中通過模板生成。將所述描述語言數據類型轉化為IDL語言的數據類型后,利用已有的成熟技術CORBA實現虛擬試驗分布式對象模型間的底層數據通訊,即調用IDL編譯器生成數據類型所對應的虛擬試驗分布式對象模型框架代碼。 (6)構建虛擬試驗分布式對象模型的分布式架構功能模板,所述模板描述了虛擬試驗分布式對象模型之間的交互功能,為應用層提供發(fā)布/訂閱、遠程方法調用等基礎服務,是一系列C++頭文件及源文件的集合。本發(fā)明中,設計了如狀態(tài)更新回調功能、對象銷毀回調功能、遠程方法調用功能等模板。之后利用所述文本文件中對虛擬試驗分布式對象模型進行的描述替換所述分布式對象模型模板中相應的標簽,從而直接轉化為虛擬試驗分布式對象模型框架代碼。應用開發(fā)人員在開發(fā)虛擬試驗分布式對象模型時,不需要關心虛擬試驗分布式對象模型之間交互功能的具體實現機制,只需要在相關功能模板中填寫虛擬試驗分布式對象模型的邏輯代碼即可。本發(fā)明說明書中未作詳細描述的內容屬于本領域專業(yè)技術人員的公知技術。
權利要求
1.一種虛擬試驗分布式對象模型框架代碼自動生成方法,其特征在于步驟如下 (1)定義一種虛擬試驗分布式對象模型的描述語言; (2)對使用步驟(I)中所述語言描述的虛擬試驗分布式對象模型而生成的文本文件進行詞法分析; (3)根據所述描述語言的元模型,利用語法分析器生成工具生成語法分析器; (4)根據詞法分析的結果,使用所述語法分析器對所述文本文件進行語法分析,并將得到的語法分析結果存放到中間示數據結構中; (5)建立所述描述語言與IDL語言的映射關系,將步驟(4)中間表示數據結構中存放的語法分析結果中的數據類型轉化為IDL語言中的數據類型,并調用IDL編譯器生成數據類型所對應的虛擬試驗分布式對象模型框架代碼,所述IDL語言為CORBA接口定義語言; (6)構建分布式對象模型模板,之后利用所述文本文件中對虛擬試驗分布式對象模型進行的描述替換所述分布式對象模型模板中相應的標簽,從而直接轉化為虛擬試驗分布式對象模型框架代碼,所述模板描述了虛擬試驗分布式對象模型之間的交互功能。
2.根據權利要求I所述的一種虛擬試驗分布式對象模型框架代碼自動生成方法,其特征在于所述語法分析器生成工具為YACC。
3.根據權利要求I所述的一種虛擬試驗分布式對象模型框架代碼自動生成方法,其特征在于步驟(2)中所述進行詞法分析具體為 以字符為單位掃描所述文本文件,跳過空白符號,若掃描到的單詞為所述描述語言的保留字,則返回該保留字所對應的屬性編碼,否則返回該單詞的字符串,直到該文本文件掃描完畢,即完成了對該文本文件的詞法分析。
4.根據權利要求I所述的一種虛擬試驗分布式對象模型框架代碼自動生成方法,其特征在于所述步驟(4)中的中間表示數據結構與所述元模型相對應。
全文摘要
一種虛擬試驗分布式對象模型框架代碼自動生成方法,完成對象模型從描述語言文本到標準C++語法格式的框架代碼的轉變,步驟為定義一種虛擬試驗分布式對象模型描述語言;對使用所述語言描述的虛擬試驗分布式對象模型的文本文件進行詞法分析和語法分析;建立所述描述語言與IDL語言的映射關系,調用IDL編譯器生成對應的虛擬試驗分布式對象模型框架代碼;構建分布式對象模型模板,通過標簽替換生成虛擬試驗分布式對象模型框架代碼。本發(fā)明給出的虛擬試驗分布式對象描述語言,實現了虛擬試驗分布式對象的標準化描述,有助于試驗資源的重用和組合;虛擬試驗分布式對象模型框架代碼自動生成方法減少了開發(fā)人員的工作量,提高了應用開發(fā)的可靠性和效率。
文檔編號G06F9/45GK102929681SQ201210429079
公開日2013年2月13日 申請日期2012年10月31日 優(yōu)先權日2012年10月31日
發(fā)明者蔡斐華, 廖建, 彭健, 王國慶, 賈長偉, 趙雯 申請人:中國運載火箭技術研究院