1.添加行号
%{
#include
#include
int line=1;
%}
%%
[^\n] {yymore();}
[\n] {printf("%2d %s",line++,yytext);}
%%
int yywrap(void)
{
return 1;
}
int main(int argc,char** argv)
{
yyin=fopen(argv[1],"r");
while(yylex());
return 0;
}
2.将文件中每个非空的空白符号序列替换为单个空格
%{
#include
#include
%}
%%
[^\n] {printf("%s",yytext);}
[\t\n] {printf(" ");}
%%
int yywrap(void)
{
return 1;
}
int main(int argc,char**argv)
{
yyin=fopen(argv[1],"r");
yylex();
return 0;
}
3.将文件中所有关键字转换为大写字母
%{
#include
#include
int lineno=1;
%}
letter[a-z]+
digit[0-9]+
id{letter}+({letter}|{digit})*
%%
[^id]{
}
{id}{
int i=0;
for(i=0;i
if(yytext[i]>='a'&&yytext[i]<='z')
yytext[i]-=32;
printf("%s\n",yytext);
}
%%
int yywrap(void)
{
return 1;
}
int main(int argc, char** argv) {
yyin = fopen(argv[1], "r");
yylex();
return 0;
}
4.将文件中所有标识符转换为小写字母,且以下划线开头、
%{
#include
#include
int lineno=1;
%}
letter[A-Z]+
digit[0-9]+
id{letter}+({letter}|{digit})*
%%
[^id]{
}
{id}{
int i=0;
for(i=0;i
if(yytext[i]>='A'&&yytext[i]<='Z')
yytext[i]+=32;
printf("_%s\n",yytext);
}
%%
int yywrap(void)
{
return 1;
}
int main(int argc, char** argv) {
yyin = fopen(argv[1], "r");
yylex();
return 0;
}
5.将文件中所有指数形式的常量转换为小数形式
例如:2.5e3 被转换为 2500
3.7e-2 被转换为 0.037
%{
#include
#include
int lineno=1;
%}
FLOAT [0-9]*[.][0-9]+([eE][+-]?[0-9]*|[0])?f?
%%
{FLOAT} {
float t=0;
t=atof(yytext);
printf("%f",t);
}
%%
int yywrap(void)
{
return 1;
}
int main(int argc, char** argv) {
yyin = fopen(argv[1], "r");
yylex();
return 0;
}