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

📄 clexan.l

📁 编译器的第一个环节
💻 L
字号:
%{

#include <stdio.h>

int yylineno = 1;
FILE *in, *out;

%}

newln	\n
lower   [a-z]
letter	[A-Za-z]
digit	[0-9]
id	({letter}|_)({letter}|{digit}|_)*
number	-?{digit}+(\.{digit}+)?([E\e][+\-]?{digit}+)?
comment	\/\*(\*[^/]|[^*])*\*\/
chart \'(.|\\{lower})\'
string \"([^"]|\\\")*\"

%%

[ \t]+		;
{comment}	;
{newln}		{ ++yylineno; fprintf(out, "\n# LINE %d:\n", yylineno); }

void|int|char|return|if|else|while {
	fprintf(out, "KEY:\t%s\n", yytext);
}

{id} {
	fprintf(out, "ID:\t%s\n", yytext);
}

{number} {
	fprintf(out, "NUM:\t%s\n", yytext);
}

{chart} {
	fprintf(out, "CAHR:\t%s\n", yytext);
}

{string} {
	fprintf(out, "STR:\t%s\n", yytext);
}

"+"|"-"|"*"|"/"|"<="|"<"|">="|">"|"=="|"!="|"=" {
	fprintf(out, "SYM:\t%s\n", yytext);
}

";"|","|"("|")"|"["|"]"|"{"|"}" {
	fprintf(out, "SYM:\t%s\n", yytext);
}

. ;
	ECHO;

%%

yywrap() { return 1; }

int main(int argc, char *argv[])
{
	if (argc > 2)
	{
		in = fopen(argv[1], "r");
		if (!in)
		{
			fprintf(stderr, "Can not open %s\n", argv[1]);
			exit(1);
		}
		out = fopen(argv[2], "w");
		if (!out)
		{
		  fprintf(stderr, "Can not open %s\n", argv[2]);
		}
		
		yyin = in;
	}
	fprintf(out, "#LINE 1:\n");
	yylex();
	fprintf(out, "EOF\n");
	fclose(in);
	fclose(out);

	return 0;
}

⌨️ 快捷键说明

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