Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #33878

Re: Tiny regular expressions code

From mhx@iae.nl (Marcel Hendrix)
Subject Re: Tiny regular expressions code
Newsgroups comp.lang.forth
Message-ID <99761390938433@frunobulax.edu> (permalink)
Date 2014-10-13 22:59 +0200
References <543bfa10$0$2928$e4fe514c@news2.news.xs4all.nl>
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


Hans Bezemer <the.beez.speaks@gmail.com> writes Re: Tiny regular expressions code

[..]
> this is a tiny regular expression parser, based on an article by
> Kernighan and Pike
> (http://www.drdobbs.com/architecture-and-design/regular-expressions/184410904).

> It features ^, $, * and . but I added ? as well (zero or one). This is some
> stuff that was left lying around as an intermediate stage for a similar 4tH
> library (which is cleaner and more capable), but I thought, may be it is of
> use/interest to someone, why throw it away.

> Knock yourselves out ;-)

I had to use the below to decipher it :-)

-marcel

-- ------------------------------------------------------------------------
anew -regexpr

DEFER (matchhere) ( $1 $2 -- bool )

: (match*)  LOCAL c  DLOCALS| $2 $1 |  ( $1 $2 char -- bool )
	BEGIN	$1 $2 (matchhere) IF  TRUE EXIT  ENDIF
		$1 IF	c@ dup '.' =  
			swap c = OR 
           	 ELSE	drop FALSE 
		ENDIF  
	WHILE	$1 1 /string TO $1     
	REPEAT	FALSE ;

: (match?)  LOCAL c  DLOCALS| $2 $1 |  ( $1 $2 char -- bool )
	$1 $2 (matchhere) IF  TRUE EXIT  ENDIF
	$1 IF	c@ dup '.' = 
		swap c = OR 
	 ELSE   drop FALSE 
	ENDIF
	   IF	$1 1 /string $2 (matchhere) 
	 ELSE	FALSE
	ENDIF ;

:NONAME LOCALS| n2 a2 n1 a1 |		( $1 $2 -- bool )
	n2 0= IF  TRUE EXIT  ENDIF
	a2 char+ c@ '*' =		\ if not, does it equal a '*'
	   IF	a2 c@ >R		\ if so, call (match*)
		a2 n2 2 /string TO n2 TO a2  
		a1 n1  a2 n2  R> (match*) EXIT
	ENDIF				\ otherwise, does it equal a '?'
	a2 char+ c@ '?' =
	   IF	a2 c@ >R		\ if so, call (match?)
		a2 n2 2 /string TO n2 TO a2
		a1 n1  a2 n2  R> (match?) EXIT
        ENDIF		                \ otherwise, does it equal a '$'
	a2 c@ '$' =  n2 1 = AND
	   IF   n1 0= EXIT		\ and is it the last character?
	ENDIF	
	a2 c@  '.'   = 			\ finally, check if char matches
	a2 c@  a1 c@ = OR  
	n1 0<> AND 
	   IF	a1 n1 1 /string  
	   	a2 n2 1 /string  
		RECURSE EXIT  
	ENDIF	
	FALSE ; IS (matchhere)

: match DLOCALS| $2 $1 |		( $1 $2 -- bool )
	$2 nip IF  $2 drop c@ '^' 
		   = IF  $1 $2 1 /string (matchhere) EXIT  ENDIF
	    ENDIF 
	BEGIN	$1 $2 (matchhere) 	\ if caret, chop it
		   IF  TRUE exit 
		ENDIF 
		$1 NIP			\ match characters until no more text
	WHILE	$1 1 /string TO $1 	\ chop text
	REPEAT	FALSE ;

cr s" 0,9"   s" ^0,?9$" match . .( -1) 
cr s" 0:9"   s" ^0,?9$" match . .(  0)
cr s" 09"    s" ^0,?9$" match . .( -1)
cr s" 009"   s" ^0,?9$" match . .(  0)
cr s" 0,,9"  s" ^0,?9$" match . .(  0)
cr s" 0,,9"  s" ^0,*9$" match . .( -1)
cr s" 0,,9"  s" ^0*9$"  match . .(  0)
cr

Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-13 18:15 +0200
  Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-13 18:18 +0200
    Re: Tiny regular expressions code Pablo Hugo Reda <pabloreda@gmail.com> - 2014-10-13 09:32 -0700
    Re: Tiny regular expressions code Howerd <howerdo@yahoo.co.uk> - 2014-10-13 11:18 -0700
      Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-13 20:36 +0200
        Re: Tiny regular expressions code Howerd <howerdo@yahoo.co.uk> - 2014-10-13 11:53 -0700
  Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-13 22:14 +0200
  Re: Tiny regular expressions code mhx@iae.nl (Marcel Hendrix) - 2014-10-13 22:59 +0200
    Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-13 23:11 +0200
  Re: Tiny regular expressions code albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-14 09:22 +0000
    Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-14 17:43 +0200
      Re: Tiny regular expressions code albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-14 16:27 +0000
        Re: Tiny regular expressions code albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-15 09:48 +0000
          Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-15 17:38 +0200
            Re: Tiny regular expressions code albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-16 09:20 +0000
  Re: Tiny regular expressions code josv@planet.nl - 2014-10-17 05:03 -0700
    Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-17 17:48 +0200
      Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-17 19:20 +0200
        Re: Tiny regular expressions code anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-10-18 15:43 +0000
          Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-18 18:53 +0200
          Re: Tiny regular expressions code hughaguilar96@yahoo.com - 2014-10-18 19:19 -0700
            Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-19 14:52 +0200
              Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-19 15:25 +0200
                Re: Tiny regular expressions code Bernd Paysan <bernd.paysan@gmx.de> - 2014-10-19 21:14 +0200
                Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-20 00:17 +0200
              Re: Tiny regular expressions code albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-19 17:10 +0000
                Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-19 19:59 +0200
          Re: Tiny regular expressions code Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-19 09:31 -0500
            The magical number seven (was: Tiny regular expressions code) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-10-20 09:10 +0000
              Re: The magical number seven (was: Tiny regular expressions code) m.a.m.hendrix@tue.nl - 2014-10-20 03:13 -0700
                Re: The magical number seven (was: Tiny regular expressions code) mhx@iae.nl (Marcel Hendrix) - 2014-10-20 20:19 +0200
                Re: The magical number seven Lars Brinkhoff <lars.spam@nocrew.org> - 2014-10-21 08:56 +0200
                Re: The magical number seven Bernd Paysan <bernd.paysan@gmx.de> - 2014-10-21 11:44 +0200
                Re: The magical number seven (was: Tiny regular expressions code) Just Ian <superian@gmail.com> - 2014-10-21 07:06 -0700
                Re: The magical number seven (was: Tiny regular expressions code) mhx@iae.nl (Marcel Hendrix) - 2014-10-21 20:11 +0200
                Re: The magical number seven Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-26 04:27 -0500
              Re: The magical number seven (was: Tiny regular expressions code) Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-20 17:28 +0200
                Re: The magical number seven (was: Tiny regular expressions code) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-10-20 16:25 +0000
                Re: The magical number seven (was: Tiny regular expressions code) "Rod Pemberton" <buzzoff@nonamewhichexists.cmm> - 2014-10-20 16:36 -0400
                Re: The magical number seven "Elizabeth D. Rather" <erather@forth.com> - 2014-10-20 12:19 -1000
                Re: The magical number seven "Rod Pemberton" <buzzoff@nonamewhichexists.cmm> - 2014-10-21 01:47 -0400
                Re: The magical number seven "Elizabeth D. Rather" <erather@forth.com> - 2014-10-20 20:31 -1000
                Re: The magical number seven albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-10-21 09:06 +0000
                Re: The magical number seven "Elizabeth D. Rather" <erather@forth.com> - 2014-10-21 08:47 -1000
                Re: The magical number seven "Rod Pemberton" <buzzoff@nonamewhichexists.cmm> - 2014-10-22 02:21 -0400
                Re: The magical number seven (was: Tiny regular expressions code) Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-21 10:29 +0200
                Re: The magical number seven (was: Tiny regular expressions code) Bernd Paysan <bernd.paysan@gmx.de> - 2014-10-21 11:34 +0200
                Re: The magical number seven Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-26 04:41 -0500
                Re: The magical number seven Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-26 12:07 +0100
                Re: The magical number seven Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-26 13:58 -0500
                Re: The magical number seven (was: Tiny regular expressions code) hughaguilar96@yahoo.com - 2014-10-20 16:34 -0700
                Re: The magical number seven Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-26 04:33 -0500
                Re: The magical number seven Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-26 12:12 +0100
              Re: The magical number seven Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-10-26 04:24 -0500
          Re: Tiny regular expressions code mhx@iae.nl (Marcel Hendrix) - 2014-10-19 17:10 +0200
      Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-18 16:02 +0200
        Re: Tiny regular expressions code josv@planet.nl - 2014-10-18 07:50 -0700
  Re: Tiny regular expressions code Hans Bezemer <the.beez.speaks@gmail.com> - 2014-10-18 17:27 +0200
  Re: Tiny regular expressions code the_gavino_himself <visphatesjava@gmail.com> - 2014-11-08 19:24 -0800
  Re: Tiny regular expressions code the_gavino_himself <visphatesjava@gmail.com> - 2014-11-08 20:42 -0800

csiph-web