我有这个示例c文件,我想解析:
StrcutWithinStruct.c
// simple struct within a struct example
struct A {
int a;
};
struct B {
A a;
int b;
};我运行聚半解析器来解析它,并使用以下代码
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:\...\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++),并且对用户是友好的。
谢谢。
发布于 2016-07-25 05:36:11
您的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;应该正确编译。
https://stackoverflow.com/questions/38560264
复制相似问题