summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKrasimir Angelov <kr.angelov@gmail.com>2017-09-06 14:37:51 +0200
committerKrasimir Angelov <kr.angelov@gmail.com>2017-09-06 14:37:51 +0200
commit301b1009887440a76cd7022dbb53bda4211d49db (patch)
treea16b95e4970df59571cbc23b730f443e4a1d47e6 /src
parentef071d9157deec9af1f2ac63dae63599affea031 (diff)
word completion in the C parser now returns information about the function which generates the token
Diffstat (limited to 'src')
-rw-r--r--src/runtime/c/pgf/parser.c3
-rw-r--r--src/runtime/c/pgf/pgf.h1
-rw-r--r--src/runtime/java/jpgf.c4
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/TokenProb.java11
-rw-r--r--src/runtime/python/pypgf.c5
5 files changed, 19 insertions, 5 deletions
diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c
index 2cae01db6..a1f0e5bbb 100644
--- a/src/runtime/c/pgf/parser.c
+++ b/src/runtime/c/pgf/parser.c
@@ -1254,9 +1254,12 @@ pgf_parsing_add_transition(PgfParsing* ps, PgfToken tok, PgfItem* item)
if (ps->prefix != NULL && *current == 0) {
if (gu_string_is_prefix(ps->prefix, tok)) {
+ PgfProductionApply* papp = gu_variant_data(item->prod);
+
ps->tp = gu_new(PgfTokenProb, ps->out_pool);
ps->tp->tok = tok;
ps->tp->cat = item->conts->ccat->cnccat->abscat->name;
+ ps->tp->fun = papp->fun->absfun->name;
ps->tp->prob = item->inside_prob + item->conts->outside_prob;
}
} else {
diff --git a/src/runtime/c/pgf/pgf.h b/src/runtime/c/pgf/pgf.h
index e6c1c70b8..ceeb1f54b 100644
--- a/src/runtime/c/pgf/pgf.h
+++ b/src/runtime/c/pgf/pgf.h
@@ -200,6 +200,7 @@ pgf_parse_with_oracle(PgfConcr* concr, PgfType* typ,
typedef struct {
PgfToken tok;
PgfCId cat;
+ PgfCId fun;
prob_t prob;
} PgfTokenProb;
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 9f5a1a417..3e655c2e3 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -731,8 +731,8 @@ Java_org_grammaticalframework_pgf_TokenIterator_fetchTokenProb(JNIEnv* env, jcla
return NULL;
jclass tp_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/TokenProb");
- jmethodID tp_constrId = (*env)->GetMethodID(env, tp_class, "<init>", "(DLjava/lang/String;Ljava/lang/String;)V");
- jobject jtp = (*env)->NewObject(env, tp_class, tp_constrId, tp->prob, gu2j_string(env,tp->tok), gu2j_string(env,tp->cat));
+ jmethodID tp_constrId = (*env)->GetMethodID(env, tp_class, "<init>", "(DLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+ jobject jtp = (*env)->NewObject(env, tp_class, tp_constrId, (double) tp->prob, gu2j_string(env,tp->tok), gu2j_string(env,tp->cat), gu2j_string(env,tp->fun));
return jtp;
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/TokenProb.java b/src/runtime/java/org/grammaticalframework/pgf/TokenProb.java
index 2c4ce4447..36db54273 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/TokenProb.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/TokenProb.java
@@ -4,12 +4,14 @@ package org.grammaticalframework.pgf;
public class TokenProb {
private String tok;
private String cat;
+ private String fun;
private double prob;
- public TokenProb(double prob, String tok, String cat) {
+ public TokenProb(double prob, String tok, String cat, String fun) {
this.prob = prob;
this.tok = tok;
- this.cat = cat;
+ this.cat = cat;
+ this.fun = fun;
}
/** Returns the negative logarithmic probability. */
@@ -26,4 +28,9 @@ public class TokenProb {
public String getCategory() {
return cat;
}
+
+ /** Returns the function from which this word was predicted. */
+ public String getFunction() {
+ return fun;
+ }
}
diff --git a/src/runtime/python/pypgf.c b/src/runtime/python/pypgf.c
index 97718103b..56ee32876 100644
--- a/src/runtime/python/pypgf.c
+++ b/src/runtime/python/pypgf.c
@@ -1163,7 +1163,10 @@ Iter_fetch_token(IterObject* self)
PyObject* py_tok = PyString_FromString(tp->tok);
PyObject* py_cat = PyString_FromString(tp->cat);
- PyObject* res = Py_BuildValue("(f,O,O)", tp->prob, py_tok, py_cat);
+ PyObject* py_fun = PyString_FromString(tp->fun);
+ PyObject* res = Py_BuildValue("(f,O,O,O)", tp->prob, py_tok, py_cat, py_fun);
+ Py_DECREF(py_fun);
+ Py_DECREF(py_cat);
Py_DECREF(py_tok);
return res;