Add bootNGF and readNGF to Python bindings

This commit is contained in:
John J. Camilleri
2021-08-30 10:38:10 +02:00
parent 5c5e26cc8d
commit ad4600b5c4
2 changed files with 2067 additions and 2006 deletions

View File

@@ -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,

View File

@@ -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"]