<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">On May 20, 2011, at 7:07 AM, Claus Reinke wrote:<br><br><blockquote type="cite"><blockquote type="cite">we should focus on the harder nut to crack (the leading parenthesized parameter list).<br></blockquote><br>Isn't that an example of issues that would not exist if<br>arrow functions had a prefix marker?<br></blockquote><br>It is a deeper issue. ECMA-262 currently covers left-hand side of assignment with LeftHandSideExpression, but that produces 42, not a valid LHS. Semantic checks and mandatory errors in spec prose make up for the lack of a precise grammar.<br><br>ES5, Clause 16, has<br><br>"Attempts to call PutValue on any value for which an early determination can be made that the value is not a Reference (for example, executing the assignment statement 3=4)."<div><br></div><div>Destructuring assignment -- not the binding forms, e.g. let {x, y} = obj; but just assignment expressions, {x, y} = obj -- takes advantage of this cover grammar approach, but it will require semantic checks. And as Waldemar points out, this constrains RHS "structuring" via object and array initialisers to have the same syntax (unless we add more semantic post-grammar restrictions there too!) as the LHS destructuring patterns.</div><div><br></div><div>This may be a bad constraint. Type guards don't seem like they'll be only LHS or RHS, indeed the :: choice for guard prefix was based on easy composing of guards after property names in object initialisers. But some future extension might want LHS and RHS to diverge.</div><div><br></div><div>Arrow functions really do want a different <i>ArrorFormalParameters</i> sub-grammar from ( <i>Expression</i> ) where Expression is of course a comma-expression.</div><div><br></div><div>So I'm investigating GLR parsing. It can handle all of these cases without ambiguity. It does not require implementatoins to have forking parsers, but it is an attractive spec tool. More on this in a bit.</div><div><br></div><div>/be</div><div><br></div></body></html>