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

📄 scan_lex.l

📁 大3编译原理课程设计 绝对符合老师要求 报告代码一应俱全 很详细 很靠谱
💻 L
字号:
/****************************************************/
/* File: scan.l                                     */
/* Lex specification for Cminus                     */
/****************************************************/
%{
#include "globals.h"
#include "util.h"
#include "scan.h"
/* lexeme of identifier or reserved word */
char tokenString[MAXTOKENLEN+1];
%}

digit       [0-9]
number      {digit}+
letter      [a-zA-Z]
identifier  {letter}+
newline     \n
whitespace  [ \t]+

%%
"/*"             { char c;
					int done=FALSE;
					ECHO;
                  do
                  { 
					while((c=input())!='*')
					{
						
						if (c == EOF) break;
						if (c == '\n') lineno++;
						putchar(c);
					}
					if (c == EOF) break;
					if (c == '\n') lineno++;
					putchar(c);
					while((c=input())=='*')
					{
						if (c == EOF) break;
						if (c == '\n') lineno++;
						putchar(c);
					}
					if (c == EOF) break;
					if (c == '\n') lineno++;
					putchar(c);
					if(c=='/'){done=TRUE;c=input();
					if (c == EOF) break;
					if (c == '\n') lineno++;
					putchar(c);}
                    
                  } while (!done);
                }
"if"            {return IF;}
"else"          {return ELSE;}
"int"			{return INT;}
"return"        {return RETURN;}
"void"          {return VOID;}
"while"         {return WHILE;}
"="				{return ASSIGN;}
"=="            {return EQ;}
"!="            {return NOEQ;}
"<"             {return LT;}
"<="            {return LTEQ;}
">"             {return GT;}
">="            {return GTEQ;}
"+"             {return PLUS;}
"-"             {return MINUS;}
"*"             {return TIMES;}
"/"             {return OVER;}
"("             {return LPAREN;}
")"             {return RPAREN;}
"["             {return LBRA;}
"]"             {return RBRA;}
"{"             {return LBRACE;}
"}"             {return RBRACE;}
","             {return COMMA;}
";"             {return SEMI;}
{number}        {return NUM;}
{identifier}    {return ID;}
{newline}       {lineno++;}
{whitespace}    {/* skip whitespace */}
.               {return ERROR;}
%%

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

⌨️ 快捷键说明

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