| \G start regexp block |
\G start regexp block |
| vars off varsmax off loops off greed-counts 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 |
: )) ( -- flag ) \ regexp-pattern |
| \G end regexp block |
\G end regexp block |
| ]] >last ;S [[ |
]] >last ;S [[ |
| DONE, ]] drop false ;S THEN [[ ; immediate |
DONE, ]] drop false ;S THEN [[ ; immediate |
| ]] dup >last ;S [[ DONE, ]] false ;S THEN [[ |
]] dup >last ;S [[ DONE, ]] false ;S THEN [[ |
| ]] nip 1+ false U+DO FORK BUT [[ |
]] nip 1+ false U+DO FORK BUT [[ |
| ]] IF I' I - 1- drops UNLOOP true ;S THEN LOOP [[ |
]] IF I' I - 1- drops UNLOOP true ;S THEN LOOP [[ |
| ]] dup LEAVE JOIN [[ ; immediate |
]] false ;S JOIN [[ ; immediate |
| : ++} ( sys -- ) \ regexp-pattern |
: ++} ( sys -- ) \ regexp-pattern |
| \G end of greedy zero-or-more pattern |
\G end of greedy zero-or-more pattern |
| ]] dup >last ;S [[ DONE, ]] false ;S THEN [[ |
]] dup >last ;S [[ DONE, ]] false ;S THEN [[ |
| ]] nip false U+DO FORK BUT [[ |
]] nip false U+DO FORK BUT [[ |
| ]] IF I' I - drops UNLOOP true ;S THEN LOOP [[ |
]] IF I' I - drops UNLOOP true ;S THEN LOOP [[ |
| ]] LEAVE JOIN [[ ; immediate |
]] drop false ;S JOIN [[ ; immediate |
| |
|
| \ non-greedy loops |
\ non-greedy loops |
| |
|
| |
|
| : {{ ( addr -- addr addr ) \ regexp-pattern |
: {{ ( addr -- addr addr ) \ regexp-pattern |
| \G Start of alternatives |
\G Start of alternatives |
| 0 ]] dup dup FORK IF 2drop true ;S BUT JOIN [[ vars @ ; immediate |
0 ]] dup FORK IF drop true ;S BUT JOIN [[ vars @ ; immediate |
| : || ( addr addr -- addr addr ) \ regexp-pattern |
: || ( addr addr -- addr addr ) \ regexp-pattern |
| \G separator between alternatives |
\G separator between alternatives |
| vars @ varsmax @ max varsmax ! vars ! |
vars @ varsmax @ max varsmax ! vars ! |
| ]] AHEAD BUT THEN drop [[ |
]] AHEAD BUT THEN [[ |
| ]] dup dup FORK IF 2drop true ;S BUT JOIN [[ vars @ ; immediate |
]] dup FORK IF drop true ;S BUT JOIN [[ vars @ ; immediate |
| : }} ( addr addr -- addr ) \ regexp-pattern |
: }} ( addr addr -- addr ) \ regexp-pattern |
| \G end of alternatives |
\G end of alternatives |
| vars @ varsmax @ max vars ! drop |
vars @ varsmax @ max vars ! drop |
| ]] AHEAD BUT THEN 2drop false ;S [[ THENs ; immediate |
]] AHEAD BUT THEN drop false ;S [[ THENs ; immediate |
| |
|
| \ match variables |
\ match variables |
| |
|