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

时间:2011-07-09 21:40:08

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

YYACCEPT停止解析并返回0。