3

我有一个语法文件 — https://github.com/itrelease/fubar-script/blob/jsast/src/grammar.js但我遇到了冲突,我真的不知道如何解决这个问题。如果有人可以向我解释这将是有帮助的。

此规则会产生冲突

ParamVar: [
  ['Identifier', '$$ = $Identifier;'],
  ['THIS', '$$ = new yy.ThisExpression();']
],

PrimaryExpression: [
  ['THIS', '$$ = new yy.ThisExpression();'],
  ['Literal', '$$ = $Literal;'],
  ['ArrayLiteral', '$$ = $ArrayLiteral;'],
  ['Identifier', '$$ = $Identifier;'],
  ['ObjectLiteral', '$$ = $ObjectLiteral;'],
  ['( Expression )', '$$ = $Expression;']
],
4

1 回答 1

2

您当前的语法没有PrimaryExpressionNoBrace,但我认为问题出现在这个旧版本的语法上。

冲突是由这个生产引起的:

MemberExpression: [
      ['PrimaryExpression', '$$ = $PrimaryExpression;'],
      ['ArrowFunctionExpression', '$$ = $ArrowFunctionExpression'],
      ...

在哪里

  • aPrimaryExpression派生为PrimaryExpressionNoBrace具有'( Expression )'

  • 表达式再次派生到PrimaryExpressionNoBracewhich hasIDENTIFIERTHISalternatives

  • ArrowFunctionExpression有_'( FormalParameterList ) => Block'

  • FormalParameterList也有IDENTIFIERTHIS替代品。

因此,左括号的输入,后跟IDENTIFIERorTHIS将我们带入一个不能决定归约到PrimaryExpressionNoBrace或的 LR 状态FormalParameterList,即它在常见的合法跟随者(例如右括号)上有归约-归约冲突。单个令牌前瞻在这里是不够的,并且不支持更多。

于 2012-05-09T21:59:55.897 回答