summaryrefslogtreecommitdiff
path: root/src/runtime/java/org
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-04-10 14:14:31 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-04-10 14:14:31 +0000
commit1ca09448f9032b92ef436f4e0f658309d60e7ffd (patch)
treedfcdc1444573a3331b2687939ba11eea5b8b03a8 /src/runtime/java/org
parent348c9c4233d0f7660c3c848d3535cae28aa2b385 (diff)
now fully functional Java API for custom literals
Diffstat (limited to 'src/runtime/java/org')
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Expr.java34
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprBuilder.java16
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java20
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java33
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Pool.java17
5 files changed, 86 insertions, 34 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
index ca94d0cf7..753055ff9 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
@@ -4,18 +4,31 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import java.util.Arrays;
public class Expr implements Serializable {
private static final long serialVersionUID = 1148602474802492674L;
private Pool pool;
- private PGF gr;
+ private Object master;
private long ref;
- Expr(Pool pool, PGF gr, long ref) {
- this.pool = pool;
- this.gr = gr;
- this.ref = ref;
+ Expr(Pool pool, Object master, long ref) {
+ this.pool = pool;
+ this.master = master;
+ this.ref = ref;
+ }
+
+ public Expr(String s) {
+ this.pool = new Pool();
+ this.master = null;
+ this.ref = initStringLit(s, pool.ref);
+ }
+
+ public Expr(String fun, Expr... args) {
+ this.pool = new Pool();
+ this.master = Arrays.copyOf(args, args.length);
+ this.ref = initApp(fun, args, pool.ref);
}
public String toString() {
@@ -25,15 +38,18 @@ public class Expr implements Serializable {
public static native Expr readExpr(String s) throws PGFError;
private static native String showExpr(long ref);
-
+
+ private static native long initStringLit(String s, long pool);
+ private static native long initApp(String fun, Expr[] args, long pool);
+
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(showExpr(ref));
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
Expr e = readExpr((String) in.readObject());
- pool = e.pool;
- gr = e.gr;
- ref = e.ref;
+ pool = e.pool;
+ master = e.master;
+ ref = e.ref;
}
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprBuilder.java b/src/runtime/java/org/grammaticalframework/pgf/ExprBuilder.java
deleted file mode 100644
index a34a6c19d..000000000
--- a/src/runtime/java/org/grammaticalframework/pgf/ExprBuilder.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.grammaticalframework.pgf;
-
-public class ExprBuilder {
- public ExprBuilder() {
-
- }
-
- ExprBuilder(long poolRef) {
- }
-
- public native Expr mkApp(String fun, Expr... args);
-
- public native Expr mkLiteral(String s);
- public native Expr mkLiteral(int n);
- public native Expr mkLiteral(double d);
-}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java b/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
index 4292a4116..87e832ae2 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
@@ -1,5 +1,23 @@
package org.grammaticalframework.pgf;
public interface LiteralCallback {
- public int match(Concr concr, int lin_idx, ExprBuilder builder, String sentence, int start_offset);
+ public CallbackResult match(int lin_idx, String sentence, int start_offset);
+
+ public static class CallbackResult {
+ private ExprProb ep;
+ private int offset;
+
+ public CallbackResult(ExprProb ep, int offset) {
+ this.ep = ep;
+ this.offset = offset;
+ }
+
+ public ExprProb getExprProb() {
+ return ep;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+ }
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
index ad1036c56..72f24e712 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
@@ -1,7 +1,36 @@
package org.grammaticalframework.pgf;
public class NercLiteralCallback implements LiteralCallback {
- public int match(Concr concr, int lin_idx, ExprBuilder builder, String sentence, int start_offset) {
- return start_offset;
+ public CallbackResult match(int lin_idx, String sentence, int offset) {
+ StringBuilder sbuilder = new StringBuilder();
+
+ int i = 0;
+ int end_offset = offset;
+ while (offset < sentence.length() &&
+ Character.isUpperCase(sentence.charAt(offset))) {
+ if (i > 0)
+ sbuilder.append(' ');
+ i++;
+
+ while (offset < sentence.length() &&
+ !Character.isWhitespace(sentence.charAt(offset))) {
+ sbuilder.append(sentence.charAt(offset));
+ offset++;
+ }
+
+ end_offset = offset;
+ while (offset < sentence.length() &&
+ Character.isWhitespace(sentence.charAt(offset))) {
+ offset++;
+ }
+ }
+
+ if (i > 0) {
+ Expr expr = new Expr(sbuilder.toString());
+ expr = new Expr("MkSymb", expr);
+ return new CallbackResult(new ExprProb(expr, 0), end_offset);
+ }
+
+ return null;
}
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Pool.java b/src/runtime/java/org/grammaticalframework/pgf/Pool.java
index 68a690871..3a39babdf 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Pool.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Pool.java
@@ -1,15 +1,20 @@
package org.grammaticalframework.pgf;
-class Pool {
- private long ref;
-
+public class Pool {
+ final long ref;
+
public Pool(long ref) {
this.ref = ref;
}
-
+
+ public Pool() {
+ this.ref = alloc();
+ }
+
public void finalize() {
free(ref);
}
-
- private native void free(long ref);
+
+ public static native long alloc();
+ public static native void free(long ref);
}