如何计算java类文件中的所有运算符和操作数
如何计算java类文件中的所有运算符和操作数?有人有想法吗?您可以尝试使用类似的库来分析类的字节码 或者使用sourceforge项目(我还没有尝试过): Lachesis Analysis是一个面向对象源代码的软件复杂性度量程序。目前仅提供Java源代码和Java字节代码分析如何计算java类文件中的所有运算符和操作数,java,Java,如何计算java类文件中的所有运算符和操作数?有人有想法吗?您可以尝试使用类似的库来分析类的字节码 或者使用sourceforge项目(我还没有尝试过): Lachesis Analysis是一个面向对象源代码的软件复杂性度量程序。目前仅提供Java源代码和Java字节代码分析 您可以尝试使用类似的库来分析类的字节码 或者使用sourceforge项目(我还没有尝试过): Lachesis Analysis是一个面向对象源代码的软件复杂性度量程序。目前仅提供Java源代码和Java字节代码分析
您可以尝试使用类似的库来分析类的字节码 或者使用sourceforge项目(我还没有尝试过): Lachesis Analysis是一个面向对象源代码的软件复杂性度量程序。目前仅提供Java源代码和Java字节代码分析
使用正则表达式做这种事情是不可靠的。Java的语法非常复杂,必然会有一些棘手的情况会导致正则表达式计算错误 同样,使用字节码分析器也可能会给出错误的结果,因为源代码运算符/操作数与字节码指令之间不一定存在一一对应关系。Java编译器可能以不明显的方式重新组织和重写代码
做这类事情的最好方法是找到一个合适的JavaAST库,用它来解析源代码,然后遍历AST来提取所需的信息。(在这种情况下,需要计算运算符和操作数节点。)使用正则表达式进行此类操作是不可靠的。Java的语法非常复杂,必然会有一些棘手的情况会导致正则表达式计算错误 同样,使用字节码分析器也可能会给出错误的结果,因为源代码运算符/操作数与字节码指令之间不一定存在一一对应关系。Java编译器可能以不明显的方式重新组织和重写代码 做这类事情的最好方法是找到一个合适的JavaAST库,用它来解析源代码,然后遍历AST来提取所需的信息。(在这种情况下,您需要计算运算符和操作数节点。)忘记regex(如果不得到诸如注释中的运算符等误报,您将永远无法正确执行该操作),您必须在计算运算符的代码上运行访问者。现在,您可以使用源代码解析器或字节代码解析器来实现这一点 对于源代码解析,我建议使用该项目。在这里,您将创建一个自定义访问者,扩展并覆盖以下几个相关方法:
public void visit(AssignExpr n, A arg) {
// track the operator here
super.visit(n, arg); // resume visitor
}
在字节码方面,您可能会使用和扩展来创建访问者。这两个版本应该同样适用。或者可能不是,在编写时(编译器可能添加或删除了一些操作)。忘记正则表达式(如果没有诸如注释中的运算符之类的误报,您将永远无法正确使用正则表达式),您将不得不在计算运算符的代码上运行访问者。现在,您可以使用源代码解析器或字节代码解析器来实现这一点
对于源代码解析,我建议使用该项目。在这里,您将创建一个自定义访问者,扩展并覆盖以下几个相关方法:
public void visit(AssignExpr n, A arg) {
// track the operator here
super.visit(n, arg); // resume visitor
}
在字节码方面,您可能会使用和扩展来创建访问者。这两个版本应该同样适用。也可能不是,正如所写的那样(编译器可能添加或删除了一些操作)。示例代码可能会有所帮助。你们到底想做什么?我只需要计算Halstead度量,所以我需要计算所有的运算符和Operands@Bragboy-这在不太清楚的情况下肯定会失败。Halstead和Java-这是一篇关于在Java代码中使用Halstead度量的好文章:一个示例代码可能会有所帮助。你们到底想做什么?我只需要计算Halstead度量,所以我需要计算所有的运算符和Operands@Bragboy-这在不太清楚的情况下肯定会失败。Halstead和Java-这是一篇关于在Java代码中使用Halstead度量有意义的好文章:我过去使用ANTLR()来遍历Java AST。这里是它的Java语法:我在过去使用ANTLR()遍历JavaAST。它的Java语法如下: