nfa-table>> transitions>>
[ at keys ] curry map concat
eps swap remove ;
- ! dup t member? [ t swap remove t suffix ] when ;
: add-todo-state ( state regexp -- )
2dup visited-states>> key? [
H{ } clone >>transitions
H{ } clone >>final-states ;
+: maybe-initialize-key ( key hashtable -- )
+ 2dup key? [ 2drop ] [ H{ } clone -rot set-at ] if ;
+
: set-transition ( transition hash -- )
+ #! set the state as a key
+ 2dup [ to>> ] dip maybe-initialize-key
[ [ to>> ] [ obj>> ] [ from>> ] tri ] dip
2dup at* [ 2nip insert-at ]
[ drop >r >r H{ } clone [ insert-at ] keep r> r> set-at ] if ;
dup save-final-state
] when text-finished? ;
+: print-flags ( dfa-traverser -- dfa-traverser )
+ dup [ current-state>> ] [ traversal-flags>> ] bi
+ ;
+
: increment-state ( dfa-traverser state -- dfa-traverser )
[
[ 1+ ] change-current-index dup current-state>> >>last-state