summaryrefslogtreecommitdiff
path: root/src/runtime/java/org/grammaticalframework
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/java/org/grammaticalframework')
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Concr.java8
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Expr.java13
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java45
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprProb.java4
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Parser.java25
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Pool.java15
6 files changed, 109 insertions, 1 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Concr.java b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
index 095c009ba..0f91539a0 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
@@ -1,14 +1,20 @@
package org.grammaticalframework.pgf;
+import java.util.*;
+
public class Concr {
public native String getName();
+
+ public Iterable<ExprProb> parse(String startCat, String s) {
+ return new Parser(this, startCat, s);
+ }
//////////////////////////////////////////////////////////////////
// private stuff
private PGF gr;
- private long concr;
+ public long concr;
private Concr(PGF gr, long concr) {
this.gr = gr;
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
index 6401ec6b9..947fdc1e2 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
@@ -1,4 +1,17 @@
package org.grammaticalframework.pgf;
public class Expr {
+ private Pool pool;
+ private long ref;
+
+ public Expr(Pool pool, long ref) {
+ this.pool = pool;
+ this.ref = ref;
+ }
+
+ public String toString() {
+ return showExpr(ref);
+ }
+
+ private static native String showExpr(long ref);
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
new file mode 100644
index 000000000..be90d07c5
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
@@ -0,0 +1,45 @@
+package org.grammaticalframework.pgf;
+
+import java.util.*;
+
+class ExprIterator implements Iterator<ExprProb> {
+ private Pool pool, out_pool;
+ private long enumRef;
+ private ExprProb ep;
+ private boolean fetched;
+
+ public ExprIterator(long pool, long out_pool, long enumRef) {
+ this.pool = new Pool(pool);
+ this.out_pool = new Pool(out_pool);
+ this.enumRef = enumRef;
+ this.ep = null;
+ this.fetched = false;
+ }
+
+ private native ExprProb fetchExprProb(long enumRef, Pool out_pool);
+
+ private void fetch() {
+ if (!fetched) {
+ ep = fetchExprProb(enumRef, out_pool);
+ fetched = true;
+ }
+ }
+
+ public boolean hasNext() {
+ fetch();
+ return (ep != null);
+ }
+
+ public ExprProb next() {
+ fetch();
+ fetched = false;
+
+ if (ep == null)
+ throw new NoSuchElementException();
+ return ep;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
index fcfbdbc74..d7d4f1cdf 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
@@ -9,6 +9,10 @@ public class ExprProb {
this.prob = prob;
}
+ private static ExprProb mkExprProb(Pool pool, long expr, double prob) {
+ return new ExprProb(new Expr(pool, expr), prob);
+ }
+
public Expr getExpr() {
return expr;
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Parser.java b/src/runtime/java/org/grammaticalframework/pgf/Parser.java
new file mode 100644
index 000000000..5e068b2e3
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/Parser.java
@@ -0,0 +1,25 @@
+package org.grammaticalframework.pgf;
+
+import java.util.*;
+
+class Parser implements Iterable<ExprProb> {
+ private Concr concr;
+ private String s;
+ private String startCat;
+
+ public Parser(Concr concr, String startCat, String s) {
+ this.concr = concr;
+ this.startCat = startCat;
+ this.s = s;
+ }
+
+ public Iterator<ExprProb> iterator() {
+ ExprIterator iter = parse(concr, startCat, s);
+ if (iter == null) {
+ throw new PGFError("The sentence cannot be parsed");
+ }
+ return iter;
+ }
+
+ public static native ExprIterator parse(Concr concr, String startCat, String s);
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Pool.java b/src/runtime/java/org/grammaticalframework/pgf/Pool.java
new file mode 100644
index 000000000..68a690871
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/Pool.java
@@ -0,0 +1,15 @@
+package org.grammaticalframework.pgf;
+
+class Pool {
+ private long ref;
+
+ public Pool(long ref) {
+ this.ref = ref;
+ }
+
+ public void finalize() {
+ free(ref);
+ }
+
+ private native void free(long ref);
+}