summaryrefslogtreecommitdiff
path: root/src/runtime/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/java')
-rw-r--r--src/runtime/java/jpgf.c26
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Hypo.java7
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Type.java14
3 files changed, 47 insertions, 0 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 8cfe2c705..50574cf6e 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -212,6 +212,25 @@ Java_org_grammaticalframework_pgf_PGF_getStartCat(JNIEnv* env, jobject self)
return gu2j_string(env, pgf_start_cat(get_ref(env, self)));
}
+JNIEXPORT jobject JNICALL
+Java_org_grammaticalframework_pgf_PGF_getFunctionType(JNIEnv* env, jobject self, jstring jid)
+{
+ PgfPGF* pgf = get_ref(env, self);
+ GuPool* tmp_pool = gu_new_pool();
+ PgfCId id = j2gu_string(env, jid, tmp_pool);
+ PgfType* tp = pgf_function_type(pgf, id);
+ gu_pool_free(tmp_pool);
+
+ if (tp == NULL)
+ return NULL;
+
+ jclass type_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/Type");
+ jmethodID constrId = (*env)->GetMethodID(env, type_class, "<init>", "(Lorg/grammaticalframework/pgf/PGF;J)V");
+ jobject jtype = (*env)->NewObject(env, type_class, constrId, self, p2l(tp));
+
+ return jtype;
+}
+
typedef struct {
GuMapItor fn;
JNIEnv *env;
@@ -535,6 +554,13 @@ Java_org_grammaticalframework_pgf_Expr_readExpr(JNIEnv* env, jclass clazz, jstri
return (*env)->NewObject(env, clazz, constrId, jpool, NULL, p2l(gu_variant_to_ptr(e)));
}
+JNIEXPORT jstring JNICALL
+Java_org_grammaticalframework_pgf_Type_getCategory(JNIEnv* env, jobject self)
+{
+ PgfType* tp = get_ref(env, self);
+ return gu2j_string(env, tp->cid);
+}
+
JNIEXPORT jobject JNICALL
Java_org_grammaticalframework_pgf_Generator_generateAll(JNIEnv* env, jclass clazz, jobject jpgf, jstring jstartCat)
{
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Hypo.java b/src/runtime/java/org/grammaticalframework/pgf/Hypo.java
new file mode 100644
index 000000000..a0aced647
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/Hypo.java
@@ -0,0 +1,7 @@
+package org.grammaticalframework.pgf;
+
+public class Hypo {
+ public native boolean getBindType();
+ public native String getVariable();
+ public native Type getType();
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Type.java b/src/runtime/java/org/grammaticalframework/pgf/Type.java
index 061771b71..db7a9888f 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Type.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Type.java
@@ -1,4 +1,18 @@
package org.grammaticalframework.pgf;
public class Type {
+ public native String getCategory();
+ public native Expr[] getExprs();
+ public native Hypo[] getHypos();
+
+ //////////////////////////////////////////////////////////////////
+ // private stuff
+
+ private PGF gr;
+ private long ref;
+
+ private Type(PGF gr, long ref) {
+ this.gr = gr;
+ this.ref = ref;
+ }
}