Разобрать postgresql -pycparser.plyparser.ParseError before: pgwin32_signal_event
Мне нужно проанализировать проект с открытым исходным кодом Postgresql с помощью pycparser.
При синтаксическом анализе его исходного кода возникает следующая ошибка:
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, создаю его с помощью Visual Studio Express 2017 на Windows 10 (64-разрядная версия)
0 ответов
Сообщение в блоге, которое вы цитировали в комментарии, является каноническим ресурсом. Парсинг больших проектов на Си не легок - у них есть свои причуды - поэтому требуется работа. Я сомневаюсь, что это разрешимо в рамках вопроса переполнения стека.
Вы должны начать решать проблемы один за другим - например, посмотрите на pgwin32_signal_event
токен в pg_config_os.h
- почему это не может быть проанализировано? Может быть, его тип не разбирается? Это было определено? Может ли он быть добавлен в "фальшивый" заголовок и т. Д. К сожалению, нет простого способа сделать это, кроме как работать с проблемами один за другим.
Обязательно предварительно обработайте файл, который вы анализируете, выгрузив полную предварительно обработанную версию в одну .c
файл - это объединяет все типы в один файл, с которым вы можете работать.