From 40009dac8793f6f1972c120446512b0078f08f61 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 19 Sep 2008 15:14:05 -0500 Subject: [PATCH 1/2] add match-range to regexp --- unfinished/regexp/regexp.factor | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/unfinished/regexp/regexp.factor b/unfinished/regexp/regexp.factor index 47c6e52c39..85bdccc2f4 100644 --- a/unfinished/regexp/regexp.factor +++ b/unfinished/regexp/regexp.factor @@ -33,7 +33,19 @@ IN: regexp dupd match [ [ length ] [ length>> 1- ] bi* = ] [ drop f ] if* ; -: match-head ( string regexp -- end ) match length>> 1- ; +: match-head ( string regexp -- end/f ) match [ length>> 1- ] [ f ] if* ; + +: match-at ( string m regexp -- n/f finished? ) + [ + 2dup swap length > [ 2drop f f ] [ tail-slice t ] if + ] dip swap [ match-head f ] [ 2drop f t ] if ; + +: match-range ( string m regexp -- a/f b/f ) + 3dup match-at over [ + drop nip rot drop dupd + + ] [ + [ 3drop drop f f ] [ drop [ 1+ ] dip match-range ] if + ] if ; : initial-option ( regexp option -- regexp' ) over options>> conjoin ; From 9643ad1b9ea1bf829c71029daa24c34eca6b2a05 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 19 Sep 2008 17:54:34 -0500 Subject: [PATCH 2/2] work for lookahead --- unfinished/regexp/dfa/dfa.factor | 1 - unfinished/regexp/transition-tables/transition-tables.factor | 5 +++++ unfinished/regexp/traversal/traversal.factor | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/unfinished/regexp/dfa/dfa.factor b/unfinished/regexp/dfa/dfa.factor index 6f244dc8af..6200a1b3c0 100644 --- a/unfinished/regexp/dfa/dfa.factor +++ b/unfinished/regexp/dfa/dfa.factor @@ -27,7 +27,6 @@ IN: regexp.dfa nfa-table>> transitions>> [ at keys ] curry map concat eps swap remove ; - ! dup t member? [ t swap remove t suffix ] when ; : add-todo-state ( state regexp -- ) 2dup visited-states>> key? [ diff --git a/unfinished/regexp/transition-tables/transition-tables.factor b/unfinished/regexp/transition-tables/transition-tables.factor index 82e2db8496..1c9a3e3001 100644 --- a/unfinished/regexp/transition-tables/transition-tables.factor +++ b/unfinished/regexp/transition-tables/transition-tables.factor @@ -32,7 +32,12 @@ TUPLE: transition-table transitions start-state final-states ; H{ } clone >>transitions H{ } clone >>final-states ; +: maybe-initialize-key ( key hashtable -- ) + 2dup key? [ 2drop ] [ H{ } clone -rot set-at ] if ; + : set-transition ( transition hash -- ) + #! set the state as a key + 2dup [ to>> ] dip maybe-initialize-key [ [ to>> ] [ obj>> ] [ from>> ] tri ] dip 2dup at* [ 2nip insert-at ] [ drop >r >r H{ } clone [ insert-at ] keep r> r> set-at ] if ; diff --git a/unfinished/regexp/traversal/traversal.factor b/unfinished/regexp/traversal/traversal.factor index 752323de91..cfc97aff29 100644 --- a/unfinished/regexp/traversal/traversal.factor +++ b/unfinished/regexp/traversal/traversal.factor @@ -43,6 +43,10 @@ TUPLE: dfa-traverser dup save-final-state ] when text-finished? ; +: print-flags ( dfa-traverser -- dfa-traverser ) + dup [ current-state>> ] [ traversal-flags>> ] bi + ; + : increment-state ( dfa-traverser state -- dfa-traverser ) [ [ 1+ ] change-current-index dup current-state>> >>last-state