我正在为我工作的公司的项目编写一个小型表达式分析器解析器。解析器应该检查,例如,除零或未定义的标识符,报告错误并停止。做这个的最好方式是什么?假设我自己的代码没有内存泄漏,我可以简单地执行此操作:
if ($3 == 0) {
yyerror("Division by zero");
return 1;
}
我应该这样做:
if ($3 == 0) {
yyerror("Division by zero");
YYERROR;
}
还有第三种更好的选择吗?
答案 0 :(得分:4)
确实有第三种选择:YYACCEPT
如果您尝试停止解析,因为输入有效且没有错误(因为您正在使解析器检测错误,那么它不是解析器错误,输入确实符合语法规则)。
这会留下YYERROR语法错误(比如从另一种语言接收字符串)
答案 1 :(得分:2)
如果您明确致电yyerror
,那么如何使用YYABORT
?
据我所知,bison
似乎在退出时执行了一些清理工作。
因此,YYABORT
或YYERROR
比return 1
更受欢迎。