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

Re: new, simpler formal specification



In hopes it may be helpful, the following is a somewhat simpler version of
an earlier one: http://srfi.schemers.org/srfi-62/mail-archive/msg00045.html
which only modifies R5RS's definition of <comment> (effectively treated as
separator/white-space); which includes <block-comment>, and removes legally
quoting and/or commenting, a comment or <empty>:

Only modifying one R5RS's exiting grammar specification:

   <comment> -> <line-comment> | <block-comment> | <datum-comment>

And augmented it with these additions:

  <line-comment> -> ; <all-chars-to-end-of-line>

  <block-comment> -> #| <all-char-except-#|-or-|#> |#

  <datum-comment> -> #; <datum>

(i.e. #;#; '#; (#;) (') etc. are illegal sequences, vs. earlier versions.)

> From: Taylor Campbell <campbell@xxxxxxxxxxxxxxxxxx>
> I recently wrote an alternative specification of Scheme's syntax using
> (roughly) BNF, but in such a way that is much more in the spirit of
> Lisp: the syntax of the external representation of S-expressions is
> separated from the syntax of Scheme, and S-expressions are specified in
> such a way as to resemble a recursive-descent parser as closely as
> possible.  That is not the point of this message, though.  In writing
> the alternative specification, I realized that S-expression comments
> can be specified much more simply.  Specifically, all it requires is
> that the <datum>, <list>, & <vector> non-terminals be extended, and a
> <commented datum> be introduced.  (<Token> must of course be extended
> with a "#;" option, too.)  <Datum> becomes:
> 
>   <datum> ---> <simple datum> | <compound datum> | <commented datum>
>   <commented datum> ---> "#;" <datum> <datum>
> 
> <List> & <vector> use a couple of auxiliary rules; they are all
> presented here:
> 
>   <list> ---> "(" <datum>* <optional dot> <delimiter prefix> ")"
>   <optional dot> ---> <empty> | <datum> <delimiter prefix> "." <datum>
>   <vector> ---> "#(" <datum>* <delimiter prefix> ")"
>   <delimiter prefix> ---> <empty> | "#;" <datum> <delimiter prefix>
> 
> The first datum within a commented datum is ignored, as is any datum
> immediately following the "#;" token in a delimiter prefix.
> 
> This formal specification is much simpler than what Al* Petrofsky
> suggested earlier, and I think it should satisfy Paul Schlie's demands
> for a grammar more consistent with Scheme's existing one.  If no one
> sees any problems with it, I'll change the SRFI document to use it and
> finalize the SRFI, which is a bit overdue.
> 
> Should Paul Schlie still prefer his own specification, which I still
> don't understand, he should provide an implementation of it in terms of
> Scheme48's reader (as I show in the document), and he should explain
> why he wants to so drastically change the various reader abbreviations,
> those for QUOTE, QUASIQUOTE, &c., to magically disappear due to their
> being in what was previously syntactically invalid locations.
> 
> (My alternative specification of Scheme's syntax, by the way, is at
> <http://www.bloodandcoffee.net/campbell/code/scm-syntax.text>, for
> those curious.  Any comments, questions, or other feedback on it would
> be appreciated, though such feedback should be sent to me directly, not
> to this mailing list.)
>