繁体   English   中英

如何为C常数结构设置ANTLR语法?

[英]How to setup ANTLR grammar for a C constant structure?

我试图在C#控制台应用程序中使用ANTLR4从自动生成的C文件(与IAR编译)中解析出版本号。 由于某种原因,它似乎不喜欢我的常量声明。

我收到的ANTLR错误是“输入不匹配'=',期望{'(','*','^',':',';',标识符}

//Declared in another file...
typedef struct
{
    uint16_t major;
    uint16_t minor;
    uint16_t build;
    uint16_t revision;
} 
VERSION;

//In the C file I'm trying to parse
const VERSION version =
{
    .major = 1,
    .minor = 2,
    .build = 3000,
    .revision = 40000,
};

这是我正在尝试尝试解析的C#代码。 我很确定StructDeclaration是错误的,但是在初始化Lexer之后我仍然没有得到任何令牌。

using (FileStream stream = new FileStream(path, FileMode.Open))
{
     AntlrInputStream inputStream = new AntlrInputStream(stream);
     CLexer cLexer = new CLexer(inputStream);
     CommonTokenStream commonTokenStream = new CommonTokenStream(cLexer);
     CParser cParser = new CParser(commonTokenStream);

     CParser.StructDeclarationContext decl = cParser.structDeclaration();
}

这是我正在使用的g4文件。 https://github.com/antlr/grammars-v4/blob/master/c/C.g4

我需要添加哪些规则才能支持此规则?

 CParser.StructDeclarationContext decl = cParser.structDeclaration(); 

structDeclaration规则将能够解析该struct ... VERSION; 部分,但是它不能处理typedef关键字,也不能处理其后的变量定义,因为它们不是struct声明的一部分。

解析整个文件时, compilationUnit是您要调用的规则(实际上,它实际上是唯一要从外部调用的规则-这就是为什么它以EOF结尾)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM