在java中构建halstead指标

我正在尝试在java中构建一个接口程序来分析任何java文件并获得Halstead度量结果,但是我在解析输入文件时面临一个问题,我读了很多关于Antlr和JavaParsing的项目,但实在无法理解我们是怎么做的可以用它。 我的问题是:

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 tokens = getTokens(ctx); int type; for (Token each: tokens) { type = getHalsteadType(type); } } 

这些类型都被定义为JavaParser类中的常量。 关于哪些令牌可以忽略,哪些是运营商,哪些是运营商,存在一些争论 – 你可以在这里找到关于如何做出决定的一些信息 –

http://www.virtualmachinery.com/sidebar2.htm