diff --git a/unfinished/regexp2/backend/backend.factor b/unfinished/regexp2/backend/backend.factor index de1546fdd3..81ffb334bd 100644 --- a/unfinished/regexp2/backend/backend.factor +++ b/unfinished/regexp2/backend/backend.factor @@ -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 } ; diff --git a/unfinished/regexp2/dfa/dfa.factor b/unfinished/regexp2/dfa/dfa.factor index 8d847b301f..468ffa73e5 100644 --- a/unfinished/regexp2/dfa/dfa.factor +++ b/unfinished/regexp2/dfa/dfa.factor @@ -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 ; diff --git a/unfinished/regexp2/nfa/nfa.factor b/unfinished/regexp2/nfa/nfa.factor index eaedbcc5b1..792d9fe30f 100644 --- a/unfinished/regexp2/nfa/nfa.factor +++ b/unfinished/regexp2/nfa/nfa.factor @@ -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 ] diff --git a/unfinished/regexp2/regexp2.factor b/unfinished/regexp2/regexp2.factor index 9413287e6c..efc5c660de 100644 --- a/unfinished/regexp2/regexp2.factor +++ b/unfinished/regexp2/regexp2.factor @@ -12,7 +12,8 @@ IN: regexp2 >>nfa-table >>dfa-table >>minimized-table - H{ } clone >>traversal-flags + H{ } clone >>nfa-traversal-flags + H{ } clone >>dfa-traversal-flags reset-regexp ; : construct-regexp ( regexp -- regexp' ) diff --git a/unfinished/regexp2/traversal/traversal.factor b/unfinished/regexp2/traversal/traversal.factor index 1a4d166cea..a5db2cdaa8 100644 --- a/unfinished/regexp2/traversal/traversal.factor +++ b/unfinished/regexp2/traversal/traversal.factor @@ -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 )