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