c++ - 如何告诉 flex 和 bison 停止处理输入?

标签 c++ error-handling bison flex-lexer

当遇到错误时,让 flex 和 bison 停止处理的最佳方法是什么。如果我调用 yyerror,它不会停止扫描和解析我的文件。虽然输入在语法上是正确的,但存在用户错误,例如他们试图加载同一个文件两次。一旦我离开 flex/bison,我的程序就会向用户返回一个错误,程序应该继续运行。我假设抛出 C++ 异常可能会破坏某些东西?

最佳答案

YYABORT 是标准的退出方式;它会导致 yyparse 立即返回失败 (1)。然后你可以抛出异常或做任何你想做的事。如果你想解析其他东西,你需要重置 flex 的输入,但如果你这样做,你可以再次调用 yyparse,解析将从头开始。

关于c++ - 如何告诉 flex 和 bison 停止处理输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637639/

相关文章:

c++ - 运行 MEX 文件时 MATLAB 崩溃

vba - 如何在运行时获取过程或函数名称?

bison - 如何在 yacc/bison 中找到用于错误报告的不平衡分隔符?

bison - 如何在Flex规则中引用lex或解析参数?

c++ - 在 C++ 中存储双维 vector 的最佳方法是什么?

C++语言模板题

excel - AGGREGATE未按预期处理错误

bison - 安装Bison后"make: yacc: Command not found"

c++ - 等效于 C++ 到 Python 生成器模式

winapi - 如果 OpenThreadToken 和 OpenProcessToken 都失败,为什么需要清理?