我正在尝试找出如何在单个 ExpressionStatement 之前插入 IfStatement。
例如,我有一个 ExpressionStatement
节点:
System.out.println("Hello World!");
在访问(ExpressionStatement 节点)
之后,该节点将是:
if ( 1 < 2)
System.out.println("Hello World!");
我在 Java 中使用 ASTParser 来执行此操作。
如何解决这个问题?
最佳答案
我不知道这是什么类型的 AST 解析器,但从你模糊的描述来看,我猜你正试图在你的表达式语句周围包裹一个 if
。
请注意,您提供的代码不是表达式,而是语句,更详细地说是表达式语句。另外,虽然 if
位于代码中的语句“之前”,但它在 AST 中是其父语句,因为它与将大括号括在表达式语句周围完全相同。
要将 if
包裹在语句周围,您必须:
- 获取语句节点的父节点
- 从其父节点中删除语句节点
- 创建一个新的if节点
- 给if节点它的条件
- 将语句节点设置为if节点的语句
- 在表达式节点所在的位置添加if节点
所以在操作之前 AST 是:
// Code:
System.out.println("Hello World!");
// AST:
<Some node>
ExpressionStatement // expression + ';'
Expression // System.out...
...
操作后是:
// Code:
if(someCondition) System.out.println("Hello World!");
// AST:
<Some node>
IfStatement // if(condition) statement
Expression (Condition) // someCondition
ExpressionStatement (Statement) // expression + ';'
Expression // System.out...
...
关于java - AST解析器: insert IfStatement before ExpressionStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403892/