summaryrefslogtreecommitdiff
path: root/src/runtime/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/java/org')
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Concr.java13
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java4
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Parser.java28
3 files changed, 29 insertions, 16 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Concr.java b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
index ca90c4466..b25a83a52 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
@@ -8,16 +8,11 @@ public class Concr {
public native String getName();
public Iterable<ExprProb> parse(String startCat, String s) throws ParseError {
- return new Parser(this, startCat, s);
+ return new Parser(this, startCat, s, -1, null);
}
- public Expr parseBest(String startCat, String s) throws ParseError {
- Iterator<ExprProb> iter = Parser.parse(this, startCat, s);
- if (iter.hasNext()) {
- return iter.next().getExpr();
- } else {
- return null;
- }
+ public Iterable<ExprProb> parseWithHeuristics(String startCat, String s, double heuristics, Map<String,LiteralCallback> callbacks) throws ParseError {
+ return new Parser(this, startCat, s, heuristics, callbacks);
}
public Iterable<TokenProb> complete(String startCat, String s, String prefix) throws ParseError {
@@ -44,8 +39,6 @@ public class Concr {
public native void unload();
- public native void addLiteral(String cat, LiteralCallback callback);
-
//////////////////////////////////////////////////////////////////
// private stuff
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
index ffd8a45cb..c1504d9da 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
@@ -9,9 +9,9 @@ class ExprIterator implements Iterator<ExprProb> {
private ExprProb ep;
private boolean fetched;
- public ExprIterator(PGF gr, long pool, long out_pool, long ref) {
+ public ExprIterator(PGF gr, Pool pool, long out_pool, long ref) {
this.gr = gr;
- this.pool = new Pool(pool);
+ this.pool = pool;
this.out_pool = new Pool(out_pool);
this.ref = ref;
this.ep = null;
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Parser.java b/src/runtime/java/org/grammaticalframework/pgf/Parser.java
index 8892d423a..c8ec3663e 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Parser.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Parser.java
@@ -6,13 +6,19 @@ class Parser implements Iterable<ExprProb> {
private Concr concr;
private String s;
private String startCat;
+ private double heuristics;
+ private Map<String,LiteralCallback> callbacks;
private ExprIterator iter;
- public Parser(Concr concr, String startCat, String s) throws ParseError {
+ public Parser(Concr concr, String startCat, String s,
+ double heuristics,
+ Map<String,LiteralCallback> callbacks) throws ParseError {
this.concr = concr;
this.startCat = startCat;
this.s = s;
- this.iter = parse(concr, startCat, s);
+ this.heuristics = heuristics;
+ this.callbacks = callbacks;
+ this.iter = doParse();
}
public Iterator<ExprProb> iterator() {
@@ -20,7 +26,7 @@ class Parser implements Iterable<ExprProb> {
// If someone has asked for a second iterator over
// the same parse results then we have to parse again.
try {
- return parse(concr, startCat, s);
+ return doParse();
} catch (ParseError e) {
return null;
}
@@ -31,5 +37,19 @@ class Parser implements Iterable<ExprProb> {
}
}
- static native ExprIterator parse(Concr concr, String startCat, String s) throws ParseError;
+ private ExprIterator doParse() throws ParseError
+ {
+ Pool pool = new Pool();
+ long callbacksRef = newCallbacksMap(concr, pool);
+ for (Map.Entry<String, LiteralCallback> entry : callbacks.entrySet()) {
+ addLiteralCallback(concr, callbacksRef,
+ entry.getKey(), entry.getValue(),
+ pool);
+ }
+ return parseWithHeuristics(concr, startCat, s, heuristics, callbacksRef, pool);
+ }
+
+ static native long newCallbacksMap(Concr concr, Pool pool);
+ static native void addLiteralCallback(Concr concr, long callbacksRef, String cat, LiteralCallback callback, Pool pool);
+ static native ExprIterator parseWithHeuristics(Concr concr, String startCat, String s, double heuristics, long callbacksRef, Pool pool) throws ParseError;
}