亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于XML的代碼自動(dòng)生成工具

        2015-12-20 01:09:20瓊,黃
        電子科技 2015年2期
        關(guān)鍵詞:代碼生成編譯器代碼

        張 瓊,黃 翩

        (西安電子科技大學(xué)電子信息攻防對(duì)抗與仿真重點(diǎn)實(shí)驗(yàn)室,陜西西安 710071)

        1 技術(shù)背景和優(yōu)勢(shì)

        1.1 代碼生成器的技術(shù)發(fā)展

        自動(dòng)代碼生成技術(shù)[1]作為一種出現(xiàn)在上世紀(jì)的軟件開發(fā)技術(shù),首先出現(xiàn)在編譯器的開發(fā)和設(shè)計(jì)之中,并在此領(lǐng)域獲得了廣泛應(yīng)用。在編譯器模型中,編譯器前段將輸入的源程序翻譯成一種中間表示,后端以源程序的中間表示為輸入,并產(chǎn)生等價(jià)的目標(biāo)程序作為輸出。在此編譯器的后端就是編譯器的代碼生成部分。

        在這里,自動(dòng)代碼生成并不是指作為編譯器后端的代碼生成,而是指通過(guò)生成器,讀取相關(guān)的代碼或文檔中的定義,生成如 C、C++ 、Java、Perl、Ruby、Python及HTML等高級(jí)語(yǔ)言代碼。

        自動(dòng)代碼生成技術(shù)從上世紀(jì)起步發(fā)展以來(lái),取得了長(zhǎng)足進(jìn)步。但隨著計(jì)算機(jī)科學(xué)與技術(shù)的不斷發(fā)展,自動(dòng)代碼生成技術(shù)也越來(lái)越成熟并被廣泛應(yīng)用[2]。

        1.2 采用代碼生成器的好處

        對(duì)于軟件工程師而言,代碼生成技術(shù)有如下優(yōu)點(diǎn)[3]:

        (1)保證代碼的質(zhì)量。一個(gè)項(xiàng)目周期中大量的手寫代碼通常會(huì)由于軟件工程師在編碼時(shí)不斷采用新的或更好的方法而良莠不齊。代碼生成技術(shù)從編碼的初始階段創(chuàng)建通用模板,而通過(guò)修改模板和再次運(yùn)行代碼生成器來(lái)對(duì)所有已生成的基本代碼修正缺陷或優(yōu)化。

        (2)保證代碼的一致性。由代碼生成器生成的代碼在API和變量名上的寫法完全一致,這就為使用者提供了易懂易用的接口,更利于分層思想的實(shí)現(xiàn)。

        (3)產(chǎn)生代碼的高效性。一旦模板等設(shè)計(jì)好后,只需簡(jiǎn)單的運(yùn)行代碼生成器便可高效地生成用戶需求的代碼。

        (4)利于維護(hù)。接口和變量的一致性有利于后續(xù)的維護(hù)工作。

        2 代碼生成工具的框架

        一般而言代碼生成器有著必不可少的3要素:(1)模板。即生成代碼的格式和結(jié)構(gòu)模板。(2)元數(shù)據(jù)。即在代碼中需建模的結(jié)構(gòu)相關(guān)資源。(3)業(yè)務(wù)規(guī)則。用于指定元數(shù)據(jù)和行為的規(guī)則,這一部分通常封裝在代碼生成器中[4]。

        常見的典型代碼生成方式有3種:(1)CORBA中間件所采用的IDL(接口定義語(yǔ)言)的代碼生成方式。(2).NET提供的CodeDOM機(jī)制。(3)基于XML的生成方式。表1列出了3種方式采用的模板、元數(shù)據(jù)、業(yè)務(wù)規(guī)則[5]。

        表1 3種典型的代碼生成方式

        由表1可看出,這3種代碼生成方式各有不同,但就實(shí)現(xiàn)的簡(jiǎn)易程度而言,基于XML的代碼生成技術(shù)明顯更具優(yōu)勢(shì)。其以XML技術(shù)和XLST文檔轉(zhuǎn)換技術(shù)作為支持,而XSLT語(yǔ)言則直接定義文檔轉(zhuǎn)換規(guī)則,與生成代碼采用的語(yǔ)言無(wú)關(guān),故可更方便快捷地實(shí)現(xiàn)代碼的自動(dòng)生成;而其他兩種代碼生成方式由于其業(yè)務(wù)規(guī)則與要生成的代碼語(yǔ)言相關(guān),而生成某種特定語(yǔ)言,其映射關(guān)系的建立一般不由程序員確立[6]。

        另外,從發(fā)展前景來(lái)看,XML具有良好的可讀性,方便的可擴(kuò)展性,數(shù)據(jù)內(nèi)容與其形式的分離,可輕松地跨平臺(tái)應(yīng)用,適合面向?qū)ο蟮某绦蜷_發(fā)等多方面優(yōu)勢(shì)。人們可通過(guò)DOM或SAX等技術(shù)對(duì)XML數(shù)據(jù)進(jìn)行訪問(wèn);更可通過(guò)XPath和XSLT對(duì)其進(jìn)行文檔轉(zhuǎn)換,將其轉(zhuǎn)換為其他格式的文檔。

        基于以上的自動(dòng)代碼生成方式的對(duì)比及XML的應(yīng)用優(yōu)勢(shì),文中選擇基于XML的代碼生成方式來(lái)實(shí)現(xiàn)代碼生成。

        基于XML的代碼生成方式是一種常見的典型代碼生成方式。其模板語(yǔ)言一般為XSLT;其元數(shù)據(jù)一般用XML文件記錄;其業(yè)務(wù)規(guī)則一般通過(guò)XSLT轉(zhuǎn)換語(yǔ)言定義,通過(guò)XSLT引擎自動(dòng)產(chǎn)生代碼[7]?;赬ML的代碼生成工具的整體框架,如圖1所示。

        圖1是具體的代碼生成工具的框架。其中,數(shù)據(jù)文件即三要素中的元數(shù)據(jù);模板文件即模板;而業(yè)務(wù)規(guī)則被封裝在代碼生成工具中?;赬Ml的代碼生成工具中的數(shù)據(jù)文件和模板文件均為XML表,代碼生成工具則依賴于XML解析器的實(shí)現(xiàn)[8]。

        3 代碼生成工具的實(shí)現(xiàn)

        圖1 代碼自動(dòng)生成工具框架圖

        由于在雷達(dá)系統(tǒng)建模與仿真中存在眾多的代碼重復(fù)編寫的問(wèn)題,為避免人為編寫帶來(lái)不必要的麻煩和錯(cuò)誤,文中使用基于XML的代碼生成工具來(lái)自動(dòng)幫助生成底層仿真模型代碼。為對(duì)XML數(shù)據(jù)進(jìn)行訪問(wèn),設(shè)計(jì)了一個(gè)適合于C/C++的基于DOM解析規(guī)則的XML解析器。在現(xiàn)有開源軟件CMarkUp的基礎(chǔ)上,為適應(yīng)遍歷普通樹的各個(gè)節(jié)點(diǎn)的需求,文中對(duì)CMarkUp進(jìn)行了二次封裝,重新設(shè)計(jì)了數(shù)據(jù)結(jié)構(gòu),其結(jié)構(gòu)如下:

        Typedef struct xmlElem_tag

        {

        //節(jié)點(diǎn)操作

        struct xmlElem_tag*parent;//父節(jié)點(diǎn)

        struct xmlElem_tag*current;//當(dāng)前節(jié)點(diǎn)

        struct xmlElem_tag*childHead;//子節(jié)點(diǎn)的頭結(jié)點(diǎn)

        struct xmlElem_tag*forward;//前向指針

        struct xmlElem_tag*next;//后向指針數(shù)組

        //數(shù)據(jù)操作

        char* attribHead;//屬性指針頭結(jié)點(diǎn)

        int nAttrib;//屬性數(shù)目

        //節(jié)點(diǎn)內(nèi)容

        char elemName[MAXLENGTH+1];//節(jié)點(diǎn)名稱,MAXLENGTH為一個(gè)宏

        int nDepthElem;//當(dāng)前節(jié)點(diǎn)的在樹形結(jié)構(gòu)中的深度

        }xmlElem,*pxmlElem;

        重新設(shè)計(jì)后的XML解析器可更容易的進(jìn)行遞歸遍歷,方便解析XML數(shù)據(jù)。

        對(duì)于代碼自動(dòng)生成工具中重要的模板設(shè)計(jì),為適應(yīng)雷達(dá)系統(tǒng)建模與仿真的需求,將模板信息分為5大類:(1)系統(tǒng)信息。代碼生成后的存放路徑、代碼生成后的文件名、生成C++代碼的類名、成員函數(shù)名等。(2)參數(shù)信息。時(shí)寬、采樣頻率、發(fā)射功率、帶寬、脈沖重復(fù)周期等。(3)模型的輸入信息。發(fā)射信號(hào)脈沖重復(fù)周期類型、發(fā)射信號(hào)載頻類型、發(fā)射信號(hào)調(diào)制類型、發(fā)射信號(hào)中心載頻等。(4)模型的輸出信息。輸出數(shù)據(jù)結(jié)構(gòu)體、輸出信號(hào)類型。(5)模型之間的連接信息。兩個(gè)模型之間的連接關(guān)系,兩個(gè)模型之間的數(shù)據(jù)傳輸。

        同時(shí)為生成C++代碼,必須為頭文件(.h)和源文件(.cpp),分別設(shè)置模板。為方便管理,將其放在同一XML表中以”template_h”和”template_cpp”節(jié)點(diǎn)區(qū)別,如圖2所示。

        圖2 XML模板的設(shè)計(jì)與實(shí)現(xiàn)

        圖3 數(shù)據(jù)文件交互式界面

        為更人性化、交互性更好,給該數(shù)據(jù)文件配備了可視化的界面,如圖3所示。在用戶填入需要一些數(shù)據(jù)后就可點(diǎn)擊“選項(xiàng)”頁(yè)面的“生成C++代碼”按鈕即可生成所需要代碼。假設(shè)文件名填入“subTransmitter”其他為默認(rèn)值,生成代碼:

        //參數(shù)定義模塊,主要完成對(duì)參數(shù)的定義

        typedef struct para_subTransmitter_tag

        {

        double tau;//脈沖寬度

        double fs;//采樣頻率

        double band;//帶寬

        double pt;//發(fā)射機(jī)瞬時(shí)功率

        }para_subTransmitter;//參數(shù)定義部分

        //接口定義模塊,主要完成對(duì)接口的定義

        typedef struct io_subTransmitter_tag

        {

        //輸入接口定義

        int in_prtType;//發(fā)射信號(hào)脈沖重復(fù)周期類型

        int in_fcType;//發(fā)射信號(hào)載頻類型

        int in_modType;//發(fā)射信號(hào)調(diào)制類型

        int in_modPhaseType;//發(fā)射相位信號(hào)調(diào)制類型

        //輸出接口定義

        struct signal out_struct;//發(fā)射信號(hào)結(jié)構(gòu)體

        struct pmatMatrix pout_msignal;//發(fā)射信號(hào)

        }io_subTransmitter;//接口定義部分

        typedef struct subTransmitter_tag

        {

        para_subTransmitter paraData;//參數(shù)結(jié)構(gòu)體

        io_subTransmitter ioData;//輸入輸出結(jié)構(gòu)體

        struct subTransmitter_tag*pm_data;//指向自己的指針

        }subTransmitter,*psubTransmitter;//用 戶 模 型定義

        4 結(jié)束語(yǔ)

        基于XML的代碼生成工具可減少重復(fù)代碼的編寫,降低因手工編寫所帶來(lái)的編碼錯(cuò)誤,提高代碼的質(zhì)量和編寫效率,從而使大規(guī)模軟件開發(fā)和維護(hù)更便捷。

        [1]管太陽(yáng).基于模板的自動(dòng)代碼生成技術(shù)研究[D].成都:電子科技大學(xué),2007.

        [2]田宇.基于XML的構(gòu)件組裝描述及其代碼生成技術(shù)研究[D].長(zhǎng)沙:中南大學(xué),2006.

        [3]范小剛.代碼生成技術(shù)的探討與實(shí)現(xiàn)[D].廣州:中山大學(xué),2004.

        [4]苗維杰,李天輝.基于 XML代碼生成技術(shù)的應(yīng)用研究[J].電子元器件應(yīng)用,2009(10):75 -78.

        [5]徐愛(ài)春,章堅(jiān)民.基于XML/XSLT代碼自動(dòng)生成技術(shù)研究[J].杭州電子工業(yè)學(xué)院學(xué)報(bào),2004,24(4):64 -68.

        [6]范秋生.XML的代碼生成器的設(shè)計(jì)與實(shí)現(xiàn)[J].長(zhǎng)江大學(xué)學(xué)報(bào):自然科學(xué)版,2008,5(1):211 -212.

        [7]趙軍.基于模板的代碼生成器的研究與實(shí)現(xiàn)[J].長(zhǎng)春師范學(xué)院學(xué)報(bào):自然科學(xué)版,2011,30(6):28 -34.

        [8]楊皓,楊忠,吳愚.基于XML腳本的代碼生成技術(shù)及其應(yīng)用[J].多媒體技術(shù)與應(yīng)用,2009(3):1712-1713.

        猜你喜歡
        代碼生成編譯器代碼
        Lustre語(yǔ)言可信代碼生成器研究進(jìn)展
        基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
        電子世界(2016年15期)2016-08-29 02:14:28
        通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
        基于關(guān)系數(shù)據(jù)模型代碼生成器的設(shè)計(jì)與實(shí)現(xiàn)
        編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
        一本色道久久99一综合| 免费人妻精品一区二区三区| 国产主播一区二区三区蜜桃| 亚洲av综合a色av中文| 精品欧美一区二区在线观看| 国产三级视频在线观看视主播| 最新日本女优中文字幕视频| 亚洲小说区图片区色综合网| 亚洲一本到无码av中文字幕 | 91精品国产综合久久久蜜臀九色| 精品国产一区二区三区18p| 日韩精品久久久久久久电影蜜臀| 亚洲人成人影院在线观看| 亚洲图片第二页| 日本黄色影院一区二区免费看 | 中国一 片免费观看| 精品91精品91精品国产片| 国产日本精品一区二区免费| 无码人妻丰满熟妇啪啪网不卡 | 久久人人爽天天玩人人妻精品| 亚洲是图一区二区视频| 日本视频一区二区三区| 女人18毛片a级毛片| 免费观看又色又爽又黄的韩国| 无码国产日韩精品一区二区| 日本老熟妇五十路一区二区三区| 欧美精品videosse精子| 国产精品麻花传媒二三区别| 亚洲国产成人aⅴ毛片大全| 成人国产精品三上悠亚久久| 337p日本欧洲亚洲大胆精品| 欧美激情二区| 最新国产成人自拍视频| 欧美激情视频一区二区三区免费| 亚洲熟少妇在线播放999| 丰满人妻无套中出中文字幕| 91九色极品探花内射| 国产精品无码v在线观看| 亚洲无码专区无码| 国产日韩乱码精品一区二区| 亚洲国产精品18久久久久久|