首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入Python3.3:如何访问_PyParser_Grammar?

嵌入Python3.3:如何访问_PyParser_Grammar?
EN

Stack Overflow用户
提问于 2013-06-28 23:35:52
回答 1查看 161关注 0票数 1

我正在尝试模拟Python/C API的PyRun_InteractiveLoop()函数,但使用的是我的雇主使用的不同输入系统。Python常见问题解答(http://docs.python.org/3/faq/extending.html#how-do-i-tell-incomplete-input-from-invalid-input)包含以下代码,用于检查给定的字符数组是否为完整的Python块:

代码语言:javascript
复制
#include <Python.h>
#include <node.h>
#include <errcode.h>
#include <grammar.h>
#include <parsetok.h>
#include <compile.h>

int testcomplete(char *code)
  /* code should end in \n */
  /* return -1 for error, 0 for incomplete, 1 for complete */
{
  node *n;
  perrdetail e;

  n = PyParser_ParseString(code, &_PyParser_Grammar,
                           Py_file_input, &e);
  if (n == NULL) {
    if (e.error == E_EOF)
      return 0;
    return -1;
  }

  PyNode_Free(n);
  return 1;
}

这为_PyParser_Grammar提供了一个未声明的变量错误。搜索Python源代码,我没有找到任何声明_PyParser_Grammar的头文件。进一步看,我发现它被一些函数引用,特别是在metagrammar.c中定义的meta_grammar()和Py_meta_grammar()。

虽然meta_grammar()是在pgen.h中定义的,但是它给出了一个未定义的符号错误,尽管使用-lpython3.3m编译(对于我的测试代码是g++)。一个快速的nm显示meta_grammar()在libpython3.3m.so中不是一个可见的符号,而Py_meta_grammar()是。但是,在搜索Python源代码时,我没有发现任何声明Py_meta_grammar()的头文件。

我是不是遗漏了什么?这些符号是在哪里声明/定义的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-16 00:29:55

经过一番纠结之后,似乎还没有声明_PyParser_Grammar的头文件。但是,声明

代码语言:javascript
复制
extern grammar _PyParser_Grammar;

在每个需要访问的C++源文件中都能完美地工作。不是特别优雅,但至少它可以编译。

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

https://stackoverflow.com/questions/17368474

复制
相关文章

相似问题

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