Java
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import org.stringtemplate.v4.*;
public class SQLQueryGenerator {
public static void main(String[] args) throws Exception {
ANTLRInputStream input = new ANTLRInputStream("SELECT * FROM Customers");
SQLLexer lexer = new SQLLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
SQLParser parser = new SQLParser(tokens);
ParseTree tree = parser.query();
STGroup stGroup = new STGroupFile("SqlTemplates.stg");
ST st = stGroup.getInstanceOf("selectQuery");
ParseTreeWalker walker = new ParseTreeWalker();
SQLTreeListener listener = new SQLTreeListener(st);
walker.walk(listener, tree);
System.out.println(st.render());
}
}
class SQLTreeListener extends SQLBaseListener {
private ST st;
public SQLTreeListener(ST template) {
st = template;
}
@Override
public void enterSelectStmt(SQLParser.SelectStmtContext ctx) {
String tableName = ctx.tableName().getText();
st.add("table", tableName);
}
}
HTML
selectQuery(table) ::= <<
SELECT * FROM <table>;
>>
SELECT * FROM Customers;