Diff for /gforth/regexp.fs between versions 1.23 and 1.24

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
   

Removed from v.1.23  
changed lines
  Added in v.1.24


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>