Antlr4 在ANTLR语法中有条件地添加自定义代码

Antlr4 在ANTLR语法中有条件地添加自定义代码,antlr4,portability,Antlr4,Portability,我正在写一个语法,它需要一些用目标语言编写的自定义代码。这是相当容易添加的 @parser::members { } 问题是我的目标是多种语言,而我还没有找到一种不复制并粘贴整个语法就瞄准多种语言的方法 有没有办法不使用复制+粘贴或外部预处理器?恐怕没有解决方案。根据定义,操作代码是用目标语言编写的,因为它直接从语法复制到生成的文件中。如果你有目标语言,所有的语言都可以处理 > IFIFF·Endof(例如,C、C++和Obj-C),那么你就可以用它来分离各个代码部分。否则,您可以使用带有占位

我正在写一个语法,它需要一些用目标语言编写的自定义代码。这是相当容易添加的

@parser::members {
}
问题是我的目标是多种语言,而我还没有找到一种不复制并粘贴整个语法就瞄准多种语言的方法


有没有办法不使用复制+粘贴或外部预处理器?

恐怕没有解决方案。根据定义,操作代码是用目标语言编写的,因为它直接从语法复制到生成的文件中。如果你有目标语言,所有的语言都可以处理<代码> > IFIFF·Endof(例如,C、C++和Obj-C),那么你就可以用它来分离各个代码部分。否则,您可以使用带有占位符的基本语法,并在预编译步骤(在该步骤中生成解析器/词法分析器)中处理该占位符,并用真正的目标代码替换占位符。这甚至使语法更清晰。

这或多或少就是我现在设计的(我使用模板引擎在预处理步骤中转换语法)。我只是认为可能有一种更明显的方法。我同意将目标语言和语法分开会使代码更容易阅读。我更希望ANTLR内置类似的东西,或者至少有一个处理它的最佳实践文档。