From e1362fdb833381c44b5a432285be1582d36d2e33 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 28 Aug 2013 08:51:53 +0000 Subject: fix the error handling in the Java binding --- .../java/org/grammaticalframework/pgf/Concr.java | 4 ++-- .../java/org/grammaticalframework/pgf/Expr.java | 2 +- .../org/grammaticalframework/pgf/ParseError.java | 11 +++++++++++ .../java/org/grammaticalframework/pgf/Parser.java | 20 +++++++++++++++----- 4 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/runtime/java/org/grammaticalframework/pgf/ParseError.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 df4d1c54f..6fde4c63f 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java @@ -6,7 +6,7 @@ public class Concr { public native String getName(); - public Iterable parse(String startCat, String s) { + public Iterable parse(String startCat, String s) throws ParseError { return new Parser(this, startCat, s); } @@ -25,7 +25,7 @@ public class Concr { // private stuff private PGF gr; - public long ref; + private long ref; private Concr(PGF gr, long ref) { this.gr = gr; diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java index e129af68d..0dc4d1c4b 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java @@ -4,7 +4,7 @@ public class Expr { private Pool pool; private long ref; - private Expr(Pool pool, long ref) { + Expr(Pool pool, long ref) { this.pool = pool; this.ref = ref; } diff --git a/src/runtime/java/org/grammaticalframework/pgf/ParseError.java b/src/runtime/java/org/grammaticalframework/pgf/ParseError.java new file mode 100644 index 000000000..a527c8e47 --- /dev/null +++ b/src/runtime/java/org/grammaticalframework/pgf/ParseError.java @@ -0,0 +1,11 @@ +package org.grammaticalframework.pgf; + +public class ParseError extends Exception { + public ParseError(String token) { + super(token); + } + + public String getToken() { + return getMessage(); + } +} diff --git a/src/runtime/java/org/grammaticalframework/pgf/Parser.java b/src/runtime/java/org/grammaticalframework/pgf/Parser.java index 636deb521..8892d423a 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Parser.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Parser.java @@ -6,20 +6,30 @@ class Parser implements Iterable { private Concr concr; private String s; private String startCat; + private ExprIterator iter; - public Parser(Concr concr, String startCat, String s) { + public Parser(Concr concr, String startCat, String s) throws ParseError { this.concr = concr; this.startCat = startCat; this.s = s; + this.iter = parse(concr, startCat, s); } public Iterator iterator() { - ExprIterator iter = parse(concr, startCat, s); if (iter == null) { - throw new PGFError("The sentence cannot be parsed"); + // 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); + } catch (ParseError e) { + return null; + } + } else { + ExprIterator tmp_iter = iter; + iter = null; + return tmp_iter; } - return iter; } - static native ExprIterator parse(Concr concr, String startCat, String s); + static native ExprIterator parse(Concr concr, String startCat, String s) throws ParseError; } -- cgit v1.2.3