?? lexer.l
字號:
%{
#include "globals.h"
#include "util.h"
#include "scan.h"
/* lexeme of identifier or reserved word */
char tokenString[MAXTOKENLEN+1];
char lookAhead[MAXTOKENLEN+1];
%}
digit [0-9]
float {int}\.({digit}+)?([eE]{int})?
int {digit}+
char '.'
letter [_a-zA-Z]
identifier {letter}({letter}|{digit})*
newline \n
whitespace [ \t]+
%%
"if" {return IF;}
"else" {return ELSE;}
"while" {return WHILE;}
"do" {return DO;}
"break" {return BREAK;}
"continue" {return CONTINUE;}
"for" {return FOR;}
"main" {return MAIN;}
"goto" {return GOTO;}
"int" {return RINT;}
"float" {return RFLOAT;}
"char" {return RCHAR;}
"==" {return EQ;}
"=" {return ASSIGN;}
"!=" {return NE;}
"<=" {return LE;}
">=" {return ME;}
"<" {return LT;}
">" {return MT;}
"+" {return PLUS;}
"-" {return MINUS;}
"*" {return TIMES;}
"/" {return OVER;}
"&&" {return AND;}
"||" {return OR;}
"!" {return NOT;}
"(" {return LP;}
")" {return RP;}
"[" {return LS;}
"]" {return RS;}
"{" {return LB;}
"}" {return RB;}
";" {return SEMI;}
"," {return COMMA;}
{int} {return INT;}
{float} {return FLOAT;}
{char} {return CHAR;}
{identifier} {return ID;}
{newline} {lineno++;}
{whitespace} {/* skip whitespace */}
%%
TokenType getToken(void)
{
static int firstTime = TRUE;
TokenType currentToken;
strcpy(tokenString,lookAhead);
if (firstTime)
{ firstTime = FALSE;
lineno++;
yyin = source;
yyout = listing;
}
currentToken = yylex();
strncpy(lookAhead,yytext,MAXTOKENLEN);
if (TraceScan) {
fprintf(listing,"\t%d: ",lineno);
printToken(currentToken,lookAhead);
}
return currentToken;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -