Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何告诉flex和bison停止处理输入?_C++_Error Handling_Bison_Flex Lexer - Fatal编程技术网

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

C++ 如何告诉flex和bison停止处理输入?,c++,error-handling,bison,flex-lexer,C++,Error Handling,Bison,Flex Lexer,当遇到错误时,flex和bison停止处理的最佳方法是什么。如果我调用yyerror,它不会停止扫描和解析我的文件。虽然输入在语法上是正确的,但存在用户错误,例如他们试图加载同一文件两次。一旦退出flex/bison,我的程序将向用户返回一个错误,并且程序应继续运行。我猜抛出C++异常可能会破坏一些东西? < P> yyBabt < /Cord>是退出的标准方式;它会导致yyparse立即返回并出现故障(1)。然后,您可以抛出异常或执行任何您想要的操作。如果要解析其他内容,则需要重置flex的

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

< P> <代码> yyBabt < /Cord>是退出的标准方式;它会导致
yyparse
立即返回并出现故障(
1
)。然后,您可以抛出异常或执行任何您想要的操作。如果要解析其他内容,则需要重置flex的输入,但如果重置,则可以再次调用yyparse,解析将从头开始。

YYACCEPT stop parse并返回0。

感谢您的回复。我怀疑去年7月我遇到的问题是YYABORT宏必须在操作中,而不是在操作调用的函数中。我怀疑这是否有帮助,甚至根本不起作用。为了说服我,请解释这是如何工作的,以及为什么它应该解决这个问题。或者,这甚至不是一个试图回答的问题,实际上只是描述了你想讨论的问题的症状?在这种情况下,请创建您自己的问题。