题
我创建test.l,输入弯曲,与主功能结束。
当的主要功能是这样实现的:
int
main(void)
{
yylex();
return 0;
}
我没有问题。
欲解析器欺骗,以为第一个字符是始终分号,所以实现主要作为
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 ...
其他提示
下面的代码是没有错的含义。
int main(void) { unput(';'); yylex(); return 0; }
从该声明的unput
宏,当然你应该已经初始化之前弯曲法的问题来了。
但是,如果你把.l file
你的主要之外,你的代码将不会出现段错误。
不隶属于 StackOverflow