0

これはかなり具体的な問題であることはわかっていますが、答えを探すためにできる限りのことをしましたが、まだ価値のあるものは何も思いつきません. 私はpycparserを使用して(驚き、驚き)コードを解析しようとしていますが、リンクを実行すると以下のエラーで失敗します。誰かが何か考えを持っているなら、私はいくつかの助けに感謝します.

  File "test.py", line 14, in <module>
    cpp_args=['-E', r'-Iutils/fake_libc_include'])
  File "/usr/lib/python2.7/site-packages/pycparser/__init__.py", line 93, in parse_file
    return parser.parse(text, filename)
  File "/usr/lib/python2.7/site-packages/pycparser/c_parser.py", line 146, in parse
    debug=debuglevel)
  File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 265, in parse
    return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc)
  File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 1047, in parseopt_notrack
    tok = self.errorfunc(errtoken)
  File "/usr/lib/python2.7/site-packages/pycparser/c_parser.py", line 1680, in p_error
    column=self.clex.find_tok_column(p)))
  File "/usr/lib/python2.7/site-packages/pycparser/plyparser.py", line 55, in
_parse_error
    raise ParseError("%s: %s" % (coord, msg))

/usr/include/bits/byteswap.h:46:1: before: {

これはCentOS 7上にあります。

コード:

      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))

#ifdef __GNUC__
# if __GNUC_PREREQ (4, 3)
static __inline unsigned int
__bswap_32 (unsigned int __bsx)
{
  return __builtin_bswap32 (__bsx);
}
# elif __GNUC__ >= 2
#  if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__            \
                           || defined __pentiumpro__ || defined __pentium4__  \
                           || defined __k8__ || defined __athlon__            \
                           || defined __k6__ || defined __nocona__            \
                           || defined __core2__ || defined __geode__          \
                           || defined __amdfam10__)
4

2 に答える 2

2

だから私は本当に答えを持っていませんが、少なくとも他の誰かが同じ問題を抱えている場合の回避策としてこれを投稿します. pycparserの問題を引き起こすコンパイラの問題があると思うので、プリプロセッサを介してコードを手動で実行する必要があります(奇妙です、私は知っています)。とにかく、コードを手動で前処理してから、pycparser を使用して解析するとうまくいきました。

于 2016-05-25T22:40:09.910 に答える
1

pyparser は、 のようなコンパイラ固有のキーワードをサポートしていません__inline。fake_libc_include ヘッダーを使用する必要があります。https://github.com/eliben/pycparser/wiki/FAQを参照してください

于 2016-08-05T22:44:44.617 に答える