我正在创建一个最终必须被翻译成Java源代码的DSL。我正在使用ANTLR 4生成一个解析树(使用Visitor树行走方法)来解析基于语法文件在DSL中编写的代码片段。我正在访问方法中直接创建Java AST。
任何人都可以确认/拒绝这是否是一个好习惯?或者,如果我在将AST转换为Java之前为我的DSL构建了一个AST,那会不会有用呢?
示例(按原样,直接构建Java AST):
@Override
public JavaNode visitPrintExp(PrintExpContext ctx) {
JavaExprNode jen = (JavaExprNode) visit(ctx.exp());
JavaPrintNode jpn = new JavaPrintNode(jen);
return jpn;
}
遵循以下语法规则:
printExp:'print('exp')';
提案:
@Override
public DSLNode visitPrintExp(PrintExpContext ctx) {
DSLExprNode den = (DSLExprNode) visit(ctx.exp());
DSLPrintNode dpn = new DSLPrintNode(den);
return dpn;
}