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