-2

我正在使用 pycparser 来解析我的 C 代码。当我运行脚本时,pycparser 无法理解该函数,并引发如下错误。

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 理解我的功能?

 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
  }
  }

  }
4

1 回答 1

2

您的函数不是有效的 C 代码。我总是建议只在你知道编译的代码上运行 pycparser。pycparser 的错误信息不如 Clang 或 gcc 的好,因此更难找出错误在哪里。例如,如果我用 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 不会关心 的未定义性dsc_jump,但其他错误是真正的问题:

  1. 后面没有分号dsc_jump
  2. if条件有一个未终止的(

等等

于 2014-12-24T13:21:15.403 回答