• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于XML的代碼自動生成工具

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

      張 瓊,黃 翩

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

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

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

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

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

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

      1.2 采用代碼生成器的好處

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

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

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

      (3)產(chǎn)生代碼的高效性。一旦模板等設(shè)計(jì)好后,只需簡單的運(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(接口定義語言)的代碼生成方式。(2).NET提供的CodeDOM機(jī)制。(3)基于XML的生成方式。表1列出了3種方式采用的模板、元數(shù)據(jù)、業(yè)務(wù)規(guī)則[5]。

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

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

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

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

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

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

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

      圖1 代碼自動生成工具框架圖

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

      對于代碼自動生成工具中重要的模板設(shè)計(jì),為適應(yīng)雷達(dá)系統(tǒng)建模與仿真的需求,將模板信息分為5大類:(1)系統(tǒng)信息。代碼生成后的存放路徑、代碼生成后的文件名、生成C++代碼的類名、成員函數(shù)名等。(2)參數(shù)信息。時(shí)寬、采樣頻率、發(fā)射功率、帶寬、脈沖重復(fù)周期等。(3)模型的輸入信息。發(fā)射信號脈沖重復(fù)周期類型、發(fā)射信號載頻類型、發(fā)射信號調(diào)制類型、發(fā)射信號中心載頻等。(4)模型的輸出信息。輸出數(shù)據(jù)結(jié)構(gòu)體、輸出信號類型。(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)”頁面的“生成C++代碼”按鈕即可生成所需要代碼。假設(shè)文件名填入“subTransmitter”其他為默認(rèn)值,生成代碼:

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

      typedef struct para_subTransmitter_tag

      {

      double tau;//脈沖寬度

      double fs;//采樣頻率

      double band;//帶寬

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

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

      //接口定義模塊,主要完成對接口的定義

      typedef struct io_subTransmitter_tag

      {

      //輸入接口定義

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

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

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

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

      //輸出接口定義

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

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

      }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é)束語

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

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

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

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

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

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

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

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

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

      猜你喜歡
      代碼生成編譯器代碼
      Lustre語言可信代碼生成器研究進(jìn)展
      基于相異編譯器的安全計(jì)算機(jī)平臺交叉編譯環(huán)境設(shè)計(jì)
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      代碼生成技術(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)
      編譯器無關(guān)性編碼在微控制器中的優(yōu)勢
      璧山县| 千阳县| 萍乡市| 兖州市| 宜阳县| 睢宁县| 沭阳县| 金湖县| 鄂州市| 岚皋县| 元阳县| 鄂州市| 湟中县| 宜丰县| 沁水县| 望城县| 通山县| 通州市| 罗城| 水城县| 扎鲁特旗| 怀来县| 娱乐| 丰顺县| 泸西县| 射洪县| 小金县| 离岛区| 平顶山市| 正宁县| 新野县| 什邡市| 田林县| 屏边| 安福县| 荔浦县| 乌拉特前旗| 营口市| 微山县| 资兴市| 拉孜县|