[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: english names for symbolic SREs

On 11/27/2013 7:37 AM, John Cowan wrote:
> Alex Shinn scripsit:
>> It was John who insisted that the names be added, and John
>> who came up with most of the new names, so I'm assuming
>> he genuinely wants them.
> I do, though I didn't come up with the idea and in fact was initially
> against having more than one way to do it, but you convinced me otherwise.
> I think the long names are more self-documenting, more Schemey, and
> will make SREs more accessible to people who find string REs an
> abomination of the outer darkness.

Hypothetically, lets say that this SRFI specifies a new regular 
expression syntax called NRE. It should be straightforward to transform 
SREs into NREs. The existing SRE implementations (IrRegex and SCSH) can 
provide a procedure sre->nre which people with existing SREs can use and 
their code is not gratuitously left behind.

The problem with providing both short names and long names is that when 
I write SREs I can just use the long names, but when I read other 
peoples SREs, then I potentially still need to know both.

SREs not only take the existing short names from PCREs, but they added more.

(: <sre1> <sre2> ...) means match <sre1> and <sre2> and ... Scheme 
already has an operator that means and.
($ <sre> ...) means numbered submatch. In PCREs, $ means match the end 
of the line.
(=> <name> <sre> ...) means named submatch. In Scheme this means call 
the procedure on the result of evaluating test.
(/ <range-spec> ...) means ranges. In Scheme / already means divide.
(~ <cset-sre> ...) means complement of union. If you are a C or C++ 
programmer, then this makes sense.
(= <n> <sre> ...) means match <n> times. As a Scheme programmer, I read 
that as <n> equals <sre> equals ...
(>= <n> <sre> ...) means match <n> or more times. As a Scheme 
programmer, I read that as <n> greater than or equal <sre> greater than 
or equal ...
(** <n> <m> <sre> ...) means match <n> to <m> times. I remember it as 
the Fortran exponential operator, but it has been a long time since I 
programmed in Fortran.

This is embarrassing. Does this example from the specification really 
look like Scheme? (regexp-matches '(* (& (/ "az") (~ ("aeiou")))) "xyzzy")

I feel like I have gone into an Apple store and tried to convince 
everyone that they should be running Microsoft Windows.