我创建了test.l,将其输入到flex,最后以main函数结尾。
当主要功能实现为:
int
main(void)
{
yylex();
return 0;
}
我没有问题。
我想让解析器相信第一个字符始终是分号,因此我将main实现为
int
main(void)
{
unput(';');
yylex();
return 0;
}
以上导致段故障。
为什么使用unput会导致段错误?
最佳答案
由于yylex()尚未初始化unput()所需的输入缓冲区等,因此导致段错误。
可能有一种更好的设计扫描仪的方法,而无需将其欺骗成领先的分号,但是如果您必须这样做,则一种解决方案可能是使用开始条件。像这样:
%x SPECIAL
%%
BEGIN(SPECIAL); /* Go to SPECIAL state when yylex first called */
<SPECIAL>. { unput(*yytext); unput(';'); BEGIN(INITIAL); }
... rest of rules ...
关于c - 错误地使用unput,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/704184/