干净的方式来结束解析野牛解析器

时间:2011-04-29 05:17:51

标签: parsing bison

我正在为我工​​作的公司的项目编写一个小型表达式分析器解析器。解析器应该检查,例如,除零或未定义的标识符,报告错误并停止。做这个的最好方式是什么?假设我自己的代码没有内存泄漏,我可以简单地执行此操作:

if ($3 == 0) {
  yyerror("Division by zero");
  return 1;
}

我应该这样做:

if ($3 == 0) {
  yyerror("Division by zero");
  YYERROR;
}

还有第三种更好的选择吗?

2 个答案:

答案 0 :(得分:4)

确实有第三种选择:YYACCEPT

如果您尝试停止解析,因为输入有效且没有错误(因为您正在使解析器检测错误,那么它不是解析器错误,输入确实符合语法规则)。

这会留下YYERROR语法错误(比如从另一种语言接收字符串)

答案 1 :(得分:2)

如果您明确致电yyerror,那么如何使用YYABORT? 据我所知,bison似乎在退出时执行了一些清理工作。 因此,YYABORTYYERRORreturn 1更受欢迎。