2014-02-08 50 views
0

我想在java中構建一個接口程序來分析任何java文件並獲取Halstead度量結果,但是我在解析輸入文件時遇到問題,我讀了很多關於Antlr和JavaParsing項目但真的無法理解我們如何使用它。 我的問題是:在java中構建halstead指標

1-是否有java編譯器中的任何默認命令行解析任何字符串,並在此輸入字符串行中查找任何操作數或運算符。 2 - 如果答案是否定的可以在發送關於使用Javaparsing或ANTLR的圖書館

小例子任意一個幫助

通常的支持讚賞 問候

+0

在http看一看:// WWW。 sonarqube.org/其中一個插件可能提供源代碼。 – OldProgrammer

+0

我使用JAVAPARSER,但我知道是否有任何命令幫助 – JavaTrainner

回答

0

我不知道任何命令行解析器,做到這一點的。

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常量。有一些爭論約令牌可以忽略不計,這是運營商的,哪些是經營者 - 你可以找到如何在這裏做這個決定的一些信息 -

www.virtualmachinery.com/sidebar2.htm