pycparser.plyparser.ParseError 复杂结构
pycparser.plyparser.ParseError on complex struct
我正在尝试使用 pycparser
来解析此 C 代码:
带有最小示例和 Makefile 的 repo 在这里:
https://github.com/nbeaver/pycparser-problem
在 Debian Jessie 上使用 pycparser
v2.14(来自 pip)和 gcc 4.9.2。
我尝试过的事情:
- 将
-nostdinc
标志传递给 gcc
并包括 fake_libc_include
文件夹。
- 使用
-D'__attribute__(x)='
去掉GCC扩展
- 使用假 headers 例如
<sys/param.h>
- 如果代码不兼容 C99,请使用
-std=c99
。
- 复制 redis example 以防我的机器出现异常。
回溯看起来是这样的:
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
宏:
原因似乎是 offsetof()
函数。最小的工作示例由最近的提交修复,但是:
我正在尝试使用 pycparser
来解析此 C 代码:
带有最小示例和 Makefile 的 repo 在这里:
https://github.com/nbeaver/pycparser-problem
在 Debian Jessie 上使用 pycparser
v2.14(来自 pip)和 gcc 4.9.2。
我尝试过的事情:
- 将
-nostdinc
标志传递给gcc
并包括fake_libc_include
文件夹。 - 使用
-D'__attribute__(x)='
去掉GCC扩展 - 使用假 headers 例如
<sys/param.h>
- 如果代码不兼容 C99,请使用
-std=c99
。 - 复制 redis example 以防我的机器出现异常。
回溯看起来是这样的:
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
宏:
原因似乎是 offsetof()
函数。最小的工作示例由最近的提交修复,但是: