【发布时间】:2015-05-08 05:06:02
【问题描述】:
我使用 flex 来做一个词法分析器。我想分析一些定义编译器语句,格式为:#define identifier identifier_string。我保留了 (identifier identifier_string) 对的列表。因此,当我在文件中找到#define list 的标识符时,我需要从主文件切换词法分析以分析相应的标识符字符串。 (我没有放完整的 flex 代码,因为太大了) 这是部分:
{IDENTIFIER} { // search if the identifier is in list
if( p = get_identifier_string(yytext) )
{
puts("DEFINE MATCHED");
yypush_buffer_state(yy_scan_string(p));
}
else//if not in list just print the identifier
{
printf("IDENTIFIER %s\n",yytext);
}
}
<<EOF>> {
puts("EOF reached");
yypop_buffer_state();
if ( !YY_CURRENT_BUFFER )
{
yyterminate();
}
loop_detection = 0;
}
identifier_string 的分析执行得很好。现在,当达到 EOF 时,我想切换回初始缓冲区并恢复分析。但它只完成了打印 EOF 到达。
【问题讨论】: