我创建了test.l,输入到flex,以main函数结束.
当主要功能实现为:
int main(void) { yylex(); return 0; }
我没有问题.
我想欺骗解析器相信第一个字符总是一个分号,所以我实现了main作为
int main(void) { unput(';'); yylex(); return 0; }
以上导致段故障.
为什么使用输出会导致段故障?
它导致段错误,因为yylex()尚未初始化unput()所需的输入缓冲区等.
可能有一种更好的方法来设计扫描仪而无需将其划分为前导分号,但如果必须这样做,那么一种解决方案可能是使用启动条件.像这样的东西:
%x SPECIAL %% BEGIN(SPECIAL); /* Go to SPECIAL state when yylex first called */. { unput(*yytext); unput(';'); BEGIN(INITIAL); } ... rest of rules ...