flex yy_fatal_error
就像那样存在。但我希望处理程序回到我的应用程序。如何避免存在通话?来自yy_fatal_error。是否在任何版本中解决了这个问题?您的建议非常感谢。帮我解决这个问题。
答案 0 :(得分:2)
您可以通过#define
自己覆盖该功能。请注意,在生成的代码中有
/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
如果您#define
宏YY_FATAL_ERROR(msg)
调用拥有函数,则词法分析器将调用该函数而不是模板中的函数。
但是,编写词法分析器模板以假定此函数不返回。你可以使用setjmp
和longjmp
来做 来准备一个可预测的地方,在你的应用程序中返回并跳回(从你自己的yy_fatal_error
函数)当使用“致命”错误时。
vi like emacs执行此操作,因为它使用词法分析器进行语法突出显示。如果词法分析器产生致命错误,您不希望编辑器停止。
以下是一些讨论setjmp
和longjmp
的链接: