我创建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你的主要之外,你的代码将不会出现段错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top