yy_top_state question

Aaron Jackson <[email protected]> Sat, 6 Apr 2013 20:00:49 -0400
Newsgroups gmane.comp.lex.flex.general
Message-ID <[email protected]>
I don't know if this is a bug in flex, or how I'm trying to do things, but I've had some trouble using the yy_top_state function. I'm using flex 2.5.35 on Linux raspberrypi 3.2.27+. For the generated scanner, yy_top_state is defined as:

    static int yy_top_state  (yyscan_t yyscanner)
/* %endif */
/* %if-c++-only */
/* %endif */
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
}

This seems like a bug to me. For example, if my program encounters a parse error, I want to empty out the start stack and end up in the INITIAL state. However, if you call yy_top_state and the stack pointer is at 0, then you get an unpredictable result. So, doing something like

while (yy_top_state(yyscanner))
	yy_pop_state(yyscanner);

results in a "start-condition stack underflow" error unless there is something already on the stack. Is this a bug, or am I just using it wrong?

Aaron