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

📄 scan.l

📁 完成一个简化的C语言编译程序
💻 L
字号:
%{
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -