问题描述
我正在使用 JavaParser 解析以下代码的内容并识别语句的顺序:
class X {
void x() {
int x = 1;
if (x>4) {
x=21;
} else {
if (x>1) {
x=3;
} else {
x=212;
}
}
if (x==4) {
x=3;
}
}}
我用来解析上面例子的代码:
private static void statements(BlockStmt block,State beforeState,State afterState) {
List<State> states = new ArrayList<>();
for (Statement statement : block.getStatements()) {
states.add(new State(statement));
}
beforeState.nextStates.add(states.get(0));
for (int i = 0; i < states.size(); i++) {
State currentState = states.get(i);
State nextState;
if (i == states.size() - 1) {
nextState = afterState;
} else {
nextState = states.get(i + 1);
}
currentState.statement.accept(new VoidVisitorWithDefaults<Void>() {
@Override
public void visit(ExpressionStmt n,Void arg) {
currentState.nextStates.add(nextState);
}
@Override
public void visit(IfStmt n,Void arg) {
statements(n.getThenStmt().asBlockStmt(),currentState,nextState);
n.getElseStmt().ifPresent(elseStmt ->
statements(elseStmt.asBlockStmt(),nextState));
}
},null);
} }
我还想做的是确定当前语句是否是表达式语句(即赋值),如果是,则查找它是否是 If/Else 语句的 THEN 块中包含的最后一个语句。在上面的示例中,这将是语句 x=3;
。但是,我不确定如何实现这一点。
到目前为止,我的想法是这样的:
ExpressionStmt exprStmt = (ExpressionStmt) currentState.statement;
Node exprStmtParent = exprStmt.getParent();
List<Node> exprStmtSibilings = exprStmtParent.getChildNodes();
Node lastNode = exprStmtSiblings.get(exprStmtSiblings.size() - 1);
boolean exprStmtIsLast = lastNode == ifStmt;
适用于 if 语句但不适用于赋值。关于如何解决这个问题有什么建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)