Skip to content

Instantly share code, notes, and snippets.

@NateSeymour
Created March 17, 2025 13:03
Show Gist options
  • Save NateSeymour/eec7c43231740451ce54d48c8bbd1b2f to your computer and use it in GitHub Desktop.
Save NateSeymour/eec7c43231740451ce54d48c8bbd1b2f to your computer and use it in GitHub Desktop.
Buffalo Sample Shift-Reduce Conflict Message
Grammar contains an irreconcilable shift-reduce conflict when deciding to reduce YieldExpression or shift "yield".
Shift-reduce conflicts can be solved by:
1. Refactoring your grammar.
2. Adding precedence to your terminals.
3. Adding Associativity to your terminals.
The conflict arose in the following state with the following closure:
YieldExpression -> "yield" .
YieldExpression -> "yield" . AssignmentExpression
YieldExpression -> "yield" . "\*" AssignmentExpression
AssignmentExpression -> . ConditionalExpression
AssignmentExpression -> . YieldExpression
AssignmentExpression -> . ArrowFunction
AssignmentExpression -> . AsyncArrowFunction
AssignmentExpression -> . LeftHandSideExpression "=" AssignmentExpression
ConditionalExpression -> . ShortCircuitExpression
ConditionalExpression -> . ShortCircuitExpression "\?" AssignmentExpression ":" AssignmentExpression
YieldExpression -> . "yield"
YieldExpression -> . "yield" AssignmentExpression
YieldExpression -> . "yield" "\*" AssignmentExpression
ArrowFunction -> . ArrowParameters "=\>" ConciseBody
AsyncArrowFunction -> . "async" Identifier "=\>" AsyncConciseBody
AsyncArrowFunction -> . CoverCallExpressionAndAsyncArrowHead "=\>" AsyncConciseBody
LeftHandSideExpression -> . NewExpression
LeftHandSideExpression -> . CallExpression
LeftHandSideExpression -> . OptionalExpression
ShortCircuitExpression -> . LogicalORExpression
ShortCircuitExpression -> . CoalesceExpression
ArrowParameters -> . Identifier
ArrowParameters -> . CoverParenthesizedExpressionAndArrowParameterList
CoverCallExpressionAndAsyncArrowHead -> . MemberExpression Arguments
NewExpression -> . MemberExpression
NewExpression -> . "new" NewExpression
CallExpression -> . CoverCallExpressionAndAsyncArrowHead
CallExpression -> . SuperCall
CallExpression -> . ImportCall
CallExpression -> . CallExpression Arguments
CallExpression -> . CallExpression "\[" Expression "\]"
CallExpression -> . CallExpression "\." Identifier
CallExpression -> . CallExpression TemplateLiteral
OptionalExpression -> . MemberExpression OptionalChain
OptionalExpression -> . CallExpression OptionalChain
OptionalExpression -> . OptionalExpression OptionalChain
LogicalORExpression -> . LogicalANDExpression
LogicalORExpression -> . LogicalORExpression "\|\|" LogicalANDExpression
CoalesceExpression -> . CoalesceExpressionHead "\?{2}" BitwiseORExpression
Identifier -> . "[a-zA-Z\d]+"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\.{3}" Identifier "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\.{3}" BindingPattern "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\.{3}" Identifier "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\.{3}" BindingPattern "\)"
MemberExpression -> . PrimaryExpression
MemberExpression -> . MemberExpression "\[" Expression "\]"
MemberExpression -> . MemberExpression "\." Identifier
MemberExpression -> . MemberExpression TemplateLiteral
MemberExpression -> . SuperProperty
MemberExpression -> . MetaProperty
MemberExpression -> . "new" MemberExpression Arguments
SuperCall -> . "super" Arguments
ImportCall -> . "import" "\(" AssignmentExpression "\)"
LogicalANDExpression -> . BitwiseORExpression
LogicalANDExpression -> . LogicalANDExpression "&&" BitwiseORExpression
CoalesceExpressionHead -> . CoalesceExpression
CoalesceExpressionHead -> . BitwiseORExpression
PrimaryExpression -> . "this"
PrimaryExpression -> . Identifier
PrimaryExpression -> . ArrayLiteral
PrimaryExpression -> . ObjectLiteral
PrimaryExpression -> . FunctionExpression
PrimaryExpression -> . ClassExpression
PrimaryExpression -> . GeneratorExpression
PrimaryExpression -> . AsyncFunctionExpression
PrimaryExpression -> . AsyncGeneratorExpression
PrimaryExpression -> . CoverParenthesizedExpressionAndArrowParameterList
SuperProperty -> . "super" "\[" Expression "\]"
SuperProperty -> . "super" "\." Identifier
MetaProperty -> . NewTarget
MetaProperty -> . ImportMeta
BitwiseORExpression -> . BitwiseXORExpression
BitwiseORExpression -> . BitwiseORExpression "\|" BitwiseXORExpression
ArrayLiteral -> . "\[" "\]"
ObjectLiteral -> . "\{" "\}"
FunctionExpression -> . "function" Identifier "\(" "\)" "\{" FunctionBody "\}"
FunctionExpression -> . "function" Identifier "\(" FormalParameters "\)" "\{" FunctionBody "\}"
ClassExpression -> . "class" Identifier ClassTail
ClassExpression -> . "class" ClassTail
GeneratorExpression -> . "function" "\*" "\(" FormalParameters "\)" "\{" FunctionBody "\}"
GeneratorExpression -> . "function" "\*" Identifier "\(" FormalParameters "\)" "\{" FunctionBody "\}"
AsyncFunctionExpression -> . "async" "function" "\(" FormalParameters "\)" "\{" AsyncFunctionBody "\}"
AsyncFunctionExpression -> . "async" "function" Identifier "\(" FormalParameters "\)" "\{" AsyncFunctionBody "\}"
AsyncGeneratorExpression -> . "async" "function" "\*" "\(" FormalParameters "\)" "\{" AsyncGeneratorBody "\}"
AsyncGeneratorExpression -> . "async" "function" "\*" Identifier "\(" FormalParameters "\)" "\{" AsyncGeneratorBody "\}"
NewTarget -> . "new" "\." "target"
ImportMeta -> . "import" "\." "meta"
BitwiseXORExpression -> . BitwiseANDExpression
BitwiseXORExpression -> . BitwiseXORExpression "\^" BitwiseANDExpression
BitwiseANDExpression -> . EqualityExpression
BitwiseANDExpression -> . BitwiseANDExpression "&" EqualityExpression
EqualityExpression -> . RelationalExpression
EqualityExpression -> . EqualityExpression "==" RelationalExpression
EqualityExpression -> . EqualityExpression "!=" RelationalExpression
EqualityExpression -> . EqualityExpression "===" RelationalExpression
EqualityExpression -> . EqualityExpression "!==" RelationalExpression
RelationalExpression -> . ShiftExpression
RelationalExpression -> . RelationalExpression "\<" ShiftExpression
RelationalExpression -> . RelationalExpression "\>" ShiftExpression
RelationalExpression -> . RelationalExpression "\<=" ShiftExpression
RelationalExpression -> . RelationalExpression "\>=" ShiftExpression
RelationalExpression -> . RelationalExpression "instanceof" ShiftExpression
RelationalExpression -> . RelationalExpression "in" ShiftExpression
RelationalExpression -> . PrivateIdentifier "in" ShiftExpression
ShiftExpression -> . AdditiveExpression
ShiftExpression -> . ShiftExpression "\<\<" AdditiveExpression
ShiftExpression -> . ShiftExpression "\>\>" AdditiveExpression
ShiftExpression -> . ShiftExpression "\>\>\>" AdditiveExpression
PrivateIdentifier -> . "#" Identifier
AdditiveExpression -> . MultiplicativeExpression
AdditiveExpression -> . AdditiveExpression "\+" MultiplicativeExpression
AdditiveExpression -> . AdditiveExpression "\-" MultiplicativeExpression
MultiplicativeExpression -> . ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "\*" ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "\/" ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "%" ExponentiationExpression
ExponentiationExpression -> . UnaryExpression
ExponentiationExpression -> . UpdateExpression "\*{2}" ExponentiationExpression
UnaryExpression -> . UpdateExpression
UnaryExpression -> . "delete" UpdateExpression
UnaryExpression -> . "void" UpdateExpression
UnaryExpression -> . "typeof" UpdateExpression
UnaryExpression -> . "\+" UpdateExpression
UnaryExpression -> . "\-" UpdateExpression
UnaryExpression -> . "~" UpdateExpression
UnaryExpression -> . "!" UpdateExpression
UnaryExpression -> . AwaitExpression
UpdateExpression -> . LeftHandSideExpression
UpdateExpression -> . LeftHandSideExpression "\+\+"
UpdateExpression -> . LeftHandSideExpression "\-\-"
UpdateExpression -> . "\+\+" UnaryExpression
UpdateExpression -> . "\-\-" UnaryExpression
AwaitExpression -> . "await" UnaryExpression
When deciding to reduce the following rule:
YieldExpression -> "yield"
Or shift "yield" to the following state:
YieldExpression -> "yield" .
YieldExpression -> "yield" . AssignmentExpression
YieldExpression -> "yield" . "\*" AssignmentExpression
AssignmentExpression -> . ConditionalExpression
AssignmentExpression -> . YieldExpression
AssignmentExpression -> . ArrowFunction
AssignmentExpression -> . AsyncArrowFunction
AssignmentExpression -> . LeftHandSideExpression "=" AssignmentExpression
ConditionalExpression -> . ShortCircuitExpression
ConditionalExpression -> . ShortCircuitExpression "\?" AssignmentExpression ":" AssignmentExpression
YieldExpression -> . "yield"
YieldExpression -> . "yield" AssignmentExpression
YieldExpression -> . "yield" "\*" AssignmentExpression
ArrowFunction -> . ArrowParameters "=\>" ConciseBody
AsyncArrowFunction -> . "async" Identifier "=\>" AsyncConciseBody
AsyncArrowFunction -> . CoverCallExpressionAndAsyncArrowHead "=\>" AsyncConciseBody
LeftHandSideExpression -> . NewExpression
LeftHandSideExpression -> . CallExpression
LeftHandSideExpression -> . OptionalExpression
ShortCircuitExpression -> . LogicalORExpression
ShortCircuitExpression -> . CoalesceExpression
ArrowParameters -> . Identifier
ArrowParameters -> . CoverParenthesizedExpressionAndArrowParameterList
CoverCallExpressionAndAsyncArrowHead -> . MemberExpression Arguments
NewExpression -> . MemberExpression
NewExpression -> . "new" NewExpression
CallExpression -> . CoverCallExpressionAndAsyncArrowHead
CallExpression -> . SuperCall
CallExpression -> . ImportCall
CallExpression -> . CallExpression Arguments
CallExpression -> . CallExpression "\[" Expression "\]"
CallExpression -> . CallExpression "\." Identifier
CallExpression -> . CallExpression TemplateLiteral
OptionalExpression -> . MemberExpression OptionalChain
OptionalExpression -> . CallExpression OptionalChain
OptionalExpression -> . OptionalExpression OptionalChain
LogicalORExpression -> . LogicalANDExpression
LogicalORExpression -> . LogicalORExpression "\|\|" LogicalANDExpression
CoalesceExpression -> . CoalesceExpressionHead "\?{2}" BitwiseORExpression
Identifier -> . "[a-zA-Z\d]+"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\.{3}" Identifier "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" "\.{3}" BindingPattern "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\.{3}" Identifier "\)"
CoverParenthesizedExpressionAndArrowParameterList -> . "\(" Expression "," "\.{3}" BindingPattern "\)"
MemberExpression -> . PrimaryExpression
MemberExpression -> . MemberExpression "\[" Expression "\]"
MemberExpression -> . MemberExpression "\." Identifier
MemberExpression -> . MemberExpression TemplateLiteral
MemberExpression -> . SuperProperty
MemberExpression -> . MetaProperty
MemberExpression -> . "new" MemberExpression Arguments
SuperCall -> . "super" Arguments
ImportCall -> . "import" "\(" AssignmentExpression "\)"
LogicalANDExpression -> . BitwiseORExpression
LogicalANDExpression -> . LogicalANDExpression "&&" BitwiseORExpression
CoalesceExpressionHead -> . CoalesceExpression
CoalesceExpressionHead -> . BitwiseORExpression
PrimaryExpression -> . "this"
PrimaryExpression -> . Identifier
PrimaryExpression -> . ArrayLiteral
PrimaryExpression -> . ObjectLiteral
PrimaryExpression -> . FunctionExpression
PrimaryExpression -> . ClassExpression
PrimaryExpression -> . GeneratorExpression
PrimaryExpression -> . AsyncFunctionExpression
PrimaryExpression -> . AsyncGeneratorExpression
PrimaryExpression -> . CoverParenthesizedExpressionAndArrowParameterList
SuperProperty -> . "super" "\[" Expression "\]"
SuperProperty -> . "super" "\." Identifier
MetaProperty -> . NewTarget
MetaProperty -> . ImportMeta
BitwiseORExpression -> . BitwiseXORExpression
BitwiseORExpression -> . BitwiseORExpression "\|" BitwiseXORExpression
ArrayLiteral -> . "\[" "\]"
ObjectLiteral -> . "\{" "\}"
FunctionExpression -> . "function" Identifier "\(" "\)" "\{" FunctionBody "\}"
FunctionExpression -> . "function" Identifier "\(" FormalParameters "\)" "\{" FunctionBody "\}"
ClassExpression -> . "class" Identifier ClassTail
ClassExpression -> . "class" ClassTail
GeneratorExpression -> . "function" "\*" "\(" FormalParameters "\)" "\{" FunctionBody "\}"
GeneratorExpression -> . "function" "\*" Identifier "\(" FormalParameters "\)" "\{" FunctionBody "\}"
AsyncFunctionExpression -> . "async" "function" "\(" FormalParameters "\)" "\{" AsyncFunctionBody "\}"
AsyncFunctionExpression -> . "async" "function" Identifier "\(" FormalParameters "\)" "\{" AsyncFunctionBody "\}"
AsyncGeneratorExpression -> . "async" "function" "\*" "\(" FormalParameters "\)" "\{" AsyncGeneratorBody "\}"
AsyncGeneratorExpression -> . "async" "function" "\*" Identifier "\(" FormalParameters "\)" "\{" AsyncGeneratorBody "\}"
NewTarget -> . "new" "\." "target"
ImportMeta -> . "import" "\." "meta"
BitwiseXORExpression -> . BitwiseANDExpression
BitwiseXORExpression -> . BitwiseXORExpression "\^" BitwiseANDExpression
BitwiseANDExpression -> . EqualityExpression
BitwiseANDExpression -> . BitwiseANDExpression "&" EqualityExpression
EqualityExpression -> . RelationalExpression
EqualityExpression -> . EqualityExpression "==" RelationalExpression
EqualityExpression -> . EqualityExpression "!=" RelationalExpression
EqualityExpression -> . EqualityExpression "===" RelationalExpression
EqualityExpression -> . EqualityExpression "!==" RelationalExpression
RelationalExpression -> . ShiftExpression
RelationalExpression -> . RelationalExpression "\<" ShiftExpression
RelationalExpression -> . RelationalExpression "\>" ShiftExpression
RelationalExpression -> . RelationalExpression "\<=" ShiftExpression
RelationalExpression -> . RelationalExpression "\>=" ShiftExpression
RelationalExpression -> . RelationalExpression "instanceof" ShiftExpression
RelationalExpression -> . RelationalExpression "in" ShiftExpression
RelationalExpression -> . PrivateIdentifier "in" ShiftExpression
ShiftExpression -> . AdditiveExpression
ShiftExpression -> . ShiftExpression "\<\<" AdditiveExpression
ShiftExpression -> . ShiftExpression "\>\>" AdditiveExpression
ShiftExpression -> . ShiftExpression "\>\>\>" AdditiveExpression
PrivateIdentifier -> . "#" Identifier
AdditiveExpression -> . MultiplicativeExpression
AdditiveExpression -> . AdditiveExpression "\+" MultiplicativeExpression
AdditiveExpression -> . AdditiveExpression "\-" MultiplicativeExpression
MultiplicativeExpression -> . ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "\*" ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "\/" ExponentiationExpression
MultiplicativeExpression -> . MultiplicativeExpression "%" ExponentiationExpression
ExponentiationExpression -> . UnaryExpression
ExponentiationExpression -> . UpdateExpression "\*{2}" ExponentiationExpression
UnaryExpression -> . UpdateExpression
UnaryExpression -> . "delete" UpdateExpression
UnaryExpression -> . "void" UpdateExpression
UnaryExpression -> . "typeof" UpdateExpression
UnaryExpression -> . "\+" UpdateExpression
UnaryExpression -> . "\-" UpdateExpression
UnaryExpression -> . "~" UpdateExpression
UnaryExpression -> . "!" UpdateExpression
UnaryExpression -> . AwaitExpression
UpdateExpression -> . LeftHandSideExpression
UpdateExpression -> . LeftHandSideExpression "\+\+"
UpdateExpression -> . LeftHandSideExpression "\-\-"
UpdateExpression -> . "\+\+" UnaryExpression
UpdateExpression -> . "\-\-" UnaryExpression
AwaitExpression -> . "await" UnaryExpression
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment