我尝试使用下面的flex。
<MOD1>{INFBLK_START} {
int c = input(pp->scaninfo);
while(c != EOF){
//....save the character.
c = input(pp->scaninfo);
}
return BLOCK;
}
但是当我运行这些代码时,代码会给出段错误信号。 代码在yy_get_next_buffer函数中崩溃,其中lex状态为YY_END_OF_BUFFER。
如何安全地将所有角色都安排到EOF?
答案 0 :(得分:1)
@rici,我已经通过更改下面的弹性规则自己完成了这个。
<MOD1>{INFBLK_START} {
//malloc memory.
BEGIN MOD2;
}
<MOD2>.|\n{
//return each char and record them in bison code.
}
<MOD2><<EOF>>{
yyterminate();
}
这是让所有特征直到EOF的一种方式。
然而,相当短缺。词法分析器应该通过函数调用将每个字符发送到解析器,当字符数非常大时,这将花费太多。