首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu16.04.3输出错误的pycparser的generator.visit

Ubuntu16.04.3输出错误的pycparser的generator.visit
EN

Stack Overflow用户
提问于 2017-08-17 21:38:53
回答 1查看 108关注 0票数 0

我使用pycparser和pycparserext编写了以下程序:

代码语言:javascript
复制
from pycparser import parse_file,c_parser, c_ast, c_generator
from pycparserext.ext_c_parser import GnuCParser


content="int main() { int x = 1; int y = 0; while (y < 1000 && __VERIFIER_nondet_int()) { x = x + y; y = y + 1; } __VERIFIER_assert(x >= y); return 0;}"

text = r""" """+content
parser = GnuCParser()
ast = parser.parse(text)
generator = c_generator.CGenerator()
print str(generator.visit(ast))

当我在Mac中运行代码时,它会返回正确的输出。但是当我在Ubuntu 16.04.3中运行相同的代码时,它返回了以下不正确的输出(即缺少'main()':

代码语言:javascript
复制
int{
  int x = 1;
  int y = 0;
  while ((y < 1000) && __VERIFIER_nondet_int())
  {
    x = x + y;
    y = y + 1;
  }

  __VERIFIER_assert(x >= y);
  return 0;
}

导致此错误输出的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 05:34:42

这可能是pycparserext的一个问题。使用从Github新克隆的vanilla pycparser,我得到了(从pycparser主目录运行):

代码语言:javascript
复制
$ cat /tmp/2.c
int main() { int x = 1; int y = 0; while (y < 1000 && __VERIFIER_nondet_int()) { x = x + y; y = y + 1; } __VERIFIER_assert(x >= y); return 0;}

$ PYTHONPATH=. python examples/c-to-c.py /tmp/2.c
int main()
{
  int x = 1;
  int y = 0;
  while ((y < 1000) && __VERIFIER_nondet_int())
  {
    x = x + y;
    y = y + 1;
  }

  __VERIFIER_assert(x >= y);
  return 0;
}

所以我建议你打开一个issue for pycparserext

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45736709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档