Related articles |
---|
Javascript grammar rjshaw@netspace.net.au (Russell Shaw) (2007-02-25) |
Re: Javascript grammar rjshaw@netspace.net.au (Russell Shaw) (2007-02-25) |
From: | Russell Shaw <rjshaw@netspace.net.au> |
Newsgroups: | comp.compilers |
Date: | 25 Feb 2007 13:23:00 -0500 |
Organization: | Compilers Central |
Keywords: | parse, question |
Posted-Date: | 25 Feb 2007 13:23:00 EST |
Hi,
I downloaded and inspected the Ecmascript-262 grammar on page 157:
http://www.ecma-international.org/publications/standards/Ecma-262.htm
http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf
I found a reduce-reduce conflict in that the kernels for "FunctionExpression"
and "FunctionDeclaration" both start from the same LALR state (state 0), and
can consist of an identical sequence of symbols:
FunctionDeclaration ->
'function' '<Identifier>' '(' FormalParameterList_opt ')' '{' FunctionBody '}'
FunctionExpression ->
'function' '<Identifier_opt>' '(' FormalParameterList_opt ')' '{' FunctionBody '}'
and have these lookaheads in common: ++ -- ; [ ( + -
(I think my tool is correct from manually looking through the grammar)
Is it an accepted way of tolerating a reduce-reduce conflict by detecting
unsuitable reductions in the symantic analysis?
The list of relevant productions are:
************************************************************************************
Program ->
SourceElements
SourceElements ->
SourceElement |
SourceElements SourceElement
SourceElement ->
Statement |
FunctionDeclaration
FunctionDeclaration ->
'function' '<Identifier>' '(' FormalParameterList_opt ')' '{' FunctionBody '}'
Statement ->
Block |
VariableStatement |
EmptyStatement |
ExpressionStatement |
IfStatement |
IterationStatement |
ContinueStatement |
BreakStatement |
ReturnStatement |
WithStatement |
LabelledStatement |
SwitchStatement |
ThrowStatement |
TryStatement
ExpressionStatement ->
Expression ';'
Expression ->
AssignmentExpression |
Expression ',' AssignmentExpression
AssignmentExpression ->
ConditionalExpression |
LeftHandSideExpression '<AssignmentOperator>' AssignmentExpression
LeftHandSideExpression ->
NewExpression |
CallExpression
NewExpression ->
MemberExpression |
'new' NewExpression
MemberExpression ->
PrimaryExpression |
FunctionExpression |
MemberExpression '[' Expression ']' |
MemberExpression '.' '<Identifier>' |
'new' MemberExpression Arguments
FunctionExpression ->
'function' '<Identifier_opt>' '(' FormalParameterList_opt ')' '{' FunctionBody '}'
Return to the
comp.compilers page.
Search the
comp.compilers archives again.