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'],
      ...

どこ

  • aは次の a にPrimaryExpression派生しPrimaryExpressionNoBraceます。'( Expression )'

  • PrimaryExpressionNoBrace式は、 hasIDENTIFIERまたはTHISalternativesに再び派生します

  • ArrowFunctionExpression持っている'( FormalParameterList ) => Block'

  • FormalParameterListIDENTIFIERまたはTHIS代替手段もあります。

したがって、左括弧の後にIDENTIFIERorを入力すると、 に還元するか にTHIS還元するかを決定できない LR 状態になります。ここでは、単一のトークンの先読みでは十分ではなく、それ以上のトークンはサポートされていません。PrimaryExpressionNoBraceFormalParameterList

于 2012-05-09T21:59:55.897 に答える