summaryrefslogtreecommitdiff
path: root/src/runtime/python/test.py
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-05-01 06:09:55 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-05-01 06:09:55 +0000
commit22f44ef61f99acdec5d19f336bb80f6bb3a4e8b7 (patch)
tree4ee1496edc1c5df1b11464ce8425071c3ef11994 /src/runtime/python/test.py
parent41bccf5737544a6981dc6a17bb4bb8116ace7937 (diff)
word completion in the C runtime. The runtime/python/test.py example is now using readline with word completion
Diffstat (limited to 'src/runtime/python/test.py')
-rw-r--r--src/runtime/python/test.py53
1 files changed, 45 insertions, 8 deletions
diff --git a/src/runtime/python/test.py b/src/runtime/python/test.py
index 437c29776..93a3c4a2d 100644
--- a/src/runtime/python/test.py
+++ b/src/runtime/python/test.py
@@ -1,26 +1,63 @@
-import sys
import pgf
+import sys
+import sets
+import readline
sys.stdout.write("loading...")
sys.stdout.flush();
gr = pgf.readPGF("../../../treebanks/PennTreebank/ParseEngAbs.pgf")
sys.stdout.write("\n")
+source_lang = gr.languages["ParseEng"]
+target_lang = gr.languages["ParseBul"]
+
we = pgf.readExpr("UttImpSg PPos (ImpVP (UseV try_V))")
-print gr.languages["ParseEng"].linearize(we)
+print source_lang.linearize(we)
sys.stdout.write("start cat: "+gr.startCat+"\n\n")
+class Completer():
+ def __init__(self, lang):
+ self.gr = lang
+
+ def complete(self, prefix, state):
+ if state == 0:
+ line = readline.get_line_buffer()
+ line = line[0:readline.get_begidx()]
+ self.i = source_lang.getCompletions(line, prefix=prefix)
+ self.tokens = sets.Set()
+
+ if len(self.tokens) > 50:
+ return None
+
+ while True:
+ try:
+ (p,t) = self.i.next()
+ if t not in self.tokens:
+ self.tokens.add(t)
+ return t
+ except StopIteration:
+ return None
+
+completer = Completer(source_lang)
+readline.set_completer(completer.complete)
+readline.parse_and_bind("tab: complete")
+
while True:
- sys.stdout.write("> ")
- line = sys.stdin.readline();
- if line == '':
+ try:
+ line = raw_input("> ");
+ except EOFError:
+ sys.stdout.write("\n")
+ readline.set_completer(None)
+ break
+ except KeyboardInterrupt:
sys.stdout.write("\n")
- break;
+ readline.set_completer(None)
+ break
try:
- for (p,e) in gr.languages["ParseEng"].parse(line, n=5):
+ for (p,e) in source_lang.parse(line, n=1):
sys.stdout.write("["+str(p)+"] "+str(e)+"\n")
- print gr.languages["ParseEngBul"].linearize(e)
+ print target_lang.linearize(e)
except pgf.ParseError as e:
print e.message