From d3631d918df56969aba8fe42ec0b6876da0fd80e Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Tue, 27 Aug 2013 21:53:13 +0000 Subject: parsing from the Java binding --- .../java/org/grammaticalframework/pgf/Concr.java | 8 +++- .../java/org/grammaticalframework/pgf/Expr.java | 13 +++++++ .../org/grammaticalframework/pgf/ExprIterator.java | 45 ++++++++++++++++++++++ .../org/grammaticalframework/pgf/ExprProb.java | 4 ++ .../java/org/grammaticalframework/pgf/Parser.java | 25 ++++++++++++ .../java/org/grammaticalframework/pgf/Pool.java | 15 ++++++++ 6 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java create mode 100644 src/runtime/java/org/grammaticalframework/pgf/Parser.java create mode 100644 src/runtime/java/org/grammaticalframework/pgf/Pool.java (limited to 'src/runtime/java/org') 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 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 { + 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 { + 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 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); +} -- cgit v1.2.3