如何使用 javaparser 获取二进制子表达式

How to get binary subexpressions with javaparser

我正在使用 javaparser 来解析 Java 个源文件的 AST。

我想将源代码中的所有二进制子表达式作为单独的节点获取。 这是我正在解析的源代码:

class MyClass {
  public MyClass() {
    double x = (4 / 10.0) + 15;
  }
}

我实现了一个接受内置 BinaryExp 类型的访问者,但它找到的唯一节点包含二进制表达式:

(4 / 10.0) + 15

有没有办法也访问子表达式“(4 / 10.0)”? 我尝试获取完整表达式的 "left operand",但它是表达式类型,而不是我预期的 BinaryExpr。

如有任何帮助,我们将不胜感激。

左操作数不能是实际类型 Expression 因为 Expression 是一个抽象 class.

  • 您可以通过检查 binEx.getLeft() instanceof BinaryExp 来检查实际类型。如果计算结果为真,您可以转换为 BinaryExpression。
  • 但可能它的计算结果为 false,并且该节点的类型为 EnclosedExpr(括号)。那么二进制表达式就是左节点的child

这可能无法解决全部问题。我认为您错过了将访问者应用到 child 节点。你必须调整 visit(BinaryExpr n, A arg):

  • 如果您使用 GenericVisitorAdaptor,则必须调用 super.visit(n,arg)
  • 如果您编写了自己的适配器,则必须在每个 child 上调用 accept(this, arg)