如何让Pycparser了解我的c函数

时间:2014-12-23 12:10:07

标签: python-2.7 pycparser

我正在使用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
  }
  }

  }

1 个答案:

答案 0 :(得分:1)

您的功能不是有效的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. 之后没有分号
  3. if条件有未终止的(