在java中构建halstead指标

时间:2014-02-08 21:34:19

标签: java parsing

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

1- java编译器中是否有任何默认命令行解析任何字符串并在此输入字符串行中查找任何操作数或运算符。 2 - 如果答案为否,任何人都可以帮助发送关于使用Javaparsing或Antlr库的小例子

您平时的支持表示赞赏 最诚挚的问候

1 个答案:

答案 0 :(得分: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