• 
    

    
    

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

      一種實(shí)現(xiàn)編程語言相互轉(zhuǎn)換的方法①

      2014-12-24 15:01:41費(fèi)立國顧衛(wèi)華蔣和超
      科技創(chuàng)新導(dǎo)報 2014年30期
      關(guān)鍵詞:轉(zhuǎn)換編程語言

      費(fèi)立國+顧衛(wèi)華+蔣和超

      摘 要:伴隨著計算機(jī)產(chǎn)業(yè)的快速發(fā)展,成本和效率成為下一步前進(jìn)的制約因素。當(dāng)前多數(shù)計算機(jī)語言之間受到平臺的束縛而不能相互通信,或依賴于操作系統(tǒng),或依賴于硬件,若要求平臺遷移或數(shù)據(jù)遷移,不僅給編程人員帶來很大的不便,更降低了開發(fā)的效率,使生產(chǎn)受到限制。XML語言由于本身的優(yōu)勢,能夠表示程序的結(jié)構(gòu)信息,所以考慮用XML語言表示程序結(jié)構(gòu)來實(shí)現(xiàn)各種編程語言之間的轉(zhuǎn)換是可行的。

      關(guān)鍵詞:編程語言 ?JavaCC ? 轉(zhuǎn)換 ? XML ?旅行者模式

      中圖分類號:TP313 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2014)10(c)-0044-02

      該文主要完成以下工作:選定某種編程語言相對應(yīng)的.jj和.jjt文件,利用JavaCC工具建立該語言的編譯器和抽象語法樹,并依據(jù)它對抽語法樹各節(jié)點(diǎn)類型添加語義動作和接受方法,建立抽象旅行者和具體旅行者,建立可以完成轉(zhuǎn)換的驅(qū)動程序,編譯后得到可執(zhí)行的轉(zhuǎn)換器。

      1 應(yīng)用主要技術(shù)及原理簡介

      (1) JavaCC簡介。

      JavaCC英文全稱是(Java Compiler Compiler)是在擴(kuò)展了YACC的基礎(chǔ)上,使用Java語言開發(fā)的詞法語法分析器。

      JavaCC主要有以下功能:

      ①JavaCC用來處理語法文件(jj)生成解析代碼。

      ②JJTree用來處理jjt文件,生成樹節(jié)點(diǎn)代碼和jj文件。

      ③JJDoc根據(jù)jj文件,生成文本本件(Html)。

      (2)AST的基本結(jié)構(gòu)。

      抽象語法樹(abstract syntax tree或者縮寫為AST),或者語法樹(syntax tree),是對編程語言源程序的語法結(jié)構(gòu)的一種樹形表示形式。語法樹上的每一個節(jié)點(diǎn)都代表了一種結(jié)構(gòu)。每個節(jié)點(diǎn)代表了一個非終終結(jié)符。每個具體的單詞(由此法分析得到的)都在一個葉子節(jié)點(diǎn)上。根據(jù)抽象語法樹的定義及規(guī)則,可以得到這個語句對應(yīng)的語法樹。

      (3)XML語言簡介。

      XML語言的全稱是Extensible Markup Language,中文為可擴(kuò)展標(biāo)記語言,它允許開發(fā)人員根據(jù)自己的需求定義標(biāo)簽,可以將標(biāo)簽和內(nèi)容有效的分離。XML更加看重于數(shù)據(jù)的存儲形式和傳輸方式,且具有簡單易用、可擴(kuò)展性強(qiáng)、數(shù)據(jù)與其組織形式相互分離等優(yōu)勢。

      (4)旅行者模式簡介。

      旅行者模式是作者根據(jù)本次研究經(jīng)驗(yàn)結(jié)合大量的實(shí)際操作過程提出的一種新的行為型設(shè)計模式,這種模式可以對某個對象中各個節(jié)點(diǎn)元素進(jìn)行不同的操作,可以在不改變各節(jié)點(diǎn)類的基礎(chǔ)上定義作用于這些元素的操作。

      旅行者模式的特點(diǎn):

      旅行者模式把程序?qū)ο髴?yīng)用的數(shù)據(jù)結(jié)構(gòu)與作用在這種結(jié)構(gòu)之上的操作相互分離開,使得操作不依賴于結(jié)構(gòu)。

      旅行者模式更加適用于結(jié)構(gòu)相對固定但算法不穩(wěn)定的問題的解決。

      旅行者模式的優(yōu)勢在于新添操作方便。

      旅行者模式的基本原理:

      得到元語言的AST后,進(jìn)一步對語法樹中的每個節(jié)點(diǎn)生成一個抽象類(節(jié)點(diǎn)是在元語言的.jjt文件中定義的),接下來定義一個旅行者接口,實(shí)現(xiàn)這個接口的不同旅行者可以根據(jù)自己的需求對語法樹中的各個節(jié)點(diǎn)進(jìn)行操作,從而獲取所需的信息。一般抽象旅行者類都要有若干個具體旅行者子類來繼承,在所有的旅行者中都會有對應(yīng)的所有節(jié)點(diǎn)的方法,這樣選擇了某個旅行者,然后在該旅行者中找到具體的節(jié)點(diǎn)進(jìn)行操作,就可以完成提取所需信息的任務(wù)。

      2 從元語言到XML語言的轉(zhuǎn)換

      該文以C語言為例向讀者介紹如何將C語言轉(zhuǎn)換成XML,至于其他編程語言到XML的轉(zhuǎn)換可按照此法仿照完成。

      2.1 總體分析

      (1)定義C語言語法的.jjt文件,通過JavaCC工具生成C語言對應(yīng)的抽象語法樹和C語言的編譯器。(2)添加相應(yīng)的節(jié)點(diǎn)標(biāo)記和一定的規(guī)范。(3)通過旅行者模式對其進(jìn)行遍歷和提取所需的信息。

      此過程所對應(yīng)的流程圖如圖1所示。

      2.2 C語言到AST的實(shí)現(xiàn)

      首先獲得相應(yīng)語言的.jjt文件。執(zhí)行.jjt文件會生成七個文件。我們對其中的simple1.java進(jìn)行編譯就可以獲得Simple1.jj所定義的語法的編譯器。如果我們對C語言的.jj文件進(jìn)行JavaCC操作就可以得到一個名為CParser.java的文件,對其進(jìn)行編譯就得到了C語言的編譯器。

      2.3 旅行者模式設(shè)計

      (1)設(shè)計旅行者模式。

      訪問各個節(jié)點(diǎn)是通過旅行者實(shí)現(xiàn)的。添加旅行者的目的主要是為了從抽象語法樹到XML文件的轉(zhuǎn)換。為了便于以后的擴(kuò)展和深入,需要設(shè)計抽象旅行者接口和實(shí)現(xiàn)該接口的旅行者適配器。為了完成不同的操作,還需要許多具體的旅行者角色。

      由于C語言的AST是由JavaCC工具自動生成的,C語言的.jjt文件定義了該語法樹的層次結(jié)構(gòu),故不需設(shè)計樹的組織形式,只要設(shè)計旅行者模式,設(shè)計旅行者訪問語法樹的各個節(jié)點(diǎn)。

      旅行者模式的設(shè)計中的角色作用見表1。

      (2)創(chuàng)建旅行者。

      針對AST中的各個節(jié)點(diǎn)來建立相對應(yīng)的旅行者。本實(shí)例是將所有節(jié)點(diǎn)對應(yīng)的訪問者的travel方法在一個ToXmlTraveller類中實(shí)現(xiàn),ToXmlTraveller類繼承了旅行者適配器,這樣就可以根據(jù)用戶的需求(需要旅行者訪問哪些節(jié)點(diǎn))來對其travel方法編寫代碼,從而實(shí)現(xiàn)相應(yīng)的功能。

      下面給出在旅行者中對ASTInitializer類型節(jié)點(diǎn)的travel方法,其他的不同節(jié)點(diǎn)的travel方法的編寫與此類似。

      public Object travel(ASTInitializer node, Object data){endprint

      node.childrenAccept(traveller, element);

      return super.tarvel(node,data);

      }

      當(dāng)旅行者訪問某一結(jié)點(diǎn)的時候,就要有接受者來響應(yīng)相應(yīng)的動作。接收者是根據(jù)整個程序在運(yùn)行時來匹配相應(yīng)的旅行者的,每個節(jié)點(diǎn)的接受方法類似。

      下面給出在旅行者中ASTInitializer類型節(jié)點(diǎn)對應(yīng)的接受方法:

      public Object jjtAccept(CParser Traveller traveller,Object data){

      return traveller.travel(this, data);

      }

      (3)創(chuàng)建轉(zhuǎn)換器。

      至此,已經(jīng)建立了C語言轉(zhuǎn)為XML文檔的基礎(chǔ)架構(gòu),下面還需要一個驅(qū)動程序來觸發(fā)整個程序的運(yùn)行。下面是部分代碼:

      public static void main(String[] args){

      ...

      //解析器開始語法分析,生成待測程序的AST,并獲得TranslationUnit類型的根節(jié)點(diǎn)對象 ? ? ? ? ? ? ? ? ? ? TranslationUnit ast = cparser.TranslationUnit();

      //生成traveller對象,調(diào)用travel方法訪問所有AST節(jié)點(diǎn)

      ToXmlTraveller.traveller = new ToXmlTravellor();

      //根節(jié)點(diǎn)接受旅行者

      ast.jjtAccept(traveller,null);

      ...//輸出轉(zhuǎn)換完成的信息}

      驅(qū)動程序會根據(jù)filename這個源文件名開始生成AST文件,然后根據(jù)在各個節(jié)點(diǎn)中的travel所定義的方法來執(zhí)行相應(yīng)的動作,由jjtAccept來響應(yīng)動作,從而完成規(guī)定的功能。生成相應(yīng)的XML文件。

      3 實(shí)例分析

      (1)實(shí)例執(zhí)行。

      下面用一個實(shí)例來說明如何將C語言程序轉(zhuǎn)為XML文檔。以源程序Test.c為例,演示生成XML文件的過程。

      Test.c程序代碼如圖2所示:

      #include

      int main(void)

      {

      printf(“helloworld!”);

      return 0;

      }

      生成的XML文檔如圖2所示,文件轉(zhuǎn)換的速度是很快。用戶可以將源文件中想要的信息全部提出,只需在相應(yīng)的節(jié)點(diǎn)處添加travel即可。生成的XML文檔結(jié)構(gòu)清晰,在對其進(jìn)行處理的時候可以定義其中的節(jié)點(diǎn)信息,從而為下一步將其轉(zhuǎn)換為其他編程語言打下了基礎(chǔ)。

      4 從XML轉(zhuǎn)換為其他語言

      由于該文重點(diǎn)在于將編程語言轉(zhuǎn)換為XML文件,所以在此只對于XML轉(zhuǎn)換為其他編程語言作簡要介紹,有這種需求的讀者可以按照此思路進(jìn)行深入研究。

      XML文檔轉(zhuǎn)為其他編程語言,是將文檔按照匹配的XSLT(Extensible Stylesheet Language Transformation,擴(kuò)展樣式表轉(zhuǎn)換語言)轉(zhuǎn)化為特定語言。如圖3所示。

      5 結(jié)語

      該研究完成了編程語言之間相互轉(zhuǎn)換工作的前一部分,就是從某一編程語言到XML語言的轉(zhuǎn)換。其中是以C語言為例,從獲取.jj文件到最終生成XML文檔做了詳細(xì)的說明,其中也給出了每個過程的具體實(shí)現(xiàn)方法,至于其他語言轉(zhuǎn)換成XML語言可以參照C語言的方法實(shí)現(xiàn);而對于從XML文檔到編程語言的實(shí)現(xiàn)該文只是給出了大體的思路,并沒有具體的研究過程以及實(shí)現(xiàn)方式,有需要這可按本思路研究。

      參考文獻(xiàn)

      [1] Yves Savourel,著.XML國際化和本地化開發(fā)[M].李二勇,譯.北京:機(jī)械工業(yè)出版社,2002.

      [2] 王萬山.吉林大學(xué)碩士學(xué)術(shù)論文.從 Java語言到XML語言的轉(zhuǎn)換[D].吉林大學(xué)碩士學(xué)術(shù)論文.

      [3] https://javacc.dev.java.net/[EB/OL].endprint

      node.childrenAccept(traveller, element);

      return super.tarvel(node,data);

      }

      當(dāng)旅行者訪問某一結(jié)點(diǎn)的時候,就要有接受者來響應(yīng)相應(yīng)的動作。接收者是根據(jù)整個程序在運(yùn)行時來匹配相應(yīng)的旅行者的,每個節(jié)點(diǎn)的接受方法類似。

      下面給出在旅行者中ASTInitializer類型節(jié)點(diǎn)對應(yīng)的接受方法:

      public Object jjtAccept(CParser Traveller traveller,Object data){

      return traveller.travel(this, data);

      }

      (3)創(chuàng)建轉(zhuǎn)換器。

      至此,已經(jīng)建立了C語言轉(zhuǎn)為XML文檔的基礎(chǔ)架構(gòu),下面還需要一個驅(qū)動程序來觸發(fā)整個程序的運(yùn)行。下面是部分代碼:

      public static void main(String[] args){

      ...

      //解析器開始語法分析,生成待測程序的AST,并獲得TranslationUnit類型的根節(jié)點(diǎn)對象 ? ? ? ? ? ? ? ? ? ? TranslationUnit ast = cparser.TranslationUnit();

      //生成traveller對象,調(diào)用travel方法訪問所有AST節(jié)點(diǎn)

      ToXmlTraveller.traveller = new ToXmlTravellor();

      //根節(jié)點(diǎn)接受旅行者

      ast.jjtAccept(traveller,null);

      ...//輸出轉(zhuǎn)換完成的信息}

      驅(qū)動程序會根據(jù)filename這個源文件名開始生成AST文件,然后根據(jù)在各個節(jié)點(diǎn)中的travel所定義的方法來執(zhí)行相應(yīng)的動作,由jjtAccept來響應(yīng)動作,從而完成規(guī)定的功能。生成相應(yīng)的XML文件。

      3 實(shí)例分析

      (1)實(shí)例執(zhí)行。

      下面用一個實(shí)例來說明如何將C語言程序轉(zhuǎn)為XML文檔。以源程序Test.c為例,演示生成XML文件的過程。

      Test.c程序代碼如圖2所示:

      #include

      int main(void)

      {

      printf(“helloworld!”);

      return 0;

      }

      生成的XML文檔如圖2所示,文件轉(zhuǎn)換的速度是很快。用戶可以將源文件中想要的信息全部提出,只需在相應(yīng)的節(jié)點(diǎn)處添加travel即可。生成的XML文檔結(jié)構(gòu)清晰,在對其進(jìn)行處理的時候可以定義其中的節(jié)點(diǎn)信息,從而為下一步將其轉(zhuǎn)換為其他編程語言打下了基礎(chǔ)。

      4 從XML轉(zhuǎn)換為其他語言

      由于該文重點(diǎn)在于將編程語言轉(zhuǎn)換為XML文件,所以在此只對于XML轉(zhuǎn)換為其他編程語言作簡要介紹,有這種需求的讀者可以按照此思路進(jìn)行深入研究。

      XML文檔轉(zhuǎn)為其他編程語言,是將文檔按照匹配的XSLT(Extensible Stylesheet Language Transformation,擴(kuò)展樣式表轉(zhuǎn)換語言)轉(zhuǎn)化為特定語言。如圖3所示。

      5 結(jié)語

      該研究完成了編程語言之間相互轉(zhuǎn)換工作的前一部分,就是從某一編程語言到XML語言的轉(zhuǎn)換。其中是以C語言為例,從獲取.jj文件到最終生成XML文檔做了詳細(xì)的說明,其中也給出了每個過程的具體實(shí)現(xiàn)方法,至于其他語言轉(zhuǎn)換成XML語言可以參照C語言的方法實(shí)現(xiàn);而對于從XML文檔到編程語言的實(shí)現(xiàn)該文只是給出了大體的思路,并沒有具體的研究過程以及實(shí)現(xiàn)方式,有需要這可按本思路研究。

      參考文獻(xiàn)

      [1] Yves Savourel,著.XML國際化和本地化開發(fā)[M].李二勇,譯.北京:機(jī)械工業(yè)出版社,2002.

      [2] 王萬山.吉林大學(xué)碩士學(xué)術(shù)論文.從 Java語言到XML語言的轉(zhuǎn)換[D].吉林大學(xué)碩士學(xué)術(shù)論文.

      [3] https://javacc.dev.java.net/[EB/OL].endprint

      node.childrenAccept(traveller, element);

      return super.tarvel(node,data);

      }

      當(dāng)旅行者訪問某一結(jié)點(diǎn)的時候,就要有接受者來響應(yīng)相應(yīng)的動作。接收者是根據(jù)整個程序在運(yùn)行時來匹配相應(yīng)的旅行者的,每個節(jié)點(diǎn)的接受方法類似。

      下面給出在旅行者中ASTInitializer類型節(jié)點(diǎn)對應(yīng)的接受方法:

      public Object jjtAccept(CParser Traveller traveller,Object data){

      return traveller.travel(this, data);

      }

      (3)創(chuàng)建轉(zhuǎn)換器。

      至此,已經(jīng)建立了C語言轉(zhuǎn)為XML文檔的基礎(chǔ)架構(gòu),下面還需要一個驅(qū)動程序來觸發(fā)整個程序的運(yùn)行。下面是部分代碼:

      public static void main(String[] args){

      ...

      //解析器開始語法分析,生成待測程序的AST,并獲得TranslationUnit類型的根節(jié)點(diǎn)對象 ? ? ? ? ? ? ? ? ? ? TranslationUnit ast = cparser.TranslationUnit();

      //生成traveller對象,調(diào)用travel方法訪問所有AST節(jié)點(diǎn)

      ToXmlTraveller.traveller = new ToXmlTravellor();

      //根節(jié)點(diǎn)接受旅行者

      ast.jjtAccept(traveller,null);

      ...//輸出轉(zhuǎn)換完成的信息}

      驅(qū)動程序會根據(jù)filename這個源文件名開始生成AST文件,然后根據(jù)在各個節(jié)點(diǎn)中的travel所定義的方法來執(zhí)行相應(yīng)的動作,由jjtAccept來響應(yīng)動作,從而完成規(guī)定的功能。生成相應(yīng)的XML文件。

      3 實(shí)例分析

      (1)實(shí)例執(zhí)行。

      下面用一個實(shí)例來說明如何將C語言程序轉(zhuǎn)為XML文檔。以源程序Test.c為例,演示生成XML文件的過程。

      Test.c程序代碼如圖2所示:

      #include

      int main(void)

      {

      printf(“helloworld!”);

      return 0;

      }

      生成的XML文檔如圖2所示,文件轉(zhuǎn)換的速度是很快。用戶可以將源文件中想要的信息全部提出,只需在相應(yīng)的節(jié)點(diǎn)處添加travel即可。生成的XML文檔結(jié)構(gòu)清晰,在對其進(jìn)行處理的時候可以定義其中的節(jié)點(diǎn)信息,從而為下一步將其轉(zhuǎn)換為其他編程語言打下了基礎(chǔ)。

      4 從XML轉(zhuǎn)換為其他語言

      由于該文重點(diǎn)在于將編程語言轉(zhuǎn)換為XML文件,所以在此只對于XML轉(zhuǎn)換為其他編程語言作簡要介紹,有這種需求的讀者可以按照此思路進(jìn)行深入研究。

      XML文檔轉(zhuǎn)為其他編程語言,是將文檔按照匹配的XSLT(Extensible Stylesheet Language Transformation,擴(kuò)展樣式表轉(zhuǎn)換語言)轉(zhuǎn)化為特定語言。如圖3所示。

      5 結(jié)語

      該研究完成了編程語言之間相互轉(zhuǎn)換工作的前一部分,就是從某一編程語言到XML語言的轉(zhuǎn)換。其中是以C語言為例,從獲取.jj文件到最終生成XML文檔做了詳細(xì)的說明,其中也給出了每個過程的具體實(shí)現(xiàn)方法,至于其他語言轉(zhuǎn)換成XML語言可以參照C語言的方法實(shí)現(xiàn);而對于從XML文檔到編程語言的實(shí)現(xiàn)該文只是給出了大體的思路,并沒有具體的研究過程以及實(shí)現(xiàn)方式,有需要這可按本思路研究。

      參考文獻(xiàn)

      [1] Yves Savourel,著.XML國際化和本地化開發(fā)[M].李二勇,譯.北京:機(jī)械工業(yè)出版社,2002.

      [2] 王萬山.吉林大學(xué)碩士學(xué)術(shù)論文.從 Java語言到XML語言的轉(zhuǎn)換[D].吉林大學(xué)碩士學(xué)術(shù)論文.

      [3] https://javacc.dev.java.net/[EB/OL].endprint

      猜你喜歡
      轉(zhuǎn)換編程語言
      壓力-體積轉(zhuǎn)換在CFC編程語言中的實(shí)現(xiàn)解析
      Java編程語言的特點(diǎn)與應(yīng)用
      淺談不同編程語言對計算機(jī)軟件開發(fā)的影響
      電子制作(2018年1期)2018-04-04 01:48:36
      大數(shù)據(jù)時代檔案管理模式的轉(zhuǎn)換與創(chuàng)新
      資治文摘(2016年7期)2016-11-23 02:29:01
      論英漢語翻譯中語內(nèi)翻譯向語際翻譯的轉(zhuǎn)換
      淺談平面圖與立體圖的思維培養(yǎng)
      人間(2016年28期)2016-11-10 00:10:48
      高中化學(xué)教學(xué)中研究性學(xué)習(xí)的應(yīng)用探究
      成才之路(2016年25期)2016-10-08 10:51:36
      面向?qū)ο骔eb開發(fā)編程語言的的評估方法
      双桥区| 永胜县| 靖安县| 连平县| 泽库县| 灵台县| 武邑县| 大港区| 白山市| 玉山县| 恩平市| 肥乡县| 平顺县| 邯郸县| 历史| 金塔县| 新晃| 阿拉善右旗| 宁国市| 邳州市| 虎林市| 大丰市| 临沭县| 恩平市| 临西县| 苗栗县| 开阳县| 沙洋县| 巴东县| 安远县| 邮箱| 文昌市| 兴宁市| 清流县| 库尔勒市| 蚌埠市| 瓮安县| 龙江县| 平塘县| 康定县| 沙河市|