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