将异常作为野牛中的解析错误

Handle exception as a parse error in bison

本文关键字:错误 异常      更新时间:2023-10-16

在执行野牛时,我如何捕获异常,例如

foo : BAR { $$ = new Bar($1); }

bar构造函数会引发 std::invalid_argument异常,如果该参数不合适。我想捕获该例外并提出汇编错误,因此我收到本机错误消息,例如

input:42.10: Bad value `baz' for bar

也有很多这样的规则,因此可以在规则本身中而是在解析器中的某个地方处理它。

如果您使用的是lalr1.cc,野牛的C 骨架,则对例外有一些有限的支持:如果您投掷 yy::parser::syntax_error,则将异常捕获为语法错误,适当地报告,解析器进入错误恢复模式。这很像使用YYERROR

如果您扔了其他任何东西,整个解析将被中止,堆栈被清洁,例外是重新的。那是 YYABORT

因此,如果您想将错误作为减少规则捕获的错误,则应提出特定的例外,请参见C 解析器接口文档。