| : 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 |
| |
|
| |
|
| : (( ( 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 |
| |
|
| : {** ( 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 |