正在使用pycparser分析C中结构中的结构
Parsing struct within struct in C using pycparser?
我有一个要解析的示例c文件:
StrcutWithinStruct.c
// simple struct within a struct example
struct A {
int a;
};
struct B {
A a;
int b;
};
我正在运行pcyparser来解析它,使用以下代码
exploreStruct.py
#parse StructWithinStruct
from pycparser import parse_file
ast = parse_file(filename='..StructWithinStruct.c')
ast.show()
结果,我得到了以下内容:
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:...pycparserc_parser.py", line 146, in parse
debug=debug_level)
File "D:...pycparseryacc.py", line 331, in parse
return self.parseropt_notrack(input, lexer, debug, tracking, tokenfunc)
File "D:...pycparseryacc.py", line 1181, in parseropt_notrack
tok=call_errorfunc(self.errorfunc, errtoken, self)
File "D:...pycparseryacc.py", line 193, in call_errorfunc
r=errorfunc(token)
File "D:...pycparserc_parser.py", line 1699, in p_error
column=self.clex.find_tok_column(p)))
File "D:...pycparserplyparser.py", line 55, in _parse_error
raise ParseError("%s: %s % (coord, msg))
pycparser.plyparser.ParserError: D:...StructWithinStruct.c:7:2: Before A
那么,pycparser是否可以处理struct中的struct?我认为这是一些基本要求,所以我很确定问题出在我的配置中。。。
还有一件事:我知道pcypareser的作者@Eli Bendersky说应该使用Clang来解析C++,但我想知道现在是否有另一种解析C++的选项(最好是通过Python),并且用户友好。
谢谢。
您的struct
声明不是用分号关闭的
此外,A
本身不是C中的类型名称。在C++中,仅A
就足够了,但在C中,您需要添加struct
关键字。
struct A {
int a;
};
struct B {
struct A a;
int b;
};
或者,您可以用typedef
关键字声明一个同义词:
struct A {
int a;
};
typedef struct A A;
或者,更短:
typedef struct A {
int a;
} A;
从那时起,申报
A a;
应该正确编译。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- (C++)分析树以计算返回错误值的简单算术表达式
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 从行分析中获取结构
- 如何使用结构分析此代码的输出
- 当声明结构数组时,CPPCHECK停止对整个文件的分析
- C 从TXT和分析到类结构
- 由Malloc分配的结构,为什么?C 代码分析
- 正在分析nf_conntrack结构
- 正在分析boost::spirit上的递归结构
- 正在分析具有CR LF EOL结构的.csv文件
- 正在分析XML中C/C++头文件中定义的嵌套结构/联合
- 在C++中使用结构进行 XML 分析
- 正在分析嵌套的CSS结构
- 正在使用pycparser分析C中结构中的结构
- 使用C++分析文件,将值加载到结构中