Waldemar Horwat wrote: > David-Sarah Hopwood wrote: >> I'll repeat my argument here for convenience: >> >> A DivisionPunctuator must be preceded by an expression. >> A RegularExpressionLiteral is itself an expression. >> >> (This assumes that the omission of RegularExpressionLiteral from >> Literal is a bug.) >> >> Therefore, for there to exist syntactic contexts in which either >> a DivisionPunctuator or a RegularExpressionLiteral could occur, >> it would have to be possible for an expression to immediately >> follow [*] another expression with no intervening operator. >> The only case in which that can occur is where a semicolon is >> automatically inserted between the two expressions. >> Assume that case: then the second expression cannot begin >> with [*] a token whose first character is '/', because that >> would have been interpreted as a DivisionPunctuator, and so >> no semicolon insertion would have occurred (because semicolon >> insertion only occurs where there would otherwise have been a >> syntax error); contradiction. > > Yes, I verified when we were writing ES3 that this was the only case > where the syntactic grammar permitted a / to serve as both a division > (or division-assignment) and a regexp literal. The interaction of > lexing and semicolon insertion would have been unclear (how can you say > that the next token is invalid if you don't know how to lex it?), so we > wrote the spec to explicitly resolve those in favor of division.
If that is what the note is intended to clarify, I think its current wording is more confusing than helpful. It certainly confused me. Anyway, there is no case in which a regexp needs to be parenthesized to avoid lexical ambiguity. How about replacing the current wording by something that specifically discusses the semicolon insertion issue, with an example: There are two goal symbols for the lexical grammar. The InputElementDiv symbol is used in those syntactic grammar contexts where a leading division (/) or division-assignment (/=) operator is permitted. The InputElementRegExp symbol is used in other syntactic grammar contexts. NOTE There are no syntactic grammar contexts where both a leading division or division-assignment, and a leading RegularExpressionLiteral are permitted. This is not affected by semicolon insertion (section 7.9); in examples such as the following: a = b /hi/g.exec(c).map(d); where the first non-whitespace, non-comment character after a LineTerminator is '/' and the syntactic context allows division or division-assignment, no semicolon is inserted at the LineTerminator. That is, this example is interpreted in the same way as: a = b / hi / g.exec(c).map(d); -- David-Sarah Hopwood ⚥ _______________________________________________ Es-discuss mailing list Es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss