gpt4 book ai didi

c++ - 将异常处理为 bison 中的解析错误

转载 作者:行者123 更新时间:2023-11-28 06:16:32 25 4
gpt4 key购买 nike

我如何捕捉在 Bison 中执行规则时抛出的异常

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

如果参数不合适,Bar 构造函数将抛出 std::invalid_argument 异常。我想捕获该异常并引发编译错误,因此我收到了类似

的 native 错误消息
input:42.10: Bad value `baz' for bar

还有很多这种规则,所以最好不要在规则本身内处理,而是在解析器的某个地方处理。

最佳答案

如果您使用 lalr1.cc,Bison 的 C++ 框架,那么对异常的支持有限:如果您抛出 yy::parser::syntax_error,然后异常被捕获为语法错误,及时报告,解析器进入错误恢复模式。这非常类似于使用 YYERROR

如果你抛出任何其他东西,整个解析将中止,堆栈被清理,异常被重新抛出。那是 YYABORT

因此,如果您想将错误捕获为规则减少,您应该抛出特定的异常,请参阅 C++ Parser Interface Documentation of Bison .

关于c++ - 将异常处理为 bison 中的解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com