more work on traversal-flags

db4
Doug Coleman 2008-08-28 22:08:54 -05:00
parent 97599d707b
commit 61122e6e9f
5 changed files with 17 additions and 7 deletions

View File

@ -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 } ;

View File

@ -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 ;

View File

@ -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 ]

View File

@ -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' )

View File

@ -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 )