diff --git a/src/runtime/java/Test.java b/src/runtime/java/Test.java index 15a8ff7ff..303eaf35f 100644 --- a/src/runtime/java/Test.java +++ b/src/runtime/java/Test.java @@ -24,7 +24,7 @@ public class Test { Concr ger = gr.getLanguages().get("PhrasebookGer"); try { - for (ExprProb ep : eng.parse(gr.getStartCat(), "where is the conference")) { + for (ExprProb ep : eng.parse(gr.getStartCat(), "where is the hotel")) { System.out.println("["+ep.getProb()+"] "+ep.getExpr()); System.out.println(ger.linearize(ep.getExpr())); } diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index ec68c87a4..b22638cb5 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -201,7 +201,7 @@ Java_org_grammaticalframework_pgf_Concr_getName(JNIEnv* env, jobject self) JNIEXPORT jobject JNICALL Java_org_grammaticalframework_pgf_Parser_parse - (JNIEnv* env, jclass self, jobject concr, jstring jstartCat, jstring js) + (JNIEnv* env, jclass clazz, jobject concr, jstring jstartCat, jstring js) { GuPool* pool = gu_new_pool(); GuPool* out_pool = gu_new_pool(); @@ -229,16 +229,19 @@ Java_org_grammaticalframework_pgf_Parser_parse return NULL; } + jfieldID refId = (*env)->GetFieldID(env, (*env)->GetObjectClass(env, concr), "gr", "Lorg/grammaticalframework/pgf/PGF;"); + jobject jpgf = (*env)->GetObjectField(env, concr, refId); + jclass expiter_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprIterator"); - jmethodID constrId = (*env)->GetMethodID(env, expiter_class, "", "(Lorg/grammaticalframework/pgf/Concr;JJJ)V"); - jobject jexpiter = (*env)->NewObject(env, expiter_class, constrId, concr, (jlong) pool, (jlong) out_pool, (jlong) res); + jmethodID constrId = (*env)->GetMethodID(env, expiter_class, "", "(Lorg/grammaticalframework/pgf/PGF;JJJ)V"); + jobject jexpiter = (*env)->NewObject(env, expiter_class, constrId, jpgf, (jlong) pool, (jlong) out_pool, (jlong) res); return jexpiter; } JNIEXPORT jobject JNICALL Java_org_grammaticalframework_pgf_ExprIterator_fetchExprProb - (JNIEnv* env, jobject self, jlong enumRef, jobject out_pool) + (JNIEnv* env, jobject self, jlong enumRef, jobject pool, jobject gr) { GuEnum* res = (GuEnum*) enumRef; @@ -247,9 +250,10 @@ Java_org_grammaticalframework_pgf_ExprIterator_fetchExprProb return NULL; jclass expprob_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprProb"); - jmethodID methodId = (*env)->GetStaticMethodID(env, expprob_class, "mkExprProb", "(Lorg/grammaticalframework/pgf/Pool;JD)Lorg/grammaticalframework/pgf/ExprProb;"); + jmethodID methodId = (*env)->GetStaticMethodID(env, expprob_class, "mkExprProb", + "(Lorg/grammaticalframework/pgf/Pool;Lorg/grammaticalframework/pgf/PGF;JD)Lorg/grammaticalframework/pgf/ExprProb;"); jobject jexpprob = (*env)->CallStaticObjectMethod(env, expprob_class, methodId, - out_pool, (jlong) gu_variant_to_ptr(ep->expr), (double) ep->prob); + pool, gr, (jlong) gu_variant_to_ptr(ep->expr), (double) ep->prob); return jexpprob; } diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java index 0dc4d1c4b..bd2c0877e 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java @@ -2,13 +2,15 @@ package org.grammaticalframework.pgf; public class Expr { private Pool pool; + private PGF gr; private long ref; - Expr(Pool pool, long ref) { + Expr(Pool pool, PGF gr, long ref) { this.pool = pool; + this.gr = gr; this.ref = ref; } - + public String toString() { return showExpr(ref); } diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java index c2dc8438b..6babda66d 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java +++ b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java @@ -3,14 +3,14 @@ package org.grammaticalframework.pgf; import java.util.*; class ExprIterator implements Iterator { - private Concr concr; + private PGF gr; private Pool pool, out_pool; private long ref; private ExprProb ep; private boolean fetched; - public ExprIterator(Concr concr, long pool, long out_pool, long ref) { - this.concr = concr; + public ExprIterator(PGF gr, long pool, long out_pool, long ref) { + this.gr = gr; this.pool = new Pool(pool); this.out_pool = new Pool(out_pool); this.ref = ref; @@ -18,20 +18,20 @@ class ExprIterator implements Iterator { this.fetched = false; } - private native ExprProb fetchExprProb(long ref, Pool out_pool); + private native ExprProb fetchExprProb(long ref, Pool pool, PGF gr); private void fetch() { if (!fetched) { - ep = fetchExprProb(ref, out_pool); + ep = fetchExprProb(ref, out_pool, gr); fetched = true; } } - + public boolean hasNext() { fetch(); return (ep != null); } - + public ExprProb next() { fetch(); fetched = false; diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java index d7d4f1cdf..676da13a8 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java +++ b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java @@ -9,8 +9,8 @@ public class ExprProb { this.prob = prob; } - private static ExprProb mkExprProb(Pool pool, long expr, double prob) { - return new ExprProb(new Expr(pool, expr), prob); + private static ExprProb mkExprProb(Pool pool, PGF gr, long expr, double prob) { + return new ExprProb(new Expr(pool, gr, expr), prob); } public Expr getExpr() {