www.pudn.com > chifafenxiqi.rar > ex2.l


%{ 
   #include  
   #include  
%} 
 
 
/*正规定义*/ 
delim			[ \t\n] 
ws				{delim}+ 
leter			[A-Za-z]                                         
digit			[0-9] 
id				{leter}({leter}|{digit})*   
number			{digit}+(\.{digit}+)?(E[+\-]?{digit}+)?  
comment			(\#[^\n]*)|(\/\*(((\*)*[^\*\/]+(\/)*)*|(\*)*|(\/)*)\*\/)|(\/\/[^\n]*) 
pun				[\(\)\{\}\[\]\;\=] 
 
 
%% 
{comment}		{/*对预处理和注释部分没有动作和返回值*/} 
{ws}			{/*对空白串没有动作和返回值*/} 
 
"if" 			{fprintf(yyout,"KEYWORD if\n");} 
"int"			{fprintf(yyout,"KEYWORD int\n");} 
"void"			{fprintf(yyout,"KEYWORD void\n");} 
"char"			{fprintf(yyout,"KEYWORD char\n");} 
"else"			{fprintf(yyout,"KEYWORD else\n");} 
"while"			{fprintf(yyout,"KEYWORD while\n");} 
"return"		{fprintf(yyout,"KEYWORD return\n");} 
 
{number}		{fprintf(yyout,"NUM  %s\n",yytext);} 
{id}			{fprintf(yyout,"ID %s\n",yytext);} 
{pun}			{fprintf(yyout,"PUN %s\n",yytext);} 
 
 
"<="			{fprintf(yyout,"REL_OP <=\n");} 
">="			{fprintf(yyout,"REL_OP >=\n");} 
"<"				{fprintf(yyout,"REL_OP <\n");} 
">"				{fprintf(yyout,"REL_OP >\n");} 
"!="			{fprintf(yyout,"REL_OP !=\n");} 
"=="			{fprintf(yyout,"REL_OP ==\n");} 
 
 
%% 
int yywrap(){ 
	return 1; 
} 
int main(int argc,char*argv[]) 
{ 
if(argc==3){ 
 if((yyin=fopen(argv[1],"r"))==NULL) error("cannot open input file"); 
 if((yyout=fopen(argv[2],"w"))==NULL) error("cannot open output file"); 
 yylex(); 
 exit(0); 
 } 
}