unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
Cc: emacs-devel@gnu.org
Subject: Re: Unquoted special characters in regexps
Date: Sun, 26 Feb 2006 12:32:18 +0100	[thread overview]
Message-ID: <440191C2.4080609@gmx.at> (raw)
In-Reply-To: <jezmkfxf8q.fsf@sykes.suse.de>

 >>>This is incorrect.  ']' is only special in a bracket expression (like
 >>>'-').
 >>
 >>`]' is _also_ special in a character alternative,
 >
 >
 > A bracket expression has a completely different set of special characters.
 > For example, '\' and '$' are not special there.
 >
 >
 >>`-' is special _only_ in a character alternative.
 >
 >
 > Just like ']'.
 >
 > Andreas.
 >

We would have to agree on the semantics of the term "special" first. In
Elisp descriptions this term is overloaded.  Take, for example, the
following excerpt from the Elisp tutorial:

    Indeed more than one such mark or brace may precede the space.  These
    require a expression that looks like this:

    	     []\"')}]*

       In this expression, the first `]' is the first character in the
    expression; the second character is `"', which is preceded by a `\'
    to tell Emacs the `"' is _not_ special.  The last three characters
    are `'', `)', and `}'.

It's confusing because we know from the Elisp manual that

    The special characters are `.', `*', `+', `?', `[', `]', `^', `$',
    and `\'; no new special characters will be defined in the future.

hence a double-quote is never "special" in terms of regexp semantics.
Why should we have to tell Emacs that it is "_not_ special" then?  The
answer is, obviously, that the Elisp read syntax for regexps is the
string data type and the tutorial's "special" indeed refers to string
semantics.  Hence when you say that "'\' and '$' are not special there"
you probably don't mean the special semantics of the backslash within
strings.

Now let's agree on the term "there".  Reasonably, "there" is the
sequence of characters obtained after stripping both the opening bracket
_and_ the closing bracket of a character alternative.  Otherwise, the
sentence from the Elisp manual "To include a `]' in a character
alternative, you must make it the first character." wouldn't make sense.
`]' is special inside a character alternative because it may appear in
one and only one position - namely the first.  And the semantics of the
`]' in the first position is "match one `]'".  The semantics of an `]'
closing a character alternative is completely different from that.

 From an operational point of view - that of the Elisp interpreter - you
_can_ say that `]' is not special in regexps.  If that's the preferred
point of view it's sufficient to remove `]' from the list of special
characters in the respective manuals and treat it like `-' as you
propose.  And, you wouldn't have to mention "poor practice" in the Elisp
manual at all - anything the Elisp interpreter interprets as intended by
the programmer would be valid.

There exists, however, a functional subset of Elisp (Elisp without
setqs, iterators, ...) amenable to mathematical reasoning like proving
correctness or validity of your code.  And mathematicians don't like to
reason about malformed constructs like "(a + 3" or "a + 3)".  They
prefer something like "a + 3" or "(a + 3)" instead.  They do rely on the
special semantics of "(" _and_ ")" within an expression.  Hence, saying
that `[' is special and `]' not would be tantamount to removing regexps
from the subset of Elisp amenable to mathematical reasoning.

  reply	other threads:[~2006-02-26 11:32 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-25 17:23 Unquoted special characters in regexps martin rudalics
2006-02-25 18:42 ` Andreas Schwab
2006-02-25 19:18   ` martin rudalics
2006-02-25 19:31     ` Andreas Schwab
2006-02-25 20:18       ` martin rudalics
2006-02-25 22:09         ` Andreas Schwab
2006-02-26 11:32           ` martin rudalics [this message]
2006-02-26 11:50             ` Andreas Schwab
2006-02-26 13:28               ` martin rudalics
2006-02-25 22:13         ` Luc Teirlinck
2006-02-26 13:13           ` martin rudalics
2006-02-26 13:50             ` Andreas Schwab
2006-02-26 16:41               ` Luc Teirlinck
2006-02-26 17:53                 ` martin rudalics
2006-02-26 18:22                   ` Luc Teirlinck
2006-02-26 19:26                     ` martin rudalics
2006-02-26 17:10               ` martin rudalics
2006-02-26 17:42                 ` Luc Teirlinck
2006-02-26 19:06                   ` martin rudalics
2006-02-26 17:56                 ` Andreas Schwab
2006-02-26 19:08                   ` martin rudalics
2006-02-27 19:03                     ` Richard Stallman
2006-02-27 19:36                       ` Andreas Schwab
2006-02-27 20:03                         ` martin rudalics
2006-02-27 20:32                           ` Andreas Schwab
2006-02-27 21:43                             ` martin rudalics
2006-02-27 22:11                               ` Andreas Schwab
2006-02-28  6:19                                 ` Richard Stallman
2006-02-28 10:28                                 ` martin rudalics
2006-02-28  0:30                       ` Luc Teirlinck
2006-02-28 10:27                         ` martin rudalics
2006-02-28 22:57                           ` Luc Teirlinck
2006-03-01 13:00                             ` martin rudalics
2006-03-01 17:54                         ` Richard Stallman
2006-03-02  4:06                           ` Luc Teirlinck
2006-03-02 19:43                             ` Richard Stallman
2006-03-02  4:54                           ` Luc Teirlinck
2006-03-02 18:40                           ` martin rudalics
2006-03-02 23:26                             ` Luc Teirlinck
2006-03-03  7:42                               ` martin rudalics
2006-03-03 13:51                                 ` Luc Teirlinck
2006-03-03 14:09                                 ` Luc Teirlinck
2006-03-03 18:52                                   ` martin rudalics
2006-03-03 22:41                                     ` Luc Teirlinck
2006-03-03 23:00                                     ` Luc Teirlinck
2006-03-03 10:25                             ` Richard Stallman
2006-03-03 15:20                               ` martin rudalics
2006-03-04 13:37                                 ` Richard Stallman
2006-03-04 14:40                                   ` martin rudalics
2006-03-06  0:48                                     ` Richard Stallman
2006-03-03 10:25                             ` Richard Stallman
2006-03-03 15:51                               ` martin rudalics
2006-03-03 23:48                                 ` Luc Teirlinck
2006-03-04  9:58                                   ` martin rudalics
2006-03-04 23:16                                 ` Luc Teirlinck
2006-03-05  2:54                               ` Luc Teirlinck
2006-03-06  0:49                                 ` Richard Stallman
2006-02-28  0:44                       ` Luc Teirlinck
2006-03-04 21:07                         ` Thien-Thi Nguyen
2006-03-05  3:37                           ` Luc Teirlinck
2006-03-05 11:10                             ` martin rudalics
2006-03-05 15:32                               ` Luc Teirlinck
2006-03-06  7:41                                 ` martin rudalics
2006-03-05 17:04                               ` Luc Teirlinck
2006-03-05 11:54                             ` martin rudalics
2006-03-05 15:35                               ` Andreas Schwab
2006-03-06  8:19                                 ` martin rudalics
2006-03-05 18:36                               ` Luc Teirlinck
2006-03-05 19:14                                 ` Luc Teirlinck
2006-03-06  8:17                                   ` martin rudalics
2006-02-28  0:59                       ` Luc Teirlinck
2006-03-06 12:52                         ` Richard Stallman
2006-03-07  5:52                           ` Luc Teirlinck
2006-03-07  8:53                             ` martin rudalics
2006-02-25 22:34         ` Luc Teirlinck
2006-02-25 22:59           ` Andreas Schwab
2006-02-26 13:20           ` martin rudalics
2006-02-26 16:53             ` Luc Teirlinck
2006-02-26 18:01               ` martin rudalics
2006-02-26 17:19             ` Luc Teirlinck
2006-02-26 18:13               ` martin rudalics

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=440191C2.4080609@gmx.at \
    --to=rudalics@gmx.at \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).