Syntax 如何在Jison中调试bnf表示法中的reduce/reduce错误

Syntax 如何在Jison中调试bnf表示法中的reduce/reduce错误,syntax,bison,bnf,Syntax,Bison,Bnf,我正在用Jison编写bnf符号,并得到一个reduce/reduce冲突: Conflict at state: 26, token: SIMPLE_ASSIGN reduce by rule: PrimaryExpression -> Identifier reduce by rule: LeftHandSideExpression -> Identifier 我的状态26如下所示: item set 24 AssignmentExpression -> LeftHan

我正在用Jison编写bnf符号,并得到一个reduce/reduce冲突:

Conflict at state: 26, token: SIMPLE_ASSIGN
reduce by rule: PrimaryExpression -> Identifier
reduce by rule: LeftHandSideExpression -> Identifier
我的状态26如下所示:

item set 24 
AssignmentExpression -> LeftHandSideExpression .AssignmentOperator AssignmentExpression
AssignmentOperator -> .SIMPLE_ASSIGN
AssignmentOperator -> .COMPLEX_ASSIGN 
transitions ->  {"AssignmentOperator":61,"SIMPLE_ASSIGN":62,"COMPLEX_ASSIGN":63}

item set 25 
LogicalORExpression -> LogicalANDExpression .
LogicalANDExpression -> LogicalANDExpression .LOGICAL_AND EqualityExpression 
transitions ->  {"LOGICAL_AND":64}

item set 26 
LeftHandSideExpression -> Identifier .
PrimaryExpression -> Identifier . 
transitions ->  {}

item set 27 
LogicalANDExpression -> EqualityExpression .
EqualityExpression -> EqualityExpression .EQUALITY_OPERATOR RelationalExpression 
transitions ->  {"EQUALITY_OPERATOR":65}
我该如何解决这里的问题

我正在使用Jison,我正在运行:
jison-p lalr-t grammer/noa.bnf-t>log


有趣的是,我还使用了
syntax cli
,它不会产生reduce/reduce冲突,但解析仍然有困难。

这告诉你的是,在一些语法生成中,非终端
PrimaryExpression
(或者一些扩展以
PrimaryExpression
结束的非终端)可以后跟一个
SIMPLE\u ASSIGN
(或者一些非终端,其扩展以
SIMPLE\u ASSIGN
开始,尽管这似乎不太可能)。在这种情况下,
Identifier
(其扩展未显示)是不明确的,因为
PrimaryExpression
LeftHandSideExpression
都可以扩展到
Identifier


很难猜出这可能是什么上下文,但追踪起来应该相当简单:只需查看
simple\u ASSIGN
前面的每个非终结符,直到找到一个可以以
PrimaryExpression
结尾的。(但并非所有这些结果都是错误。它实际上高度依赖于语法。)

这告诉你的是,在一些语法结果中,非末端的
PrimaryExpression
(或者一些非末端的扩展以
PrimaryExpression
结束)可以后跟一个
SIMPLE\u ASSIGN
(或者一些非终端,其扩展以
SIMPLE\u ASSIGN
开始,尽管这似乎不太可能)。在这种情况下,
Identifier
(其扩展未显示)是不明确的,因为
PrimaryExpression
LeftHandSideExpression
都可以扩展到
Identifier


很难猜出这可能是什么上下文,但追踪起来应该相当简单:只需查看
simple\u ASSIGN
前面的每个非终结符,直到找到一个可以以
PrimaryExpression
结尾的。(但并非所有这些作品都是错误的。它实际上高度依赖于语法。)

你的问题应该包括你的语法(或者,理想情况下,是一个显示相同问题的简化版本)。“解析有问题”不是一个很有帮助的问题描述(虽然我知道你不是在问syntax cli)。你的问题应该包括你的语法(或者,理想情况下,是一个显示相同问题的简化版本)。“解析有问题”并不是一个非常有用的问题描述(尽管我知道您不是在问语法cli)。