亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種編譯器的可視化語法樹的生成方法和重構(gòu)方法

文檔序號:6521442閱讀:330來源:國知局
一種編譯器的可視化語法樹的生成方法和重構(gòu)方法
【專利摘要】本發(fā)明涉及一種編譯器的可視化語法樹的生成方法和重構(gòu)方法,其中,該生成方法包括:步驟(1),解析編譯器語義分析模塊接收到的語法樹,確定語法樹的節(jié)點信息,節(jié)點信息至少包括:節(jié)點類型名、節(jié)點位置、以及節(jié)點屬性值;步驟(2),翻譯節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息,并為語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識,得到節(jié)點名稱,其中,頭部標識用于為每個節(jié)點提供唯一標識;步驟(3),根據(jù)節(jié)點名稱、以及節(jié)點位置,應(yīng)用預(yù)定節(jié)點排列算法,對語法樹的多個節(jié)點進行組織,得到語法樹的語法樹層級結(jié)構(gòu),并在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上節(jié)點屬性信息;步驟(4),整理樹形層級結(jié)構(gòu),生成可視化語法樹;步驟(5),存儲可視化語法樹。
【專利說明】一種編譯器的可視化語法樹的生成方法和重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機領(lǐng)域,并且特別地,設(shè)計一種編譯器的可視化語法樹的生成方法和生成裝置。
【背景技術(shù)】
[0002]在當(dāng)前的計算機領(lǐng)域,應(yīng)用高級語言編譯器能夠?qū)崿F(xiàn)將程序語言轉(zhuǎn)化為機器語言的操作,但是,如果編譯器設(shè)計中存在錯誤,可能會造成原始程序轉(zhuǎn)化成的計算機語言與程序設(shè)計者的初衷不一致,而這種錯誤在編譯器發(fā)布后很難檢測和糾正,因此,對編譯器的測試顯得至關(guān)重要。
[0003]在現(xiàn)有技術(shù)中,編譯器的設(shè)計主要由詞法語法分析、和語義分析等模塊構(gòu)成,其中詞法語法分析部分多采用flex&bison工具來完成,已較為成熟,而語義分析部分是編譯器設(shè)計的核心,所以,對語義分析的測試也是編譯器測試的重點,但是,語義分析作為編譯器實現(xiàn)過程中的一個中間模塊,其實現(xiàn)過程、模塊輸入以及語法樹結(jié)構(gòu)往往具有一定的不透明性,這就為測試帶來了困難。
[0004]語義分析測試的重點在于測試對語法樹節(jié)點的分析過程,語義分析過程大致為:收集詞法語法分析后產(chǎn)生的語法樹節(jié)點信息,分析節(jié)點信息中屬性信息的各項數(shù)據(jù),檢查語義的符合程度,如果有錯誤產(chǎn)生,報告相應(yīng)的錯誤碼和錯誤信息。語義分析模塊的輸入為語法樹,而測試時,測試人員所編寫的待測試源代碼,是通過flex&bison工具來生成語法樹的,測試人員實際上對所生成語法樹的結(jié)構(gòu)并不了解,也就無法真正了解語義分析模塊的輸入。
[0005]目前語義分析的測試方法主要有兩種:
[0006](方法一)采用類似于黑盒測試的方法,根據(jù)語言參考手冊,錯誤碼等進行測試,以及一定的隨機測試。
[0007](方法二)在第一種方法的基礎(chǔ)上,采用類似白盒測試的方式在代碼中對某些節(jié)點信息進行監(jiān)視來輔助測試。
[0008]以同步數(shù)據(jù)流編程語言LUSTRE語言為例,LUSTRE語言總共有51種待分析的節(jié)點,一段簡單的LUSTRE代碼,節(jié)點數(shù)量都有數(shù)百個之多,如果采用類似黑盒測試的方式,按照錯誤碼進行測試或隨機編寫代碼測試,很難保證測到分析過程每個節(jié)點的分析情況,容易遺漏某些分支,而由于無法透明的了解分析過程,測試人員對這些遺漏的內(nèi)容往往一無所知。另外,基于錯誤碼的測試過程中,某些錯誤碼可能對應(yīng)多種類型的語義錯誤,測試人員有時可能只測試到了其中一兩個,就認為某個錯誤碼的測試通過了,而其中所覆蓋的語義錯誤類型,可能并不全面,這種原因造成的測試不全面,測試人員同樣無法了解和統(tǒng)計,這些都容易使測試產(chǎn)生風(fēng)險,給產(chǎn)品質(zhì)量帶來隱患。
[0009]另外一種監(jiān)視節(jié)點信息的測試方式中,采用對源代碼進行單步調(diào)試的方式,通過使用指針一級一級的追蹤,來得到某個節(jié)點的屬性信息。這種方法雖然可以直接了解到語法樹的屬性信息,但每次只能觀測一個節(jié)點,而語義分析過程中節(jié)點眾多,如果了解更多節(jié)點需要設(shè)置多個監(jiān)視器,人為地在監(jiān)視器中構(gòu)造復(fù)雜的多級指針來觀測節(jié)點信息,費時費力,并且,所監(jiān)視到的屬性值為原始數(shù)據(jù)值,需要不斷查閱設(shè)計文檔和數(shù)據(jù)結(jié)構(gòu)資料或者語言參考手冊才能將其翻譯成可供測試人員了解的屬性含義,并且這種方式只能了解單個屬性值,無法了解節(jié)點與節(jié)點之間的相對關(guān)系,無法明確得知節(jié)點在整個語法樹中所處的位置,從而無法確定整體的樹形結(jié)構(gòu),所以,使節(jié)點的信息透明化,仍然存在很大的局限性,因此采用這種方式,雖然能真實觀測到節(jié)點的屬性值信息,但由于存在多種局限,實際上很難實現(xiàn)。
[0010]鑒于此提出本發(fā)明。

【發(fā)明內(nèi)容】

[0011]本發(fā)明的目的為克服現(xiàn)有技術(shù)的不足,提供一種編譯器的可視化語法樹的生成方法和重構(gòu)方法。
[0012]為了實現(xiàn)該目的,本發(fā)明采用如下技術(shù)方案:
[0013]根據(jù)本發(fā)明的一個方面,提供了一種編譯器的可視化語法樹的生成方法,該生成方法包括:
[0014]步驟(1),解析編譯器語義分析模塊接收到的語法樹,確定語法樹的節(jié)點信息,節(jié)點信息至少包括:節(jié)點類型名、節(jié)點位置、以及節(jié)點屬性值;
[0015]步驟(2),翻譯節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息,并為語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識,得到節(jié)點名稱,其中,頭部標識用于為每個節(jié)點提供唯一標識;
[0016]步驟(3),根據(jù)節(jié)點名稱、以及節(jié)點位置,應(yīng)用預(yù)定節(jié)點排列算法,對語法樹的多個節(jié)點進行組織,得到語法樹的語法樹層級結(jié)構(gòu),并在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上節(jié)點屬性信息;
[0017]步驟(4),整理樹形層級結(jié)構(gòu),生成可視化語法樹;
[0018]步驟(5),存儲可視化語法樹。
[0019]其中,節(jié)點位置的確定方式包括:
[0020]通過遍歷算法,收集語法樹中每個節(jié)點的父節(jié)點、子節(jié)點、或者兄弟節(jié)點的信息,并根據(jù)信息,推算出該節(jié)點在語法樹中的相對位置。
[0021]并且,翻譯節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息包括:
[0022]根據(jù)語言參考手冊、或者設(shè)計文檔,翻譯所關(guān)注的節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息。
[0023]此外,節(jié)點屬性信息的確定方式包括:
[0024]根據(jù)預(yù)先存儲的節(jié)點屬性值與節(jié)點屬性含義的對應(yīng)關(guān)系,確定節(jié)點的節(jié)點屬性信息,其中,所述節(jié)點屬性信息包括節(jié)點屬性含義。
[0025]并且,在為語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識之前,將節(jié)點類型名中的公共部分用指定字符代替。
[0026]優(yōu)選地,預(yù)定節(jié)點排列算法包括:
[0027]依據(jù)節(jié)點的相對位置關(guān)系,為每個節(jié)點設(shè)計存儲路徑,在所述存儲路徑下為每個節(jié)點創(chuàng)建文件夾,文件夾名稱以節(jié)點名稱命名,應(yīng)用WINDOS批處理的TREE命令,生成樹型層級結(jié)構(gòu);并且,[0028]在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上節(jié)點屬性信息之前,將語法樹層級結(jié)構(gòu)中節(jié)點名稱中的頭部標識去除。
[0029]并且,整理樹形層級結(jié)構(gòu)包括:
[0030]將樹形層級結(jié)構(gòu)、以及樹形層級結(jié)構(gòu)所關(guān)聯(lián)的節(jié)點屬性信息拷貝至EXCEL文檔中,并在指定位置添加標題,并根據(jù)預(yù)定規(guī)則,設(shè)置EXCEL文檔中內(nèi)容的顏色、和/或格式。
[0031]根據(jù)本發(fā)明的另一方面,還提供了一種基于上述的編譯器的可視化語法樹的生成方法生成的可視化語法樹的重構(gòu)方法,該方法包括:
[0032]步驟a.根據(jù)編譯器語義分析模塊接收到的語法樹,生成可視化語法樹;
[0033]步驟b.讀取可視化語法樹的節(jié)點信息,并根據(jù)接收到的修改指令對語法樹的節(jié)點信息進行修改,得到修改后的語法樹的節(jié)點信息,其中,節(jié)點信息至少包括:節(jié)點名稱、節(jié)點位置、以及節(jié)點屬性值;
[0034]步驟c.判斷修改后的語法樹的節(jié)點信息與修改前的可視化語法樹的節(jié)點信息中是否存在區(qū)別信息,在判斷結(jié)果為是的情況下,對區(qū)別信息進行標記并存儲;
[0035]步驟d.根據(jù)修改后的語法樹的節(jié)點信息,重構(gòu)語法樹。
[0036]其中,對節(jié)點信息進行修改的方式包括以下至少之一:
[0037]修改語法樹中節(jié)點的節(jié)點屬性值、修改語法樹中節(jié)點的節(jié)點位置、增加節(jié)點、刪除節(jié)點。
[0038]并且,修改語法樹中節(jié)點的節(jié)點位置包括以下至少之一:
[0039]修改語法樹中節(jié)點所在層級、修改語法樹中節(jié)點所在層級中的相對位置。
[0040]采用本發(fā)明所述的技術(shù)方案后,帶來以下有益效果:
[0041]通過解析編譯器語義分析模塊接收到的語法樹,獲取該語法樹的節(jié)點信息,并根據(jù)節(jié)點信息,以預(yù)定方式,對該語法樹中的節(jié)點進行組織,得到該語法樹的語法樹層級結(jié)構(gòu),并整理該語法樹層級結(jié)構(gòu),生成可視化語法樹,使用戶可以直觀了解到編譯器語義分析模塊的輸入,從而,方便設(shè)計測試用例,提高語義分析測試的覆蓋率,進而提高測試質(zhì)量。
[0042]下面結(jié)合附圖對本發(fā)明的【具體實施方式】作進一步詳細的描述。
【專利附圖】

【附圖說明】
[0043]圖1:根據(jù)本發(fā)明實施例的編譯器的可視化語法樹的生成方法流程圖;
[0044]圖2:根據(jù)本發(fā)明實施例的編譯器的可視化語法樹的重構(gòu)方法流程圖;
[0045]圖3:結(jié)合編譯器的可視化語法樹的生成方法完成語義分析測試的整體實現(xiàn)過程示意圖;
[0046]圖4:結(jié)合本發(fā)明實施例的編譯器的可視化語法樹的生成方法以及編譯器的可視化語法樹的重構(gòu)方法完成語義分析測試的整體流程示意圖;
[0047]圖5:根據(jù)本發(fā)明一個實施例所列舉的一段LUSTRE語言代碼示意圖;
[0048]圖6:根據(jù)本發(fā)明一個實施例的編譯器的可視化語法樹的生成方法流程圖;
[0049]圖7:根據(jù)本發(fā)明一個實施例的acg_tree_inf0.txt文件內(nèi)容示意圖;
[0050]圖8:根據(jù)本發(fā)明一個實施例的可視化語法樹的重構(gòu)方法流程圖;
[0051]圖9:根據(jù)本發(fā)明一個實施例的modify_tree_attr.txt文件內(nèi)容示意圖;
[0052]圖10:根據(jù)本發(fā)明一個實施例的modify_inf0.txt文件內(nèi)容示意圖?!揪唧w實施方式】
[0053]根據(jù)本發(fā)明的實施例,提供了一種編譯器的可視化語法樹的生成方法。
[0054]如圖1所示,該生成方法包括:
[0055]步驟S101,解析編譯器語義分析模塊接收到的語法樹,確定語法樹的節(jié)點信息,節(jié)點信息至少包括:節(jié)點類型名、節(jié)點位置、以及節(jié)點屬性值;
[0056]步驟S103,翻譯節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息,并為語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識,得到節(jié)點名稱,其中,頭部標識用于為每個節(jié)點提供唯一標識;
[0057]通過翻譯節(jié)點屬性值,可以將語法樹屬性值翻譯成測試人員容易理解的屬性含義,而不是僅僅看到一個個數(shù)值。
[0058]步驟S105,根據(jù)節(jié)點名稱、以及節(jié)點位置,應(yīng)用預(yù)定節(jié)點排列算法,對語法樹的多個節(jié)點進行組織,得到語法樹的語法樹層級結(jié)構(gòu),并在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上節(jié)點屬性信息;
[0059]步驟S107,整理樹形層級結(jié)構(gòu),生成可視化語法樹;
[0060]步驟S109,存儲可視化語法樹。
[0061]其中,節(jié)點位置的確定方式包括:
[0062]通過遍歷算法,收集語法樹中每個節(jié)點的父節(jié)點、子節(jié)點、或者兄弟節(jié)點的信息,并根據(jù)信息,推算出該節(jié)點在語法樹中的相對位置。
[0063]此外,在一個實施例中,還可以通過遍歷算法,收集語法樹中每個節(jié)點的行號信息,并顯示在該語法樹中,從而,可以方便用戶快速準確確定每個節(jié)點的位置。
[0064]此外,翻譯節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息包括:
[0065]根據(jù)語言參考手冊、或者設(shè)計文檔,翻譯所關(guān)注的節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息。
[0066]并且,節(jié)點屬性信息的確定方式包括:
[0067]根據(jù)預(yù)先存儲的節(jié)點屬性值與節(jié)點屬性含義的對應(yīng)關(guān)系,確定節(jié)點的節(jié)點屬性信息,其中,所述節(jié)點屬性信息包括節(jié)點屬性含義。
[0068]并且,在確定節(jié)點屬性信息的過程中,還可以進一步確定與每一個節(jié)點的節(jié)點屬性信息相對應(yīng)的屬性解釋,同時,也將該屬性解釋關(guān)聯(lián)至語法樹層級結(jié)構(gòu)中,方便用戶閱讀和理解。
[0069]此外,在為語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識之前,將節(jié)點類型名中的公共部分用指定字符代替。
[0070]例如,在一個實施例中,語法樹中所有節(jié)點的類型名中均包含“TREEN0DE_TYPE”的字符串,則在為每個節(jié)點的節(jié)點類型名添加頭部標識前,先將“TREEN0DE_TYPE”用字符代替,從而,使最終生成的語法樹界面更加清晰、簡潔,并且,由于對語法樹中字符長度進行了一定程度的簡化,使生成語法樹所用的時間等資源也在一定程度上得以節(jié)約。
[0071 ] 優(yōu)選地,預(yù)定節(jié)點排列算法包括:
[0072]依據(jù)節(jié)點的相對位置關(guān)系,為每個節(jié)點設(shè)計存儲路徑,在所述存儲路徑下為每個節(jié)點創(chuàng)建文件夾,文件夾名稱以節(jié)點名稱命名,應(yīng)用WINDOS批處理的TREE命令,生成樹型層級結(jié)構(gòu);并且,[0073]在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上節(jié)點屬性信息之前,將語法樹層級結(jié)構(gòu)中節(jié)點名稱中的頭部標識去除。
[0074]將語法樹層級結(jié)構(gòu)中節(jié)點名稱中的頭部標識去除,可以使最終生成的語法樹界面更加直觀、簡潔,方便用戶閱讀。
[0075]此外,整理樹形層級結(jié)構(gòu)包括:
[0076]將樹形層級結(jié)構(gòu)、以及樹形層級結(jié)構(gòu)所關(guān)聯(lián)的節(jié)點屬性信息拷貝至EXCEL文檔中,并在指定位置添加標題,并根據(jù)預(yù)定規(guī)則,設(shè)置EXCEL文檔中內(nèi)容的顏色、和/或格式。
[0077]根據(jù)本發(fā)明的實施例,還提供了一種基于上述編譯器的可視化語法樹的生成方法生成的可視化語法樹的重構(gòu)方法。如圖2所示,該重構(gòu)方法包括:
[0078]步驟S201,根據(jù)編譯器語義分析模塊接收到的語法樹,生成可視化語法樹;
[0079]步驟S203,讀取可視化語法樹的節(jié)點信息,并根據(jù)接收到的修改指令對語法樹的節(jié)點信息進行修改,得到修改后的語法樹的節(jié)點信息,其中,節(jié)點信息至少包括:節(jié)點名稱、節(jié)點位置、以及節(jié)點屬性值;
[0080]步驟S205,判斷修改后的語法樹的節(jié)點信息與修改前的可視化語法樹的節(jié)點信息中是否存在區(qū)別信息,在判斷結(jié)果為是的情況下,對區(qū)別信息進行標記并存儲;
[0081]步驟S207,根據(jù)修改后的語法樹的節(jié)點信息,重構(gòu)語法樹。
[0082]其中,對節(jié)點信息進行修改的方式包括以下至少之一:
[0083]修改語法樹中節(jié)點的節(jié)點屬性值、修改語法樹中節(jié)點的節(jié)點位置、增加節(jié)點、刪除節(jié)點。
[0084]并且,修改語法樹中節(jié)點的節(jié)點位置包括以下至少之一:
[0085]修改語法樹中節(jié)點所在層級、修改語法樹中節(jié)點所在層級中的相對位置。
[0086]例如以下具體實施例,根據(jù)本發(fā)明的技術(shù)方案提供了一種編譯器的可視化語法樹的生成方法,主要使用C語言、VBS腳本語言,以及批處理腳本完成,在windows XP操作系統(tǒng)環(huán)境下,使用Visual Studio2010編寫C語言代碼,并生成可執(zhí)行文件,可將待測試源代碼對應(yīng)的語法樹,在短時間內(nèi)自動以圖形的方式顯示出來,自動生成語法樹結(jié)構(gòu)圖、行號信息、屬性值、屬性含義注釋、以及節(jié)點之間的層級關(guān)系等信息,從而讓測試人員能清晰的看到語義分析模塊的輸入,幫助了解語義分析的過程和細節(jié),為測試設(shè)計提供參考,提高測試的質(zhì)量和測試深度,并且支持對語法樹結(jié)構(gòu)進行修改,可幫助構(gòu)造各類正常、或者異常功能測試,圖3為結(jié)合該生成方法完成語義分析測試的整體實現(xiàn)過程示意圖,結(jié)合編譯器的可視化語法樹的生成方法和重構(gòu)方法完成在語義分析測試的整體流程圖如圖4所示。
[0087]本方法的可以通過編寫計算機程序的方式實現(xiàn),具體實現(xiàn)過程如下兩個部分:
[0088](部分一)本部分程序嵌入到編譯器開發(fā)工程中,和語義分析部分的輸入接口相結(jié)合,用于解析flex&bison生成的語法樹結(jié)構(gòu),并將這些已解析的信息按照一定的格式存儲于臨時文件中;
[0089](部分二)本部分程序用于將已讀出的語法樹信息進行組織和整理,形成可視化樹形結(jié)構(gòu),其中,本部分程序被封裝成可執(zhí)行文件,使用過程中,調(diào)試編譯器工程,單步運行到語義分析模塊入口,運行可視化語法樹生成工具,便可通過生成的文檔,直觀的看到語法樹信息,VBS腳本和批處理腳本用于中間過程處理、格式整理、文檔生成等,此外,在產(chǎn)生可視化語法樹的基礎(chǔ)上,增加識別節(jié)點修改內(nèi)容的邏輯,構(gòu)成“生成修改后語法樹”的可執(zhí)行文件,可用于重構(gòu)修改后的語法樹。
[0090]第一部分程序的實現(xiàn)細節(jié),可根據(jù)不同編譯器語法樹節(jié)點信息的不同,進行定制,適當(dāng)修改節(jié)點類型名和屬性讀取部分的內(nèi)容,程序主體框架無需修改。下面將以同步數(shù)據(jù)流編程語言一LUSTRE語言為例,對于如圖5所示的一段LUSTRE代碼,該方法的實現(xiàn)過程進行詳細描述:
[0091]一.生成可視化語法樹:
[0092]本步驟的目的在于將待測試源代碼對應(yīng)的語法樹,以可視化的形式展現(xiàn)出來,并顯示語法樹節(jié)點信息和層級關(guān)系。
[0093]生成可視化語法樹的實現(xiàn)過程被封裝成一個可執(zhí)行文件,操作的輸入文件是待測試的LUSTRE源代碼,可執(zhí)行文件在執(zhí)行過程中總共包含了 5個處 理過程,如圖6所示:
[0094]步驟S601,收集節(jié)點信息;
[0095]在本步驟中,完成收集節(jié)點信息的工作。將第一部分程序嵌入到LUSTRE語言編譯器中,讀取由f Iex&bison生成的語法樹,通過對樹結(jié)構(gòu)的遍歷算法,得到每個節(jié)點的詳細信息,并通過分析每個節(jié)點的父節(jié)點,子節(jié)點,兄弟節(jié)點的信息推算出節(jié)點在語法樹中的相對位置,將收集到的語法樹信息整理,生成兩個臨時文件:acg_tree_inf0.txt和lustre_file_path.txt,其中,
[0096]acg_tree_inf0.txt用于記錄所有節(jié)點信息,該節(jié)點信息包括但不限于節(jié)點類型名稱、相對位置、屬性值,其中,不同的節(jié)點信息,可以用不同的方式表示,例如:在一個實施例中,如圖7所示,用符號作為分隔符,符號之前的字符串代表節(jié)點類型,符號后面的用數(shù)字串表示節(jié)點在語法樹中的相對位置(比如:用I表示第I個節(jié)點,11132代表第I個節(jié)點的第I個子節(jié)點的第I個子節(jié)點的第3個子節(jié)點的第2個子節(jié)點,以此類推),數(shù)字串后面用指定符號(比如:“###”符號)表示該節(jié)點的屬性,在“ ### ”符號后面為屬性值,并且,根據(jù)預(yù)定規(guī)則,對于不同的類型的屬性,存放在不同的位置,例如:數(shù)字串后面有四個“ ### ”符號,分別代表了該節(jié)點的四個屬性,其中,前三處為通用屬性,最后一處為節(jié)點屬性,最后一個“###”后可能有~~~~...”結(jié)構(gòu),代表此節(jié)點屬性的分屬性,
~~~~...”后面可能還對應(yīng)“~~~~...”結(jié)構(gòu),代表分屬性的分屬性,此外,如果屬性值為空,則記錄為“〈empty〉” ;
[0097]例如,在一個實施例中,acg_tree_inf0.txt文件中記錄的一部分內(nèi)容為:
[0098]TREEN0DE_TYPE_VAR_IDilll321###4###0###<empty>###*>0utput2*Xempt
'氺0氺^'氺O
[0099]貝U,該節(jié)點的節(jié)點類型名為“TREENODE_TYPE_VAR_ID”,節(jié)點在語法樹中相對位置為第I個節(jié)點的第I個子節(jié)點的第I個子節(jié)點的第3個子節(jié)點的第2個子節(jié)點的第I個子節(jié)點,該節(jié)點的第一個屬性值 為“4”,第二個屬性值為“0”,第三個屬性值為空,第四個屬性值的第一個分屬性為“0utput2”,第四個屬性值的第二個分屬性為空,第三個和第四個分屬性值為“O”。
[0100]lustre_file_path.txt用于記錄待測試的LUSTRE源代碼在本地計算機中的存放路徑。
[0101]步驟S603,翻譯節(jié)點信息;
[0102]在本步驟中,對步驟S501中獲得的語法樹節(jié)點屬性信息進行翻譯。依據(jù)語言參考手冊,將每個節(jié)點的屬性逐一解釋,便于測試人員能直觀了解屬性含義,而不是看到一個個數(shù)值,另外,整理語法樹節(jié)點類型的名稱,使節(jié)點類型名盡可能簡潔,并為節(jié)點類型名加頭部標識,保證其唯一性,通過簡化的節(jié)點類型名和唯一的頭部標識構(gòu)成節(jié)點名稱,為生成樹形結(jié)構(gòu)做準備。此過程中仍然生成兩個臨時文件:create_attr.txt和create_path.txt,其中,
[0103]create_attr.txt用于記錄已經(jīng)翻譯的節(jié)點信息。記錄內(nèi)容分別為:該節(jié)點對應(yīng)的LUSTRE源代碼的行號、節(jié)點的屬性值、測試過程中所關(guān)注的屬性以及對屬性值的解釋;
[0104]create_path.txt用于記錄所創(chuàng)建的節(jié)點路徑的名稱,依據(jù)節(jié)點位置信息,為生成層級結(jié)構(gòu)做準備。
[0105]步驟S605,整理樹形層級結(jié)構(gòu)
[0106]在本步驟中,依據(jù)上一步驟中收集到的節(jié)點名稱和位置關(guān)系的信息,依據(jù)節(jié)點的相對位置關(guān)系,為每個節(jié)點設(shè)計存儲路徑,在所述存儲路徑下為每個節(jié)點創(chuàng)建文件夾,文件夾名稱以節(jié)點名稱命名,應(yīng)用WINDOS批處理的TREE命令,生成樹型層級關(guān)系,完成樹型結(jié)構(gòu)的整理,此過程產(chǎn)生三個臨時文件:tree_tmp.txt、tree, txt、和all_tree_inf0.txt,其中,
[0107]tree_tmp.txt用于記錄臨時樹形節(jié)點的層級關(guān)系,該樹形層級結(jié)關(guān)系中,每個文件夾名稱以節(jié)點名稱命名,且,每個節(jié)點名稱均帶有用于表示其唯一性的頭部標識;
[0108]tree, txt用于整理tree_tmp.txt文件,將每個節(jié)點名稱中的頭部標識去除,形成并存儲最終的樹形層級關(guān)系,從而使最終的樹形層級關(guān)系更加簡潔、直觀;
[0109]all_tree_inf0.txt用于在語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上每個節(jié)點的所有屬性信息。
[0110]步驟S607,整理樹形格式
[0111]在本步驟中,整理樹形結(jié)構(gòu),使用腳本將臨時文件all_tree_inf0.txt中包含的所有節(jié)點層級關(guān)系信息和屬性信息拷貝到新建的EXCEL文檔中,在第一行中添加相應(yīng)的標題,并整理EXCEL中數(shù)據(jù)的顏色和格式,使整個語法樹更易觀察,此過程生成文件:可視化語法樹.xlsx。
[0112]步驟S609,生成可視化語法樹
[0113]待可視化語法樹文件格式整理完成后,自動保存“可視化語法樹.xlsx”文件,刪除臨時文件。
[0114]至此,測試源代碼對應(yīng)的可視化語法樹生成完成,針對圖5經(jīng)過本實施例所描述的技術(shù)方案生成的可視化語法樹文檔表I所示。
[0115]表I
[0116]
【權(quán)利要求】
1.一種編譯器的可視化語法樹的生成方法,其特征在于,包括: 步驟(1),解析編譯器語義分析模塊接收到的語法樹,確定所述語法樹的節(jié)點信息,所述節(jié)點信息至少包括:節(jié)點類型名、節(jié)點位置、以及節(jié)點屬性值; 步驟(2),翻譯所述節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息,并為所述語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識,得到節(jié)點名稱,其中,所述頭部標識用于為每個節(jié)點提供唯一標識; 步驟(3),根據(jù)所述節(jié)點名稱、以及節(jié)點位置,應(yīng)用預(yù)定節(jié)點排列算法,對所述語法樹的多個節(jié)點進行組織,得到所述語法樹的語法樹層級結(jié)構(gòu),并在所述語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上所述節(jié)點屬性信息; 步驟(4),整理所述樹形層級結(jié)構(gòu),生成可視化語法樹; 步驟(5 ),存儲所述可視化語法樹。
2.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述步驟(1)中,所述節(jié)點位置的確定方式包括: 通過遍歷算法,收集所述語法樹中每個節(jié)點的父節(jié)點、子節(jié)點、或者兄弟節(jié)點的信息,并根據(jù)所述信息,推算出該節(jié)點在所述語法樹中的相對位置。
3.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述步驟(2)中,翻譯所述節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信息包括: 根據(jù)語言參考手冊、或者設(shè)計文檔,翻譯所關(guān)注的節(jié)點屬性值,得到相應(yīng)的節(jié)點屬性信肩、O
4.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述節(jié)點屬性信息的確定方式包括: 根據(jù)預(yù)先存儲的節(jié)點屬性值與節(jié)點屬性含義的對應(yīng)關(guān)系,確定節(jié)點的節(jié)點屬性信息,其中,所述節(jié)點屬性信息包括節(jié)點屬性含義。
5.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述步驟(2)中,在為所述語法樹中每個節(jié)點的節(jié)點類型名添加頭部標識之前,將所述節(jié)點類型名中的公共部分用指定字符代替。
6.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述步驟(3)中,所述預(yù)定節(jié)點排列算法包括: 依據(jù)節(jié)點的相對位置關(guān)系,為每個節(jié)點設(shè)計存儲路徑,在所述存儲路徑下為每個節(jié)點創(chuàng)建文件夾,文件夾名稱以節(jié)點名稱命名,應(yīng)用WINDOS批處理的TREE命令,生成樹型層級結(jié)構(gòu);并且, 在所述語法樹層級結(jié)構(gòu)中,關(guān)聯(lián)上所述節(jié)點屬性信息之前,將所述語法樹層級結(jié)構(gòu)中節(jié)點名稱中的頭部標識去除。
7.根據(jù)權(quán)利要求1所述的生成方法,其特征在于,所述步驟(4)中,整理所述樹形層級結(jié)構(gòu)包括: 將所述樹形層級結(jié)構(gòu)、以及所述樹形層級結(jié)構(gòu)所關(guān)聯(lián)的節(jié)點屬性信息拷貝至EXCEL文檔中,并在指定位置添加標題,并根據(jù)預(yù)定規(guī)則,設(shè)置所述EXCEL文檔中內(nèi)容的顏色、和/或格式。
8.一種基于權(quán)利要求1至7中任一項所述的編譯器的可視化語法樹的生成方法生成的可視化語法樹的重構(gòu)方法,其特征在于,包括:步驟a.根據(jù)編譯器語義分析模塊接收到的語法樹,生成可視化語法樹; 步驟b.讀取所述可視化語法樹的節(jié)點信息,并根據(jù)接收到的修改指令對所述語法樹的節(jié)點信息進行修改,得到修改后的語法樹的節(jié)點信息,其中,所述節(jié)點信息至少包括:節(jié)點名稱、節(jié)點位置、以及節(jié)點屬性值; 步驟c.判斷所述修改后的語法樹的節(jié)點信息與修改前的所述可視化語法樹的節(jié)點信息中是否存在區(qū)別信息,在所述判斷結(jié)果為是的情況下,對所述區(qū)別信息進行標記并存儲; 步驟d.根據(jù)所述修改后的語法樹的節(jié)點信息,重構(gòu)語法樹。
9.根據(jù)權(quán)利要求8所述的重構(gòu)方法,其特征在于,所述步驟b中對節(jié)點信息進行修改的方式包括以下至少之一: 修改所述語法樹中節(jié)點的節(jié)點屬性值、修改所述語法樹中節(jié)點的節(jié)點位置、增加節(jié)點、刪除節(jié)點。
10.根據(jù)權(quán)利要求9所述的重構(gòu)方法,其特征在于,所述修改所述語法樹中節(jié)點的節(jié)點位置包括以下至少之一: 修改所述語法樹中節(jié)點所在層級 、修改所述語法樹中節(jié)點所在層級中的相對位置。
【文檔編號】G06F9/45GK103645986SQ201310629025
【公開日】2014年3月19日 申請日期:2013年11月29日 優(yōu)先權(quán)日:2013年11月29日
【發(fā)明者】劉陳虎, 周濤, 黃太新, 劉紅剛, 冀建偉 申請人:北京廣利核系統(tǒng)工程有限公司, 中國廣核集團有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1