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

时间:2015-06-02 04:06:09

标签: java parsing abstract-syntax-tree javaparser

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

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

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

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

(4 / 10.0) + 15

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

  • 您可以通过选中binEx.getLeft() instanceof BinaryExp来检查实际类型。如果此计算结果为true,则可以转换为BinaryExpression。
  • 但可能它评估为false,节点的类型为EnclosedExpr(括号)。然后二进制表达式是左节点的子节点

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

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