2016-08-18 2 views
3

Я пытаюсь использовать pycparser разобрать этот код C:pycparser.plyparser.ParseError на сложной структуры

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c

РЕПО- с минимальным примером и Makefile здесь:

https://github.com/nbeaver/pycparser-problem

Использование pycparser v2.14 (from pip) и gcc 4.9.2 на Debian Jessie.

вещи я попытался:

  • Пропустите -nostdinc флаг gcc и включая папку fake_libc_include.
  • Использовать -D'__attribute__(x)=', чтобы вытащить расширения GCC
  • Используйте поддельные заголовки, например. <sys/param.h>
  • Используйте код -std=c99, если код не совместим с 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: . 

The TraceBack точек этой линии:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c#L63

в свою очередь, указывает на этот #define макрос:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/mx_motor.h#L484

+0

Я думаю, что вы должны отлаживать программное обеспечение питона в первую очередь. Здесь нет никакой конкретной проблемы с gcc. Вы должны добавить тэг python и позволить сообществу python помочь вам. –

+0

Спасибо, я сделал это сейчас. – bariumbitmap

+0

ваш код c компилируется и работает без python? почему вы не используете cffi? вы сообщили об этой проблеме в трекерах ply/pycparser? https://github.com/eliben/pycparser/issues/new https://github.com/dabeaz/ply/issues/new – denfromufa

ответ

Смежные вопросы