Flex具有启动条件可重入

我正在尝试制作一个依赖于启动条件的可重入扫描器。

我正在跟随类似这个家伙的问题:

用Flex编写重入词法分析器

正如一张海报所提到的,如果您明确创建yyscan_t并将其作为额外参数传递,则扫描程序将起作用。 但是,当使用BEGIN 等操作启动条件时,我仍然会收到yyg undeclared错误消息。

这是一个错误吗? 我应该明确使用yy_push_stateyy_pop_state状态函数吗?

看起来当您使用%option reentrant您只能在词法分析器的actions部分中使用BEGINYY_START ,而不能在代码部分中使用。 有意义的是,操纵解析器状态需要访问解析器状态,但BEGIN不接受任何参数,因此无法提供它。 使用%option stackyy_push / pop_state似乎是一个合理的解决方法。