首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pycparser解析器解析C中struct中的结构?

使用pycparser解析器解析C中struct中的结构?
EN

Stack Overflow用户
提问于 2016-07-25 05:26:17
回答 1查看 3.4K关注 0票数 2

我有这个示例c文件,我想解析:

代码语言:javascript
复制
StrcutWithinStruct.c
// simple struct within a struct example

struct A {
 int a;
};

struct B {
 A a;
 int b;
};

我运行聚半解析器来解析它,并使用以下代码

代码语言:javascript
复制
exploreStruct.py
#parse StructWithinStruct

from pycparser import parse_file
ast = parse_file(filename='..\StructWithinStruct.c')
ast.show()

因此,我得到了以下信息:

代码语言:javascript
复制
Tracback (most recent call last):
  File "exploreStruct.py", line 3, in <module>
   ast = parse_file(filename='...\StructWithinStruct.c')
  File "D:\...\pycparser\__init__.py", line 93, in parse_file
   return parser.parse(text,filename)
  File "D:\...\pycparser\c_parser.py", line 146, in parse
   debug=debug_level)
  File "D:\...\pycparser\yacc.py", line 331, in parse
   return self.parseropt_notrack(input, lexer, debug, tracking, tokenfunc)
  File "D:\...\pycparser\yacc.py", line 1181, in parseropt_notrack
   tok=call_errorfunc(self.errorfunc, errtoken, self)
  File "D:\...\pycparser\yacc.py", line 193, in call_errorfunc
   r=errorfunc(token)
  File "D:\...\pycparser\c_parser.py", line 1699, in p_error
   column=self.clex.find_tok_column(p)))
  File "D:\...\pycparser\plyparser.py", line 55, in _parse_error
   raise ParseError("%s: %s % (coord, msg))
pycparser.plyparser.ParserError: D:...\StructWithinStruct.c:7:2: Before A

那么,not解析器可以在struct中处理struct吗?我认为这是一些基本的要求,所以我很确定问题就在我的配置中.

还有一件事:我知道pcypareser作者@班德斯基说应该使用使用Clang解析C++,但是我想知道现在是否有另一种方法可以解析C++ (最好是通过使用Clang解析C++),并且对用户是友好的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-07-25 05:36:11

您的struct声明没有用分号关闭:

此外,A本身并不是C中的类型名称。仅在C++ A中就足够了,但是在C中,您需要添加struct关键字。

代码语言:javascript
复制
struct A {
 int a;
};

struct B {
 struct A a;
 int b;
};

或者,可以使用typedef关键字声明同义词:

代码语言:javascript
复制
struct A {
 int a;
};

typedef struct A A;

或者,更短:

代码语言:javascript
复制
typedef struct A {
 int a;
} A;

从那一刻起,声明

代码语言:javascript
复制
A a;

应该正确编译。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38560264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档