Proposal to change definition of 'name' (forbid final .)

It was observed on this morning's CG call that allowing names like

  foo.

causes some difficulties for recursive-descent parsers (and any other
parser with limited lookahead, perhaps), which are out of all proportion
to the advantages, if any.

This is to propose a simple fix:  continue to allow . to occur in names,
but forbid it to appear at the end of a name.  Since no one on the call
remembered ever seeing an XML name with a final full stop outside of a
test suite, this did not seem likely to be a painful restriction.

Concretely, delete the current definitions:

            @name: namestart, namefollower*.
       -namestart: ["_"; L].
    -namefollower: namestart; ["-.·‿⁀"; Nd; Mn].

and replace them with:

            @name: namestart, namefollower*, ('.', namefollower*)*.
       -namestart: ["_"; L].
    -namefollower: namestart; ["-·‿⁀"; Nd; Mn].

or alternatively:

            @name: namestart, (namefollower ** '.').
       -namestart: ["_"; L].
    -namefollower: namestart; ["-·‿⁀"; Nd; Mn].

Comments and discussion welcome.  (And it occurs to me that someone
should check to make sure that this does actually address the LL(1)
issue.)

Michael
-- 
C. M. Sperberg-McQueen
Black Mesa Technologies LLC
http://blackmesatech.com

Received on Tuesday, 28 November 2023 17:03:42 UTC