Antlr4 中的源到源翻译

Source to source translation in Antlr4

本文关键字:翻译 Antlr4      更新时间:2023-09-26

我正在尝试将PLSQL代码转换为JavaScript代码。我正在使用具有以下语法的Antlr4:https://github.com/developeron29/PLSQLParser。

我使用侦听器来翻译代码片段,如下所示:

@Override
public void enterBody(BodyContext ctx) {
    functionBody += "function " + funcName + "{'n;
}
@Override
public void exitBody(BodyContext ctx) {
    functionBody += "}'n;
}
...

它运行良好,但代码增长迅速,并且变得无法维护。

有没有更好/更干净的方法来进行这种翻译?

如果可以逐个翻译语言元素,则ANTLR-Listener方法很好。

或者,您可以考虑ANTLR-访客方法。如果您期望使用不同的解析树遍历策略或不同的中间结果进行多个编译器传递,我认为是合适的:

  • 一个节点的代码不得在进入和退出之间拆分
  • 您可以修剪解析树,甚至可以构造一个AST(AST构建器将是访问者)
  • 您可以轻松地将节点的评估委托给其他解析树访问者