專利名稱:一種c語言仿真模型的剖析及監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機仿真技術(shù)領(lǐng)域,尤其涉及一種C語言仿真模型的剖析及監(jiān)控方法。
背景技術(shù):
計算機仿真技術(shù)的核心包括仿真模型和仿真平臺。仿真模型是對被仿真實體對象特性的抽象描述,具有與實體相似的數(shù)學和物理屬性,反映實體的特征和規(guī)律。仿真模型的描述可以通過各種計算機語言如FORTRAN語言、C語言、M語言等,按照對應(yīng)的編碼規(guī)則進行編碼實現(xiàn),也可通過建模工具如MATLAB/Simulink以搭積木的方式進行加減乘除等基本數(shù)學運算模塊的搭建來實現(xiàn)。無論以哪種方式描述的仿真模型,最終都需要編譯成可執(zhí)行的應(yīng)用程序,下載到仿真平臺上進行仿真解算。仿真平臺是仿真模型解算的載體,由軟件和硬件組成,相應(yīng)的,實時仿真平臺由實時操作系統(tǒng)和仿真計算機組成。為了實現(xiàn)實時仿真,即仿真模型實時解算,實時地與外圍設(shè)備進行數(shù)據(jù)交互,則需要將仿真模型編譯下載到實施仿真平臺上運行。因此,完整的實時仿真平臺通常包括仿真上位機和仿真下位機。仿真上位機運行一個仿真管理軟件,負責把通過計算機語言描述的模型或者通過建模工具搭建的模型進行模型編譯,生成可執(zhí)行的應(yīng)用程序,并通過以太網(wǎng)等網(wǎng)絡(luò)通訊下載到仿真下位機。仿真下位機負責實時解算已經(jīng)編譯生成可執(zhí)行應(yīng)用程序的仿真模型。當模型在仿真下位機進行仿真解算時,仿真上位機需要對仿真模型中的變量數(shù)據(jù)進行提取,并在線即時顯示,以便仿真人員清楚了解仿真模型解算結(jié)果是否正確,同時,仿真人員能夠進行人工干預(yù),在線修改仿真模型中的參數(shù),使仿真模型按照仿真人員預(yù)算的結(jié)果進行解算。為了實現(xiàn)對仿真模型內(nèi)部變量參數(shù)的提取和修改,在仿真模型進行實時仿真解算之前,需要對仿真模型進行剖析,即對仿真模型中的信息,包括函數(shù)名及其參數(shù)變量名及變量個數(shù)、模塊參數(shù)、全局變量等進行提取,保存在信息文件中。目前,對于使用建模工具MATLAB/Simulink搭建的模型,可以通過修改MATLAB/Simulink提供的TLC模板文件實現(xiàn)對仿真模型的剖析,而對于使用C語言編碼規(guī)則編寫的仿真模型的剖析,國內(nèi)還沒有合適的方法,目前只能將其重新搭建成MATLAB/Simulink模型,再通過TLC模板文件才可實現(xiàn)剖析過程,這種方法將導(dǎo)致不必要的、大量的重復(fù)工作。此外,在實際工程應(yīng)用中,大多數(shù)仿真模型是采用C語言編寫的,如果不能對C語言進行剖析,將限制C語言仿真模型的應(yīng)用范圍
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種C語言仿真模型的剖析及監(jiān)控方法,用于解決現(xiàn)有的剖析及監(jiān)控方法會導(dǎo)致不必要的、大量重復(fù)工作的問題。一種C語言仿真模型的剖析方法,預(yù)先由文法文件生成C代碼剖析方法類,所述文法文件在語言識別工具開發(fā)環(huán)境下由開發(fā)人員手工編寫,其中,所述C代碼剖析方法類由語言識別工具編譯文法文件后生成,其包括語法分析模塊、詞法分析模塊和語法樹生成模塊;
該方法包括調(diào)用C代碼剖析方法類中的詞法分析模塊對導(dǎo)入的C語言仿真模型的詞法內(nèi)容進行剖析,形成記號流;調(diào)用C代碼剖析方法類中的語法分析模塊,根據(jù)所述記號流,對導(dǎo)入的C語言仿真模型的語法結(jié)構(gòu)進行剖析;調(diào)用C代碼剖析方法類中的語法樹生成模塊根據(jù)所述分析得到的語法結(jié)構(gòu)生成相應(yīng)的語法樹;從所述語法樹中提取變量信息和函數(shù)信息,并將所述提取的變量信息和函數(shù)信息保存到模型信息文件中。優(yōu)選的,所述語言識別工具為開源語言識別工具ANTLR。所述文法文件的編寫過程包括確定文法文件的整體構(gòu)架,將所述文法文件的內(nèi)容劃分為頭模塊、選項模塊、語法分析器類模塊和詞法分析器類模塊,所述頭模塊和所述選項模塊,用于定義文法文件的基本信息,所述語法分析器類模塊,用于定義文法文件包含的語法分析內(nèi)容,所述詞法分析器類模塊,用于定于文法文件包含的詞法分析內(nèi)容;定義文法文件包含的語法分析內(nèi)容;定義文法文件包含的詞法分析內(nèi)容;添加特有的Jave類方法,所述特有的Jave類方法為所述ANTLR生成不了、但進行C代碼剖析所需要的特有的Java類方法。所述語法分析內(nèi)容包括數(shù)據(jù)類型標識、結(jié)構(gòu)體或共同體標識、數(shù)據(jù)結(jié)構(gòu)變量列表標識、枚舉類型標識、變量數(shù)組標識、指針標識、參數(shù)列表標識、標識符列表標識。所述詞法分析內(nèi)容包括字符型變量標識、特殊字符標識、16進制標識、10進制標識、8進制標識、浮點數(shù)標識、塊注釋形式標識、行注釋標識。所述C代碼剖析方法類為C代碼剖析方法Java類、C代碼剖析方法C++類或C代碼剖析方法C#類。一種C語言仿真模型的監(jiān)控方法,包括上位機仿真管理軟件調(diào)用C語言編譯器對導(dǎo)入的C語言仿真模型進行編譯,編譯生成可執(zhí)行的應(yīng)用程序;上位機仿真管理軟件采用上述的C語言仿真模型的剖析方法對導(dǎo)入的C語言仿真模型進行剖析;上位機仿真管理軟件將所述可執(zhí)行應(yīng)用程序下載到仿真下位機,進行模型的實時
解算;上位機仿真管理軟件將模型信息文件中的變量信息通過界面展示給仿真人員并從所述模型信息文件中的變量信息中提取要進行監(jiān)控的模型變量,并將所述要監(jiān)控的模型參量發(fā)送給仿真下位機,仿真下位機根據(jù)變量名,從內(nèi)存中提取對應(yīng)所述變量名的數(shù)據(jù),返回給上位機仿真管理軟件進行顯示,如果要對變量進行修改,則直接將要修改的變量名及其對應(yīng)的數(shù)據(jù)發(fā)送給仿真下位機,仿真下位機將所述要修改的變量名對應(yīng)的數(shù)據(jù)寫到所述要修改的變量名對應(yīng)的內(nèi)存中。本發(fā)明提供了一種C語言仿真模型的剖析及監(jiān)控方法,該方法預(yù)先編寫文法文件并生成C代碼剖析方法類,通過使用C代碼剖析方法類對C語言仿真模型進行剖析及監(jiān)控,實現(xiàn)過程簡單。本發(fā)明提供的方法填補了目前國內(nèi)C語言仿真模型剖析及監(jiān)控技術(shù)的空白,編寫的文法文件內(nèi)容完整,可以適用于大部分C語言仿真模型的剖析及監(jiān)控要求。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地 介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖I為本發(fā)明實施例一提供的C語言仿真模型的剖析方法的流程圖;圖2為本發(fā)明實施例一提供的文法文件的編寫過程圖;圖3為本發(fā)明實施例二提供的C語言仿真模型的監(jiān)控方法的流程圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。實施例一本發(fā)明實施例一提供了一種C語言仿真模型的剖析方法,在執(zhí)行該方法之前,預(yù)先由文法文件生成C代碼剖析方法類,C代碼剖析方法類包括語法分析模塊、詞法分析模塊和語法樹生成模塊,圖I為本發(fā)明實施例提供的剖析方法的流程圖,該方法包括Sll :調(diào)用C代碼剖析方法類中的詞法分析模塊對導(dǎo)入的C語言仿真模型的詞法內(nèi)容進行剖析,形成記號流;S12:調(diào)用C代碼剖析方法類中的語法分析模塊,根據(jù)記號流,對導(dǎo)入的C語言仿真模型的語法結(jié)構(gòu)進行剖析;S13 :調(diào)用C代碼剖析方法類中的語法樹生成模塊根據(jù)分析得到的語法結(jié)構(gòu)生成相應(yīng)的語法樹;S14 :從語法樹中提取變量信息和函數(shù)信息,并將提取的變量信息和函數(shù)信息保存到模型信息文件中。其中,文法文件在語言識別工具開發(fā)環(huán)境下由開發(fā)人員手工編寫,C代碼剖析方法類由語言識別工具編譯文法文件后生成。在本實施例中,語言識別工具為開源語言識別工具 ANTLR。在本實施例中,文法文件的編寫過程如圖2所述,包括S21 :確定文法文件的整體構(gòu)架,將文法文件的內(nèi)容劃分為頭模塊header、選項模塊options、語法分析器類模塊parser和詞法分析器類模塊lexer,其中,頭模塊header和選項模塊options,用于定義文法文件的基本信息,語法分析器類模塊parser,用于定義文法文件包含的語法分析內(nèi)容,詞法分析器類模塊lexer,用于定于文法文件包含的詞法分析內(nèi)容;S22 :定義文法文件包含的語法分析內(nèi)容,包括數(shù)據(jù)類型標識(如void型、char型、float型等)、結(jié)構(gòu)體或共同體標識、數(shù)據(jù)結(jié)構(gòu)變量列表標識、枚舉類型標識、變量數(shù)據(jù)標識、指針標識、參數(shù)列表標識、標識符列表標識。其中,在數(shù)據(jù)類型標識中,還包括simulink特有的、標準C中沒有的類型,如int8_T、cuintl6_T等,識別出來后,按照ANTLR文法規(guī)則編寫在文法文件的type_SpeCifier位置,例如,定義數(shù)據(jù)類型時的寫法為關(guān)鍵字(type_SpeCifier),換行加冒號(),后加數(shù)據(jù)類型標識(標識加單引號),如果要連續(xù)定義多個數(shù)據(jù)類型,則換行加“ I ”再后接數(shù)據(jù)類型標識,如下所示type_specifier ' void'I ' char'I ' short'I ' int'I ' long'I' float'I ' double'......S23 :定義文法文件應(yīng)包含的詞法分析內(nèi)容,包括字符型變量標識、VAt等特殊字符標識、16進制標識、10進制標識、8進制標識、浮點數(shù)標識、塊注釋形式標識、行注釋標識,標識出來后,按ANTLR文法規(guī)則編寫在文法文件的相應(yīng)位置,例如,16進制標識的定義如下HEX_LITERAL : ' Q' {' x' ' V )HexDigit+IntegerTypeSuffix S24 :添加特有的Jave類方法,即添加ANTLR生成不了,但進行C代碼剖析所需要的特有的Java方法,如構(gòu)造函數(shù)部分的剖析方法,添加方式是通過關(guān)鍵字Omember添加自定義的特殊的成員函數(shù)代碼,通過關(guān)鍵字 lexer: :header,添加自定義的Java類,如Olexer::header {package com. hirain. hisim. redundancy, parse, antlr ;}在本實施例中,對編寫完后的文法文件進行編譯,生成C代碼剖析方法Java類,當然還可生成C代碼剖析方法C++類、C#類。其中,C代碼剖析方法Java類包括Lexer類(詞法類)和Parser類(語法類)兩個類文件。將該C代碼剖析方法Java類拷貝到仿真上位機對應(yīng)路徑下,供上位機仿真管理軟件調(diào)用,上位機仿真管理軟件按照詞法分析、語法分析和生成語法樹的順序調(diào)用C代碼剖析方法類提供的相應(yīng)模塊,然后從內(nèi)容全面的語法樹樹形結(jié)構(gòu)中提取所需要的內(nèi)容,并將提取的內(nèi)容保存到模型信息文件.hisim中,其中,樹形結(jié)構(gòu)中包含函數(shù)名、參數(shù)變量名、變量個數(shù)、全局變量等所有信息,覆蓋文法文件所規(guī)定的所有信息。當在仿真上位機上導(dǎo)入一個C語言仿真模型時,上位機仿真管理軟件會自動調(diào)用C代碼剖析方法Java類,對導(dǎo)入的C語言仿真模型進行剖析,生成模型信息文件,從而實現(xiàn)對C語言仿真模型的剖析目的。通過本發(fā)明實施例提供的C語言仿真模型的剖析方法,當對C語言仿真模型進行剖析時,不必將其重新搭建成MATLAB/Simulink模型再進行剖析,因此,實現(xiàn)過程簡單。實施例二本發(fā)明實施例二提供了一種C語言仿真模型的監(jiān)控方法,圖3為本發(fā)明實施例提供的監(jiān)控方法的流程圖,該方法包括S31 :上位機仿真管理軟件調(diào)用C語言編譯器對導(dǎo)入的C語言仿真模型進行編譯,編譯生成可執(zhí)行的應(yīng)用程序;S32 :上位機仿真管理軟件采用實施例一中的C語言仿真模型的剖析方法對導(dǎo)入的C語言仿真模型進行剖析; S33 :上位機仿真管理軟件將可執(zhí)行的應(yīng)用程序下載到仿真下位機,進行模型的實時解算;S34 :上位機仿真管理軟件將通過實施例一的剖析方法得到的模型信息文件中的變量信息通過界面展示給仿真人員,并從模型信息文件中的變量信息中提取要進行監(jiān)控的模型變量,將要監(jiān)控的模型參量發(fā)送給仿真下位機,仿真下位機根據(jù)變量名,從內(nèi)存中提取對應(yīng)變量名的數(shù)據(jù),返回給上位機仿真管理軟件進行顯示,如果要對變量進行修改,則直接將要修改的變量名及其對應(yīng)的數(shù)據(jù)發(fā)送給仿真下位機,仿真下位機將要修改的變量名對應(yīng)的數(shù)據(jù)寫到要修改的變量名對應(yīng)的內(nèi)存中。本發(fā)明實施例提供的C語言仿真模型的監(jiān)控方法填補了國內(nèi)C代碼剖析及監(jiān)控技術(shù)的空白,使C語言仿真模型在實時仿真系統(tǒng)中實現(xiàn)在線監(jiān)控成為可能,同時,使用開源語言識別工具ANTLE實現(xiàn)對C語言仿真模型的剖析,實現(xiàn)過程簡單、可靠。此外,本發(fā)明實施例編寫的文法文件內(nèi)容完整,可以適用于大部分C語言仿真模型剖析使用的要求。對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
權(quán)利要求
1.一種C語言仿真模型的剖析方法,其特征在于,預(yù)先由文法文件生成C代碼剖析方法類,所述文法文件在語言識別工具開發(fā)環(huán)境下由開發(fā)人員手工編寫,其中,所述C代碼剖析方法類由語言識別工具編譯文法文件后生成,所述C代碼剖析方法類包括語法分析模塊、詞法分析模塊和語法樹生成模塊; 該方法包括 調(diào)用C代碼剖析方法類中的詞法分析模塊對導(dǎo)入的C語言仿真模型的詞法內(nèi)容進行剖析,形成記號流; 調(diào)用C代碼剖析方法類中的語法分析模塊,根據(jù)所述記號流,對導(dǎo)入的C語言仿真模型的語法結(jié)構(gòu)進行剖析; 調(diào)用C代碼剖析方法類中的語法樹生成模塊根據(jù)所述分析得到的語法結(jié)構(gòu)生成相應(yīng)的語法樹; 從所述語法樹中提取變量信息和函數(shù)信息,并將所述提取的變量信息和函數(shù)信息保存到模型信息文件中。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述語言識別工具為開源語言識別工具ANTLR。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述文法文件的編寫過程包括 確定文法文件的整體構(gòu)架,將所述文法文件的內(nèi)容劃分為頭模塊、選項模塊、語法分析器類模塊和詞法分析器類模塊,所述頭模塊和所述選項模塊,用于定義文法文件的基本信息,所述語法分析器類模塊,用于定義文法文件包含的語法分析內(nèi)容,所述詞法分析器類模塊,用于定于文法文件包含的詞法分析內(nèi)容; 定義文法文件包含的語法分析內(nèi)容; 定義文法文件包含的詞法分析內(nèi)容; 添加特有的Jave類方法,所述特有的Jave類方法為所述ANTLR生成不了、但進行C代碼剖析所需要的特有的Java類方法。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述語法分析內(nèi)容包括數(shù)據(jù)類型標識、結(jié)構(gòu)體或共同體標識、數(shù)據(jù)結(jié)構(gòu)變量列表標識、枚舉類型標識、變量數(shù)組標識、指針標識、參數(shù)列表標識、標識符列表標識。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述詞法分析內(nèi)容包括字符型變量標識、特殊字符標識、16進制標識、10進制標識、8進制標識、浮點數(shù)標識、塊注釋形式標識、行注釋標識。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述C代碼剖析方法類為C代碼剖析方法Java類、C代碼剖析方法C++類或C代碼剖析方法C#類。
7.一種C語言仿真模型的監(jiān)控方法,其特征在于,包括 上位機仿真管理軟件調(diào)用C語言編譯器對導(dǎo)入的C語言仿真模型進行編譯,編譯生成可執(zhí)行的應(yīng)用程序; 上位機仿真管理軟件采用如權(quán)利要求1-6中任意一項所述的方法對導(dǎo)入的C語言仿真模型進行剖析; 上位機仿真管理軟件將所述可執(zhí)行應(yīng)用程序下載到仿真下位機,進行模型的實時解算;上位機仿真管理軟件將模型信息文件中的變量信息通過界面展示給仿真人員并從所述模型信息文件中的所述變量信息中提取要進行監(jiān)控的模型變量,并將所述要監(jiān)控的模型參量發(fā)送給仿真下位機,仿真下位機根據(jù)變量名,從內(nèi)存中提取對應(yīng)所述變量名的數(shù)據(jù),返回給上位機仿真管理軟件進行顯示,如果要對變量進行修改,則直接將要修改的變量名及其對應(yīng)的數(shù)據(jù)發(fā)送給仿真下位機,仿真下位機將所述要修改的變量名對應(yīng)的數(shù)據(jù)寫到所述要修改的變量名對應(yīng)的內(nèi)存中。
全文摘要
本發(fā)明提供了一種C語言仿真模型的剖析方法,預(yù)先由文法文件生成C代碼剖析方法類,C代碼剖析方法類包括語法分析模塊、詞法分析模塊和語法樹生成模塊,該方法包括調(diào)用C代碼剖析方法類中的詞法分析模塊對導(dǎo)入的C語言仿真模型的詞法內(nèi)容進行剖析,形成記號流;調(diào)用語法分析模塊,根據(jù)記號流,對導(dǎo)入的C語言仿真模型的語法結(jié)構(gòu)進行剖析;調(diào)用語法樹生成模塊根據(jù)分析得到的語法結(jié)構(gòu)生成相應(yīng)的語法樹;從語法樹中提取信息并將提取的信息保存到模型信息文件中。本發(fā)明還提供了一種C語言仿真模型的監(jiān)控方法,該監(jiān)控方法包括上述的剖析方法。本發(fā)明提供的剖析及監(jiān)控方法填補了目前國內(nèi)C語言仿真模型剖析及監(jiān)控技術(shù)的空白,且實現(xiàn)過程簡單。
文檔編號G06F9/45GK102629213SQ20121004137
公開日2012年8月8日 申請日期2012年2月21日 優(yōu)先權(quán)日2012年2月21日
發(fā)明者楊盈, 羅喜霜, 范智剛 申請人:北京經(jīng)緯恒潤科技有限公司