version 1.23, 2010/09/12 22:04:06
|
version 1.24, 2010/10/10 19:34:16
|
Line 226 Variable varsmax
|
Line 226 Variable varsmax
|
\ idea: try to match one alternative and then the rest of regexp. |
\ idea: try to match one alternative and then the rest of regexp. |
\ if that fails, jump back to second alternative |
\ if that fails, jump back to second alternative |
|
|
: JOINs ( sys -- ) BEGIN dup WHILE ]] JOIN [[ REPEAT drop ; |
: THENs ( sys -- ) BEGIN dup WHILE ]] THEN [[ REPEAT drop ; |
|
|
: {{ ( addr -- addr addr ) \ regexp-pattern |
: {{ ( addr -- addr addr ) \ regexp-pattern |
\G Start of alternatives |
\G Start of alternatives |
0 ]] dup BEGIN [[ vars @ ; immediate |
0 ]] dup dup FORK IF 2drop 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 @ varsmax @ max varsmax ! vars ! |
]] dup FORK IF 2drop true ;S THEN [[ >r >r >r vars ! |
]] AHEAD BUT THEN drop [[ |
]] DONE drop dup [[ r> r> r> ]] BEGIN [[ vars @ ; immediate |
]] dup dup FORK IF 2drop 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 ! |
vars @ varsmax @ max vars ! drop |
]] dup FORK IF 2drop true ;S THEN drop dup [[ >r >r >r drop |
]] AHEAD BUT THEN 2drop false ;S [[ THENs ; immediate |
]] DONE drop LEAVE ;S [[ r> r> r> JOINs ; immediate |
|
|
|
\ match variables |
\ match variables |
|
|