所以我正在用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
如果有的话,请指出我做错了什么。
提前致谢
答案 0 :(得分:2)
不,我不这么认为。基于我看到的代码,它是当前状态被推入堆栈,然后状态被更改为新状态。
如有必要,展开堆栈后,yy_push_state(new_state)
执行:
(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
BEGIN(new_state);
其中YY_START
是基于当前状态的宏,BEGIN
是设置新状态的原因。