Raw strings starting/ending with backtick
Cay Horstmann
cay.horstmann at sjsu.edu
Mon Nov 26 09:44:50 UTC 2018
Le 26/11/2018 à 10:20, John Rose a écrit :
> On Nov 26, 2018, at 1:05 AM, Cay Horstmann <cay.horstmann at sjsu.edu
> <mailto:cay.horstmann at sjsu.edu>> wrote:
>>
>> the scheme that I suggest would, in your notation be an OQ1 scheme,
>> with Q = '\'' and R = '\n', quoting any string s as n * Q + R + s + n
>> * Q, with sufficiently large n. Do you recall what sharp edges one
>> would run into? It's not intuitive to me and it would be good to learn
>> from your experience.
>
> Having backtick-with-whitespace as an option besides backtick-alone
> basically introduces two new quoting conventions.
>
> Also, the choice of whitespace is tricky to use in syntax because whitespace
> displays ambiguously. I'm sympathetic to using whitespace for R since it
> seems to make the two quoting conventions so similar that they are seemingly
> just one, with an optional tweak. But the whitespace has downsides too:
> Making a quoting convention depend on details of whitespace is asking for
> puzzlers. There are joke computer languages which depend on the distinction
> between O and 0, or space and tab; we don't want to be like that.
>
> 1. You'd want to use R ~ /\s*\n/ since there's no visual difference between
> that pattern and a simple /\n/.
Yes.
> 2. The close quote would have to contain R somewhere also, which leads
> to possible near-misses if the Q's are there and the R isn't. Again, having
> R be next to invisible (whitespace) makes it harder to find a bug if it
> happens.
No, that was not what I intended. Any sequence m * Q, where m ≥ n, would
close, with (m - n) * Q belonging to s.
I thought that was how it had to be. How else can you parse raw strings
ending in backticks? But I just realized that is not how it works in
12-ea. I misunderstood how your closing quotes work. Would it be hard on
the parser to do it my way?
> 3. After the R, you surely want the ability to strip some horizontal
> space also.
No.
> We are adding an intrinsic "align" method to handle this. My point is that
> mandating a newline causes new problems: The user then is required
> to manage horizontal space on the new line.
I am aware of the "align" methods. Now those have sharp edges. Of course
aligning problems can be avoided by placing the string at the leftmost
column, like I have done in my example. This is why R = /\s*\n/ is a
good choice.
> 4. The design of the close-quote has similar sharp edges.
>
> Making R = '|' or some other printing character, and the close-quote be RQ*,
> would cause fewer problems with whitespace-related format. But it would
> also
> in effect introduce a second quoting convention.
See above.
Cheers,
Cay
--
Cay S. Horstmann | http://horstmann.com | mailto:cay at horstmann.com
More information about the compiler-dev
mailing list