Parsing 结束bison解析器解析的干净方法
我正在为我工作的公司的一个项目编写一个小型表达式分析器。解析器应该检查,例如,被零除法或未定义的标识符,报告错误并停止。最好的方法是什么?假设我自己的代码没有内存泄漏,我可以简单地执行以下操作:Parsing 结束bison解析器解析的干净方法,parsing,bison,Parsing,Bison,我正在为我工作的公司的一个项目编写一个小型表达式分析器。解析器应该检查,例如,被零除法或未定义的标识符,报告错误并停止。最好的方法是什么?假设我自己的代码没有内存泄漏,我可以简单地执行以下操作: if ($3 == 0) { yyerror("Division by zero"); return 1; } 我是否应该: if ($3 == 0) { yyerror("Division by zero"); YYERROR; } 还有第三种更好的选择吗?如果您显式调用yyerr
if ($3 == 0) {
yyerror("Division by zero");
return 1;
}
我是否应该:
if ($3 == 0) {
yyerror("Division by zero");
YYERROR;
}
还有第三种更好的选择吗?如果您显式调用
yyerror
,那么使用YYABORT
怎么样?
据我所知,bison
似乎在出口处进行一些清理。
因此,
yyabt
或YYERROR
将比return 1
更可取。实际上还有第三个选项:yyaptop
如果您试图停止解析,因为输入有效且没有错误(因为您正在使用解析器检测错误,那么这不是解析器错误,输入符合语法规则)
这将YYERROR留给语法错误(如从另一种语言接收字符串)谢谢,这正是清除stop而不出错所需要的