gpt4 book ai didi

python - 使用pycparser在C中的结构中解析结构?

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:51 28 4
gpt4 key购买 nike

我有这个要解析的示例 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:\...\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

那么,pycparser 是否可以在结构中处理结构?我认为这是一些基本要求,所以我很确定问题出在我的配置中的某个地方......

还有一件事:我知道 pcypareser 的作者,@ Eli Bendersky , 说应该 use Clang to parse 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;

应该正确编译。

关于python - 使用pycparser在C中的结构中解析结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38560264/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com