On Oct 16, 2008, at 7:04 PM, Waldemar Horwat wrote:

The parser is required to backtrack until it either finds an expansion of the grammar that doesn't generate a syntax error or until it discovers that they all do. You can choose to make additional syntax errors as per chapter 16, but that does not relieve you of the backtracking requirement.

You're right that a bottom up parser will have a reduce-reduce conflict. For a top-down parser, it's not an issue.


Other examples:  What does the following do?

for (a = let (b = c) b in d) ...

SyntaxError because no ; after first expression in for (;;) loop head.

It can't be a SyntaxError.  It's a perfectly valid for-in statement.

Is this a perfectly valid for-in statement?

for (a = b in c);

Not according to ES3's grammar. An assignment expression is not valid on the left of the for-in's "in":

IterationStatement :
      ...
      for ( LeftHandSideExpression in Expression ) Statement
      for ( var VariableDeclarationNoIn in Expression ) Statement

LeftHandSideExpression does not produce an unparenthesized AssignmentExpression, and if you parenthesize then PutValue will throw on the non-Reference result of the assignment, the ReferenceError at runtime which again can become SyntaxError at compile time.

/be
_______________________________________________
Es-discuss mailing list
Es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to