当前位置:  开发笔记 > 编程语言 > 正文

使用输出错误

如何解决《使用输出错误》经验,为你挑选了1个好方法。

我创建了test.l,输入到flex,以main函数结束.

当主要功能实现为:

int
main(void)
{
    yylex();
    return 0;
}

我没有问题.

我想欺骗解析器相信第一个字符总是一个分号,所以我实现了main作为

int
main(void)
{
    unput(';');
    yylex();
    return 0;
}

以上导致段故障.

为什么使用输出会导致段故障?



1> Van Gale..:

它导致段错误,因为yylex()尚未初始化unput()所需的输入缓冲区等.

可能有一种更好的方法来设计扫描仪而无需将其划分为前导分号,但如果必须这样做,那么一种解决方案可能是使用启动条件.像这样的东西:

%x SPECIAL
%%
    BEGIN(SPECIAL); /* Go to SPECIAL state when yylex first called */

.  { unput(*yytext); unput(';'); BEGIN(INITIAL); }

... rest of rules ...

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有