Brendan Eich wrote:
Caitlin Potter wrote:
6, 2015 at 5:42 PM, Brendan Eich<brendan at mozilla.org
<https://mail.mozilla.org/listinfo/es-discuss>> wrote:
>
>>/ Did you keep backward compatibility? `x?.1:y` must continue to
work.
/>
>
>This is why I suggested a leading operator (`?a.?b()`) because it
seems
>like it would have the least potential for conflict with existing valid
>syntax
What about something like
MemberExpression[?Yield] ?|.| IdentifierName
MemberExpression[?Yield] ?*[* Expression[In, ?Yield] |]|
Context specific to MemberExpressions, as far as I'm aware there's no
otherwise valid ternary expression that could be mixed up for it, and
it wouldn't need a cover grammar?
We can try being this precise, as you say -- but we cannot then handle
x?(y) as CoffeeScript does. Instead of being neither fish nor fowl,
better to be fowl with leading ?, or use a distinct and regular syntax
that handles all the cases we want. My two cents,
Worse, we can't even do ?[ as you propose with LR(1) or any similar
approach. Here's a bison toy grammar:
%token ID
%%
start: E
;
E: A
| E ',' A
;
A: C
| M '=' A
;
C: M
: M '?' A ':' A
;
M: M '[' E ']'
| M '?' '[' E ']'
| P
;
P: ID
| '(' E ')'
| '[' E ']'
;
(P for Primary, M for Member, C for Conditional, A for Assignment.)
The reduce/reduce conflict recognizing a left sentential form '[' E ']'
vs. M '?' '[' E ']' shows the fatal ambiguity.
/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss