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

📄 scan.l

📁 1.小型编译器 2。支持整数
💻 L
字号:
/****************************************************************************
scan.l
ParserWizard generated Lex file.

****************************************************************************/
%{
#include "Globals.h"
#include "Util.h"
#include "Scan.h"
#include "Parse.h"
#include "y.tab.h"

char tokenString[MAXTOKENLEN+1];
%}


letter      [_a-zA-Z]
letnum		[_a-zA-Z0-9]
identifier  {letter}{letnum}*
digit       [0-9]
number      -?{digit}+
dnumber     -?{number}"."{number}
constchar	'.'
newline		\n
whitespace  [ \t]+

%%

"int"           {return INT;}
"double"        {return DOUBLE;}
"char"          {return CHAR;}
"void"          {return VOID;}
"if"            {return IF;}
"else"          {return ELSE;}
"while"         {return WHILE;}
"continue"      {return CONTINUE;}
"break"         {return BREAK;}
"return"        {return RETURN;}
"struct"        {return STRUCT;}
"typedef"       {return TYPEDEF;}
"+"             {return PLUS;}
"-"             {return SUB;}
"*"             {return MUT;}
"/"             {return DIV;}
"<"             {return LT;}
"<="            {return LE;}
">"             {return GT;}
">="            {return GE;}
"=="            {return EQ;}
"!="            {return NEQ;}
"&&"            {return AND;}
"&"             {return REF;}
"||"            {return OR;}
"!"             {return NOT;}
"="             {return ASSIGN;}
";"             {return SEMI;}
","             {return COMMA;}
"."             {return DOT;}
"("             {return LP;}
")"             {return RP;}
"["             {return LSP;}
"]"             {return RSP;}
"{"             {return LFP;}
"}"             {return RFP;}
{identifier}    {strncpy(tokenString, (char*)yytext, MAXTOKENLEN);return ID;}
{number}        {strncpy(tokenString, (char*)yytext, MAXTOKENLEN);return NUM;}
{dnumber}       {strncpy(tokenString, (char*)yytext, MAXTOKENLEN);return DNUM;}
{constchar}		{strncpy(tokenString, (char*)yytext, MAXTOKENLEN);return SCHAR;}
{newline}		{lineno++;}
{whitespace}    {}
\"[^\"\n]*\"	{strncpy(tokenString, (char*)yytext, MAXTOKENLEN);return STRING;}
\"[^\"\n]*$		{printf("Unterminated string\n");return STRING;}
"//"				{ 
					char c;
				 	while ((c = yyinput()) != '\n')
				 		if (c == EOF) return ENDFILE;
				 	yyunput(c);
				}
"/*"            { 
					char c;
                  	int done = FALSE;
                  	do {
                    	while ((c = yyinput()) != '*')
                      		if (c == EOF) return ERROR;
                    	while ((c = yyinput()) == '*');
                    	if (c == '/') done = TRUE;
                  	} while (!done);
                }
.               {return ERROR;}

%%

/////////////////////////////////////////////////////////////////////////////
// programs section

int	yywrap(void){
	return 1;
}

TokenType getToken(void)
{
    static int firstTime = TRUE;
    TokenType currentToken;
    if (firstTime) {
        firstTime = FALSE;
        lineno++;
        yyin = source;
        yyout = listing;
    }
    currentToken = yylex();
    strncpy(tokenString, (char*)yytext, MAXTOKENLEN);
    if (TraceScan) {
		lineno = yylineno;
        fprintf(listing,"\t%d: ",lineno);
        printToken(currentToken,tokenString);
    }
    return currentToken;
}

⌨️ 快捷键说明

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