Here we go again, pragmas…

Hello,

We have to talk about pragmas again eventually. One of my goals after
getting my implementation running was to be able to experiment with some
concrete proposals.

Here’s one, expressed as a diff off the ixml grammar:

$ diff invisible.ixml pragma.ixml 
3c3
<            -s: (whitespace; comment)*.
---
>            -s: (whitespace; comment; pragma)*.
8c8,10
<       comment: -"{", (cchar; comment)*, -"}".
---
> 
>       comment: -"{", ((~["["]; comment; pragma), (cchar; comment; pragma)*)?, -"}".
>        pragma: -"{[", name, (whitespace, (cchar; comment; pragma)*)?, -"]}".

This adopts “{[” and “]}” as the pragma delimiters, satisfying the
desire to have them appear as a “kind of comment.”

Pragmas have a required name, but it’s not any kind of special,
qualified name. I can’t say I intended it, but I kind of liked the fact
that the pragma name came out as an attribute because of the mark on
“name”.

As written, if a pragma consists of anything more than a name, it must
have whitespace after the name. So you can’t do this: {[name{comment}]}.
I think I can live with that, though a more complicated grammar
could fix it. (If you don’t require whitespace, then the parser
can turn {[name data]} into <pragma name="nam">e data</pragma>.)

I sort of like how small the footprint of this change is, so I didn’t
try to file off every possible edge case.

There’s a part of me that would have expected all of the characters in
the pragma, even nested comments and pragmas to appear as pragma data:

  <pragma name="name">testing {a comment} and {[nested pragma]}</pragma>

But that isn’t how comments work today, so I went with the simple thing
and let pragmas work the same way.

This proposal fits my sort of bare minimum needed for pragmas. It’s the
closest thing to a compromise solution that I’ve been able to imagine,
which at least means it’ll probably have the distinction of being hated
by *everyone*! :-)

                                        Be seeing you,
                                          norm

--
Norm Tovey-Walsh
Saxonica

Received on Monday, 28 February 2022 14:24:51 UTC