summaryrefslogtreecommitdiff
path: root/src/runtime/java/org/grammaticalframework
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-09-06 07:21:38 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-09-06 07:21:38 +0000
commit5a4454aa8f910bc701da5cd4057eed77196764ad (patch)
treec043135e06f030c181c7a173090e6caf6a06994e /src/runtime/java/org/grammaticalframework
parent14f8b96b563dda9f7d61f5dc1cde14436ef6ea69 (diff)
added exhaustive generation in the Java binding
Diffstat (limited to 'src/runtime/java/org/grammaticalframework')
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Generator.java29
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/PGF.java4
2 files changed, 32 insertions, 1 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Generator.java b/src/runtime/java/org/grammaticalframework/pgf/Generator.java
new file mode 100644
index 000000000..c9ffde10b
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/Generator.java
@@ -0,0 +1,29 @@
+package org.grammaticalframework.pgf;
+
+import java.util.Iterator;
+
+class Generator implements Iterable<ExprProb> {
+ private PGF gr;
+ private String startCat;
+ private ExprIterator iter;
+
+ public Generator(PGF gr, String startCat) {
+ this.gr = gr;
+ this.startCat = startCat;
+ this.iter = generateAll(gr, startCat);
+ }
+
+ public Iterator<ExprProb> iterator() {
+ if (iter == null) {
+ // If someone has asked for a second iterator over
+ // the same parse results then we have to parse again.
+ return generateAll(gr, startCat);
+ } else {
+ ExprIterator tmp_iter = iter;
+ iter = null;
+ return tmp_iter;
+ }
+ }
+
+ static native ExprIterator generateAll(PGF gr, String startCat);
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/PGF.java b/src/runtime/java/org/grammaticalframework/pgf/PGF.java
index 02e5d0c50..c08462b80 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/PGF.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/PGF.java
@@ -22,7 +22,9 @@ public class PGF {
public native Type getFunctionType(String fun);
- public native Iterator<ExprProb> generate(Type type);
+ public Iterable<ExprProb> generateAll(String startCat) {
+ return new Generator(this, startCat);
+ }
public native Expr compute(Expr expr);