

Nondeterministic regular expressions library for Arc (don't miss the cartoon) - drcode
http://www.lisperati.com/arc/regex.html

======
hhm
How could anyone possibly miss the cartoon?

~~~
astine
By not clicking the link?

~~~
eru
Or by using Lynx?

------
13ren
A bare-bones nondeterministic regular expression engine for Python in 14 lines
<http://paste.lisp.org/display/24849>

~~~
gregwebs
A bare-bones engine that interprets a regex
[http://blog.thoughtfolder.com/2008-02-04-even-more-
beautiful...](http://blog.thoughtfolder.com/2008-02-04-even-more-beautiful-
code-c-haskell-.html)

~~~
13ren
I don't know much Haskell (it's on my list), but am I right in thinking that
code doesn't implement parenthetical grouping or alternation? eg:

    
    
      (ab)*
      a|b
    

I think it's aiming at Perl or command-line style of regex, not mathematical
regular expressions (EDIT not saying either is good or bad).

(BTW: I didn't write the 14 line Python one, I'm just studying it).

~~~
gregwebs
groupings and alternation can't be implemented in such a simplistic regex
engine that matches the target while parsing the regex. Here is a more
sophisticated toy haskell engine that uses a real parsing library
[http://jcreigh.blogspot.com/2006/12/simple-regex-engine-
in-h...](http://jcreigh.blogspot.com/2006/12/simple-regex-engine-in-
haskell.html)

~~~
13ren
That's very interesting, because I've always felt that it should be possible
to parse the regex and match the target at the same time... (though nobody
ever does it that way, instead doing it with 2 passes).

Do you know of a proof that grouping and alternation cannot be implemented in
this way? (formal or informal).

~~~
gregwebs
It is possible with the addition of back tracking capabilities (the most crude
of which would be to just be able to look backwards in the regex). But at that
point the implementation will be complex and the implementers should wonder
why they did not implement a compile phase for the regex string. A compile
phase also gives a chance for optimizations of the regex.

------
henning
"The only common languages that have this ability are arc and scheme, a close
relative to arc."

Arc is common?

~~~
dfranke
For that matter, Ruby and C both have continuation support.

~~~
drcode
Ruby has continuations, but with significant limitations. Ruby continuations
cannot roll back modified variables, from what I understand- I think my email
example would fail in a ruby implementation.

As for C, I haven't seen any real continuation support- Just some partial
simulations using longjmp.

------
lisp_padawan
fantastic work! many thanks

