gpt4 book ai didi

pycparser - #include<header> 与 pycparser

转载 作者:行者123 更新时间:2023-12-05 04:16:18 25 4
gpt4 key购买 nike

使用 pycparser 我在要解析的 C 代码中遇到了包含 header 的问题。出于某种神秘的原因,一些“假 header ”可以正常工作,而另一些则不能正常工作。例如,如果我包含 stdint.h,pycparser 可以毫无问题地解析代码。但是,如果我尝试使用 stdio.h,则会出现错误。因此,pycparser 给出的示例代码(在示例文件夹中使用_gcc_E_libc.py)不起作用!

这是引用示例代码中使用的内容:

ast = parse_file(filename, use_cpp=True,
cpp_path='gcc',
cpp_args=['-E', r'-I../utils/fake_libc_include'])

这是我得到的错误:

    Traceback (most recent call last):
File "/home/patatarte/pycparser/examples/using_gcc_E_libc.py", line 29, in <module>
cpp_args=['-E', r'-I../utils/fake_libc_include'])
File "/usr/lib/python3.4/site-packages/pycparser/__init__.py", line 93, in parse_file
return parser.parse(text, filename)
File "/usr/lib/python3.4/site-packages/pycparser/c_parser.py", line 138, in parse
debug=debuglevel)
File "/usr/lib/python3.4/site-packages/pycparser/ply/yacc.py", line 265, in parse
return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc)
File "/usr/lib/python3.4/site-packages/pycparser/ply/yacc.py", line 1047, in parseopt_notrack
tok = self.errorfunc(errtoken)
File "/usr/lib/python3.4/site-packages/pycparser/c_parser.py", line 1631, in p_error
column=self.clex.find_tok_column(p)))
File "/usr/lib/python3.4/site-packages/pycparser/plyparser.py", line 54, in _parse_error
raise ParseError("%s: %s" % (coord, msg))
pycparser.plyparser.ParseError: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/include/stdarg.h:40:27: before: __gnuc_va_list

有人可以帮助我理解为什么会发生这种情况以及我该如何解决吗?

提前致谢!

最佳答案

假 header 的存在是有原因的。虽然 可能 让 pycparser 解析 Linux 上的系统 header ,但它需要工作,而且 99.9% 的时间都是不必要的。

您确定假 header 确实正确包含在您正在解析的代码中吗?

调试此问题的一种方法是首先使用 gcc -E 和相关(假) header 预处理代码,然后在预处理文件上运行 pycparser。这使您可以将问题一分为二,并准确了解问题出在哪里。

关于pycparser - #include&lt;header&gt; 与 pycparser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047972/

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