[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ECMAScript: Automatic Semicolon Insertion
From: |
Simon Richter |
Subject: |
Re: ECMAScript: Automatic Semicolon Insertion |
Date: |
Wed, 7 Dec 2016 10:03:27 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hi,
On Tue, Dec 06, 2016 at 10:52:06PM -0500, Ricky wrote:
> Your syntax implies that [\n] should be treated as [;]. So why not use [\n]
> as alternative?
Unfortunately, it's not that easy.
var foo = 4
+ 5
is also allowed. This can lead to interesting hidden bugs[1], but is valid.
Automatic Semicolon Insertion[2] is defined as a last-resort mechanism during
parsing.
I'm currently trying to inline rules, e.g. creating rules like
variable_statement:
"var" variable_declaration_list ";" |
"var" variable_declaration_list after_variable_statement;
after_variable_statement:
variable_statement |
throw_statement |
...
listing the alternatives that imply a semicolon there, but this doesn't
account for closing a block with a right brace.
The irony is that the parser does almost the right thing -- it is stuck in
the state
member_expression:
primary_expression . |
member_expression . "." identifier |
member_expression . "[" assignment_expression_in "]" | ...
where it needs a lookahead token to decide between reducing to
primary_expression and shifting -- and the table lookup here gives the
error. I've also tried
member_expression:
primary_expression |
primary_expression "var" { YYBACKUP(KW_VAR, YYSTYPE()); } |
...
which doesn't work, because I cannot back up there, and
member_expression:
primary_expression |
primary_expression error |
...
which discards the "var" token.
Simon
[1]
https://github.com/GyrosGeier/test262/commit/e9a33d61ac725b4b353a7a20857f04c7d34fed3d
[2] https://es5.github.io/#x7.9