| 0 Value end$ |
0 Value end$ |
| 0 Value start$ |
0 Value start$ |
| : !end ( addr u -- addr ) over + to end$ dup to start$ ; |
: !end ( addr u -- addr ) over + to end$ dup to start$ ; |
| : $? ( addr -- addr flag ) dup end$ u< ; |
: end-rex? ( addr -- addr flag ) dup end$ u< ; |
| : ^? ( addr -- addr flag ) dup start$ u> ; |
: start-rex? ( addr -- addr flag ) dup start$ u> ; |
| : ?end ( addr -- addr ) ]] dup end$ u> ?LEAVE [[ ; immediate |
: ?end ( addr -- addr ) ]] dup end$ u> ?LEAVE [[ ; immediate |
| |
|
| \ start and end |
\ start and end |
| |
|
| : \^ ( addr -- addr ) \ regexp-pattern |
: \^ ( addr -- addr ) \ regexp-pattern |
| \G check for string start |
\G check for string start |
| ]] ^? ?LEAVE [[ ; immediate |
]] start-rex? ?LEAVE [[ ; immediate |
| : \$ ( addr -- addr ) \ regexp-pattern |
: \$ ( addr -- addr ) \ regexp-pattern |
| \G check for string end |
\G check for string end |
| ]] $? ?LEAVE [[ ; immediate |
]] end-rex? ?LEAVE [[ ; immediate |
| |
|
| \ regexp block |
\ regexp block |
| |
|
| 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 $? 0= UNTIL dup [[ DONE, ]] drop [[ |
>r ]] r> 1+ >r end-rex? 0= UNTIL dup [[ DONE, ]] drop [[ |
| r@ IF r@ ]] r@ Literal u< IF r> 1+ drops false EXIT THEN [[ THEN |
r@ IF r@ ]] r@ Literal u< IF r> 1+ drops false EXIT THEN [[ THEN |
| r@ ]] r> 1+ Literal U+DO FORK BUT [[ |
r@ ]] r> 1+ Literal U+DO FORK BUT [[ |
| ]] IF I' I - [[ r@ 1- ]] Literal + drops true UNLOOP EXIT THEN LOOP [[ |
]] IF I' I - [[ r@ 1- ]] Literal + drops true UNLOOP EXIT THEN LOOP [[ |