scan.l

来自「混合991_编译实验」· L 代码 · 共 86 行

L
86
字号
%{
#include "globals.h"
#include "util.h" 
#include "scaner.h" 
#include "parse.h"
char tokenString[MAXTOKENLEN+1];
%}
digit        [0-9]
number       {digit}+
real         ([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?
constchar    \'[a-zA-Z]\'  
identifier   [A-Za-z_][A-Za-z0-9_]*
newline      \n
whitespace   [ \t]+

%% 
"/*"         {char c;
              int done=FALSE;
              do
              {
              while((c=input())!='*'); 
              while((c=input())=='*');
              if(c=='/') done=TRUE;
              }while(!done);
              }  
"while"      {return WHILE;}
"if"         {return IF;}
"else"       {return ELSE;} 
"break"      {return BREAK;}
"return"     {return RETURN;}
"int"        {return INT;}
"float"      {return FLOAT;}
"char"       {return CHAR;}
"void"       {return VOID;}
"=="         {return EQ;}
"<="         {return LE;}
">="         {return GE;}
"!="         {return NE;}
"="          {return ASSIGN;}
"<"          {return LT;}
">"          {return GT;}
"&&"         {return AND;}
"||"         {return OR;}
"!"          {return NOT;}
"+"          {return PLUS;}
"-"          {return MINUS;}
"*"          {return TIMES;}
"/"          {return OVER;}
"("          {return LPAREN;}
")"          {return RPAREN;}
";"          {return SEMI;}  
","          {return COMMA;}
"["          {return LBRACKET;}
"]"          {return RBRACKET;}
"{"          { return LBC;}
"}"          { return RBC;}
{constchar}  {return CONSTCHAR;} 
{real}       {return FLOATNUM;}
{number}     {return NUM;}
{identifier} {return ID;}
{newline}    {lineno++;}
{whitespace} {/*skip*/}
.            {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 + =
减小字号Ctrl + -
显示快捷键?