⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lex.txt

📁 实现c--语言的词法分析器。将一个C--语言程序分割成token串的序列。处理C--语言的所有token类型。
💻 TXT
字号:
%{
	#include "stdio.h"
	#include "stdlib.h"
%}
char_const \'((\\n)|.|(\\t)|(\\b)|(\\r)|(\\f)|(\\\\)|(\\'))\'
delim	[ \t\n]
ws	{delim}+
letter	[A-Za-z]
digit	[0-9]
id 	{letter}({letter}|{digit})*
number	{digit}+(\.{digit}+)?(E[+\-]?{digit}+)?
string	\"[^\n}]*\" 
comment "/*"([^\*]|(\*)*[^\*/])*(\*)*"*/"
%%
{ws}	{}
{comment} {}
void	{fprintf(yyout,"KEYWORD void\n");}
int 	{fprintf(yyout,"KEYWORD int\n");}
char	{fprintf(yyout,"KEYWORD char\n");}
if	{fprintf(yyout,"KEYWORD if\n");}
else	{fprintf(yyout,"KEYWORD else\n");}
then	{fprintf(yyout,"KEYWORD then\n");}
break	{fprintf(yyout,"KEYWORD break\n");}
case	{fprintf(yyout,"KEYWORD case\n");}
auto	{fprintf(yyout,"KEYWORD auto\n");}
const	{fprintf(yyout,"KEYWORD const\n");}
continue {fprintf(yyout,"KEYWORD continue\n");}
default	{fprintf(yyout,"KEYWORD default\n");}
do	{fprintf(yyout,"KEYWORD do\n");}
for	{fprintf(yyout,"KEYWORD for\n");}
goto	{fprintf(yyout,"KEYWORD goto\n");}
return	{fprintf(yyout,"KEYWORD return\n");}
switch	{fprintf(yyout,"KEYWORD switch\n");}

{char_const} {fprintf(yyout,"CHAR_CONST %s\n",yytext);}
{string}     {fprintf(yyout,"STRING %s\n",yytext);}
{id}	     {fprintf(yyout,"ID %s\n",yytext);}
{number}     {fprintf(yyout,"NUM %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,"PUN =\n");}
";"	{fprintf(yyout,"PUN ;\n");}
":"	{fprintf(yyout,"PUN :\n");}
"("	{fprintf(yyout,"PUN (\n");}
")"	{fprintf(yyout,"PUN )\n");}
"{"	{fprintf(yyout,"PUN {\n");}
"}"	{fprintf(yyout,"PUN }\n");}
"+"	{fprintf(yyout,"PUN +\n");}
"-"	{fprintf(yyout,"PUN -\n");}
"*"	{fprintf(yyout,"PUN *\n");}
"/"	{fprintf(yyout,"PUN /\n");}
","	{fprintf(yyout,"PUN ,\n");}
"#"	{fprintf(yyout,"PUN #\n");}

%%
void main(int argc,char *argv[])
{
	if(argc!=3)
	{
		printf("input error\n");
		exit(1);
	}

	yyin=fopen(argv[1],"r");
	yyout=fopen(argv[2],"w");
	yylex();
}

int yywrap()
{
	return 1;
}


	






⌨️ 快捷键说明

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