0

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

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

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

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

(4 / 10.0) + 15

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

任何帮助,将不胜感激。

4

1 回答 1

0

左操作数不能是实际类型Expression,因为Expression它是一个抽象类。

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

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

  • 如果你使用 aGenericVisitorAdaptor你将不得不打电话super.visit(n,arg)
  • 如果您编写了自己的适配器,则必须调用accept(this, arg)每个孩子。
于 2015-06-02T05:03:58.973 回答