專利名稱:物理建模語言Modelica的模型庫(kù)文件序列化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)的序列化和反序列化方法,尤其涉及一種多領(lǐng)域物理統(tǒng)一建 模語言Modelica模型庫(kù)文件的序列化和反序列化方法。
背景技術(shù):
Modelica是一種面向?qū)ο?、基于方程、采用層次化組件模型并具有模型重用性的 物理建模語言。Modelica模型庫(kù)技術(shù)是Modelica的基本特征之一,是實(shí)現(xiàn)模型重用的直接 手段。因此,Modelica仿真平臺(tái)啟動(dòng)后,必須首先加載Modelica模型庫(kù)以供用戶建模使用。 對(duì)Modelica編譯器而言,傳統(tǒng)的庫(kù)加載過程依次分為讀取.mo文件(即Modelica源文件), 對(duì).mo文件進(jìn)行詞法/語法分析,創(chuàng)建Dom (文檔對(duì)象模型)抽象語法樹三個(gè)階段。對(duì).mo 文件進(jìn)行詞法/語法分析的工作需要消耗大量的時(shí)間,以Modelica標(biāo)準(zhǔn)模型庫(kù)2. 1為例, 該庫(kù)共包括144個(gè)源文件,3141個(gè)類,所有語法元素總和近50萬個(gè),利用詞法/語法分析工 具Antlr 2. O分析需耗時(shí)約300秒。若每次加載模型庫(kù)都如此耗時(shí),對(duì)系統(tǒng)而言是低效的。
由于模型庫(kù)中的模型都具備高的置信度,即其詞法/語法是完全正確的,而且?guī)?模型具有只讀性,不可被用戶更改,這些因素導(dǎo)致每次對(duì)模型庫(kù)進(jìn)行的詞法/語法分析都 會(huì)得到完全相同的結(jié)果。因此,可以考慮通過對(duì)模型庫(kù)文件的數(shù)據(jù)進(jìn)行序列化和反序列化 來縮短加載模型庫(kù)的時(shí)間,由于現(xiàn)有技術(shù)中需要對(duì)模型庫(kù)文本進(jìn)行詞法/語法分析,目前 還沒有對(duì)Modelica的模型庫(kù)文件進(jìn)行序列化和反序列化的方法報(bào)道。發(fā)明內(nèi)容
本發(fā)明的目的是提供一種對(duì)Modelica模型庫(kù)的文件數(shù)據(jù)進(jìn)行序列化和反序列化 的方法,以縮短Modelica模型庫(kù)的加載時(shí)間。
為達(dá)上述目的,本發(fā)明采用的技術(shù)方案是一種物理建模語言Modelica的模型庫(kù) 文件序列化方法,在第一次加載模型庫(kù)時(shí),對(duì)Modelica模型庫(kù)的源文件進(jìn)行詞法/語法分 析,創(chuàng)建文檔對(duì)象模型抽象語法樹,通過序列化技術(shù)將文檔對(duì)象模型抽象語法樹的數(shù)據(jù)保 存至序列化結(jié)果文件。
所述通過序列化技術(shù)將文檔對(duì)象模型抽象語法樹的數(shù)據(jù)保存至序列化結(jié)果文件 包括下列步驟(1)根據(jù)文檔對(duì)象模型抽象語法樹中數(shù)據(jù)的數(shù)據(jù)類型,用預(yù)先定義的標(biāo)志符標(biāo)記所需 保存的數(shù)據(jù);(2)根據(jù)Modelica文檔對(duì)象模型類系圖制定對(duì)象映射表;(3)根據(jù)對(duì)象映射表將所需序列化的數(shù)據(jù)進(jìn)行分類標(biāo)記,標(biāo)記時(shí)需區(qū)分類、類成員以 及對(duì)象所在實(shí)體文件;(4)依據(jù)Modelica編譯結(jié)果進(jìn)行序列化輸出,序列化依照對(duì)象數(shù)據(jù)排列規(guī)則進(jìn)行,每 個(gè)Modelica對(duì)象數(shù)據(jù)輸出前,首先輸出其分類標(biāo)記,其次為數(shù)據(jù)塊大小,最后為數(shù)據(jù)內(nèi) 容;當(dāng)指定數(shù)據(jù)不存在時(shí),以占位符進(jìn)行數(shù)據(jù)虛擬填充。3
上述技術(shù)方案中,所述占位符為預(yù)先設(shè)定的數(shù)據(jù),一般,應(yīng)選擇不易發(fā)生沖突的數(shù) 據(jù)作為占位符使用。
一種物理建模語言Modelica的模型庫(kù)文件的反序列化方法,讀取序列化結(jié)果文 件,包括如下步驟,(1)根據(jù)Modelica文檔對(duì)象模型類系圖制定的對(duì)象映射表預(yù)先創(chuàng)建所需反序列化的 對(duì)象,并進(jìn)行對(duì)象初始化,初始對(duì)象數(shù)據(jù)為空;(2)從序列化文件中讀入數(shù)據(jù),根據(jù)讀取的分類標(biāo)記確定向何種對(duì)象填充數(shù)據(jù),根據(jù) 讀取的數(shù)據(jù)塊大小值確定對(duì)象數(shù)據(jù)的大小,最終實(shí)現(xiàn)讀入單個(gè)的完整對(duì)象,如果讀入數(shù)據(jù) 為占位符,則該對(duì)象的指定數(shù)據(jù)設(shè)置為空;(3)依據(jù)Modelica模型序列化文件中的對(duì)象結(jié)果順序依次在內(nèi)存中創(chuàng)建新的對(duì)象, 對(duì)象的層次關(guān)系按照序列化文件中的分類標(biāo)記進(jìn)行組織,從而實(shí)現(xiàn)在內(nèi)存中重構(gòu)Modelica 模型編譯結(jié)果。
上述技術(shù)方案中,第一次加載模型庫(kù)時(shí),將模型庫(kù)文件的詞法/語法分析結(jié)果,通 過序列化技術(shù)保存至結(jié)果文件,以后每次都通過直接讀取結(jié)果文件來完成模型庫(kù)的加載。
模型庫(kù)文件的詞法/語法分析結(jié)果為Dom抽象語法樹,為了將它保存到結(jié)果文件, 并且以后能通過讀取結(jié)果文件還原該Dom抽象語法書對(duì)象,本發(fā)明制定了一套設(shè)計(jì)規(guī)則, 概括地說這套規(guī)則有兩條1)以標(biāo)志符標(biāo)記需要處理的數(shù)據(jù)并區(qū)分?jǐn)?shù)據(jù)類型;2)以數(shù)據(jù)排列格式保存數(shù)據(jù)之間的關(guān)系。
根據(jù)這套規(guī)則,本發(fā)明可以構(gòu)建軟件模塊,該模塊又分為兩個(gè)子模塊,分別負(fù)責(zé)將 內(nèi)存中的Dom抽象語法樹序列化為結(jié)果文件和將結(jié)果文件反系列化為內(nèi)存中的Dom抽象語 法樹。
由于上述技術(shù)方案運(yùn)用,本發(fā)明與現(xiàn)有技術(shù)相比具有下列優(yōu)點(diǎn)本發(fā)明通過預(yù)處理過程,在第一次加載模型庫(kù)時(shí),生成序列化結(jié)果文件,因而在以后加 載模型庫(kù)時(shí),只需要直接從讀取結(jié)果文件即可,避免每次都模型庫(kù)進(jìn)行詞法語法解析,大大 加快了模型庫(kù)的加載速度。以Modelica 2. 1標(biāo)準(zhǔn)庫(kù)為例,未使用本發(fā)明的方法時(shí),加載時(shí) 間為300秒,使用本發(fā)明的方法后,加載時(shí)間僅為600毫秒。
圖1是Dom抽象語法樹的類型體系結(jié)構(gòu)圖,Dom抽象語法樹中的節(jié)點(diǎn)的類型都來 自該類型體系。
圖2是Modelica模型庫(kù)加載方式對(duì)比圖。
圖3是實(shí)施例中成員變量為類對(duì)象時(shí)的數(shù)據(jù)標(biāo)記示意圖。
具體實(shí)施方式
實(shí)施例對(duì)Modelica模型庫(kù)進(jìn)行序列化處理,包括 1)制定Dom序列化規(guī)則規(guī)則1 以標(biāo)志符標(biāo)記需要處理的數(shù)據(jù)并區(qū)分?jǐn)?shù)據(jù)類型如圖1,Dom類系類型眾多,序列化內(nèi)容包括Dom對(duì)象的類型名,Dom對(duì)象數(shù)據(jù),以及對(duì)4象所在文件的文件名等。本發(fā)明設(shè)計(jì)了一套標(biāo)識(shí)機(jī)制,通過一系列的標(biāo)志符來記錄數(shù)據(jù)加 以區(qū)分。
規(guī)則1.1對(duì)類進(jìn)行標(biāo)記必須嚴(yán)格按照Modelica語言規(guī)范對(duì)Dom類型體系中各個(gè)類進(jìn)行標(biāo)記。Dom類系結(jié)構(gòu) 是參照ModeliCa2. 1規(guī)范設(shè)計(jì)的,保存Modelica的所有文法信息,但同時(shí),為了方便操作和 理解,將這些基本內(nèi)容又做了細(xì)分和擴(kuò)展并加入了和分析有關(guān)的輔助類和輔助屬性。因?yàn)?只對(duì).mo文件的詞法/語言分析結(jié)果進(jìn)行序列化,所以調(diào)用序列化函數(shù)前應(yīng)先濾除Dom類 系中與之無關(guān)的類或類屬性。
規(guī)則1. 2對(duì)類成員進(jìn)行標(biāo)記對(duì)Dom類型體系中各個(gè)成員進(jìn)行標(biāo)記,即要確定哪些成員變量需要被序列化。這其中 包括兩方面內(nèi)容,該成員是否被序列化,以及該成員在其所屬類的所有成員變量中所處的 位置,兩者缺一不可,這樣才能確保反序列化時(shí)能正確的重構(gòu)一個(gè)類對(duì)象。
規(guī)則1. 3對(duì)類對(duì)象或結(jié)構(gòu)體對(duì)象引用的成員進(jìn)行特殊標(biāo)記類成員(即類對(duì)象的數(shù)據(jù))與結(jié)果文件之間的數(shù)據(jù)傳遞是以標(biāo)準(zhǔn)輸入輸出流為載體 的。標(biāo)準(zhǔn)輸入輸出流可以接受任何C++內(nèi)置數(shù)據(jù)類型包括const char*、int等以及標(biāo)準(zhǔn)庫(kù) string和complex類類型,并且可通過重載輸入輸出運(yùn)算符支持用戶自定義類型。
本發(fā)明已設(shè)計(jì)了重載的序列化函數(shù),以類對(duì)象的引用為形參,對(duì)類成員分別進(jìn)行 序列化操作。若重載輸入輸出運(yùn)算符以支持Dom類系類型,功能上會(huì)與重載的序列化函數(shù) 構(gòu)成重疊。因此,本發(fā)明在設(shè)計(jì)序列化機(jī)制時(shí),底層的數(shù)據(jù)傳遞只使用標(biāo)準(zhǔn)輸入輸出流默認(rèn) 的參數(shù)類型,沒有對(duì)輸入輸出運(yùn)算符進(jìn)行重載,即不支持自定義類型。
因此,序列化時(shí),在遇到成員變量為類對(duì)象或結(jié)構(gòu)體對(duì)象引用時(shí),不能簡(jiǎn)單的與輸 入輸出流綁定,而必須獲取該對(duì)象的所有成員,依次序列化,并在此對(duì)象對(duì)應(yīng)的數(shù)據(jù)段前后 進(jìn)行標(biāo)記,以表明標(biāo)記段內(nèi)的數(shù)據(jù)的特殊性。這種將數(shù)據(jù)標(biāo)記成塊的方式可以有效的防止 反序列化讀取數(shù)據(jù)時(shí)的紊亂。附圖3為成員變量為類對(duì)象時(shí)的數(shù)據(jù)標(biāo)記示意圖。
規(guī)則1. 4對(duì)源文件的文件名進(jìn)行標(biāo)記在Modelica中,類除了按照Modelica語法規(guī)定的標(biāo)準(zhǔn)方式被定義以外,還有一種外部 表示法,即通過操作系統(tǒng)的層次結(jié)構(gòu)(文件系統(tǒng)或數(shù)據(jù)庫(kù))來表示本發(fā)明,所以源文件名與 Modelica類定義之間有著重要關(guān)系,因此,對(duì)象序列化時(shí),所處源文件的文件名必須被序列 化。序列化時(shí)必須以標(biāo)記表明此數(shù)據(jù)為源文件文件名。
至此,按規(guī)則1進(jìn)行序列化,序列化內(nèi)容(Dom對(duì)象的類型名,Dom對(duì)象數(shù)據(jù),以及對(duì) 象所在文件的文件名等)在反序列化時(shí)將可通過標(biāo)志符進(jìn)行區(qū)分,并且通過對(duì)標(biāo)志符的判 斷可以獲知哪些內(nèi)容被執(zhí)行了序列化操作。
規(guī)則2 以數(shù)據(jù)排列格式保存數(shù)據(jù)之間的關(guān)系在序列化過程中,必須記錄類成員被序列化的順序,以確保單個(gè)對(duì)象反序列化的成功; 必須記錄對(duì)象被序列化的順序,以確保正確的重構(gòu)Dom抽象語法樹。
反序列化時(shí),如何獲取這些信息之間的聯(lián)系。.NET框架采用序列化引擎對(duì)數(shù)據(jù)之 間的關(guān)系進(jìn)行了記錄。而本發(fā)明在設(shè)計(jì)序列化機(jī)制時(shí),并未使用類似的輔助手段,而是依靠 這些信息的排列順序判斷數(shù)據(jù)之間的關(guān)系,即,在序列化時(shí),所有的數(shù)據(jù)是按某一順序輸出 的,保存為具有結(jié)構(gòu)化信息的結(jié)果文件,反序列化時(shí),通過控制字長(zhǎng)來讀取每個(gè)數(shù)據(jù),通過數(shù)據(jù)讀取的先后順序判斷數(shù)據(jù)之間的關(guān)系。數(shù)據(jù)排序時(shí),必須滿足以下規(guī)則 規(guī)則2. 1對(duì)象的類名稱必須排列于對(duì)象數(shù)據(jù)之前反序列化時(shí),首先獲得對(duì)象的類名稱,即獲知了對(duì)象的類型,通過類成員定義預(yù)判將要 讀取的下一數(shù)據(jù)的類型(由規(guī)則2可知,類型必為C++內(nèi)置數(shù)據(jù)類型之一),根據(jù)預(yù)判結(jié)果控 制字長(zhǎng)以確保每次讀取正確的數(shù)據(jù)。因此,序列化輸出時(shí),對(duì)象的類名稱必須排列于對(duì)象之前。
規(guī)則2. 2對(duì)象的成員變量的數(shù)據(jù)必須按唯一順序排列即序列化輸出時(shí)必須排列為成員1,成員2,…,成員n,或者逆序,若成員m未被序列 化,則按規(guī)則1.2輸出輔助字段“占位”。
參照規(guī)則1. 2,獲知對(duì)象類型后,需要通過類成員定義預(yù)判下一數(shù)據(jù)的類型。若序 列化輸出時(shí)成員變量排序混亂,則必須依靠輔助列表,否則無法預(yù)判。
本發(fā)明選擇前一種排列方式,即正序排列,在實(shí)現(xiàn)時(shí),其邏輯性強(qiáng)于逆序排列。
規(guī)則2. 3源文件的文件名必須排列于首位源文件的文件信息是Modelica類定義在編譯后所隱含的重要信息之一,必須通過類 的源文件信息才能判斷此類是否為頂層類,因此,源文件必須置于Modelica類定義之前, 即所有序列化內(nèi)容的首位。
規(guī)則2. 4數(shù)據(jù)結(jié)構(gòu)的大小屬性排列于其他內(nèi)部數(shù)據(jù)之前對(duì)于list、vectoiNmap等具有size屬性的數(shù)據(jù)結(jié)構(gòu),在序列化其包含的數(shù)據(jù)前,必須 先序列化其size,這樣才能保證反序列化時(shí)精確的按其原始大小進(jìn)行重構(gòu)。
至此,基于規(guī)則1和規(guī)則2,可以設(shè)計(jì)出一套的基于Dom的合理的序列化機(jī)制。
2)設(shè)計(jì)Dom序列化和反序列化模塊 首先,確定數(shù)據(jù)的存儲(chǔ)格式。
序列化時(shí),被序列化的類對(duì)象的數(shù)據(jù)綁定至標(biāo)準(zhǔn)輸出流,由標(biāo)注輸出流確定其輸 出格式(二進(jìn)制或文本格式)并保存至結(jié)果文件。因此可以選擇的存儲(chǔ)格式有二進(jìn)制格式、 文本格式,以及由文本格式演化的XML格式。
二進(jìn)制格式存儲(chǔ)與讀取效率最高,因?yàn)閿?shù)據(jù)本身在內(nèi)存中就是以二進(jìn)制的形式存 在;文本格式效率次之,但作為明文存儲(chǔ)方式,可以直觀的顯示數(shù)據(jù)的信息;XML格式效率 較前兩者低,因?yàn)閄ML格式要求數(shù)據(jù)轉(zhuǎn)換為文本后,還需要按XML文法添加輔助字段。但以 XML格式存儲(chǔ),不僅可以直觀的顯示數(shù)據(jù)內(nèi)容,還可以顯示數(shù)據(jù)之間的層次關(guān)系,并可作為 數(shù)據(jù)交換的載體用于網(wǎng)頁顯示和基于web的仿真等。
本發(fā)明設(shè)計(jì)序列化機(jī)制時(shí),效率問題始終置于首位,因此本發(fā)明采用二進(jìn)制格式 存儲(chǔ)序列化文件結(jié)果,序列化時(shí)也只提供二進(jìn)制這一種輸出格式。
確定哪些類的對(duì)象需要被序列化時(shí),設(shè)計(jì)方案有二 a利用列表記錄所有需要被序列化的對(duì)象的類型。在對(duì)象被序列化前,先在列表中查 找是否存在該對(duì)象對(duì)應(yīng)的類型,查找成功才對(duì)該對(duì)象執(zhí)行序列化操作。
b重載序列化函數(shù),以類對(duì)象的引用作為其輸入?yún)?shù),通過輸入?yún)?shù)顯式的指明, 哪些類的對(duì)象是符合要求需要被序列化的。
方案a的優(yōu)勢(shì)在于其功能設(shè)計(jì)邏輯清晰。其不足在于序列化前需要預(yù)處理以記錄 對(duì)象類型,序列化與反序列化過程都需要查表。
方案b則通過輸入?yún)?shù)的匹配可以判斷對(duì)象是否為滿足要求的類型,省去了建表 和查表的過程。其不足在于重載序列化函數(shù)時(shí),需要顯式的指明其輸入?yún)?shù)的類型,即在程 序設(shè)計(jì)時(shí),要求人為的統(tǒng)計(jì)得出需要被序列化的對(duì)象的類型總集。
考慮到序列化機(jī)制運(yùn)行效率,本發(fā)明設(shè)計(jì)時(shí)采用方案b,以程序設(shè)計(jì)階段的低效 (人工統(tǒng)計(jì)比較繁瑣)換取運(yùn)行階段的高效。
確定哪些類成員需要被序列化時(shí),本發(fā)明同樣設(shè)計(jì)了兩套初始方案a利用列表存儲(chǔ)類成員的序列化狀態(tài),表中包括類成員的ID編號(hào),以及該成員是否需 要被序列化(用BOOL型數(shù)據(jù)表示)。在序列化時(shí),首先對(duì)類成員統(tǒng)計(jì)得到列表,并保存,然后 對(duì)成員進(jìn)行序列化;在反序列化時(shí),則對(duì)應(yīng)的首先讀取此表,并根據(jù)此表的內(nèi)容判斷需要重 構(gòu)哪些成員信息。此表也可演化為用二進(jìn)制編碼來表示,每一位所處的位置(從低位算起) 表示成員的ID號(hào),該位的0,1狀態(tài)表示對(duì)應(yīng)的成員是否被序列化。如0101表明只有第1, 3個(gè)成員被序列化。需提供M位二進(jìn)制編碼才能滿足需求(對(duì)上文得到的類型總集中的每 個(gè)類分析其成員個(gè)數(shù),得出類成員個(gè)數(shù)的最大值為M)。
b假定默認(rèn)所有成員都要被序列化,在序列化時(shí),遇到不需要被序列化的成員時(shí), 輸出輔助字段(如Oxff)在序列化文件中“占位”,在反序列劃時(shí),讀到此輔助字段,則說明對(duì) 應(yīng)位置的成員未被序列化,對(duì)該成員賦默認(rèn)值即可。
方案a更為完善,表或二進(jìn)制編碼集中記錄了類成員的序列化狀況,充當(dāng)了成員 序列化引擎,即序列化和反序列化時(shí)可通過表或二進(jìn)制編碼跟蹤類成員,并可給出統(tǒng)計(jì)信 息。方案b則將各個(gè)成員的序列化狀況分散至序列化結(jié)果信息中,亦滿足設(shè)計(jì)需求且實(shí)現(xiàn) 相對(duì)容易。這兩種方案執(zhí)行效率、資源占用率都很接近。本發(fā)明選擇相對(duì)容易實(shí)現(xiàn)的方案 b。
序列化源文件文件名時(shí),只保存頂層模型(實(shí)體)的源文件文件名。
如下偽代碼所示,Al,…,An是packagej. mo中的頂層模型,Al中包含嵌套模型 B,映射至Dom體系則為Class* al,…,Class* an, al中包含成員變量b。al,…,an序 列化時(shí),必須先序列化其源文件文件名package^, mo,b非頂層模型,則不要序列化其所處 的源文件信息(b的序列化參照規(guī)則1. 3)。
權(quán)利要求
1.一種物理建模語言Modelica的模型庫(kù)文件序列化方法,其特征在于在第一次加載 模型庫(kù)時(shí),對(duì)Modelica模型庫(kù)的源文件進(jìn)行詞法/語法分析,創(chuàng)建文檔對(duì)象模型抽象語法 樹,通過序列化技術(shù)將文檔對(duì)象模型抽象語法樹的數(shù)據(jù)保存至序列化結(jié)果文件。
2.根據(jù)權(quán)利要求1所述的物理建模語言Modelica的模型庫(kù)文件序列化方法,其特征在 于所述通過序列化技術(shù)將文檔對(duì)象模型抽象語法樹的數(shù)據(jù)保存至序列化結(jié)果文件包括下 列步驟(1)根據(jù)文檔對(duì)象模型抽象語法樹中數(shù)據(jù)的數(shù)據(jù)類型,用預(yù)先定義的標(biāo)志符標(biāo)記所需 保存的數(shù)據(jù);(2)根據(jù)Modelica文檔對(duì)象模型類系圖制定對(duì)象映射表;(3)根據(jù)對(duì)象映射表將所需序列化的數(shù)據(jù)進(jìn)行分類標(biāo)記,標(biāo)記時(shí)需區(qū)分類、類成員以 及對(duì)象所在實(shí)體文件;(4)依據(jù)Modelica編譯結(jié)果進(jìn)行序列化輸出,序列化依照對(duì)象數(shù)據(jù)排列規(guī)則進(jìn)行,每 個(gè)Modelica對(duì)象數(shù)據(jù)輸出前,首先輸出其分類標(biāo)記,其次為數(shù)據(jù)塊大小,最后為數(shù)據(jù)內(nèi) 容;當(dāng)指定數(shù)據(jù)不存在時(shí),以占位符進(jìn)行數(shù)據(jù)虛擬填充。
3.—種物理建模語言Modelica的模型庫(kù)文件的反序列化方法,其特征在于讀取序列 化結(jié)果文件,包括如下步驟,(1)根據(jù)Modelica文檔對(duì)象模型類系圖制定的對(duì)象映射表預(yù)先創(chuàng)建所需反序列化的 對(duì)象,并進(jìn)行對(duì)象初始化,初始對(duì)象數(shù)據(jù)為空;(2)從序列化文件中讀入數(shù)據(jù),根據(jù)讀取的分類標(biāo)記確定向何種對(duì)象填充數(shù)據(jù),根據(jù) 讀取的數(shù)據(jù)塊大小值確定對(duì)象數(shù)據(jù)的大小,最終實(shí)現(xiàn)讀入單個(gè)的完整對(duì)象,如果讀入數(shù)據(jù) 為占位符,則該對(duì)象的指定數(shù)據(jù)設(shè)置為空;(3)依據(jù)Modelica模型序列化文件中的對(duì)象結(jié)果順序依次在內(nèi)存中創(chuàng)建新的對(duì)象, 對(duì)象的層次關(guān)系按照序列化文件中的分類標(biāo)記進(jìn)行組織,從而實(shí)現(xiàn)在內(nèi)存中重構(gòu)Modelica 模型編譯結(jié)果。
全文摘要
本發(fā)明公開了一種物理建模語言Modelica的模型庫(kù)文件序列化方法,其特征在于在第一次加載模型庫(kù)時(shí),對(duì)Modelica模型庫(kù)的源文件進(jìn)行詞法/語法分析,創(chuàng)建文檔對(duì)象模型抽象語法樹,通過序列化技術(shù)將文檔對(duì)象模型抽象語法樹的數(shù)據(jù)保存至序列化結(jié)果文件。同時(shí)公開了相應(yīng)的反序列化方法。本發(fā)明通過預(yù)處理過程,在第一次加載模型庫(kù)時(shí),生成序列化結(jié)果文件,因而在以后加載模型庫(kù)時(shí),只需要直接從讀取結(jié)果文件即可,避免每次都模型庫(kù)進(jìn)行詞法語法解析,大大加快了模型庫(kù)的加載速度。以Modelica2.1標(biāo)準(zhǔn)庫(kù)為例,未使用本發(fā)明的方法時(shí),加載時(shí)間為300秒,使用本發(fā)明的方法后,加載時(shí)間僅為600毫秒。
文檔編號(hào)G06F9/445GK102043657SQ20111003449
公開日2011年5月4日 申請(qǐng)日期2011年2月1日 優(yōu)先權(quán)日2011年2月1日
發(fā)明者周凡利, 唐俊杰, 張和華, 田顯釗, 郭俊峰, 陳立平 申請(qǐng)人:蘇州同元軟控信息技術(shù)有限公司