// expects a "good tree" now abstract sclass DialogBot { sbool debug, repeat = true; OccTree<E> tree, node; *(OccTree<E> *tree) { node = tree; } void take(E e) { selectMatching(e); } E getSingleOutput() { E e = nextBotOutput(); if (e != null) select(node, e); ret e; } void rewind() { node = node.parent; } E findMatch(OccTree<E> node, E in) { for (E e : keys(node.followUp)) if (matchE(e, in)) ret e; null; } bool selectMatching(E in) { E e = findMatch(node, in); bool rep = false; if (repeat && e == null && node != tree) { e = findMatch(tree, in); rep = true; } if (e != null) { if (debug) { if (rep) print("Repeat!"); print("Selecting " + struct(e) + " matching " + struct(in)); } select(rep ? tree : node, e); true; } if (debug) print("No match for " + structure(in) + " in " + structure(node.followUpKeys())); false; } abstract bool matchE(E a, E b); E nextBotOutput() { new L<E> l; Collection<E> follows = keys(node.followUp); for (E e : follows) if (e.a() || isCommand(e)) l.add(e); if (empty(l)) null; // fail("no good bot output: " + struct(node.followUpKeys())); if (l(l) > 1) fail("unclear bot output: " + struct(follows)); ret first(l); } void select(OccTree<E> n, E e) { node = n.followUp(e); if (node == null) fail("can't select " + structure(e)); } bool isCommand(E e) { ret e.state() && matchStart("bot", e.state); } } sclass LooseBot extends DialogBot { *(OccTree<E> node) { super(node); } bool matchE(E a, E b) { // standard NL matching ret eq(a.type(), b.type()) && match(a.text(), b.text()); } }
Began life as a copy of #1003370
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1003405 |
Snippet name: | Tree-Walking DialogBot + LooseBot v2 (dev.) |
Eternal ID of this version: | #1003405/1 |
Text MD5: | c4759547c661c93d3bbc6794d5d1266a |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-06-30 20:31:19 |
Source code size: | 1888 bytes / 82 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 596 / 830 |
Referenced in: | [show references] |