2014-12-23 2 views
-2

Я использую pycparser для разбора кода на C. Когда я запускаю скрипт, pycparser не мог понять эту функцию, и она выдает ошибку, как показано ниже.Как заставить Pycparser понять мою функцию c

номер
File "C:\Python27\lib\site-packages\pycparser\__init__.py", line 93, in parse_file 
return parser.parse(text, filename) 
File "C:\Python27\lib\site-packages\pycparser\c_parser.py", line 124, in parse 
return self.cparser.parse(text, lexer=self.clex, debug=debuglevel) 
File "C:\Python27\lib\site-packages\pycparser\ply\yacc.py", line 265, in parse 
return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc) 
File "C:\Python27\lib\site-packages\pycparser\ply\yacc.py", line 1047, in parseopt_notrack 
    tok = self.errorfunc(errtoken) 
File "C:\Python27\lib\site-packages\pycparser\c_parser.py", line 1423, in p_error 
    column=self.clex.find_tok_column(p))) 
File "C:\Python27\lib\site-packages\pycparser\plyparser.py", line 54, in _parse_error 
    raise ParseError("%s: %s" % (coord, msg)) 
ParseError: dsc.c:2592:1: before: { 

Линия он показывает не что иное, как функции, как это

void dsc (void) 
{ 

Может кто-нибудь сказать, как сделать pycparser в undertand мою функцию?

static void dsc (void) 
{ 
UINT8 j, i; 
static UINT16 jump; 
for (j = 0; j< 10; j++) 
{ 
jump = dsc_jump 

for 
    (i = 1; i < 10; i++) 
{ 
if 
(
((jump & 0x50 != 0) 
) 
{ 
jump = dsc_jump 
    } 
    } 

    } 
+0

Это может помочь показать всю вашу функцию, чтобы мы могли воспроизвести вашу ошибку. Т.е. сообщение [SSCCE] (http://sscce.org/). –

+0

Предполагается, что это действительный код C? Потому что это не так. Вы уверены, что скопировали код здесь правильно? Как часть SSCCE (не уверен, прочитаете ли вы ссылку или нет), вы также должны дать нам команды _exact_, которые нам нужно использовать, чтобы воспроизвести вашу ошибку, включая код _exact_. –

ответ

1

Ваша функция недействительна C-кодом. Я всегда предлагаю запускать pycparser только по коду, который, как вы знаете, компилируется. Сообщения об ошибках pycparser не так хороши, как Clang или gcc, поэтому сложнее выяснить, где ошибка. Если я скомпилировать функцию с НКУ, к примеру, я получаю:

static void dsc (void) 
{ 
UINT8 j, i; 
static UINT16 jump; 
for (j = 0; j< 10; j++) 
{ 
jump = dsc_jump 

for 
    (i = 1; i < 10; i++) 
{ 
if 
(
((jump & 0x50 != 0) 
) 
{ 
jump = dsc_jump 
    } 
    } 

    } 

UINT8 тип вам нужно определить поддельные заголовки, и pycparser не будет заботиться о undefinedness из dsc_jump, но другие ошибки являются реальными проблемы:

  1. Там нет точки с запятой после dsc_jump
  2. условия if имеет незакрытую (

и т. Д.

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