使用flex进行数字和字符辨别

lex文件分三部分:定义段,实现段和main函数段
test.l:

%{
#include<stdio.h>
int k=0,j=0;
%}

%%

[0-9]+  {printf("Number: %s %d\n",yytext,yyleng); k++;}
[a-zA-Z]+ {printf("Text: %s %d\n",yytext,yyleng); j++;}
\n {return 0;} 

%%
//must have yywrap
int yywrap(){}
int main(){
    yylex();
    printf("Nums of number is %d\n",k);
    printf("Nums of string is %d\n",j);
    return 0;
}

进行编译

flex test.l
gcc lex.yy.c

运行
我的程序有点问题:这里的第四行和第五行莫名其妙缩进一个空格。

[root@localhost mycal]# ./a.out 
44 ff 45
Number: 44 2
 Text: ff 2
 Number: 45 2
Nums of number is 2
Nums of string is 1

对lex的说明:
yytext是lex内部已经定义好的指针变量
lex分析过程是将输入字符串按程序员预先设计好的正则表达式进行匹配
yytext总是指向当前获得匹配的字符串
此外yyleng是当前获得匹配的字符串长度
也就是说yytext和yyleng在lex分析过程中是不断地改变的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值