java accept方法_Java Statement.accept方法代码示例

import jdk.nashorn.internal.ir.Statement; //导入方法依赖的package包/类

/**

* Constructor.

*/

Lower(final Compiler compiler) {

super(new BlockLexicalContext() {

@Override

public List popStatements() {

final List newStatements = new ArrayList<>();

boolean terminated = false;

final List statements = super.popStatements();

for (final Statement statement : statements) {

if (!terminated) {

newStatements.add(statement);

if (statement.isTerminal() || statement instanceof BreakNode || statement instanceof ContinueNode) { //TODO hasGoto? But some Loops are hasGoto too - why?

terminated = true;

}

} else {

statement.accept(new NodeVisitor(new LexicalContext()) {

@Override

public boolean enterVarNode(final VarNode varNode) {

newStatements.add(varNode.setInit(null));

return false;

}

});

}

}

return newStatements;

}

@Override

protected Block afterSetStatements(final Block block) {

final List stmts = block.getStatements();

for(final ListIterator li = stmts.listIterator(stmts.size()); li.hasPrevious();) {

final Statement stmt = li.previous();

// popStatements() guarantees that the only thing after a terminal statement are uninitialized

// VarNodes. We skip past those, and set the terminal state of the block to the value of the

// terminal state of the first statement that is not an uninitialized VarNode.

if(!(stmt instanceof VarNode && ((VarNode)stmt).getInit() == null)) {

return block.setIsTerminal(this, stmt.isTerminal());

}

}

return block.setIsTerminal(this, false);

}

});

this.log = initLogger(compiler.getContext());

}

Java中可以使用第三方库如JSqlParser和PrettySQL来格式化SQL语句。其中,JSqlParser可以将SQL语句解析成AST(抽象语法树)形式,然后再将AST转化为格式化后的SQL语句;而PrettySQL则可以直接对SQL语句进行格式化。 以下是使用JSqlParser进行SQL语句格式化的示例代码: ```java import java.io.StringReader; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.util.deparser.ExpressionDeParser; import net.sf.jsqlparser.util.deparser.SelectDeParser; import net.sf.jsqlparser.util.deparser.StatementDeParser; public class SqlFormatter { public static String format(String sql) throws Exception { Statement stmt = CCJSqlParserUtil.parse(new StringReader(sql)); SelectDeParser selectDeparser = new SelectDeParser(); StatementDeParser stmtDeparser = new StatementDeParser(selectDeparser, new StringBuilder()); ExpressionDeParser expressionDeparser = new ExpressionDeParser(stmtDeparser, selectDeparser, new StringBuilder()); stmtDeparser.setExpressionVisitor(expressionDeparser); stmt.accept(stmtDeparser); return stmtDeparser.getBuffer().toString(); } } ``` 使用示例: ```java String sql = "SELECT id, name FROM users WHERE age > 18"; String formattedSql = SqlFormatter.format(sql); System.out.println(formattedSql); ``` 输出结果: ``` SELECT id, name FROM users WHERE age > 18 ``` 注:JSqlParser还可以进行更复杂的SQL语句解析和转化,如增、删、改操作,JOIN查询等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值