more work on traversal-flags
parent
97599d707b
commit
61122e6e9f
|
@ -11,7 +11,8 @@ TUPLE: regexp
|
|||
nfa-table
|
||||
dfa-table
|
||||
minimized-table
|
||||
{ traversal-flags hashtable }
|
||||
{ nfa-traversal-flags hashtable }
|
||||
{ dfa-traversal-flags hashtable }
|
||||
{ state integer }
|
||||
{ new-states vector }
|
||||
{ visited-states hashtable } ;
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays assocs combinators fry kernel locals
|
||||
math math.order regexp2.nfa regexp2.transition-tables sequences
|
||||
sets sorting vectors regexp2.utils sequences.lib ;
|
||||
sets sorting vectors regexp2.utils sequences.lib combinators.lib
|
||||
sequences.deep ;
|
||||
USING: io prettyprint threads ;
|
||||
IN: regexp2.dfa
|
||||
|
||||
|
@ -66,5 +67,13 @@ IN: regexp2.dfa
|
|||
[ >>start-state drop ] keep
|
||||
1vector >>new-states drop ;
|
||||
|
||||
: set-traversal-flags ( regexp -- )
|
||||
[ dfa-table>> transitions>> keys ]
|
||||
[ nfa-traversal-flags>> ]
|
||||
bi 2drop ;
|
||||
|
||||
: construct-dfa ( regexp -- )
|
||||
[ set-initial-state ] [ new-transitions ] [ set-final-states ] tri ;
|
||||
[ set-initial-state ]
|
||||
[ new-transitions ]
|
||||
[ set-final-states ] tri ;
|
||||
! [ set-traversal-flags ] quad ;
|
||||
|
|
|
@ -46,7 +46,7 @@ GENERIC: nfa-node ( node -- )
|
|||
|
||||
: add-traversal-flag ( flag -- )
|
||||
stack peek second
|
||||
current-regexp get traversal-flags>> push-at ;
|
||||
current-regexp get nfa-traversal-flags>> push-at ;
|
||||
|
||||
:: concatenate-nodes ( -- )
|
||||
[let* | regexp [ current-regexp get ]
|
||||
|
|
|
@ -12,7 +12,8 @@ IN: regexp2
|
|||
<transition-table> >>nfa-table
|
||||
<transition-table> >>dfa-table
|
||||
<transition-table> >>minimized-table
|
||||
H{ } clone >>traversal-flags
|
||||
H{ } clone >>nfa-traversal-flags
|
||||
H{ } clone >>dfa-traversal-flags
|
||||
reset-regexp ;
|
||||
|
||||
: construct-regexp ( regexp -- regexp' )
|
||||
|
|
|
@ -45,8 +45,7 @@ TUPLE: dfa-traverser
|
|||
] when text-finished? ;
|
||||
|
||||
: increment-state ( dfa-traverser state -- dfa-traverser )
|
||||
>r [ 1+ ] change-current-index
|
||||
dup current-state>> >>last-state r>
|
||||
>r [ 1+ ] change-current-index dup current-state>> >>last-state r>
|
||||
first >>current-state ;
|
||||
|
||||
: match-failed ( dfa-traverser -- dfa-traverser )
|
||||
|
|
Loading…
Reference in New Issue