📄 scan.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 + -