ex2.l

来自「c—语言的词法分析器。将一个C--语言程序分割成token串的序列。处理C--语」· L 代码 · 共 56 行

L
56
字号
%{
   #include <stdio.h>
   #include <stdlib.h>
%}


/*正规定义*/
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);
 }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?