user437630
user437630

Reputation: 157

how to count all Operators and Operands in java class file

how to count all Operators and Operands in java class file? Does anyone have an idea?

Upvotes: 1

Views: 3783

Answers (3)

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 299008

Forget regex (you'll never get that right without getting false positives like operators in comments etc), you're going to have to run a visitor over your code that counts operators. Now you can either use a source code parser or a byte code parser to do that.

For source code parsing I'd suggest the javaparser project. There, you'd create a custom Visitor extending VoidVisitorAdapter and overriding several relevant methods like this:

public void visit(AssignExpr n, A arg) {
    // track the operator here
    super.visit(n, arg); // resume visitor
}

On the byte code side, you'd probably use ASM and extend ClassAdapter to create your visitor. Both versions should work equally well. Or maybe not, as Stephen C writes (the compiler may have added or removed some operations).

Upvotes: 1

tangens
tangens

Reputation: 39733

You could try to analyze the bytecode of your class using a library like bcel.

Or use the sourceforge project lachesis (I haven't tried it):

Lachesis Analysis is a Software Complexity Measurement program for Object-Oriented source code. Analysis for Java source code and Java byte-code only is currently available.

Upvotes: 0

Stephen C
Stephen C

Reputation: 719109

Doing this kind of thing using regexes is unreliable. The syntax of Java is sufficiently complex that there are bound to be tricky corner cases that will cause your regexes to miscount.

Similarly using a bytecode analyser is liable to give you incorrect results because there isn't necessarily a one-to-one correspondence between source code operators / operands and bytecode instructions. The Java compiler may reorganize and rewrite the code in non-obvious ways.

The best way to do this sort of thing is to find a decent Java AST library, use that to parse your source code, and then traverse the AST to extract the information you need. (In this case, you need to count the operator and operand nodes.)

Upvotes: 5

Related Questions