
java parser是什么,讓我們一起了解一下?
Java Parser是基于JavaCC作為Java語言詞法解析的工具,支持Java語言生成AST(Abstract Syntax Tree抽象語法樹),在AST基礎(chǔ)上進行類型推斷分析,支持修改AST從而生成新的Java文件內(nèi)容,支持從Java 1.0到14所有的版本的AST解析。
AST結(jié)構(gòu)允許以一種簡單的編程方式使用Java代碼。可以專門操作Java文件,使用起來也更簡單。它提供了一種方便的機制,可以使用我們稱為“訪客支持”的功能來導(dǎo)航樹。這使開發(fā)人員能夠?qū)W⒂谠谠创a中識別有趣的模式,而不必編寫費力的樹遍歷代碼。該庫的最終主要功能是能夠操縱源代碼的基礎(chǔ)結(jié)構(gòu)。然后可以將其寫入文件,為開發(fā)人員提供構(gòu)建自己的代碼生成軟件的便利。
那么我們使用JavaParser theere時,總是希望進行很多操作。

例如,我們希望對整個項目進行操作,因此在給定目錄的情況下,我們將探索所有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);
}
}
}
}對于每個Java文件,我們首先要為每個Java文件構(gòu)建一個抽象語法樹(AST),然后對其進行導(dǎo)航。 這樣做有兩種主要策略:
1、使用訪客:要在特定類型的AST節(jié)點上進行操作時,這是正確的策略。
2、使用遞歸迭代器:這允許處理所有類型的節(jié)點。
以上就是小編今天的分享了,希望可以幫助到大家。
