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

📄 mylex.l.txt

📁 此源码是简单Pascal编译器实现代码
💻 TXT
字号:
%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define    	Iden    	300
#define    	IntNo		301
#define	  	RealNo  	302
/*Define keywords here:*/
#define	  	Program 	400
#define	  	Begin	401
#define	  	End	402
#define	  	Var	403
#define	  	Integer 	404
#define	  	Real	405
#define	  	While	406
#define		If	407
#define		Else	408

/*Define double_character terminates:   */
#define		LE	500
#define		GE	501
#define		NE	502
#define		ERRORCHAR	600

#define MAXSTR 20

/* This array is used for determin if a identier is keyword */

char str1[20]; /* this array is used to store the string of identifier or 
		  integer/real number.When one of them are abtained in yytext, 
		  copy it to str1. str1 will be used in YACC source file
		  (YSP file filename.y) */
int id_or_keyword(char *name);/* to check out if the name is a keyword*/
%}
letter		[A-Za-z]
alnum		[A-Za-z0-9]
d			[0-9]
white		[\t\n\040]
%start		COMMENT
%%
	/* the following rules are used for recognixe comment line*/
\{			{ECHO;BEGIN COMMENT;}
<COMMENT>\}		{ECHO;BEGIN 0;}
<COMMENT>\n		{ECHO;}
<COMMENT>[^\}]+ 	{ECHO;}
	/* 	Define other recognize rules for all Vt symbols 
		and write corresponding sematic actions */
/* For example: 	*/
[Bb][eE][Gg][iI][Nn]	{ECHO;return Begin;}
[eE][Nn][Dd]		{ECHO;return End;}
[Pp][Rr][oO][Gg][Rr][Aa][Mm]	{ECHO;return Program;}
[Vv][Aa][Rr]		{ECHO;return Var;}
[Ii][nN][Tt][eE][Gg][eE][Rr]	{ECHO;return Integer;}
[Rr][eE][Aa][lL]	{ECHO;return Real;}
[Ww][Hh][Ii][Ll][Ee]	{ECHO;return While;}
[iI][Ff]		{ECHO;return If;}
[Ee][Ll][Ss][Ee]	{ECHO;return Else;}

({d}+(\.{d}*)?[Ee]([+-])?{d}+)|({d}*\.{d}+[Ee]([+-])?{d}+)	{ECHO;strcpy(str1,yytext);return RealNo;}
{d}+\.{d}*|{d}*\.{d}+		{ECHO;strcpy(str1,yytext);return RealNo;}
{d}+			{ECHO;strcpy(str1,yytext);return IntNo;}

"("			{ECHO;return '(';}
")"			{ECHO;return ')';}
"["			{ECHO;return '[';}
"]"			{ECHO;return ']';}
">"			{ECHO;return '>';}
"<"			{ECHO;return '<';}
"="			{ECHO;return '=';}
"<="			{ECHO;return LE;}
">="			{ECHO;return GE;}
"!="			{ECHO;return NE;}
":"			{ECHO;return ':';}
";"			{ECHO;return ';';}
"\."			{ECHO;return '.';}
"*"			{ECHO;return '*';}
"+"			{ECHO;return '+';}
"-"			{ECHO;return '-';}
"/"			{ECHO;return '/';}
"%"			{ECHO;return '%';}
","			{ECHO;return ',';} 
"&"                     {ECHO;return '&';}
"|"                     {ECHO;return '|';}
"!"                     {ECHO;return '!';}   

{letter}{alnum}*	{ ECHO;strcpy(str1,yytext);return Iden;}
{white}+		{ECHO;}
.			{printf("Invalid char %s\n",yytext);
			 return ERRORCHAR;
			}


/* other Vt symbols ...... */

%%


#ifndef yywrap
 int yywrap(){return 1;}
#endif
	/* You can write other functions you need in LEX program below */

	/* Good luck! */

⌨️ 快捷键说明

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