statements that could be expressions?

Mike Samuel mikesamuel at gmail.com
Thu Jun 2 16:25:04 PDT 2011


2011/6/2 Waldemar Horwat <waldemar at google.com>:
> On 06/02/11 13:43, Mike Samuel wrote:
>>
>> Yes.  That grammar is a subset of the grammar that results from
>> replacing the 11.1.6 ' PrimaryExpression : "(" Expression ")" '
>> production with
>>
>>     "(" GroupElement GroupElements ")"
>>
>> where GroupElement is defined as any Statement except for Block and
>> EmptyStatement without a terminal semicolon, and GroupElements is
>> defined thus
>>
>>     GroupElements : empty
>>         | ";" GroupElement GroupElements
>>
>> but I thought it was easier to reason about ambiguity and locality of
>> spec changes for that subset.
>>
>>
>> 2011/6/2 Waldemar Horwat<waldemar at google.com>:
>>>
>>> Did you mean to disallow an expression as the first statement in your
>>> "block"?
>
> There's no reason to disallow expression statements from the beginning, and
> it's really odd that you can write
>
> (if (a) b; x = 2; c)
>
> but not:
>
> (x = 2; if (a) b; c)
>
> There are other issues, though, with expression statements that begin with
> the word "function", but those happen regardless of whether the expression
> statement is first.  For those, are you declaring a named function (in what
> scope?) or returning a function value?

Quite right.  I knew I had left out all declarations in my first pass.


More information about the es-discuss mailing list