diff options
Diffstat (limited to 'src/runtime/java/org')
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; } |
