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

时间:2015-07-21 22:19:37

标签: antlr4 portability

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

@parser::members {
}

问题是我的目标是多种语言,而且我还没有找到一种方法来定位多种语言而无需复制+粘贴整个语法。

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

1 个答案:

答案 0 :(得分:1)

我担心没有解决方案。根据定义,动作代码是用目标语言编写的,因为它直接从语法复制到生成的文件中。如果您有目标语言都可以处理#ifdef #endif(例如,C,C ++和Obj-C),那么您可以使用它来分隔单个代码部分。否则,您可以使用带有占位符的基本语法,并在预编译步骤(生成解析器/词法分析器)中处理,并用实际目标代码替换占位符。这甚至使语法更清晰。