1
我正在编写需要用目标语言编写的一些自定义代码的语法。这是很容易添加例如有条件地在ANTLR语法中添加自定义代码
@parser::members {
}
的问题是,我指定多种语言,并且我还没有找到一种方法来指定多种语言没有拷贝粘贴+整个语法。
有没有办法复制粘贴或外部预处理器?
我正在编写需要用目标语言编写的一些自定义代码的语法。这是很容易添加例如有条件地在ANTLR语法中添加自定义代码
@parser::members {
}
的问题是,我指定多种语言,并且我还没有找到一种方法来指定多种语言没有拷贝粘贴+整个语法。
有没有办法复制粘贴或外部预处理器?
恐怕没有解决办法。动作代码按照定义用目标语言编写,因为它直接从语法复制到生成的文件。如果你的目标语言都可以处理#ifdef #endif
(比如C,C++和Obj-C),那么你可以使用它来分离各个代码部分。否则,您可以在占位符中使用基本语法,并在预编译步骤(您生成解析器/词法分析器的位置)中处理该占位符,并用实际目标代码替换占位符。这甚至使语法更清晰。
这或多或少是我现在正在设计的(我使用模板引擎在预处理步骤中转换语法)。我只是觉得可能有一个更明显的方法。 – Krumelur
我同意将目标语言与语法分离使代码更易于阅读。我宁愿ANTLR拥有内置的内容,或者至少有一个记录在案的最佳实践。 – Krumelur