如何使用 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)
。
我正在使用 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)
。