会发生什么情况,在分析 AST 后,我会在规则完成时知道是否有错误。我试过 yyerror("blah") 没有运气。
因为我不能告诉它有一个错误,它完成了另一个规则,现在有一个减少/减少冲突。这很烦人,因为我知道其中一个无效而不看另一个,但用户必须忍受 bc 我不知道怎么说忽略这个分支 bc 它无效
我该如何解决这个问题?
会发生什么情况,在分析 AST 后,我会在规则完成时知道是否有错误。我试过 yyerror("blah") 没有运气。
因为我不能告诉它有一个错误,它完成了另一个规则,现在有一个减少/减少冲突。这很烦人,因为我知道其中一个无效而不看另一个,但用户必须忍受 bc 我不知道怎么说忽略这个分支 bc 它无效
我该如何解决这个问题?
您YYERROR
不希望yyerror
- 放入YYERROR
一个动作会导致解析器将该动作作为语法错误,并进入错误恢复模式(如果您的解析器中有任何错误恢复动作 - 否则这或多或少等同于YYABORT
)。 yyerror
是野牛使用错误消息调用的例程 - 默认实现是打印错误消息 - 但与解析或语法错误无关(特别)。
请注意,这与任何reduce-reduce(或shift-reduce)冲突无关——冲突不是错误,它们是语法中的东西,使其不是-LALR(1),因此野牛生成的解析器不能可靠地识别它。
您需要创建一个没有减少/减少冲突的语法