有没有一种方法可以使用一个ANTLR语法来针对多种语言?

4
我正在使用ANTLR语法为自定义语言开发Visual Studio中的语言服务,但是该语法充满了C ++代码来处理预处理指令并提高编译器的效率。
然而,为Visual Studio编写语言服务很麻烦,因此我需要用C#解析器来实现相同的语言。这意味着我必须设置language=CSharp2并从语法中剥离所有C ++代码。
我正在考虑编写一个小型导出程序,以从语法中删除所有C ++代码,并将类似于{ $channel = HIDDEN; }的简单语句转换为{ $channel = TokenChannels.Hidden; }
是否有更聪明的方法来做到这一点?例如通过模板或嵌入两种语言的小技巧?

2
你不能将C++视为托管C++吗?这样应该与周围的C#世界兼容。 - Ira Baxter
ANTLR必须定义自己的抽象编程语言用于语义表达,但它没有这样做。我在一个持续进行的项目中选择的做法是将其针对Python进行,我可以直接使用Python,或使用Jython(已测试)从Java中使用 Python,或使用Cython从任何其他语言使用。 - Apalala
1个回答

1
我会把问题分成两个阶段,使用AST。您的解析器应该使用中立语言的语法(生成AST),并使用Antlr工具的-target选项在所选择的目标语言(C ++、C#、Java等)中生成解析器。
然后,使用目标语言实现AST walkers和相应的操作。这样做的好处是,一旦完成一个AST walker,您可以复制它并仅更改另一个目标语言的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接