summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-08-28 08:51:53 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-08-28 08:51:53 +0000
commite1362fdb833381c44b5a432285be1582d36d2e33 (patch)
tree019280396a0d1ed9628993f23beb4092ccfd049c /src/runtime
parent1c7a64acee72a01640c6d7f3148b53e195d350b7 (diff)
fix the error handling in the Java binding
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/java/Test.java20
-rw-r--r--src/runtime/java/jpgf.c1
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Concr.java4
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Expr.java2
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ParseError.java11
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Parser.java20
6 files changed, 43 insertions, 15 deletions
diff --git a/src/runtime/java/Test.java b/src/runtime/java/Test.java
index c4d7b710c..15a8ff7ff 100644
--- a/src/runtime/java/Test.java
+++ b/src/runtime/java/Test.java
@@ -6,7 +6,7 @@ public class Test {
public static void main(String[] args) {
PGF gr = null;
try {
- gr = PGF.readPGF("/home/krasimir/www.grammaticalframework.org/treebanks/PennTreebank/ParseEngAbs.pgf");
+ gr = PGF.readPGF("Phrasebook.pgf");
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
@@ -14,16 +14,22 @@ public class Test {
e.printStackTrace();
return;
}
-
+
System.out.println(gr.getAbstractName());
for (Map.Entry<String,Concr> entry : gr.getLanguages().entrySet()) {
System.out.println(entry.getKey()+" "+entry.getValue()+" "+entry.getValue().getName());
}
-
- Concr eng = gr.getLanguages().get("ParseEng");
- for (ExprProb ep : eng.parse("Phr", "where are you")) {
- System.out.println("["+ep.getProb()+"] "+ep.getExpr());
- System.out.println(eng.linearize(ep.getExpr()));
+
+ Concr eng = gr.getLanguages().get("PhrasebookEng");
+ Concr ger = gr.getLanguages().get("PhrasebookGer");
+
+ try {
+ for (ExprProb ep : eng.parse(gr.getStartCat(), "where is the conference")) {
+ System.out.println("["+ep.getProb()+"] "+ep.getExpr());
+ System.out.println(ger.linearize(ep.getExpr()));
+ }
+ } catch (ParseError e) {
+ System.out.println("Parsing failed at token \""+e.getToken()+"\"");
}
}
}
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index f04f32e24..ec68c87a4 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -226,6 +226,7 @@ Java_org_grammaticalframework_pgf_Parser_parse
gu_pool_free(pool);
gu_pool_free(out_pool);
+ return NULL;
}
jclass expiter_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprIterator");
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<ExprProb> parse(String startCat, String s) {
+ public Iterable<ExprProb> 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<ExprProb> {
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<ExprProb> 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;
}