999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種實現編程語言相互轉換的方法①

2014-12-24 15:01:41費立國顧衛華蔣和超
科技創新導報 2014年30期

費立國+顧衛華+蔣和超

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

關鍵詞:編程語言 ?JavaCC ? 轉換 ? XML ?旅行者模式

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

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

1 應用主要技術及原理簡介

(1) JavaCC簡介。

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

JavaCC主要有以下功能:

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

②JJTree用來處理jjt文件,生成樹節點代碼和jj文件。

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

(2)AST的基本結構。

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

(3)XML語言簡介。

XML語言的全稱是Extensible Markup Language,中文為可擴展標記語言,它允許開發人員根據自己的需求定義標簽,可以將標簽和內容有效的分離。XML更加看重于數據的存儲形式和傳輸方式,且具有簡單易用、可擴展性強、數據與其組織形式相互分離等優勢。

(4)旅行者模式簡介。

旅行者模式是作者根據本次研究經驗結合大量的實際操作過程提出的一種新的行為型設計模式,這種模式可以對某個對象中各個節點元素進行不同的操作,可以在不改變各節點類的基礎上定義作用于這些元素的操作。

旅行者模式的特點:

旅行者模式把程序對象應用的數據結構與作用在這種結構之上的操作相互分離開,使得操作不依賴于結構。

旅行者模式更加適用于結構相對固定但算法不穩定的問題的解決。

旅行者模式的優勢在于新添操作方便。

旅行者模式的基本原理:

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

2 從元語言到XML語言的轉換

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

2.1 總體分析

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

此過程所對應的流程圖如圖1所示。

2.2 C語言到AST的實現

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

2.3 旅行者模式設計

(1)設計旅行者模式。

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

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

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

(2)創建旅行者。

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

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

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

node.childrenAccept(traveller, element);

return super.tarvel(node,data);

}

當旅行者訪問某一結點的時候,就要有接受者來響應相應的動作。接收者是根據整個程序在運行時來匹配相應的旅行者的,每個節點的接受方法類似。

下面給出在旅行者中ASTInitializer類型節點對應的接受方法:

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

return traveller.travel(this, data);

}

(3)創建轉換器。

至此,已經建立了C語言轉為XML文檔的基礎架構,下面還需要一個驅動程序來觸發整個程序的運行。下面是部分代碼:

public static void main(String[] args){

...

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

//生成traveller對象,調用travel方法訪問所有AST節點

ToXmlTraveller.traveller = new ToXmlTravellor();

//根節點接受旅行者

ast.jjtAccept(traveller,null);

...//輸出轉換完成的信息}

驅動程序會根據filename這個源文件名開始生成AST文件,然后根據在各個節點中的travel所定義的方法來執行相應的動作,由jjtAccept來響應動作,從而完成規定的功能。生成相應的XML文件。

3 實例分析

(1)實例執行。

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

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

#include

int main(void)

{

printf(“helloworld!”);

return 0;

}

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

4 從XML轉換為其他語言

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

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

5 結語

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

參考文獻

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

[2] 王萬山.吉林大學碩士學術論文.從 Java語言到XML語言的轉換[D].吉林大學碩士學術論文.

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

node.childrenAccept(traveller, element);

return super.tarvel(node,data);

}

當旅行者訪問某一結點的時候,就要有接受者來響應相應的動作。接收者是根據整個程序在運行時來匹配相應的旅行者的,每個節點的接受方法類似。

下面給出在旅行者中ASTInitializer類型節點對應的接受方法:

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

return traveller.travel(this, data);

}

(3)創建轉換器。

至此,已經建立了C語言轉為XML文檔的基礎架構,下面還需要一個驅動程序來觸發整個程序的運行。下面是部分代碼:

public static void main(String[] args){

...

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

//生成traveller對象,調用travel方法訪問所有AST節點

ToXmlTraveller.traveller = new ToXmlTravellor();

//根節點接受旅行者

ast.jjtAccept(traveller,null);

...//輸出轉換完成的信息}

驅動程序會根據filename這個源文件名開始生成AST文件,然后根據在各個節點中的travel所定義的方法來執行相應的動作,由jjtAccept來響應動作,從而完成規定的功能。生成相應的XML文件。

3 實例分析

(1)實例執行。

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

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

#include

int main(void)

{

printf(“helloworld!”);

return 0;

}

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

4 從XML轉換為其他語言

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

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

5 結語

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

參考文獻

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

[2] 王萬山.吉林大學碩士學術論文.從 Java語言到XML語言的轉換[D].吉林大學碩士學術論文.

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

node.childrenAccept(traveller, element);

return super.tarvel(node,data);

}

當旅行者訪問某一結點的時候,就要有接受者來響應相應的動作。接收者是根據整個程序在運行時來匹配相應的旅行者的,每個節點的接受方法類似。

下面給出在旅行者中ASTInitializer類型節點對應的接受方法:

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

return traveller.travel(this, data);

}

(3)創建轉換器。

至此,已經建立了C語言轉為XML文檔的基礎架構,下面還需要一個驅動程序來觸發整個程序的運行。下面是部分代碼:

public static void main(String[] args){

...

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

//生成traveller對象,調用travel方法訪問所有AST節點

ToXmlTraveller.traveller = new ToXmlTravellor();

//根節點接受旅行者

ast.jjtAccept(traveller,null);

...//輸出轉換完成的信息}

驅動程序會根據filename這個源文件名開始生成AST文件,然后根據在各個節點中的travel所定義的方法來執行相應的動作,由jjtAccept來響應動作,從而完成規定的功能。生成相應的XML文件。

3 實例分析

(1)實例執行。

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

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

#include

int main(void)

{

printf(“helloworld!”);

return 0;

}

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

4 從XML轉換為其他語言

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

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

5 結語

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

參考文獻

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

[2] 王萬山.吉林大學碩士學術論文.從 Java語言到XML語言的轉換[D].吉林大學碩士學術論文.

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

主站蜘蛛池模板: 玖玖精品视频在线观看| 99伊人精品| 久久精品国产亚洲麻豆| 亚洲IV视频免费在线光看| 青青草原国产精品啪啪视频| 久久大香伊蕉在人线观看热2 | 人妻出轨无码中文一区二区| 国产成人久久综合777777麻豆| 日本AⅤ精品一区二区三区日| 国产一级在线观看www色| 精品国产成人国产在线| 欧美精品在线免费| 成色7777精品在线| 波多野结衣久久高清免费| 欧洲熟妇精品视频| 亚洲无码熟妇人妻AV在线| 日本高清免费不卡视频| 韩日午夜在线资源一区二区| 亚洲福利视频网址| 免费播放毛片| 亚洲人成成无码网WWW| 精品91在线| 亚洲AV免费一区二区三区| 久久综合丝袜长腿丝袜| 都市激情亚洲综合久久| 欧美成人亚洲综合精品欧美激情 | 亚洲国产天堂久久综合226114| 99re热精品视频中文字幕不卡| 成人福利免费在线观看| 99久久精品免费观看国产| 99视频精品在线观看| 伊人激情久久综合中文字幕| 伊人国产无码高清视频| 色综合久久无码网| 天堂在线www网亚洲| 亚洲精品老司机| 中国一级毛片免费观看| 免费无码网站| 精品伊人久久久大香线蕉欧美| 国内精品视频| 国产精品亚欧美一区二区三区| 成人日韩视频| 91探花国产综合在线精品| 狠狠干综合| 国产成人亚洲毛片| 午夜国产不卡在线观看视频| 国内丰满少妇猛烈精品播| 日韩a级毛片| 国产精品成人AⅤ在线一二三四| 成年人国产网站| 亚洲国内精品自在自线官| 亚洲精品自拍区在线观看| 久久免费视频播放| 最新国产你懂的在线网址| 国产精品永久免费嫩草研究院| 中国一级特黄视频| 亚洲国产欧美自拍| 天天躁日日躁狠狠躁中文字幕| 亚洲无码久久久久| 在线高清亚洲精品二区| 午夜a视频| 国产激爽爽爽大片在线观看| 青青青伊人色综合久久| 亚洲欧美日韩成人在线| 在线a视频免费观看| 亚洲V日韩V无码一区二区| 国产精品毛片一区| 一本大道东京热无码av| 91福利免费| 日韩福利在线视频| 亚洲国产成人麻豆精品| 亚洲成人高清无码| 91欧洲国产日韩在线人成| 亚洲精品第五页| 片在线无码观看| 日韩高清在线观看不卡一区二区| 国产午夜在线观看视频| 精品1区2区3区| 色妺妺在线视频喷水| 国产精品无码制服丝袜| 国产精品美女在线| 九色视频线上播放|