ANTLR在给定语法的c#文件中生成c ++代码

时间:2012-05-21 15:23:54

标签: c# antlr

我正在尝试在C#应用程序中解析并执行一个相当简单的Oracle SQL查询。为此,我决定使用ANTLR作为解析器工具,因为Oracle SQL语言的语法已经可以从grammar list page下载。

我还选择了最新版本的ANTLR 3.4并使用以下命令生成要在我的应用程序中使用的C#源文件

java -cp antlr-3.4-complete.jar org.antlr.Tool OracleSQL.g

小注释:原始语法文件使用C作为输出语言,因此我将其更改为CSharp2(我也尝试了CSharp3,但没有运气)。

代码的问题是我得到像这样的代码块

if ((((( !(strcasecmp((const char*)LT(1)->getText(LT(1))->chars, "SUBPARTITION")) )&&

因此解决方案无法编译。

我也尝试过发布here的解决方案,但无济于事。

我错过了什么?

谢谢, 阿德里安。

1 个答案:

答案 0 :(得分:3)

通常,ANTLR语法包含嵌入式(目标)代码。 C代码,在您的情况下。您不能简单地将language=C;更改为language=CSharp2(或其他语言):它只会导致ANTLR在嵌入式C代码的C#中生成词法分析器和/或解析器。您必须自己重写所有嵌入式C代码。

例如,以下C目标语法:

grammar T;

options {
  language=C;
}

parse
 : Any* EOF {printf("done!\n");}
 ;

Any
 : .
 ;

应该重写(对于C#),如下所示:

grammar T;

options {
  language=CSharp2; // or CSharp3
}

parse
 : Any* EOF {Console.WriteLine("done!");}
 ;

Any
 : .
 ;