我有一个语法文件 - https://github.com/itrelease/fubar-script/blob/jsast/src/grammar.js但是我得到了conflicts而且我真的不知道如何解决这个问题。如果有人能解释我会有所帮助。
此规则生成conflicts:
ParamVar: [
['Identifier', '$$ = $Identifier;'],
['THIS', '$$ = new yy.ThisExpression();']
],
PrimaryExpression: [
['THIS', '$$ = new yy.ThisExpression();'],
['Literal', '$$ = $Literal;'],
['ArrayLiteral', '$$ = $ArrayLiteral;'],
['Identifier', '$$ = $Identifier;'],
['ObjectLiteral', '$$ = $ObjectLiteral;'],
['( Expression )', '$$ = $Expression;']
],
答案 0 :(得分:2)
您当前的语法没有PrimaryExpressionNoBrace
,但我认为问题出现在this旧版本的语法中。
冲突是由这种生产引起的:
MemberExpression: [
['PrimaryExpression', '$$ = $PrimaryExpression;'],
['ArrowFunctionExpression', '$$ = $ArrowFunctionExpression'],
...
其中
PrimaryExpression
派生于PrimaryExpressionNoBrace
'( Expression )'
表达式再次派生到PrimaryExpressionNoBrace
,其IDENTIFIER
或THIS
替代
ArrowFunctionExpression
有'( FormalParameterList ) => Block'
FormalParameterList
也有IDENTIFIER
或THIS
个替代品。因此,左括号的输入,后跟IDENTIFIER
或THIS
将我们带入LR状态,无法在缩减为PrimaryExpressionNoBrace
或FormalParameterList
之间做出决定,即它减少了对普通法律追随者的冲突(例如右括号)。单个令牌前瞻在这里是不够的,并且不再支持更多。