add cminus.l
This commit is contained in:
85
src/cminus.l
Normal file
85
src/cminus.l
Normal file
@@ -0,0 +1,85 @@
|
||||
/****************************************************/
|
||||
/* File: tiny.l */
|
||||
/* Lex specification for TINY */
|
||||
/* Compiler Construction: Principles and Practice */
|
||||
/* Kenneth C. Louden */
|
||||
/****************************************************/
|
||||
|
||||
%{
|
||||
#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]+
|
||||
|
||||
%%
|
||||
|
||||
"if" {return IF;}
|
||||
"else" {return ELSE;}
|
||||
"while" {return WHILE;}
|
||||
"return" {return RETURN;}
|
||||
"int" {return INT;}
|
||||
"void" {return VOID;}
|
||||
|
||||
"=" {return ASSIGN;}
|
||||
"==" {return EQ;}
|
||||
"!=" {return NE;}
|
||||
"<" {return LT;}
|
||||
"<=" {return LE;}
|
||||
">" {return GT;}
|
||||
">=" {return GE;}
|
||||
"+" {return PLUS;}
|
||||
"-" {return MINUS;}
|
||||
"*" {return TIMES;}
|
||||
"/" {return OVER;}
|
||||
"(" {return LPAREN;}
|
||||
")" {return RPAREN;}
|
||||
"[" {return LBRACE;}
|
||||
"]" {return RBRACE;}
|
||||
"{" {return LCURLY;}
|
||||
"}" {return RCURLY;}
|
||||
";" {return SEMI;}
|
||||
"," {return COMMA;}
|
||||
{number} {return NUM;}
|
||||
{identifier} {return ID;}
|
||||
{newline} {lineno++;}
|
||||
{whitespace} {/* skip whitespace */}
|
||||
"/*" { char now, prev;
|
||||
do
|
||||
{ now = input();
|
||||
if (now == EOF) break;
|
||||
else if (now == '\n') lineno++;
|
||||
else if (now == '/' && prev == '*') break;
|
||||
prev = now;
|
||||
} while (1);
|
||||
}
|
||||
. {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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user