Python/C API의 PyRun_InteractiveLoop() 함수를 에뮬레이트하려고하지만 내 고용주가 사용하는 다른 입력 시스템에서 시도하고 있습니다.Embedding Python 3.3 : _PyParser_Grammar에 어떻게 액세스합니까?
#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위한 변수 선언되지 않은 오류를 범 : 주어진 문자 배열은 전체 파이썬 블록이면 파이썬 FAQ (http://docs.python.org/3/faq/extending.html#how-do-i-tell-incomplete-input-from-invalid-input)을 확인하는데 사용되는 다음의 코드를 갖는다. 파이썬 소스 코드를 검색 할 때 _PyParser_Grammar를 선언 한 헤더를 찾지 못했습니다. 더 자세히 살펴보면, metagrammar.c에 정의 된대로, 특히 meta_grammar() 및 Py_meta_grammar()와 같은 몇 가지 함수에서 참조되는 것을 발견했습니다.
meta_grammar()는 pgen.h에 정의되어 있지만 -lpython3.3m을 사용하여 컴파일 (g ++는 테스트 코드 용)되었지만 정의되지 않은 기호 오류가 발생합니다. 빠른 nm은 Py_meta_grammar()가 libpython3.3m.so에서 볼 수있는 기호가 아니라는 것을 meta_grammar()가 밝혀 냈습니다. 그러나 Python 소스 코드를 검색 할 때 Py_meta_grammar()를 선언하는 헤더를 찾지 못했습니다.
내가 누락 된 항목이 있습니까? 이 기호들은 어디에 선언/정의되어 있습니까?
_Win_의 경우 (정적으로 연결된 _Python_ __isn't__ - 기본값입니다. 다른 방법이 있을지 모르겠 음) 선언은 'extern __declspec (dllimport) grammar _PyParser_Grammar;'여야합니다. – CristiFati