2011-09-22 114 views
3

我正在Visual Studio中使用ANTLR语法开发自定义语言的语言服务。但是,语法中充满了C++代码来处理预处理器指令和编译器的效率原因。有没有办法使用一种针对多种语言的ANTLR语法?

Visual Studio的语言服务是用C++编写的一种痛苦,所以我需要一个用于相同语言的C#解析器。这意味着我必须设置language=CSharp2并从语法中去除所有C++代码。

我正在考虑编写一个小的导出程序,将所有C++代码从语法中删除,并将诸如{ $channel = HIDDEN; }之类的简单语句转换为{ $channel = TokenChannels.Hidden; }

有没有更聪明的方法来做到这一点?就像通过模板,或者在语法中嵌入两种语言的小窍门一样?

+2

你不能把C++当作托管C++吗?这应该与它周围的C#世界兼容。 –

+0

ANTLR必须定义它自己的语义表达式的抽象编程语言,而不是。我选择处理正在进行的项目的目标是直接使用Python,或者使用Jython(经过测试)在Java中使用Python,或使用Cython使用任何其他语言。 – Apalala

回答

0

我会使用AST将问题分成两个阶段。使解析器处于目标语言中立语法(产生AST),并使用Antlr工具的-target选项以您选择的目标语言(C++,C#,Java等)生成解析器。

然后用你的动作实现目标语言的AST步行者。这样做的好处是,一旦你完成了一个AST步行者,你可以复制它,只需改变另一个目标语言的动作。

相关问题