我怎么告诉bison有语法错误?

时间:2011-07-23 22:13:50

标签: bison reduce-reduce-conflict

有一个特定的情况,在分析AST之后我会知道规则完成后是否有错误。我试了yyerror(“blah”)没有运气。

因为我无法告诉它有一个错误,它完成了另一个规则,现在有一个减少/减少冲突。这很烦人,因为我知道当其中一个人无效而不看另一个但用户不得不忍受bc我不知道怎么说忽略这个分支bc无效

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

您希望YYERROR不是yyerror - 将YYERROR放入操作会导致解析器出现语法错误,并进入错误恢复模式(如果您有任何错误)解析器中的恢复操作 - 否则这或多或少等同于YYABORT)。 yyerror是bison调用错误消息的例程 - 默认实现是打印错误消息 - 但没有(具体)与解析或语法错误有关。

请注意,这与任何reduce-reduce(或shift-reduce)冲突没有关系 - 冲突不是错误,它们是你的语法中的东西,它使它不是-LALR(1),因此bison生成的解析器无法可靠地识别它。

答案 1 :(得分:0)

您需要创建一个没有减少/减少冲突的语法