本發(fā)明涉及互聯(lián)網(wǎng)領域,特別是涉及一種代碼存儲方法及代碼存儲裝置。
背景技術:
隨著科技的發(fā)展,人們對各種互聯(lián)網(wǎng)應用的要求越來越高,因此開發(fā)工程師需要對文件代碼經(jīng)常進行解析調(diào)整。開發(fā)工程師對現(xiàn)有的文件代碼進行解析調(diào)整時,會先將文件代碼進行存儲,然后對文件代碼進行解析。
在代碼解析過程中,當對代碼中的動態(tài)函數(shù)進行調(diào)用時,往往需要調(diào)用該動態(tài)函數(shù)中的調(diào)用函數(shù)。由于現(xiàn)有的代碼存儲方法并不會對動態(tài)函數(shù)的調(diào)用函數(shù)進行任何調(diào)用信息說明。因此開發(fā)工程師對代碼進行解析時,可能會出現(xiàn)實際調(diào)用關系缺失的情況。
具體如圖1所示,圖1為現(xiàn)有代碼中的動態(tài)函數(shù)對應的調(diào)用函數(shù)的語法特性圖。其中動態(tài)函數(shù)中可包括調(diào)用函數(shù)a和調(diào)用函數(shù)b,而調(diào)用函數(shù)a包括子函數(shù)a1、子函數(shù)a2以及子函數(shù)a3。當動態(tài)函數(shù)使用調(diào)用函數(shù)a的接口時,可能實際是調(diào)用該調(diào)用函數(shù)a的某個子函數(shù)的接口來實現(xiàn)的。
而工程師對該代碼進行解析時,由于存儲代碼中不會對調(diào)用函數(shù)進行任何調(diào)用信息說明,工程師只知道該動態(tài)函數(shù)使用了該調(diào)用函數(shù)的接口,并不清楚使用了該調(diào)用函數(shù)的哪個子函數(shù)的接口,如該調(diào)用函數(shù)包括多個子函數(shù),如工程師僅根據(jù)調(diào)用函數(shù)的當前子函數(shù)的功能對該調(diào)用函數(shù)進行變更,可能會導致該調(diào)用函數(shù)的其他子函數(shù)的調(diào)用關系缺失,從而造成函數(shù)調(diào)用關系鏈的斷裂。
如工程師使用調(diào)用函數(shù)a的子函數(shù)a3的接口時,對調(diào)用函數(shù)進行變更,使用調(diào)用函數(shù)c代替了調(diào)用函數(shù)a,由于工程師此時并不知道調(diào)用函數(shù)a還具有子函數(shù)a1和子函數(shù)a2的功能,因此在使用調(diào)用函數(shù)c代替了調(diào)用函數(shù)a的過程中,可能會導致子函數(shù)a1和子函數(shù)a2的調(diào)用關系缺失。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種可以提高代碼解析效率、避免函數(shù)調(diào)用關系鏈斷裂的代碼存儲方法及代碼存儲裝置;以解決現(xiàn)有的代碼存儲方法及代碼存儲裝置中由于調(diào)用函數(shù)的其他子函數(shù)的調(diào)用關系缺失,造成函數(shù)調(diào)用關系鏈斷裂,進而使得代碼解析效率較低的技術問題。
本發(fā)明實施例提供一種代碼存儲方法,其包括:
獲取文件代碼,并對所述文件代碼進行語法解析,以獲取所述文件代碼的抽象語法樹;
獲取所述抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;其中所述動態(tài)函數(shù)信息包括包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息;所述調(diào)用函數(shù)信息包括調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息;
使用第一預設規(guī)則將所述動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將所述調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;
將所述動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;以及
對所述文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
本發(fā)明還提供一種代碼存儲裝置,其包括:
代碼解析模塊,用于獲取文件代碼,并對所述文件代碼進行語法解析,以獲取所述文件代碼的抽象語法樹;
函數(shù)信息獲取模塊,用于獲取所述抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;其中所述動態(tài)函數(shù)信息包括包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息;所述調(diào)用函數(shù)信息包括調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息;
標識碼轉(zhuǎn)化模塊,用于使用第一預設規(guī)則將所述動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將所述調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;
封裝模塊,用于將所述動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;以及
存儲模塊,用于對所述文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
相較于現(xiàn)有技術,本發(fā)明的代碼存儲方法及代碼存儲裝置通過將文件代碼與對應的抽象語法樹的節(jié)點標識信息同時進行存儲操作,避免了文件代碼解析調(diào)整中,函數(shù)調(diào)用關系鏈斷裂的現(xiàn)象,從而提高了代碼解析效率;解決了現(xiàn)有的代碼存儲方法及代碼存儲裝置中由于調(diào)用函數(shù)的其他子函數(shù)的調(diào)用關系缺失,造成函數(shù)調(diào)用關系鏈斷裂,進而使得代碼解析效率較低的技術問題。
附圖說明
圖1為本發(fā)明的代碼存儲方法的第一優(yōu)選實施例的流程圖;
圖2為本發(fā)明的代碼存儲方法的第二優(yōu)選實施例的流程圖;
圖3為本發(fā)明的代碼存儲方法的第二優(yōu)選實施例的步驟s201的流程圖;
圖4為本發(fā)明的代碼存儲裝置的第一優(yōu)選實施例的結(jié)構示意圖;
圖5為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的結(jié)構示意圖;
圖6為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的代碼解析模塊的結(jié)構示意圖;
圖7為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的標識碼轉(zhuǎn)化模塊的結(jié)構示意圖;
圖8為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的標識碼轉(zhuǎn)化模塊的調(diào)用函數(shù)標識碼轉(zhuǎn)化單元的結(jié)構示意圖;
圖9為本發(fā)明的代碼存儲方法及代碼存儲裝置的具體實施例的流程圖;
圖10為本發(fā)明的代碼存儲裝置所在的電子設備的工作環(huán)境結(jié)構示意圖。
具體實施方式
請參照圖式,其中相同的組件符號代表相同的組件,本發(fā)明的原理是以實施在一適當?shù)倪\算環(huán)境中來舉例說明。以下的說明是基于所例示的本發(fā)明具體實施例,其不應被視為限制本發(fā)明未在此詳述的其它具體實施例。
在以下的說明中,本發(fā)明的具體實施例將參考由一部或多部計算機所執(zhí)行之作業(yè)的步驟及符號來說明,除非另有述明。因此,其將可了解到這些步驟及操作,其中有數(shù)次提到為由計算機執(zhí)行,包括了由代表了以一結(jié)構化型式中的數(shù)據(jù)之電子信號的計算機處理單元所操縱。此操縱轉(zhuǎn)換該數(shù)據(jù)或?qū)⑵渚S持在該計算機之內(nèi)存系統(tǒng)中的位置處,其可重新配置或另外以本領域技術人員所熟知的方式來改變該計算機之運作。該數(shù)據(jù)所維持的數(shù)據(jù)結(jié)構為該內(nèi)存之實體位置,其具有由該數(shù)據(jù)格式所定義的特定特性。但是,本發(fā)明原理以上述文字來說明,其并不代表為一種限制,本領域技術人員將可了解到以下所述的多種步驟及操作亦可實施在硬件當中。
本發(fā)明的代碼存儲方法及代碼存儲裝置可設置在各種進行文件代碼預處理操作的電子設備中,用于對文件代碼進行轉(zhuǎn)化、存儲等預處理操作。該電子設備包括但不限于可穿戴設備、頭戴設備、醫(yī)療健康平臺、個人計算機、服務器計算機、手持式或膝上型設備、移動設備(比如移動電話、個人數(shù)字助理(pda)、媒體播放器等等)、多處理器系統(tǒng)、消費型電子設備、小型計算機、大型計算機、包括上述任意系統(tǒng)或設備的分布式計算環(huán)境,等等。該電子設備優(yōu)選為對文件代碼進行轉(zhuǎn)化及存儲操作的代碼處理終端。本發(fā)明的代碼存儲方法及裝置通過將文件代碼與對應的抽象語法樹的節(jié)點標識信息同時進行存儲操作,避免了文件代碼解析調(diào)整中,函數(shù)調(diào)用關系鏈斷裂的現(xiàn)象,從而提高了代碼解析效率;有效的解決了現(xiàn)有的代碼存儲方法及代碼存儲裝置中由于調(diào)用函數(shù)的其他子函數(shù)的調(diào)用關系缺失,造成函數(shù)調(diào)用關系鏈斷裂,進而使得代碼解析效率較低的技術問題。
請參照圖1,圖1為本發(fā)明的代碼存儲方法的第一優(yōu)選實施例的流程圖。本優(yōu)選實施例的代碼存儲方法可使用上述的電子設備進行實施,用于對文件代碼進行轉(zhuǎn)化、存儲等預處理操作。本優(yōu)選實施例的代碼存儲方法包括:
步驟s101,獲取文件代碼,并對文件代碼進行語法解析,以獲取文件代碼的抽象語法樹;
步驟s102,獲取抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;
步驟s103,使用第一預設規(guī)則將動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;
步驟s104,將動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;
步驟s105,對文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
下面詳細說明本優(yōu)選實施例的代碼存儲方法的各步驟的具體流程。
在步驟s101中,代碼存儲裝置可通過遍歷文件代碼項目路徑等方法來獲取文件代碼。
隨后代碼存儲裝置對獲取的文件代碼進行語法解析,這里可使用開源工具javacc、antrl、astparser以及eclipse開源框架jdt等編譯解析工具對文件代碼進行語法解析,從而獲取文件代碼的抽象語法樹(ast,abstractsyntaxtree)。
這里的抽象語法樹由機器可讀的樹形節(jié)點構成的數(shù)據(jù)結(jié)構樹。其中抽象語法樹的每個樹形節(jié)點均為符合語法規(guī)則的動態(tài)函數(shù)。隨后轉(zhuǎn)到步驟s102。
在步驟s102中,代碼存儲裝置可通過訪問者模式對步驟s101獲取的抽象語法樹的每個節(jié)點的動態(tài)函數(shù)進行數(shù)據(jù)提取,從而提取動態(tài)函數(shù)的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的調(diào)用函數(shù)信息。在java的訪問者設計模式下,用戶可以在不改變各元素類的前提下定義作用于這些元素類的新操作。
這里的動態(tài)函數(shù)信息包括動態(tài)函數(shù)的包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息。當然這里動態(tài)函數(shù)信息還可包括動態(tài)函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
這里的調(diào)用函數(shù)信息包括動態(tài)函數(shù)中的調(diào)用函數(shù)的調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息。當然這里的調(diào)用函數(shù)信息還可包括調(diào)用函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及調(diào)用函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
如動態(tài)函數(shù)a在執(zhí)行代碼中可包括執(zhí)行調(diào)用函數(shù)b和調(diào)用函數(shù)c的代碼。同時調(diào)用函數(shù)b同時為子函數(shù)b1和子函數(shù)b2的父函數(shù),動態(tài)函數(shù)a可通過執(zhí)行子函數(shù)b1或子函數(shù)b2實現(xiàn)對調(diào)用函數(shù)b的調(diào)用操作。隨后轉(zhuǎn)到步驟s103。
在步驟s103中,代碼存儲裝置使用第一預設規(guī)則,將步驟s102獲取的動態(tài)函數(shù)信息轉(zhuǎn)化為具有唯一性的動態(tài)函數(shù)標識碼。如使用第一非可逆加密算法(如哈希(hash)算法等)將不定長明文的動態(tài)函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的動態(tài)函數(shù)標識碼。
同時代碼存儲裝置使用第二預設規(guī)則,將步驟s102獲取的調(diào)用函數(shù)信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。如使用第二非可逆加密算法(如哈希(hash)算法等)將不定長明文的調(diào)用函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的調(diào)用函數(shù)標識碼。隨后轉(zhuǎn)到步驟s104。
在步驟s104中,代碼存儲裝置將步驟s103獲取的動態(tài)函數(shù)標識碼、動態(tài)函數(shù)對應的所有調(diào)用函數(shù)的調(diào)用函數(shù)標識碼;以及步驟s102獲取的動態(tài)函數(shù)信息封裝為一節(jié)點標識信息。該節(jié)點標識信息可通過指針指向調(diào)用該節(jié)點標識信息的抽象語法樹的節(jié)點。由于將節(jié)點對應的動態(tài)函數(shù)信息、動態(tài)函數(shù)標識碼以及調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息,用戶可方便的對節(jié)點標識信息對應的節(jié)點上的動態(tài)函數(shù)進行增加、刪除、修改以及查詢操作。隨后轉(zhuǎn)到步驟s105。
在步驟s105中,代碼存儲裝置對步驟s101獲取的文件代碼以及步驟s104獲取的文件代碼對應的抽象語法樹的節(jié)點標識信息進行存儲操作,以便用戶對上述文件代碼進行高效的解析以及變更操作。
這樣即完成了本優(yōu)選實施例的代碼存儲方法的文件代碼的存儲操作。
用戶對上述存儲的文件代碼進行解析以及變更操作時,用戶可通過抽象語法樹的每個節(jié)點的節(jié)點標識信息獲取對應動態(tài)函數(shù)的調(diào)用關系以及動態(tài)函數(shù)下調(diào)用函數(shù)的繼承關系,從而可有效的對動態(tài)函數(shù)的功能進行判斷,進而對文件代碼進行高效的解析以及變更操作。
本優(yōu)選實施例的代碼存儲方法通過將文件代碼與對應的抽象語法樹的節(jié)點標識信息同時進行存儲操作,避免了文件代碼解析調(diào)整中,函數(shù)調(diào)用關系鏈斷裂的現(xiàn)象,從而提高了代碼解析效率。
請參照圖2,圖2為本發(fā)明的代碼存儲方法的第二優(yōu)選實施例的流程圖。本優(yōu)選實施例的代碼存儲方法可使用上述的電子設備進行實施,用于對文件代碼進行轉(zhuǎn)化、存儲等預處理操作。本優(yōu)選實施例的代碼存儲方法包括:
步驟s201,獲取文件代碼,并對文件代碼進行語法解析,以獲取文件代碼的抽象語法樹;
步驟s202,獲取抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;
步驟s203,使用第一預設規(guī)則將動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;
步驟s204,將動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;
步驟s205,對文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作;
步驟s206,接收節(jié)點解析指令,并根據(jù)節(jié)點解析指令獲取文件代碼的抽象語法樹的對應節(jié)點的節(jié)點標識信息;
步驟s207,使用第一預設規(guī)則,獲取節(jié)點標識信息對應的動態(tài)函數(shù)信息;使用第二預設規(guī)則,獲取節(jié)點標識信息對應的調(diào)用函數(shù)信息;
步驟s208,使用動態(tài)函數(shù)信息和調(diào)用函數(shù)信息,對所述節(jié)點對應的動態(tài)函數(shù)進行展示,以便對動態(tài)函數(shù)進行解析操作。
下面詳細說明本優(yōu)選實施例的代碼存儲方法的各步驟的具體流程。
在步驟s201中,代碼存儲裝置可通過遍歷文件代碼項目路徑等方法來獲取文件代碼。
隨后代碼存儲裝置對獲取的文件代碼進行語法解析,這里可使用開源工具javacc、antrl、astparser以及eclipse開源框架jdt等編譯解析工具對文件代碼進行語法解析,從而獲取文件代碼的抽象語法樹(ast,abstractsyntaxtree)。
這里的抽象語法樹由機器可讀的樹形節(jié)點構成的數(shù)據(jù)結(jié)構樹。其中抽象語法樹的每個樹形節(jié)點均為符合語法規(guī)則的動態(tài)函數(shù)。
具體請參照圖3,圖3為本發(fā)明的代碼存儲方法的第二優(yōu)選實施例的步驟s201的流程圖。該步驟s201包括:
步驟s301,代碼存儲裝置對文件代碼進行掃描,生成所述文件代碼的單詞符號串。由于文件代碼為純文本文件,因此代碼存儲裝置可從左至右對文件代碼進行掃描,把作為字符串的文件代碼轉(zhuǎn)化為單詞符號串。
步驟s302,代碼存儲裝置判斷步驟s301生成的單詞字符串是否符合預設語法規(guī)則,從而將文件代碼的單詞符號串組成文件代碼的語法單位,如表達式、賦值或循環(huán)等。
步驟s303,代碼存儲裝置基于文件代碼的語法單元,按語法規(guī)則分析檢查由語法單元構成每條語句是否有正確的邏輯結(jié)構,并按上述邏輯結(jié)構生成文件代碼的抽象語法樹。隨后轉(zhuǎn)到步驟s202。
在步驟s202中,代碼存儲裝置可通過訪問者模式對步驟s201獲取的抽象語法樹的每個節(jié)點的動態(tài)函數(shù)進行數(shù)據(jù)提取,從而提取動態(tài)函數(shù)的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的調(diào)用函數(shù)信息。
這里的動態(tài)函數(shù)信息包括動態(tài)函數(shù)的包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息。當然這里動態(tài)函數(shù)信息還可包括動態(tài)函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
這里的調(diào)用函數(shù)信息包括動態(tài)函數(shù)中的調(diào)用函數(shù)的調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息。當然這里的調(diào)用函數(shù)信息還可包括調(diào)用函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及調(diào)用函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。隨后轉(zhuǎn)到步驟s203。
在步驟s203中,代碼存儲裝置使用第一預設規(guī)則,將步驟s102獲取的動態(tài)函數(shù)信息轉(zhuǎn)化為具有唯一性的動態(tài)函數(shù)標識碼。如使用第一非可逆加密算法(如哈希(hash)算法等)將不定長明文的動態(tài)函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的動態(tài)函數(shù)標識碼。
如動態(tài)函數(shù)信息中的包名信息為com.tencent.sng包,編譯單元信息為a.java,類名信息為子類b,則上述動態(tài)函數(shù)信息的拼接后的字符串可為“com\tencent\sng\a$b”,使用哈希算法可將上述字符串轉(zhuǎn)化為一16位的唯一性編碼。同理動態(tài)函數(shù)信息中的動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息也可使用哈希算法轉(zhuǎn)化為一16為的唯一性編碼,這樣即可形成唯一性的動態(tài)函數(shù)標識碼。
同時代碼存儲裝置使用第二預設規(guī)則,將步驟s102獲取的調(diào)用函數(shù)信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。如使用第二非可逆加密算法(如哈希(hash)算法等)將不定長明文的調(diào)用函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的調(diào)用函數(shù)標識碼。
具體的,由于調(diào)用函數(shù)的可直接獲取信息較少,因此在本步驟中,代碼存儲裝置會首先通過編譯工具jdt.astparser,獲取調(diào)用函數(shù)信息的詳細信息,然后再使用第二非可逆加密算法,將調(diào)用函數(shù)信息的詳細信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。隨后轉(zhuǎn)到步驟s204。
在步驟s204中,代碼存儲裝置將步驟s203獲取的動態(tài)函數(shù)標識碼、動態(tài)函數(shù)對應的所有調(diào)用函數(shù)的調(diào)用函數(shù)標識碼;以及步驟s102獲取的動態(tài)函數(shù)信息封裝為一節(jié)點標識信息。該節(jié)點標識信息可通過指針指向調(diào)用該節(jié)點標識信息的抽象語法樹的節(jié)點。由于將節(jié)點對應的動態(tài)函數(shù)信息、動態(tài)函數(shù)標識碼以及調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息,用戶可方便的對節(jié)點標識信息對應的節(jié)點上的動態(tài)函數(shù)進行增加、刪除、修改以及查詢操作。隨后轉(zhuǎn)到步驟s205。
在步驟s205中,代碼存儲裝置對步驟s201獲取的文件代碼以及步驟s204獲取的文件代碼對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
在步驟s206中,當用戶需要對文件代碼進行解析變更操作時,代碼存儲裝置接收到用戶的節(jié)點解析指令,這里節(jié)點解析指令為用戶需要對文件代碼對應的抽象語法樹中的某個節(jié)點進行解析變更的指令。
這時代碼存儲裝置會根據(jù)節(jié)點解析指令獲取文件代碼的抽象語法樹的對應節(jié)點的節(jié)點標識信息,以便對節(jié)點標識信息對應的文件代碼進行解析變更。隨后轉(zhuǎn)到步驟s207。
在步驟s207中,代碼存儲裝置使用第一非可逆加密算法(如哈希(hash)算法等),獲取節(jié)點標識信息對應的動態(tài)函數(shù)信息;同時代碼存儲裝置使用第二非可逆加密算法(如哈希(hash)算法等),獲取節(jié)點標識信息對應的調(diào)用函數(shù)信息。
其中調(diào)用函數(shù)信息的調(diào)用函數(shù)名信息和調(diào)用函數(shù)參數(shù)類型信息用于表示動態(tài)函數(shù)與調(diào)用函數(shù)的調(diào)用關系,調(diào)用函數(shù)信息的調(diào)用函數(shù)的子函數(shù)信息用于表示調(diào)用函數(shù)和調(diào)用函數(shù)的子函數(shù)的繼承關系。隨后轉(zhuǎn)到步驟s208。
在步驟s208中,代碼存儲裝置使用動態(tài)函數(shù)信息和調(diào)用函數(shù)信息,對節(jié)點對應的動態(tài)函數(shù)進行展示,即同時對動態(tài)函數(shù)與調(diào)用函數(shù)的調(diào)用關系以及調(diào)用函數(shù)和調(diào)用函數(shù)的子函數(shù)的繼承關系進行展示,這樣用戶可根據(jù)上述的調(diào)用關系以及繼承關系,對動態(tài)函數(shù)進行準確的解析操作。
這樣即完成了本優(yōu)選實施例的代碼存儲方法的代碼存儲以及解析過程。
在第一優(yōu)選實施例的基礎上,本優(yōu)選實施例的代碼存儲方法還提供對存儲的文件代碼進行節(jié)點標識信息解析的過程,從而可進一步提高文件代碼解析的準確性以及解析效率。
本發(fā)明還提供一種代碼存儲裝置,請參照圖4,圖4為本發(fā)明的代碼存儲裝置的第一優(yōu)選實施例的結(jié)構示意圖。本優(yōu)選實施例的代碼存儲裝置可使用上述的代碼存儲方法的第一優(yōu)選實施例進行實施,本優(yōu)選實施例的代碼存儲裝置40包括代碼解析模塊41、函數(shù)信息獲取模塊42、標識碼轉(zhuǎn)化模塊43、封裝模塊44以及存儲模塊45。
代碼解析模塊41用于獲取文件代碼,并對文件代碼進行語法解析,以獲取文件代碼的抽象語法樹;函數(shù)信息獲取模塊42用于獲取抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;標識碼轉(zhuǎn)化模塊43用于使用第一預設規(guī)則將動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;封裝模塊44用于將動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;存儲模塊45用于對文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
本優(yōu)選實施例的代碼存儲裝置40使用時,首先代碼解析模塊41可通過遍歷文件代碼項目路徑等方法來獲取文件代碼。
隨后代碼解析模塊41對獲取的文件代碼進行語法解析,這里可使用開源工具javacc、antrl、astparser以及eclipse開源框架jdt等編譯解析工具對文件代碼進行語法解析,從而獲取文件代碼的抽象語法樹(ast,abstractsyntaxtree)。
這里的抽象語法樹由機器可讀的樹形節(jié)點構成的數(shù)據(jù)結(jié)構樹。其中抽象語法樹的每個樹形節(jié)點均為符合語法規(guī)則的動態(tài)函數(shù)。
隨后函數(shù)信息獲取模塊42可通過訪問者模式對代碼解析模塊41獲取的抽象語法樹的每個節(jié)點的動態(tài)函數(shù)進行數(shù)據(jù)提取,從而提取動態(tài)函數(shù)的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的調(diào)用函數(shù)信息。在java的訪問者設計模式下,用戶可以在不改變各元素類的前提下定義作用于這些元素類的新操作。
這里的動態(tài)函數(shù)信息包括動態(tài)函數(shù)的包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息。當然這里動態(tài)函數(shù)信息還可包括動態(tài)函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
這里的調(diào)用函數(shù)信息包括動態(tài)函數(shù)中的調(diào)用函數(shù)的調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息。當然這里的調(diào)用函數(shù)信息還可包括調(diào)用函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及調(diào)用函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
如動態(tài)函數(shù)a在執(zhí)行代碼中可包括執(zhí)行調(diào)用函數(shù)b和調(diào)用函數(shù)c的代碼。同時調(diào)用函數(shù)b同時為子函數(shù)b1和子函數(shù)b2的父函數(shù),動態(tài)函數(shù)a可通過執(zhí)行子函數(shù)b1或子函數(shù)b2實現(xiàn)對調(diào)用函數(shù)b的調(diào)用操作。
然后標識碼轉(zhuǎn)化模塊43使用第一預設規(guī)則,將函數(shù)信息獲取模塊42獲取的動態(tài)函數(shù)信息轉(zhuǎn)化為具有唯一性的動態(tài)函數(shù)標識碼。如使用第一非可逆加密算法(如哈希(hash)算法等)將不定長明文的動態(tài)函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的動態(tài)函數(shù)標識碼。
同時標識碼轉(zhuǎn)化模塊43使用第二預設規(guī)則,將函數(shù)信息獲取模塊42獲取的調(diào)用函數(shù)信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。如使用第二非可逆加密算法(如哈希(hash)算法等)將不定長明文的調(diào)用函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的調(diào)用函數(shù)標識碼。
隨后封裝模塊44將標識碼轉(zhuǎn)化模塊43獲取的動態(tài)函數(shù)標識碼、動態(tài)函數(shù)對應的所有調(diào)用函數(shù)的調(diào)用函數(shù)標識碼;以及函數(shù)信息獲取模塊42獲取的動態(tài)函數(shù)信息封裝為一節(jié)點標識信息。該節(jié)點標識信息可通過指針指向調(diào)用該節(jié)點標識信息的抽象語法樹的節(jié)點。由于將節(jié)點對應的動態(tài)函數(shù)信息、動態(tài)函數(shù)標識碼以及調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息,用戶可方便的對節(jié)點標識信息對應的節(jié)點上的動態(tài)函數(shù)進行增加、刪除、修改以及查詢操作。
最后存儲模塊45對代碼解析模塊41獲取的文件代碼以及封裝模塊44獲取的文件代碼對應的抽象語法樹的節(jié)點標識信息進行存儲操作,以便用戶對上述文件代碼進行高效的解析以及變更操作。
這樣即完成了本優(yōu)選實施例的代碼存儲裝置40的文件代碼的存儲操作。
用戶對上述存儲的文件代碼進行解析以及變更操作時,用戶可通過抽象語法樹的每個節(jié)點的節(jié)點標識信息獲取對應動態(tài)函數(shù)的調(diào)用關系以及動態(tài)函數(shù)下調(diào)用函數(shù)的繼承關系,從而可有效的對動態(tài)函數(shù)的功能進行判斷,進而對文件代碼進行高效的解析以及變更操作。
本優(yōu)選實施例的代碼存儲裝置通過將文件代碼與對應的抽象語法樹的節(jié)點標識信息同時進行存儲操作,避免了文件代碼解析調(diào)整中,函數(shù)調(diào)用關系鏈斷裂的現(xiàn)象,從而提高了代碼解析效率。
請參照圖5,圖5為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的結(jié)構示意圖。本優(yōu)選實施例的代碼存儲裝置可使用上述的代碼存儲方法的第二優(yōu)選實施例進行實施,本優(yōu)選實施例的代碼存儲裝置50包括代碼解析模塊51、函數(shù)信息獲取模塊52、標識碼轉(zhuǎn)化模塊53、封裝模塊54、存儲模塊55、節(jié)點標識信息獲取模塊56、函數(shù)信息讀取模塊57以及展示解析模塊58。
代碼解析模塊51用于獲取文件代碼,并對文件代碼進行語法解析,以獲取文件代碼的抽象語法樹;函數(shù)信息獲取模塊52用于獲取抽象語法樹的每個節(jié)點的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的至少一個調(diào)用函數(shù)信息;標識碼轉(zhuǎn)化模塊53用于使用第一預設規(guī)則將動態(tài)函數(shù)信息轉(zhuǎn)化為動態(tài)函數(shù)標識碼,并使用第二預設規(guī)則將調(diào)用函數(shù)信息轉(zhuǎn)化為調(diào)用函數(shù)標識碼;封裝模塊54用于將動態(tài)函數(shù)標識碼、動態(tài)函數(shù)信息以及對應的至少一個調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息;存儲模塊55用于對文件代碼以及對應的抽象語法樹的節(jié)點標識信息進行存儲操作;節(jié)點標識信息獲取模塊56用于接收節(jié)點解析指令,并根據(jù)節(jié)點解析指令獲取文件代碼的抽象語法樹的對應節(jié)點的節(jié)點標識信息;函數(shù)信息讀取模塊57用于使用第一預設規(guī)則,獲取節(jié)點標識信息對應的動態(tài)函數(shù)信息;使用第二預設規(guī)則,獲取節(jié)點標識信息對應的調(diào)用函數(shù)信息;展示解析模塊58用于使用動態(tài)函數(shù)信息和調(diào)用函數(shù)信息,對節(jié)點對應的動態(tài)函數(shù)進行展示,以便對動態(tài)函數(shù)進行解析操作。
請參照圖6,圖6為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的代碼解析模塊的結(jié)構示意圖。該代碼解析模塊51包括掃描單元61、語法單元生成單元62以及抽象語法樹生成單元63。
掃描單元61用于對文件代碼進行掃描,生成文件代碼的單詞符號串;語法單元生成單元62用于根據(jù)預設語法規(guī)則,將文件代碼的單詞符號串組成文件代碼的語法單位;抽象語法樹生成單元63用于基于文件代碼的語法單元,生成文件代碼的抽象語法樹。
請參照圖7,圖7為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的標識碼轉(zhuǎn)化模塊的結(jié)構示意圖。該標識碼轉(zhuǎn)化模塊53包括動態(tài)函數(shù)標識碼轉(zhuǎn)化單元71以及調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72。
動態(tài)函數(shù)標識碼轉(zhuǎn)化單元71用于使用第一非可逆加密算法,將動態(tài)函數(shù)信息轉(zhuǎn)化為具有唯一性的動態(tài)函數(shù)標識碼;調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72用于使用第二非可逆加密算法,將調(diào)用函數(shù)信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。
請參照圖8,圖8為本發(fā)明的代碼存儲裝置的第二優(yōu)選實施例的標識碼轉(zhuǎn)化模塊的調(diào)用函數(shù)標識碼轉(zhuǎn)化單元的結(jié)構示意圖。該調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72包括函數(shù)詳細信息獲取子單元81以及調(diào)用函數(shù)標識碼轉(zhuǎn)化子單元82。
函數(shù)詳細信息獲取子單元用于通過編譯工具jdt.astparser,獲取調(diào)用函數(shù)信息的詳細信息;調(diào)用函數(shù)標識碼轉(zhuǎn)化子單元用于使用第二非可逆加密算法,將調(diào)用函數(shù)信息的詳細信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。
本優(yōu)選實施例的代碼存儲裝置50使用時,首先代碼解析模塊51可通過遍歷文件代碼項目路徑等方法來獲取文件代碼。
隨后代碼解析模塊51對獲取的文件代碼進行語法解析,這里可使用開源工具javacc、antrl、astparser以及eclipse開源框架jdt等編譯解析工具對文件代碼進行語法解析,從而獲取文件代碼的抽象語法樹(ast,abstractsyntaxtree)。
這里的抽象語法樹由機器可讀的樹形節(jié)點構成的數(shù)據(jù)結(jié)構樹。其中抽象語法樹的每個樹形節(jié)點均為符合語法規(guī)則的動態(tài)函數(shù)。
具體包括:
代碼解析模塊51的掃描單元61對文件代碼進行掃描,生成所述文件代碼的單詞符號串。由于文件代碼為純文本文件,因此代碼存儲裝置可從左至右對文件代碼進行掃描,把作為字符串的文件代碼轉(zhuǎn)化為單詞符號串。
代碼解析模塊51的語法單元生成單62元判斷掃描單元61生成的單詞字符串是否符合預設語法規(guī)則,從而將文件代碼的單詞符號串組成文件代碼的語法單位,如表達式、賦值或循環(huán)等。
代碼解析模塊51的抽象語法樹生成單元63基于文件代碼的語法單元,按語法規(guī)則分析檢查由語法單元構成每條語句是否有正確的邏輯結(jié)構,并按上述邏輯結(jié)構生成文件代碼的抽象語法樹。
然后函數(shù)信息獲取模塊52可通過訪問者模式對代碼解析模塊51獲取的抽象語法樹的每個節(jié)點的動態(tài)函數(shù)進行數(shù)據(jù)提取,從而提取動態(tài)函數(shù)的動態(tài)函數(shù)信息以及動態(tài)函數(shù)的調(diào)用函數(shù)信息。
這里的動態(tài)函數(shù)信息包括動態(tài)函數(shù)的包名信息、編譯單元信息、類名信息、動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息。當然這里動態(tài)函數(shù)信息還可包括動態(tài)函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
這里的調(diào)用函數(shù)信息包括動態(tài)函數(shù)中的調(diào)用函數(shù)的調(diào)用函數(shù)名信息、調(diào)用函數(shù)參數(shù)類型信息以及調(diào)用函數(shù)的子函數(shù)信息。當然這里的調(diào)用函數(shù)信息還可包括調(diào)用函數(shù)的代碼文件路徑信息、類屬性信息(如父類名信息、接口類名信息、修飾符名信息以及行號范圍信息等)以及調(diào)用函數(shù)屬性信息(如函數(shù)返回類型信息以及函數(shù)修飾符名信息等)。
隨后標識碼轉(zhuǎn)化模塊53的動態(tài)函數(shù)標識碼轉(zhuǎn)化單元71使用第一預設規(guī)則,將函數(shù)信息獲取模塊獲取的動態(tài)函數(shù)信息轉(zhuǎn)化為具有唯一性的動態(tài)函數(shù)標識碼。如使用第一非可逆加密算法(如哈希(hash)算法等)將不定長明文的動態(tài)函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的動態(tài)函數(shù)標識碼。
如動態(tài)函數(shù)信息中的包名信息為com.tencent.sng包,編譯單元信息為a.java,類名信息為子類b,則上述動態(tài)函數(shù)信息的拼接后的字符串可為“com\tencent\sng\a$b”,動態(tài)函數(shù)標識碼轉(zhuǎn)化單元使用哈希算法可將上述字符串轉(zhuǎn)化為一16位的唯一性編碼。同理動態(tài)函數(shù)信息中的動態(tài)函數(shù)名信息以及動態(tài)函數(shù)參數(shù)類型信息也可使用哈希算法轉(zhuǎn)化為一16為的唯一性編碼,這樣即可形成唯一性的動態(tài)函數(shù)標識碼。
同時標識碼轉(zhuǎn)化模塊53的調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72使用第二預設規(guī)則,將函數(shù)信息獲取模塊獲取的調(diào)用函數(shù)信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。如使用第二非可逆加密算法(如哈希(hash)算法等)將不定長明文的調(diào)用函數(shù)信息轉(zhuǎn)化為定長的具有唯一性的調(diào)用函數(shù)標識碼。
具體的,由于調(diào)用函數(shù)的可直接獲取信息較少,因此在本步驟中,調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72的函數(shù)詳細信息獲取子單元81會首先通過編譯工具jdt.astparser,獲取調(diào)用函數(shù)信息的詳細信息,然后調(diào)用函數(shù)標識碼轉(zhuǎn)化單元72的調(diào)用函數(shù)標識碼轉(zhuǎn)化子單元82再使用第二非可逆加密算法,將調(diào)用函數(shù)信息的詳細信息轉(zhuǎn)化為具有唯一性的調(diào)用函數(shù)標識碼。
然后封裝模塊54將標識碼轉(zhuǎn)化模塊53獲取的動態(tài)函數(shù)標識碼、動態(tài)函數(shù)對應的所有調(diào)用函數(shù)的調(diào)用函數(shù)標識碼;以及函數(shù)信息獲取模塊52獲取的動態(tài)函數(shù)信息封裝為一節(jié)點標識信息。該節(jié)點標識信息可通過指針指向調(diào)用該節(jié)點標識信息的抽象語法樹的節(jié)點。由于將節(jié)點對應的動態(tài)函數(shù)信息、動態(tài)函數(shù)標識碼以及調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息,用戶可方便的對節(jié)點標識信息對應的節(jié)點上的動態(tài)函數(shù)進行增加、刪除、修改以及查詢操作。
隨后存儲模塊55對代碼解析模塊51獲取的文件代碼以及封裝模塊54獲取的文件代碼對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
當用戶需要對文件代碼進行解析變更操作時,節(jié)點標識信息獲取模塊56接收到用戶的節(jié)點解析指令,這里節(jié)點解析指令為用戶需要對文件代碼對應的抽象語法樹中的某個節(jié)點進行解析變更的指令。
這時節(jié)點標識信息獲取模塊56會根據(jù)節(jié)點解析指令獲取文件代碼的抽象語法樹的對應節(jié)點的節(jié)點標識信息,以便對節(jié)點標識信息對應的文件代碼進行解析變更。
然后函數(shù)信息讀取模塊57使用第一非可逆加密算法(如哈希(hash)算法等),獲取節(jié)點標識信息對應的動態(tài)函數(shù)信息;同時函數(shù)信息讀取模塊使用第二非可逆加密算法(如哈希(hash)算法等),獲取節(jié)點標識信息對應的調(diào)用函數(shù)信息。
其中調(diào)用函數(shù)信息的調(diào)用函數(shù)名信息和調(diào)用函數(shù)參數(shù)類型信息用于表示動態(tài)函數(shù)與調(diào)用函數(shù)的調(diào)用關系,調(diào)用函數(shù)信息的調(diào)用函數(shù)的子函數(shù)信息用于表示調(diào)用函數(shù)和調(diào)用函數(shù)的子函數(shù)的繼承關系。
最后展示解析模塊58使用動態(tài)函數(shù)信息和調(diào)用函數(shù)信息,對節(jié)點對應的動態(tài)函數(shù)進行展示,即同時對動態(tài)函數(shù)與調(diào)用函數(shù)的調(diào)用關系以及調(diào)用函數(shù)和調(diào)用函數(shù)的子函數(shù)的繼承關系進行展示,這樣用戶可根據(jù)上述的調(diào)用關系以及繼承關系,對動態(tài)函數(shù)進行準確的解析操作。
這樣即完成了本優(yōu)選實施例的代碼存儲裝置的代碼存儲以及解析過程。
在第一優(yōu)選實施例的基礎上,本優(yōu)選實施例的代碼存儲裝置還提供對存儲的文件代碼進行節(jié)點標識信息解析的過程,從而可進一步提高文件代碼解析的準確性以及解析效率。
下面通過一具體實施例說明本發(fā)明的代碼存儲方法及代碼存儲裝置的具體工作原理。請參照圖9,圖9為本發(fā)明的代碼存儲方法及代碼存儲裝置的具體實施例的流程圖,本具體實施例的代碼存儲裝置設置在代碼處理終端中,該代碼處理終端對文件代碼進行存儲以及解析操作的流程包括:
步驟s901,代碼處理終端通過遍歷文件路徑獲取文件代碼;
步驟s902,代碼處理終端使用開源工具javacc、antrl、astparser以及eclipse開源框架jdt等編譯解析工具對文件代碼進行語法解析,從而獲取文件代碼的抽象語法樹。其中抽象語法樹的每個樹形節(jié)點均為符合語法規(guī)則的動態(tài)函數(shù)。
步驟s903,代碼處理終端通過訪問者模式對提取抽象語法樹中每個節(jié)點的動態(tài)函數(shù)信息以及調(diào)用函數(shù)信息。
步驟s904,代碼處理終端使用哈希算法對動態(tài)函數(shù)信息進行編碼,生成唯一性的動態(tài)函數(shù)標識碼;代碼處理終端使用哈希算法對調(diào)用函數(shù)信息進行編碼,生成唯一性的調(diào)用函數(shù)標識碼。
步驟s905,代碼處理終端將節(jié)點對應的動態(tài)函數(shù)信息、動態(tài)函數(shù)標識碼以及調(diào)用函數(shù)標識碼封裝為節(jié)點標識信息。
步驟s906,代碼處理終端對文件代碼以及文件代碼對應的抽象語法樹的節(jié)點標識信息進行存儲操作。
用戶對上述存儲的文件代碼進行解析以及變更操作時,用戶可通過抽象語法樹的每個節(jié)點的節(jié)點標識信息獲取對應動態(tài)函數(shù)的調(diào)用關系以及動態(tài)函數(shù)下調(diào)用函數(shù)的繼承關系,從而可有效的對動態(tài)函數(shù)的功能進行判斷,進而對文件代碼進行高效的解析以及變更操作。
這樣即完成了本具體實施例的代碼存儲方法及代碼存儲裝置的代碼存儲以及解析過程。
本發(fā)明的代碼存儲方法及代碼存儲裝置通過將文件代碼與對應的抽象語法樹的節(jié)點標識信息同時進行存儲操作,避免了文件代碼解析調(diào)整中,函數(shù)調(diào)用關系鏈斷裂的現(xiàn)象,從而提高了代碼解析效率;解決了現(xiàn)有的代碼存儲方法及代碼存儲裝置中由于調(diào)用函數(shù)的其他子函數(shù)的調(diào)用關系缺失,造成函數(shù)調(diào)用關系鏈斷裂,進而使得代碼解析效率較低的技術問題。
如本申請所使用的術語“組件”、“模塊”、“系統(tǒng)”、“接口”、“進程”等等一般地旨在指計算機相關實體:硬件、硬件和軟件的組合、軟件或執(zhí)行中的軟件。例如,組件可以是但不限于是運行在處理器上的進程、處理器、對象、可執(zhí)行應用、執(zhí)行的線程、程序和/或計算機。通過圖示,運行在控制器上的應用和該控制器二者都可以是組件。一個或多個組件可以有在于執(zhí)行的進程和/或線程內(nèi),并且組件可以位于一個計算機上和/或分布在兩個或更多計算機之間。
圖10和隨后的討論提供了對實現(xiàn)本發(fā)明所述的代碼存儲裝置所在的電子設備的工作環(huán)境的簡短、概括的描述。圖10的工作環(huán)境僅僅是適當?shù)墓ぷ鳝h(huán)境的一個實例并且不旨在建議關于工作環(huán)境的用途或功能的范圍的任何限制。實例電子設備1012包括但不限于可穿戴設備、頭戴設備、醫(yī)療健康平臺、個人計算機、服務器計算機、手持式或膝上型設備、移動設備(比如移動電話、個人數(shù)字助理(pda)、媒體播放器等等)、多處理器系統(tǒng)、消費型電子設備、小型計算機、大型計算機、包括上述任意系統(tǒng)或設備的分布式計算環(huán)境,等等。
盡管沒有要求,但是在“計算機可讀指令”被一個或多個電子設備執(zhí)行的通用背景下描述實施例。計算機可讀指令可以經(jīng)由計算機可讀介質(zhì)來分布(下文討論)。計算機可讀指令可以實現(xiàn)為程序模塊,比如執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的功能、對象、應用編程接口(api)、數(shù)據(jù)結(jié)構等等。典型地,該計算機可讀指令的功能可以在各種環(huán)境中隨意組合或分布。
圖10圖示了包括本發(fā)明的代碼存儲裝置中的一個或多個實施例的電子設備1012的實例。在一種配置中,電子設備1012包括至少一個處理單元1016和存儲器1018。根據(jù)電子設備的確切配置和類型,存儲器1018可以是易失性的(比如ram)、非易失性的(比如rom、閃存等)或二者的某種組合。該配置在圖10中由虛線1014圖示。
在其他實施例中,電子設備1012可以包括附加特征和/或功能。例如,設備1012還可以包括附加的存儲裝置(例如可移除和/或不可移除的),其包括但不限于磁存儲裝置、光存儲裝置等等。這種附加存儲裝置在圖10中由存儲裝置1020圖示。在一個實施例中,用于實現(xiàn)本文所提供的一個或多個實施例的計算機可讀指令可以在存儲裝置1020中。存儲裝置1020還可以存儲用于實現(xiàn)操作系統(tǒng)、應用程序等的其他計算機可讀指令。計算機可讀指令可以載入存儲器1018中由例如處理單元1016執(zhí)行。
本文所使用的術語“計算機可讀介質(zhì)”包括計算機存儲介質(zhì)。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令或其他數(shù)據(jù)之類的信息的任何方法或技術實現(xiàn)的易失性和非易失性、可移除和不可移除介質(zhì)。存儲器1018和存儲裝置1020是計算機存儲介質(zhì)的實例。計算機存儲介質(zhì)包括但不限于ram、rom、eeprom、閃存或其他存儲器技術、cd-rom、數(shù)字通用盤(dvd)或其他光存儲裝置、盒式磁帶、磁帶、磁盤存儲裝置或其他磁存儲設備、或可以用于存儲期望信息并可以被電子設備1012訪問的任何其他介質(zhì)。任意這樣的計算機存儲介質(zhì)可以是電子設備1012的一部分。
電子設備1012還可以包括允許電子設備1012與其他設備通信的通信連接1026。通信連接1026可以包括但不限于調(diào)制解調(diào)器、網(wǎng)絡接口卡(nic)、集成網(wǎng)絡接口、射頻發(fā)射器/接收器、紅外端口、usb連接或用于將電子設備1012連接到其他電子設備的其他接口。通信連接1026可以包括有線連接或無線連接。通信連接1026可以發(fā)射和/或接收通信媒體。
術語“計算機可讀介質(zhì)”可以包括通信介質(zhì)。通信介質(zhì)典型地包含計算機可讀指令或諸如載波或其他傳輸機構之類的“己調(diào)制數(shù)據(jù)信號”中的其他數(shù)據(jù),并且包括任何信息遞送介質(zhì)。術語“己調(diào)制數(shù)據(jù)信號”可以包括這樣的信號:該信號特性中的一個或多個按照將信息編碼到信號中的方式來設置或改變。
電子設備1012可以包括輸入設備1024,比如鍵盤、鼠標、筆、語音輸入設備、觸摸輸入設備、紅外相機、視頻輸入設備和/或任何其他輸入設備。設備1012中也可以包括輸出設備1022,比如一個或多個顯示器、揚聲器、打印機和/或任意其他輸出設備。輸入設備1024和輸出設備1022可以經(jīng)由有線連接、無線連接或其任意組合連接到電子設備1012。在一個實施例中,來自另一個電子設備的輸入設備或輸出設備可以被用作電子設備1012的輸入設備1024或輸出設備1022。
電子設備1012的組件可以通過各種互連(比如總線)連接。這樣的互連可以包括外圍組件互連(pci)(比如快速pci)、通用串行總線(usb)、火線(ieee1394)、光學總線結(jié)構等等。在另一個實施例中,電子設備1012的組件可以通過網(wǎng)絡互連。例如,存儲器1018可以由位于不同物理位置中的、通過網(wǎng)絡互連的多個物理存儲器單元構成。
本領域技術人員將認識到,用于存儲計算機可讀指令的存儲設備可以跨越網(wǎng)絡分布。例如,可經(jīng)由網(wǎng)絡1028訪問的電子設備1030可以存儲用于實現(xiàn)本發(fā)明所提供的一個或多個實施例的計算機可讀指令。電子設備1012可以訪問電子設備1030并且下載計算機可讀指令的一部分或所有以供執(zhí)行??商娲?,電子設備1012可以按需要下載多條計算機可讀指令,或者一些指令可以在電子設備1012處執(zhí)行并且一些指令可以在電子設備1030處執(zhí)行。
本文提供了實施例的各種操作。在一個實施例中,所述的一個或多個操作可以構成一個或多個計算機可讀介質(zhì)上存儲的計算機可讀指令,其在被電子設備執(zhí)行時將使得計算設備執(zhí)行所述操作。描述一些或所有操作的順序不應當被解釋為暗示這些操作必需是順序相關的。本領域技術人員將理解具有本說明書的益處的可替代的排序。而且,應當理解,不是所有操作必需在本文所提供的每個實施例中存在。
而且,盡管已經(jīng)相對于一個或多個實現(xiàn)方式示出并描述了本公開,但是本領域技術人員基于對本說明書和附圖的閱讀和理解將會想到等價變型和修改。本公開包括所有這樣的修改和變型,并且僅由所附權利要求的范圍限制。特別地關于由上述組件(例如元件、資源等)執(zhí)行的各種功能,用于描述這樣的組件的術語旨在對應于執(zhí)行所述組件的指定功能(例如其在功能上是等價的)的任意組件(除非另外指示),即使在結(jié)構上與執(zhí)行本文所示的本公開的示范性實現(xiàn)方式中的功能的公開結(jié)構不等同。此外,盡管本公開的特定特征已經(jīng)相對于若干實現(xiàn)方式中的僅一個被公開,但是這種特征可以與如可以對給定或特定應用而言是期望和有利的其他實現(xiàn)方式的一個或多個其他特征組合。而且,就術語“包括”、“具有”、“含有”或其變形被用在具體實施方式或權利要求中而言,這樣的術語旨在以與術語“包含”相似的方式包括。
本發(fā)明實施例中的各功能單元可以集成在一個處理模塊中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質(zhì)中。上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。上述的各裝置或系統(tǒng),可以執(zhí)行相應方法實施例中的方法。
綜上所述,雖然本發(fā)明已以實施例揭露如上,實施例前的序號僅為描述方便而使用,對本發(fā)明各實施例的順序不造成限制。并且,上述實施例并非用以限制本發(fā)明,本領域的普通技術人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與潤飾,因此本發(fā)明的保護范圍以權利要求界定的范圍為準。