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