mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-24 03:52:50 -06:00
Add bootNGF and readNGF to Python bindings
This commit is contained in:
@@ -3528,6 +3528,62 @@ pgf_readPGF(PyObject *self, PyObject *args)
|
||||
|
||||
return py_pgf;
|
||||
}
|
||||
|
||||
static PGFObject*
|
||||
pgf_bootNGF(PyObject *self, PyObject *args)
|
||||
{
|
||||
const char *fpath; // pgf
|
||||
const char *npath; // ngf
|
||||
if (!PyArg_ParseTuple(args, "ss", &fpath, &npath))
|
||||
return NULL;
|
||||
|
||||
PGFObject* py_pgf = (PGFObject*) pgf_PGFType.tp_alloc(&pgf_PGFType, 0);
|
||||
|
||||
// Read the PGF grammar.
|
||||
PgfExn err;
|
||||
py_pgf->pgf = pgf_boot_ngf(fpath, npath, &err);
|
||||
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
||||
errno = err.code;
|
||||
PyErr_SetFromErrnoWithFilename(PyExc_IOError, npath);
|
||||
Py_DECREF(py_pgf);
|
||||
return NULL;
|
||||
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
||||
PyErr_SetString(PGFError, err.msg);
|
||||
free((char*) err.msg);
|
||||
Py_DECREF(py_pgf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return py_pgf;
|
||||
}
|
||||
|
||||
static PGFObject*
|
||||
pgf_readNGF(PyObject *self, PyObject *args)
|
||||
{
|
||||
const char *fpath;
|
||||
if (!PyArg_ParseTuple(args, "s", &fpath))
|
||||
return NULL;
|
||||
|
||||
PGFObject* py_pgf = (PGFObject*) pgf_PGFType.tp_alloc(&pgf_PGFType, 0);
|
||||
|
||||
// Read the NGF grammar.
|
||||
PgfExn err;
|
||||
py_pgf->pgf = pgf_read_ngf(fpath, &err);
|
||||
if (err.type == PGF_EXN_SYSTEM_ERROR) {
|
||||
errno = err.code;
|
||||
PyErr_SetFromErrnoWithFilename(PyExc_IOError, fpath);
|
||||
Py_DECREF(py_pgf);
|
||||
return NULL;
|
||||
} else if (err.type == PGF_EXN_PGF_ERROR) {
|
||||
PyErr_SetString(PGFError, err.msg);
|
||||
free((char*) err.msg);
|
||||
Py_DECREF(py_pgf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return py_pgf;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static ExprObject*
|
||||
pgf_readExpr(PyObject *self, PyObject *args) {
|
||||
@@ -3592,7 +3648,11 @@ pgf_readType(PyObject *self, PyObject *args) {
|
||||
|
||||
static PyMethodDef module_methods[] = {
|
||||
{"readPGF", (void*)pgf_readPGF, METH_VARARGS,
|
||||
"Reads a PGF file in memory"},
|
||||
"Reads a PGF file into memory"},
|
||||
{"bootNGF", (void*)pgf_bootNGF, METH_VARARGS,
|
||||
"Reads a PGF file into memory and stores the unpacked data in an NGF file"},
|
||||
{"readNGF", (void*)pgf_readNGF, METH_VARARGS,
|
||||
"Reads an NGF file into memory"},
|
||||
/* {"readExpr", (void*)pgf_readExpr, METH_VARARGS,
|
||||
"Parses a string as an abstract tree"},
|
||||
{"readType", (void*)pgf_readType, METH_VARARGS,
|
||||
|
||||
@@ -6,9 +6,10 @@ import sys
|
||||
|
||||
sys.stdout.write("loading...")
|
||||
sys.stdout.flush();
|
||||
# gr = pgf.readPGF("../../../treebanks/PennTreebank/ParseEngAbs.pgf")
|
||||
gr = pgf.readPGF("../haskell/tests/basic.pgf")
|
||||
sys.stdout.write("\n")
|
||||
gr1 = pgf.readPGF("../haskell/tests/basic.pgf")
|
||||
gr2 = pgf.bootNGF("../haskell/tests/basic.pgf", "./basic.ngf")
|
||||
gr3 = pgf.readNGF("./basic.ngf")
|
||||
sys.stdout.write("done")
|
||||
|
||||
# source_lang = gr.languages["ParseEng"]
|
||||
# target_lang = gr.languages["ParseBul"]
|
||||
|
||||
Reference in New Issue
Block a user