Download as rtf, pdf, or txt
Download as rtf, pdf, or txt
You are on page 1of 4

/* This FLex file was machine-generated by the BNF converter */

%{

#include <string.h>

#include "Parser.H"

#define YY_BUFFER_LENGTH 4096

extern int yy_mylinenumber ;

static char YY_PARSED_STRING[YY_BUFFER_LENGTH];

static void YY_BUFFER_APPEND(char *s)

strcat(YY_PARSED_STRING, s); //Do something better here!

static void YY_BUFFER_RESET(void)

for(int x = 0; x < YY_BUFFER_LENGTH; x++)

YY_PARSED_STRING[x] = 0;

%}

LETTER [a-zA-Z]

CAPITAL [A-Z]

SMALL [a-z]

DIGIT [0-9]

IDENT [a-zA-Z][a-zA-Z0-9]*
%START YYINITIAL COMMENT CHAR CHARESC CHAREND STRING ESCAPED

%%

<YYINITIAL>"*" return _SYMB_0;

<YYINITIAL>"/" return _SYMB_1;

<YYINITIAL>"+" return _SYMB_2;

<YYINITIAL>"-" return _SYMB_3;

<YYINITIAL>">" return _SYMB_4;

<YYINITIAL>"<" return _SYMB_5;

<YYINITIAL>"!=" return _SYMB_6;

<YYINITIAL>"==" return _SYMB_7;

<YYINITIAL>">=" return _SYMB_8;

<YYINITIAL>"<=" return _SYMB_9;

<YYINITIAL>"&&" return _SYMB_10;

<YYINITIAL>"||" return _SYMB_11;

<YYINITIAL>"/*" return _SYMB_12;

<YYINITIAL>"*/" return _SYMB_13;

<YYINITIAL>"//" return _SYMB_14;

<YYINITIAL>"(" return _SYMB_15;

<YYINITIAL>")" return _SYMB_16;

<YYINITIAL>"[" return _SYMB_17;

<YYINITIAL>"]" return _SYMB_18;

<YYINITIAL>"{" return _SYMB_19;

<YYINITIAL>"}" return _SYMB_20;

<YYINITIAL>"!" return _SYMB_21;


<YYINITIAL>"," return _SYMB_22;

<YYINITIAL>";" return _SYMB_23;

<YYINITIAL>"=" return _SYMB_24;

<YYINITIAL>"char" return _SYMB_25;

<YYINITIAL>"else" return _SYMB_26;

<YYINITIAL>"extern" return _SYMB_27;

<YYINITIAL>"for" return _SYMB_28;

<YYINITIAL>"if" return _SYMB_29;

<YYINITIAL>"int" return _SYMB_30;

<YYINITIAL>"return" return _SYMB_31;

<YYINITIAL>"then" return _SYMB_32;

<YYINITIAL>"void" return _SYMB_33;

<YYINITIAL>"while" return _SYMB_34;

<YYINITIAL>"\"" BEGIN STRING;

<STRING>\\ BEGIN ESCAPED;

<STRING>\" yylval.string_ = strdup(YY_PARSED_STRING); YY_BUFFER_RESET(); BEGIN


YYINITIAL; return _STRING_;

<STRING>. YY_BUFFER_APPEND(yytext);

<ESCAPED>n YY_BUFFER_APPEND("\n"); BEGIN STRING;

<ESCAPED>\" YY_BUFFER_APPEND("\""); BEGIN STRING ;

<ESCAPED>\\ YY_BUFFER_APPEND("\\"); BEGIN STRING;

<ESCAPED>t YY_BUFFER_APPEND("\t"); BEGIN STRING;

<ESCAPED>. YY_BUFFER_APPEND(yytext); BEGIN STRING;

<YYINITIAL>"'" BEGIN CHAR;

<CHAR>\\ BEGIN CHARESC;


<CHAR>[^'] BEGIN CHAREND; yylval.char_ = yytext[0]; return _CHAR_;

<CHARESC>n BEGIN CHAREND; yylval.char_ = '\n'; return _CHAR_;

<CHARESC>t BEGIN CHAREND; yylval.char_ = '\t'; return _CHAR_;

<CHARESC>. BEGIN CHAREND; yylval.char_ = yytext[0]; return _CHAR_;

<CHAREND>"'" BEGIN YYINITIAL;

<YYINITIAL>{DIGIT}+ yylval.int_ = atoi(yytext); return _INTEGER_;

<YYINITIAL>{LETTER}{IDENT}* yylval.string_ = strdup(yytext); return _IDENT_;

\n ++yy_mylinenumber ;

<YYINITIAL>[ \t\r\n\f] /* ignore white space. */;

<YYINITIAL>. return _ERROR_;

%%

int initialize_lexer(FILE *inp) { yyin = inp; BEGIN YYINITIAL; }

int yywrap(void) { return 1; }

You might also like