flex的使用以及undefined reference to `yywrap'问题的解决

新建文本文档,改名为a.l,编辑该文件,输入以下代码,然后使用DOS命令flex a.l,生成lex.yy.c 文件,在DOS命令中输入 gcc -o output.exe lex.yy.c 生成optput.exe文件时,出现了undefined reference to `yywrap’问题。
源代码如下

%{
/***********

 
***********/
%}
%%
a+b*a {printf("1%s\n",yytext);}
(ab)+c? {printf("2%s\n",yytext);}

(a|b)*c {printf("4%s\n",yytext);}
%%
int main() {
    yyin = stdin;
    return yylex();
}


查了资料,显示可以添加%option noyywrap
(%option yywrap——如果没有设置(就如%option noyywrap),当扫描器遇到end-of-file 时,不会调用yywrap(),但简单的假定没有更多的文件可以扫描(直到用户把yyin 指向新的文件并再一次调用yylex())。)

%option noyywrap  //增加的语句
%{
/***********

    Sexy Lexy
***********/
%}
%%
a+b*a {printf("1%s\n",yytext);}
(ab)+c? {printf("2%s\n",yytext);}

(a|b)*c {printf("4%s\n",yytext);}
%%
int main() {
    yyin = stdin;
    return yylex();
}

并且使用如下语句gcc -g -Wall -o output.exe lex.yy.c 生成了optput.exe

-g 嵌入调试信息,方便gdb调试
-Wall 打开编译告警(所有)
-o 生成目标

yywrap()
当词法分析程序遇到文件结尾时,它调用例程yywrap()来找出下一步要做什么,如果返回0,扫描程序继续扫描,如果返回1,扫描程序就返回报告文件结尾需标记。

lex库中yywrap()的标准版本总是返回1,如果yywrap()返回指示有更多的输入0,那么它首先需要调整指向新的文件yyin,可能使用fopen()。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值