python - 解析 postgresql -pycparser.plyparser.ParseError 之前:pgwin32_signal_event
问题描述
我需要使用 pycparser 解析一个开源项目 Postgresql。
在解析其源代码时出现以下错误:
Traceback (most recent call last):
File "examples\using_cpp_libc.py", line 48, in <module>
getAllFiles(projectName)
File "examples\using_cpp_libc.py", line 29, in getAllFiles
ast = parse_file(dirName+'\\'+fname, use_cpp = True, cpp_path = 'cpp',
cpp_args = [r'-nostdinc',r'-Iutils/fake_libc_include',r'-
Iprojects/postgresql/src/include'])
File "G:\python\pycparser-master\pycparser\__init__.py", line 92, in
parse_file
return parser.parse(text, filename)
File "G:\python\pycparser-master\pycparser\c_parser.py", line 152, in parse
debug=debuglevel)
File "G:\python\pycparser-master\pycparser\ply\yacc.py", line 334, in parse
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
File "G:\python\pycparser-master\pycparser\ply\yacc.py", line 1204, in
parseopt_notrack
tok = call_errorfunc(self.errorfunc, errtoken, self)
File "G:\python\pycparser-master\pycparser\ply\yacc.py", line 193, in
call_errorfunc
r = errorfunc(token)
File "G:\python\pycparser-master\pycparser\c_parser.py", line 1838, in
p_error
column=self.clex.find_tok_column(p)))
File "G:\python\pycparser-master\pycparser\plyparser.py", line 67, in
_parse_error
raise ParseError("%s: %s" % (coord, msg))
pycparser.plyparser.ParseError:
projects/postgresql/src/include/pg_config_os.h:366:15: before:
pgwin32_signal_event
我正在使用 postgresql-9.6.9,在 Windows 10(64 位)上使用 Visual Studio Express 2017 构建它
解决方案
您在评论中引用的博客文章是规范资源。解析大型 C 项目并不容易——它们有自己的怪癖——所以需要工作。我怀疑它是否可以在 Stack Overflow 问题的范围内解决。
您需要开始一一解决问题-例如查看pgwin32_signal_event
令牌pg_config_os.h
-为什么无法解析?也许它的类型是不可解析的?被定义了吗?是否可以将其添加到“假”标题等中。不幸的是,除了一一解决问题之外,没有简单的方法可以做到这一点。
确保首先预处理您正在解析的文件,将完整的预处理版本转储到单个.c
文件中 - 这会将所有类型放入您可以使用的单个文件中。
推荐阅读
- python - 语法错误代码之前有效,但现在无效
- python - 按组和虚拟代码分类变量透视长格式分类数据
- javascript - 在 Rollup 中,创建 ESM 模块,除了 Flow 之外没有 babel 转译
- css - 触发移动设备/中屏元素“悬停”滚动效果
- node.js - XRPL 签名交易,卡在从密码中获取 xrpl 钱包
- react-native - Onclick按钮,状态不会改变
- r - 使用 readRDS() 从 Dropbox 链接加载 rds
- python - 如何根据 groupby() Pandas 中操作后的结果为每个组创建一组行?
- c++ - 我很难处理数组
- node.js - 无法使用 xml2js 节点包解析和转换大型 xml 文件