diff options
Diffstat (limited to 'src/runtime/java/org')
4 files changed, 104 insertions, 0 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Concr.java b/src/runtime/java/org/grammaticalframework/pgf/Concr.java index fad1e9086..f7a026681 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java @@ -26,6 +26,10 @@ public class Concr { public native List<MorphoAnalysis> lookupMorpho(String sentence); + public Iterable<FullFormEntry> lookupWordPrefix(String prefix) { + return new Lexicon(this, prefix); + } + public native boolean hasLinearization(String id); public native void load(String path) throws FileNotFoundException; diff --git a/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java b/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java new file mode 100644 index 000000000..b0be7c342 --- /dev/null +++ b/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java @@ -0,0 +1,21 @@ +package org.grammaticalframework.pgf; + +import java.util.List; + +public class FullFormEntry { + private String form; + private long ref; + private Concr concr; + + public FullFormEntry(String form, long ref, Concr concr) { + this.form = form; + this.ref = ref; + this.concr = concr; + } + + public String getForm() { + return form; + } + + public native List<MorphoAnalysis> getAnalyses(); +} diff --git a/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java b/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java new file mode 100644 index 000000000..6a4c5efd7 --- /dev/null +++ b/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java @@ -0,0 +1,50 @@ +package org.grammaticalframework.pgf; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +class FullFormIterator implements Iterator<FullFormEntry> { + private Concr concr; + private Pool pool; + private long ref; + private FullFormEntry entry; + private boolean fetched; + + public FullFormIterator(Concr concr, long pool, long ref) { + this.concr = concr; + this.pool = new Pool(pool); + this.ref = ref; + this.entry = null; + this.fetched = false; + } + + private native FullFormEntry fetchFullFormEntry(long ref, Pool pool, Concr concr); + + private void fetch() { + if (!fetched) { + entry = fetchFullFormEntry(ref, pool, concr); + fetched = true; + } + } + + @Override + public boolean hasNext() { + fetch(); + return (entry != null); + } + + @Override + public FullFormEntry next() { + fetch(); + fetched = false; + + if (entry == null) + throw new NoSuchElementException(); + return entry; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java b/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java new file mode 100644 index 000000000..3c0b615f0 --- /dev/null +++ b/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java @@ -0,0 +1,29 @@ +package org.grammaticalframework.pgf; + +import java.util.Iterator; + +class Lexicon implements Iterable<FullFormEntry> { + private Concr concr; + private String prefix; + private FullFormIterator iter; + + public Lexicon(Concr concr, String prefix) { + this.concr = concr; + this.prefix = prefix; + this.iter = lookupWordPrefix(concr, prefix); + } + + public Iterator<FullFormEntry> iterator() { + if (iter == null) { + // If someone has asked for a second iterator over + // the same parse results then we have to parse again. + return lookupWordPrefix(concr, prefix); + } else { + FullFormIterator tmp_iter = iter; + iter = null; + return tmp_iter; + } + } + + static private native FullFormIterator lookupWordPrefix(Concr concr, String prefix); +} |
