ANTLR 在给定语法的 C# 文件中生成 C++ 代码
本文关键字:C++ 代码 文件 语法 ANTLR | 更新日期: 2023-09-27 18:34:55
我正在尝试在我的C#应用程序中解析和执行一个相当简单的Oracle SQL查询。为此,我决定使用 ANTLR 作为解析器工具,因为 Oracle SQL 语言的语法已经可以从语法列表页面下载。
我还选择了最新版本的 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")) )&&
因此,解决方案无法编译。
我也尝试了此处发布的解决方案,但无济于事。
我错过了什么?
谢谢艾利安。
通常,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
: .
;