On 2/14/2018 12:42 PM, John Rose wrote:
On Feb 14, 2018, at 12:24 PM, Alex Buckley <alex.buck...@oracle.com
<mailto:alex.buck...@oracle.com>> wrote:

There is plenty of precedent for semantic rules

In my draft version this is done with "where" clauses on the
grammar rules:

RawStringLiteral:

  RawQuote RawStringBody RawQuote
  where the two raw-quotes are constrained to be identical

RawQuote:
  ` {`}
  where the preimage is constrained to be unescaped

We're dancing on the head of a pin now, but as a matter of specificational style I'm wary of too many rules in the grammar itself, especially a context-sensitive rule like raw-quotes-must-balance.

JLS 3.10.5 is a good specimen to study: there is a context-free rule in the grammar:

  StringCharacter:
    InputCharacter but not " or \

and a context-sensitive semantic rule:

  It is a compile-time error for a line terminator to appear
  after the opening " and before the closing matching ".

Strictly speaking, the semantic rule is unnecessary because InputCharacter is DEFINED to exclude the CR and LF line terminators! But the semantic rule makes the intent very very clear. Writing rules in this form also prevents the spec from becoming a soup of statements that are more than just observations but less than full-throated assertions.

Anyway, the draft was very useful, thanks!

Alex

Reply via email to