2015-07-21 96 views
1

我正在编写需要用目标语言编写的一些自定义代码的语法。这是很容易添加例如有条件地在ANTLR语法中添加自定义代码

@parser::members { 
} 

的问题是,我指定多种语言,并且我还没有找到一种方法来指定多种语言没有拷贝粘贴+整个语法。

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

回答

1

恐怕没有解决办法。动作代码按照定义用目标语言编写,因为它直接从语法复制到生成的文件。如果你的目标语言都可以处理#ifdef #endif(比如C,C++和Obj-C),那么你可以使用它来分离各个代码部分。否则,您可以在占位符中使用基本语法,并在预编译步骤(您生成解析器/词法分析器的位置)中处理该占位符,并用实际目标代码替换占位符。这甚至使语法更清晰。

+0

这或多或少是我现在正在设计的(我使用模板引擎在预处理步骤中转换语法)。我只是觉得可能有一个更明显的方法。 – Krumelur

+0

我同意将目标语言与语法分离使代码更易于阅读。我宁愿ANTLR拥有内置的内容,或者至少有一个记录在案的最佳实践。 – Krumelur