09:33
<nicolo-ribaudo>

RegExp syntax spec question: https://tc39.es/ecma262/#prod-annexB-Assertion

Why does the current grammar for Annex B Assertion need to explicitly check the UnicodeMode flag?

Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] ::
  `^`
  `$`
  `\b`
  `\B`
  [+UnicodeMode] `(?=` Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  [+UnicodeMode] `(?!` Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  [~UnicodeMode] QuantifiableAssertion[?NamedCaptureGroups]
  `(?<=` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  `(?<!` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`

QuantifiableAssertion[NamedCaptureGroups] ::
  `(?=` Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] `)`
  `(?!` Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] `)`

Could it be simplified to this?

Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] ::
  `^`
  `$`
  `\b`
  `\B`
  `(?=` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  `(?!` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  `(?<=` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
  `(?<!` Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] `)`
11:36
<jmdyck>
Are you suggesting eliminating the nonterminal QuantifiableAssertion (which would require changing the Term production too), or just eliminating its use from the Assertion production?
11:49
<jmdyck>
The difference between your two snippets happens under [~UnicodeMode, +UnicodeSetsMode], but since I don't think that can happen, I think the substitution would be valid.