LR(1) grammar/parser and lookahead-restrictions
waldemar at google.com
Tue Jan 24 01:24:37 UTC 2017
On 01/11/2017 10:28, Michael Dyck wrote:
> In the past, it has been said (usually by Brendan Eich) that TC39 intends that the ECMAScript grammar be LR(1). Is that still the case? (I'm not so much asking about the "1", but more about the "LR".)
> If so, I'm wondering how lookahead-restrictions (e.g., [lookahead <! terminals]) fit into the LR approach. It seems like there are three possibilities:
> - modify the grammar (before the parser is constructed),
> - modify the construction of the parser, and/or
> - modify the operation of the parser.
> It's not clear to me that any of these (or any combination of these) will work.
> Has anyone algorithmically generated an LR parser from the spec grammar? If so, how did you you handle lookahead-restrictions?
I'm the source of the LR(1) condition. I've been doing that ever since ECMAScript Edition 3, and in fact am using the LR parser to help design and debug the spec. I have an implementation of the parser with a few extensions to the LR grammar, including support for parametrized productions, lookahead restrictions, and lexer-parser feedback used to disambiguate things such as what token / will start. I validate various things such as making sure that there is no place where both an identifier and a regular expression can occur.
More information about the es-discuss