Diff for /gforth/regexp.fs between versions 1.25 and 1.26

version 1.25, 2010/10/10 19:39:34 version 1.26, 2010/12/27 22:39:38
Line 126  Variable varsmax Line 126  Variable varsmax
 : var> ( -- addr ) -1 varstack +!  : var> ( -- addr ) -1 varstack +!
     varstack @+ swap cells + @      varstack @+ swap cells + @
     1+ 2* cells vars + ;      1+ 2* cells vars + ;
   Variable greed-counts  9 cells allot \ no more than 9 nested greedy loops
   : greed' ( -- addr )  greed-counts dup @ + ;
   
 \ start end  \ start end
   
Line 163  Variable varsmax Line 165  Variable varsmax
   
 : (( ( addr u -- ) \ regexp-pattern  : (( ( addr u -- ) \ regexp-pattern
     \G start regexp block      \G start regexp block
     vars off varsmax off loops off      vars off varsmax off loops off greed-counts off
     ]] FORK  AHEAD BUT JOIN !end [[ BEGIN, ; immediate      ]] FORK  AHEAD BUT JOIN !end [[ BEGIN, ; immediate
 : )) ( -- addr f ) \ regexp-pattern  : )) ( -- addr f ) \ regexp-pattern
     \G end regexp block      \G end regexp block
Line 179  Variable varsmax Line 181  Variable varsmax
   
 : {** ( addr -- addr addr ) \ regexp-pattern  : {** ( addr -- addr addr ) \ regexp-pattern
     \G greedy zero-or-more pattern      \G greedy zero-or-more pattern
     0 ]] Literal >r BEGIN dup [[ BEGIN, ; immediate      cell greed-counts +!
       greed' ]] Literal off BEGIN dup [[ BEGIN, ; immediate
 ' {** Alias {++ ( addr -- addr addr ) \ regexp-pattern  ' {** Alias {++ ( addr -- addr addr ) \ regexp-pattern
     \G greedy one-or-more pattern      \G greedy one-or-more pattern
     immediate      immediate
 : n*} ( sys n -- ) \ regexp-pattern  : n*} ( sys n -- ) \ regexp-pattern
     \G At least @var{n} pattern      \G At least @var{n} pattern
     >r ]] r> 1+ >r end-rex? 0= UNTIL dup [[ DONE, ]] drop [[      >r greed' ]] 1 Literal +! end-rex? 0= UNTIL dup [[ DONE, ]] drop [[
     r@ ]] r> 1+ Literal U+DO FORK BUT [[      r@ greed' ]] Literal @ 1+ Literal U+DO FORK BUT [[
     ]] IF  I' I - [[ r@ 1- ]] Literal + drops true UNLOOP ;S  THEN  LOOP [[      ]] IF  I' I - [[ r@ 1- ]] Literal + drops true UNLOOP ;S  THEN  LOOP [[
     r@ IF  r@ ]] Literal drops [[ THEN      r@ IF  r@ ]] Literal drops [[ THEN
     rdrop ]]  dup LEAVE  JOIN [[ ; immediate      rdrop ]]  dup LEAVE  JOIN [[
       cell negate greed-counts +! ; immediate
 : **} ( sys -- ) \ regexp-pattern  : **} ( sys -- ) \ regexp-pattern
     \G end of greedy zero-or-more pattern      \G end of greedy zero-or-more pattern
     0 postpone n*} ; immediate      0 postpone n*} ; immediate

Removed from v.1.25  
changed lines
  Added in v.1.26


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>