gpt4 book ai didi

c++ - 嵌入 Python 3.3 : How do I access _PyParser_Grammar?

转载 作者:行者123 更新时间:2023-11-30 04:17:00 28 4
gpt4 key购买 nike

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

#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 的 header 。进一步观察,我发现它被一些函数引用,特别是 metagrammar.c 中定义的 meta_grammar() 和 Py_meta_grammar()。

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

我错过了什么吗?这些符号在哪里声明/定义?

最佳答案

经过大量讨论后,似乎没有 header 声明 _PyParser_Grammar。但是,声明

extern grammar _PyParser_Grammar;

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

关于c++ - 嵌入 Python 3.3 : How do I access _PyParser_Grammar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368474/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com