java parser是什么,讓我們一起了解一下?
Java Parser是基于JavaCC作為Java語(yǔ)言詞法解析的工具,支持Java語(yǔ)言生成AST(Abstract Syntax Tree抽象語(yǔ)法樹(shù)),在AST基礎(chǔ)上進(jìn)行類型推斷分析,支持修改AST從而生成新的Java文件內(nèi)容,支持從Java 1.0到14所有的版本的AST解析。
AST結(jié)構(gòu)允許以一種簡(jiǎn)單的編程方式使用Java代碼。可以專門(mén)操作Java文件,使用起來(lái)也更簡(jiǎn)單。它提供了一種方便的機(jī)制,可以使用我們稱為“訪客支持”的功能來(lái)導(dǎo)航樹(shù)。這使開(kāi)發(fā)人員能夠?qū)W⒂谠谠创a中識(shí)別有趣的模式,而不必編寫(xiě)費(fèi)力的樹(shù)遍歷代碼。該庫(kù)的最終主要功能是能夠操縱源代碼的基礎(chǔ)結(jié)構(gòu)。然后可以將其寫(xiě)入文件,為開(kāi)發(fā)人員提供構(gòu)建自己的代碼生成軟件的便利。
那么我們使用JavaParser theere時(shí),總是希望進(jìn)行很多操作。
例如,我們希望對(duì)整個(gè)項(xiàng)目進(jìn)行操作,因此在給定目錄的情況下,我們將探索所有Java文件。 此類應(yīng)有助于完成此任務(wù):
package?me.tomassetti.support; import?java.io.File; public?class?DirExplorer?{ public?interface?FileHandler?{ void?handle(int?level,?String?path,?File?file); } public?interface?Filter?{ boolean?interested(int?level,?String?path,?File?file); } private?FileHandler?fileHandler; private?Filter?filter; public?DirExplorer(Filter?filter,?FileHandler?fileHandler)?{ this.filter?=?filter; this.fileHandler?=?fileHandler; } public?void?explore(File?root)?{ explore(0,?"",?root); } private?void?explore(int?level,?String?path,?File?file)?{ if?(file.isDirectory())?{ for?(File?child?:?file.listFiles())?{ explore(level?+?1,?path?+?"/"?+?child.getName(),?child); } }?else?{ if?(filter.interested(level,?path,?file))?{ fileHandler.handle(level,?path,?file); } } } }
對(duì)于每個(gè)Java文件,我們首先要為每個(gè)Java文件構(gòu)建一個(gè)抽象語(yǔ)法樹(shù)(AST),然后對(duì)其進(jìn)行導(dǎo)航。 這樣做有兩種主要策略:
1、使用訪客:要在特定類型的AST節(jié)點(diǎn)上進(jìn)行操作時(shí),這是正確的策略。
2、使用遞歸迭代器:這允許處理所有類型的節(jié)點(diǎn)。
以上就是小編今天的分享了,希望可以幫助到大家。