我正在尝试制作一台依赖于开始条件的可重入扫描器。
我跟着类似这个家伙的问题:
Writing re-entrant lexer with Flex
正如一张海报所提到的,如果您明确创建yyscan_t
并将其作为额外参数传递,扫描程序将起作用。但是,在使用yyg undeclared
等操作启动条件时,仍然会收到BEGIN <sc>
错误消息。
这是一个错误吗?我应该明确使用yy_push_state
和yy_pop_state
状态函数吗?
答案 0 :(得分:2)
看起来当您使用%option reentrant
时,您只能在词法分析器的“操作”部分中使用BEGIN
和YY_START
,而不能在代码部分中使用BEGIN
和%option stack
。有意义的是,操纵解析器状态需要访问解析器状态,但yy_push
不接受任何参数,因此无法提供它。使用pop_state
和{{1}} / {{1}}似乎是一种合理的解决方法。