Antlr4 中源到源的翻译

Source to source translation in Antlr4

我正在尝试将 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;
}

...

它工作得很好,但代码增长很快,变得无法维护。

有没有better/cleaner的方法来进行这种翻译?

如果你能一一翻译语言元素,ANTLR-Listener 方法就很好。

或者,您可以考虑使用 ANTLR-Visitor 方法。如果您希望多个编译器通过不同的解析树遍历策略或不同的中间结果,我认为它是合适的:

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