LR(1) is for granddads ; )
This is really sexy.
Question: for ShortFunctionExpression, do we need an additional "=>" form
for this-binding a function body?
ShortFunctionExpression:
Identifier_opt ( FormalParameterList_opt ) [no LineTerminator here] {
FunctionBody }
Identifier_opt ( FormalParameterList_opt ) => { FunctionBody }
Identifier_opt ( FormalParameterList_opt ) => InitialValue
Thanks,
kevin
On Fri, Mar 9, 2012 at 3:17 AM, Brendan Eich <[email protected]> wrote:
> We could add such an ad-hoc-GLR-like algorithm to ECMA-262, but we would
> lose the LR(1) (modulo ASI and lookahead restrictions, and the conventional
> shift-reduce conflict resolution for dangling else) validation I wrote
> about. That's considered unacceptable by TC39 members who spoke up last
> time we talked about this.
>
> But let's say we find a way forward on the validation front. Can't assume
> this (paging Waldemar) but for now let's waive it.
>
> Then the grammar would look something like this:
>
> FunctionDeclaration:
> function Identifier ( FormalParameterList_opt ) { FunctionBody }
> Identifier ( FormalParameterList_opt ) [no LineTerminator here] {
> FunctionBody }
>
> ShortFunctionExpression:
> Identifier_opt ( FormalParameterList_opt ) [no LineTerminator here] {
> FunctionBody }
> Identifier_opt ( FormalParameterList_opt ) => InitialValue
>
> Fat-arrow binds lexical |this| as in CoffeeScript and all right-thinking
> languages :-P.
>
> Change AssignmentExpression like so:
>
> AssignmentExpression:
> ConditionalExpression
> LeftHandSideExpression = InitialValue
> LeftHandSideExpression AssignmentOperator InitialValue
>
> AssignmentExpressionNoIn:
> ConditionalExpressionNoIn
> LeftHandSideExpression = InitialValueNoIn
> LeftHandSideExpression AssignmentOperator InitialValueNoIn
>
> And change all uses of /AssignmentExpression/ outside of the /Expression/
> sub-grammar to /InitialValue/:
>
> ElementList : // See 11.1.4
> Elision_opt InitialValue
> ElementList , Elision_opt InitialValue
>
> PropertyAssignment : // See 11.1.5
> PropertyName : InitialValue
>
> ArgumentList : // See 11.2
> InitialValue
> ArgumentList , InitialValue
>
> Initialiser : // See 12.2
> = InitialValue
>
> InitialiserNoIn : // See 12.2
> = InitialValueNoIn
>
> The cherry on top is the new InitialValue production:
>
> InitialValue :
> AssignmentExpression
> ShortFunctionExpression
>
> This avoids precedence inversion and restricts short function expressions
> to appearing unparenthesized only where initial values may occur today (in
> array and object literals, in argument lists, on the right of assignment
> operators, and in variable initialisers).
>
> /be
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss