如何在flex lexer中使用input()函数获取所有字符直到EOF?

时间:2014-08-17 14:56:04

标签: flex-lexer lex

我尝试使用下面的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?

1 个答案:

答案 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的一种方式。

然而,相当短缺。词法分析器应该通过函数调用将每个字符发送到解析器,当字符数非常大时,这将花费太多。