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