启动条件为
全球的
。它不是缓冲状态的一部分。推动和弹出缓冲状态
不要
改变它。你必须自己管理它。
您可以将启动条件恢复为
include_state
在你完成
yypop_buffer_state
您甚至可以将自己的lexer状态堆栈保留在缓冲区堆栈的一侧。但最简单的解决方案似乎是阅读
#include
语句,然后执行
#包括
,使您始终处于
INITIAL
更改缓冲区时的状态:
<include_state>[^\n"]+\" {
yytext[yyleng - 1] = 0; // Get rid of the close quote.
yyin = fopen(yytext, "r");
if (!yyin) {
printf("Error opening include file: %s\n", yytext);
return 1;
}
yypush_buffer_state(yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner),
yyscanner);
BEGIN(INITIAL);
}
<include_state>.|\n { /* Handle syntax error in #include */ }