我想在java中構建一個接口程序來分析任何java文件並獲取Halstead度量結果,但是我在解析輸入文件時遇到問題,我讀了很多關於Antlr和JavaParsing項目但真的無法理解我們如何使用它。 我的問題是:在java中構建halstead指標
1-是否有java編譯器中的任何默認命令行解析任何字符串,並在此輸入字符串行中查找任何操作數或運算符。 2 - 如果答案是否定的可以在發送關於使用Javaparsing或ANTLR的圖書館
小例子任意一個幫助通常的支持讚賞 問候
我想在java中構建一個接口程序來分析任何java文件並獲取Halstead度量結果,但是我在解析輸入文件時遇到問題,我讀了很多關於Antlr和JavaParsing項目但真的無法理解我們如何使用它。 我的問題是:在java中構建halstead指標
1-是否有java編譯器中的任何默認命令行解析任何字符串,並在此輸入字符串行中查找任何操作數或運算符。 2 - 如果答案是否定的可以在發送關於使用Javaparsing或ANTLR的圖書館
小例子任意一個幫助通常的支持讚賞 問候
我不知道任何命令行解析器,做到這一點的。
ANTLR並不簡單,但您想要做的是從Java語法創建解析器。這是我們如何生成我們的語法(你可以在這裏下載語法 - https://github.com/antlr/grammars-v4/tree/master/java):
公共類GenerateVisitor {
public static void main(String[] args) { String[] arg0 = { "-visitor", "D:/grammars/antlr/Java.g4", "-package", "com.virtualmachinery.jhawk.antlr" }; org.antlr.v4.Tool.main(arg0); } }
當你這樣做,你會發現你有6生成的類和兩個文件。
很明顯,我不能教你如何在5分鐘內使用ANTLR,但是你想要做的是創建一個訪問器來擴展已創建的JavaVisitor類。然後,您可以覆蓋訪問方法的方法,然後分析傳入的上下文。然後,可以使用switch語句分離出作爲操作符的標記和作爲操作數的標記。
在我們的代碼,我們做這樣的事情:
public static void handleTokens(ParseTree ctx)
List<Token> tokens = getTokens(ctx);
int type;
for (Token each: tokens) {
type = getHalsteadType(type);
}
}
類型都被定義爲類了JavaParser常量。有一些爭論約令牌可以忽略不計,這是運營商的,哪些是經營者 - 你可以找到如何在這裏做這個決定的一些信息 -
在http看一看:// WWW。 sonarqube.org/其中一個插件可能提供源代碼。 – OldProgrammer
我使用JAVAPARSER,但我知道是否有任何命令幫助 – JavaTrainner