From abe2eb462fea3431ff6cb20531fb944f81c10673 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 27 Aug 2008 15:09:49 -0500 Subject: [PATCH] updated regexp2 for new compiler, add a slot for lookahead --- unfinished/regexp2/dfa/dfa.factor | 2 +- unfinished/regexp2/nfa/nfa.factor | 4 ++-- .../transition-tables/transition-tables.factor | 11 +++++++---- unfinished/regexp2/traversal/traversal.factor | 5 ++++- unfinished/regexp2/utils/utils.factor | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/unfinished/regexp2/dfa/dfa.factor b/unfinished/regexp2/dfa/dfa.factor index 0dcf6c4ab5..532ee130bc 100644 --- a/unfinished/regexp2/dfa/dfa.factor +++ b/unfinished/regexp2/dfa/dfa.factor @@ -42,7 +42,7 @@ IN: regexp2.dfa dupd pop dup pick find-transitions rot [ [ [ find-closure ] 2keep nip dupd add-todo-state ] 3keep - >r swapd transition boa r> dfa-table>> add-transition + >r swapd f transition boa r> dfa-table>> add-transition ] curry with each new-transitions ] if-empty ; diff --git a/unfinished/regexp2/nfa/nfa.factor b/unfinished/regexp2/nfa/nfa.factor index f87a2a7b52..1dada10d52 100644 --- a/unfinished/regexp2/nfa/nfa.factor +++ b/unfinished/regexp2/nfa/nfa.factor @@ -30,10 +30,10 @@ GENERIC: nfa-node ( node -- ) stack [ regexp stack>> ] table [ regexp nfa-table>> ] | negated? [ - s0 f obj class boa table add-transition + s0 f obj f class boa table add-transition s0 s1 table add-transition ] [ - s0 s1 obj class boa table add-transition + s0 s1 obj f class boa table add-transition ] if s0 s1 2array stack push t s1 table final-states>> set-at ] ; diff --git a/unfinished/regexp2/transition-tables/transition-tables.factor b/unfinished/regexp2/transition-tables/transition-tables.factor index 0547846655..32a65922f7 100644 --- a/unfinished/regexp2/transition-tables/transition-tables.factor +++ b/unfinished/regexp2/transition-tables/transition-tables.factor @@ -14,7 +14,7 @@ IN: regexp2.transition-tables : ?insert-at ( value key hash/f -- hash ) [ H{ } clone ] unless* [ insert-at ] keep ; -TUPLE: transition from to obj ; +TUPLE: transition from to obj lookahead ; TUPLE: literal-transition < transition ; TUPLE: class-transition < transition ; TUPLE: default-transition < transition ; @@ -22,9 +22,12 @@ TUPLE: default-transition < transition ; TUPLE: literal obj ; TUPLE: class obj ; TUPLE: default ; -: ( from to obj -- transition ) literal-transition boa ; -: ( from to obj -- transition ) class-transition boa ; -: ( from to -- transition ) t default-transition boa ; +: ( from to obj -- transition ) + f literal-transition boa ; +: ( from to obj -- transition ) + f class-transition boa ; +: ( from to -- transition ) + t f default-transition boa ; TUPLE: transition-table transitions literals classes defaults diff --git a/unfinished/regexp2/traversal/traversal.factor b/unfinished/regexp2/traversal/traversal.factor index 94e96bb935..a7a777043f 100644 --- a/unfinished/regexp2/traversal/traversal.factor +++ b/unfinished/regexp2/traversal/traversal.factor @@ -65,7 +65,10 @@ TUPLE: dfa-traverser { [ match-literal ] [ match-class ] [ match-default ] } 3|| ; : setup-match ( match -- obj state dfa-table ) - { current-index>> text>> current-state>> dfa-table>> } get-slots + { + [ current-index>> ] [ text>> ] + [ current-state>> ] [ dfa-table>> ] + } cleave [ nth ] 2dip ; : do-match ( dfa-traverser -- dfa-traverser ) diff --git a/unfinished/regexp2/utils/utils.factor b/unfinished/regexp2/utils/utils.factor index a7606e0af3..9655d8ee03 100644 --- a/unfinished/regexp2/utils/utils.factor +++ b/unfinished/regexp2/utils/utils.factor @@ -10,7 +10,7 @@ IN: regexp2.utils ! quot: ( obj -- obj' ) ! pred: ( obj -- <=> ) >r >r dup slip r> pick over call r> dupd = - [ 3drop ] [ (while-changes) ] if ; inline + [ 3drop ] [ (while-changes) ] if ; inline recursive : while-changes ( obj quot pred -- obj' ) pick over call (while-changes) ; inline