From 5a4454aa8f910bc701da5cd4057eed77196764ad Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 6 Sep 2013 07:21:38 +0000 Subject: added exhaustive generation in the Java binding --- .../org/grammaticalframework/pgf/Generator.java | 29 ++++++++++++++++++++++ .../java/org/grammaticalframework/pgf/PGF.java | 4 ++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/runtime/java/org/grammaticalframework/pgf/Generator.java (limited to 'src/runtime/java/org/grammaticalframework') 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 { + 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 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 generate(Type type); + public Iterable generateAll(String startCat) { + return new Generator(this, startCat); + } public native Expr compute(Expr expr); -- cgit v1.2.3