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 |