lex 词法分析 linux,lex语言词法分析
1.添加行號(hào)
%{
#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.將文件中每個(gè)非空的空白符號(hào)序列替換為單個(gè)空格
%{
#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.將文件中所有關(guān)鍵字轉(zhuǎn)換為大寫字母
%{
#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.將文件中所有標(biāo)識(shí)符轉(zhuǎn)換為小寫字母,且以下劃線開頭、
%{
#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.將文件中所有指數(shù)形式的常量轉(zhuǎn)換為小數(shù)形式
例如:2.5e3? 被轉(zhuǎn)換為? 2500
3.7e-2?被轉(zhuǎn)換為? 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;
}
總結(jié)
以上是生活随笔為你收集整理的lex 词法分析 linux,lex语言词法分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩根大通公司简单介绍 成国内首家纯外资券
- 下一篇: linux 校验文件生成,在Linux中