yy_top_state()似乎因flex而失败

时间:2010-11-02 00:48:03

标签: c flex-lexer

所以我正在用flex编写这个可重入的扫描程序,我正在使用堆栈选项来跟踪状态。根据文档,似乎

yy_push_state(SCRIPT, yyscanner);
//now yy_top_state(yyscanner)  == SCRIPT; should eval true right?

但是当我在yy_push_state()

之后立即放入以下printf()
printf("SCRIPT=%d; DQUOTE=%d; CURRENT=%d\n", SCRIPT, DQUOTE, 
       yy_top_state(yyscanner));

我得到这个以换取输出

SCRIPT=2; DQUOTE=3; CURRENT=1

如果有的话,请指出我做错了什么。

提前致谢

1 个答案:

答案 0 :(得分:2)

不,我不这么认为。基于我看到的代码,它是当前状态被推入堆栈,然后状态被更改为新状态。

如有必要,展开堆栈后,yy_push_state(new_state)执行:

(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
BEGIN(new_state);

其中YY_START是基于当前状态的宏,BEGIN是设置新状态的原因。

相关问题