It's an honor to get replies from you guys!  

I feel more educated now about the grammar, and the negative lookahead
for { makes sense now for ExpressionStatements as I didn't realize that
object literals weren't considered ExpressionStatements.

Would the following make more sense for UnaryExpressions?

PostfixExpression:
   Identifier [no LineTerminator here] ++
   Identifier [no LineTerminator here] --

PrefixExpression:
   ++ [no LineTerminator here] Identifier
   -- [no LineTerminator here] Identifier

UnaryExpression:
   LeftHandSideExpression
   PostfixExpression
   PrefixExpression
   delete UnaryExpression
   void UnaryExpression
   typeof UnaryExpression
   + UnaryExpression
   - UnaryExpression
   ~ UnaryExpression
   ! UnaryExpression

-Joe


On Thu, 2012-08-30 at 07:15 -0700, Brendan Eich wrote:
> From "Joseph Spencer" <[email protected]>
> > 
> > ExpressionStatement:  
> > Is the prevention of the token { an error in this context?  Initially I
> > thought it was to give parse flow over to the Block Production, until I
> > realized that the following 'should' be a valid ExpressionStatement:
> > {a:5}?5:4;
> 
> The spec uses lookahead restrictions on top of an LR(1) validated (ES3 era, 
> needs revalidation) grammar. This is by design, not an error, and yes, it 
> intentionally makes expression statements such as
> 
>  {lol:42} ? "always" : "never";
> 
> be early errors.
> 
> The simplicity and tried-and-true LR validation are worth it. Anyone being 
> clever can parenthesize. But of course your example is contrived, and it's 
> rare but not unheared of to want { at start of an expression statement.
> 
> Same goes for 'function', and IME that lookahead restriction bites a bit more 
> often, but people know to parenthesize.
> 
> /be


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to