我试图找出如何在单个ExpressionStatement之前插入IfStatement。
例如,我有一个ExpressionStatement
节点:
System.out.println("Hello World!");
在visit(ExpressionStatement node)
之后,节点将是:
if ( 1 < 2)
System.out.println("Hello World!");
我在Java中使用ASTParser来执行此操作。
如何解决此问题?
答案 0 :(得分:1)
我不确切知道这是什么类型的AST解析器,但是从你模糊的描述中我猜你正试图在你的表达式语句中包裹if
。
请注意,您提供的代码不是表达式而是表达式,更详细地说是表达式语句。此外,虽然if
是&#34;之前&#34;代码中的语句,它是AST中的父语句,因为它与在表达式语句周围包装花括号完全相同。
要在语句周围包裹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...
...