Flex具有启动条件可重入

时间:2012-12-19 17:04:48

标签: c bison yacc flex-lexer

我正在尝试制作一台依赖于开始条件的可重入扫描器。

我跟着类似这个家伙的问题:

Writing re-entrant lexer with Flex

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

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

1 个答案:

答案 0 :(得分:2)

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