我试图使用pycparser来解析这个C代码:
下面是一个具有最小示例和Makefile的回购程序:
https://github.com/nbeaver/pycparser-problem
在Debian上使用pycparser v2.14 (来自pip)和gcc 4.9.2。
我尝试过的事情:
-nostdinc标志传递给gcc并包含fake_libc_include文件夹。-D'__attribute__(x)='取出GCC扩展<sys/param.h>中使用假头-std=c99不兼容,请使用C99。这就是回溯的样子:
Traceback (most recent call last):
File "just_parse.py", line 21, in <module>
parse(path)
File "just_parse.py", line 9, in parse
ast = pycparser.parse_file(filename)
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/__init__.py", line 93, in parse_file
return parser.parse(text, filename)
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/c_parser.py", line 146, in parse
debug=debuglevel)
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/ply/yacc.py", line 265, in parse
return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc)
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/ply/yacc.py", line 1047, in parseopt_notrack
tok = self.errorfunc(errtoken)
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/c_parser.py", line 1680, in p_error
column=self.clex.find_tok_column(p)))
File "/home/nathaniel/.local/lib/python2.7/site-packages/pycparser/plyparser.py", line 55, in _parse_error
raise ParseError("%s: %s" % (coord, msg))
pycparser.plyparser.ParseError: in/d_adsc_two_theta.c:63:82: before: .回溯指向这一行:
它反过来指向这个#define宏:
发布于 2016-09-14 18:09:13
原因似乎是offsetof()函数。但是,通过最近的提交来确定最低限度的工作示例:
https://stackoverflow.com/questions/39029209
复制相似问题