有没有办法使用一种针对多种语言的ANTLR语法?

时间:2011-09-22 13:21:27

标签: antlr

我正在使用ANTLR语法为Visual Studio开发语言服务。但是,语法中填充了C ++代码来处理预处理程序指令以及编译器的效率原因。

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

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

有更聪明的方法吗?比如通过模板,或者在语法中嵌入两种语言的小技巧?

1 个答案:

答案 0 :(得分:0)

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

然后使用您的操作以目标语言实现AST walker。这样做的好处是,一旦你完成一个AST walker,你可以复制它,只需更改另一个目标语言的动作。