flex yy_fatal_error就像那样存在。我希望处理程序回到应用程序

时间:2015-05-20 06:33:54

标签: flex-lexer

flex yy_fatal_error就像那样存在。但我希望处理程序回到我的应用程序。如何避免存在通话?来自yy_fatal_error。是否在任何版本中解决了这个问题?您的建议非常感谢。帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以通过#define自己覆盖该功能。请注意,在生成的代码中有

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

如果您#defineYY_FATAL_ERROR(msg)调用拥有函数,则词法分析器将调用该函数而不是模板中的函数。

但是,编写词法分析器模板以假定此函数不返回。你可以使用setjmplongjmp来做 来准备一个可预测的地方,在你的应用程序中返回并跳回(从你自己的yy_fatal_error函数)当使用“致命”错误时。

例如,

vi like emacs执行此操作,因为它使用词法分析器进行语法突出显示。如果词法分析器产生致命错误,您不希望编辑器停止。

以下是一些讨论setjmplongjmp的链接: