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分析过程中是不断地改变的