gpt4 book ai didi

python - 使用 GnuCParser 查找指针参数?

转载 作者:行者123 更新时间:2023-12-01 03:38:04 25 4
gpt4 key购买 nike

我正在尝试解析这段 C 代码:

void foo(const int *bar, int * const baz);

使用GnuCParserpycparserext的一部分.

基于this answer我预计会看到一些 PtrDecl,但这是我从生成的解析树上的 ast.show() 得到的结果:

FileAST:
Decl: foo, [], [], []
FuncDecl:
ParamList:
Decl: bar, ['const'], [], []
TypeDeclExt: bar, ['const']
IdentifierType: ['int']
Decl: baz, [], [], []
TypeDeclExt: baz, []
IdentifierType: ['int']
TypeDecl: foo, []
IdentifierType: ['void']

请注意 baz,一个“指向 int 的 const 指针”,没有一丝 const(或“pointeryness”)在 ast.show() 打印的数据中。这种差异是由于 GnuCParser 造成的吗?

如何从 AST 中找出 baz 的类型?我的实际 C 代码需要 GNU 解析器。我使用的是 pycparserext 版本 2016.1。

更新:我创建了一个 pycparserext issue on GitHub .

最佳答案

这是由于 pycparserext 中的错误造成的,维护者现已修复该错误,并且问题中提到的问题已被关闭。该修复已在版本 2016.2 中进行。

现在的输出是:

>>> from pycparserext.ext_c_parser import GnuCParser
>>> p=GnuCParser()
>>> ast=p.parse("void foo(const int *bar, int * const baz);")
>>> ast.show()
FileAST:
Decl: foo, [], [], []
FuncDecl:
ParamList:
Decl: bar, ['const'], [], []
PtrDecl: []
TypeDecl: bar, ['const']
IdentifierType: ['int']
Decl: baz, [], [], []
PtrDecl: ['const']
TypeDecl: baz, []
IdentifierType: ['int']
TypeDecl: foo, []
IdentifierType: ['void']

显然这包含更多的 Ptr 节点,这是一个非常好的迹象。 pycparserext 代码还添加了一个测试,以便将来捕获此问题。

非常令人印象深刻。 :)

关于python - 使用 GnuCParser 查找指针参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094339/

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