%option 8bit nodefault yylineno noyywrap %{ // This is c/c++ code, whatever you need goes here. #include #include "token.h" #include "symbolTable.h" using namespace std; SymbolTableT symbolTable; TokenT yylval; %} /* regular definitions */ /* this code is (mostly) from the book*/ delim [ \t\n] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter}|{digit})* number {digit}+(\.{digit}+)?(E[+-]?{digit}+)? %% {ws} /* no action and no return */ if { yylval.first = IF; return(IF); } then { yylval.first= THEN; return(THEN); } else { yylval.first= ELSE; return(ELSE); } {id} { if (not symbolTable.IsPresent(yytext)) { symbolTable.Insert(yytext, ID); } yylval.first = ID; yylval.second.symbolInfo = symbolTable.Entry(yytext); return (ID); } {number} { if (not symbolTable.IsPresent(yytext)) { symbolTable.Insert(yytext,NUMBER); } yylval.first = NUMBER; yylval.second.symbolInfo = symbolTable.Entry(yytext); return (NUMBER); } "<" { yylval.second.opid = LT; yylval.first=RELOP; return RELOP; } "<=" { yylval.second.opid = LE; yylval.first=RELOP; return RELOP; } "<>" { yylval.second.opid = NE; yylval.first=RELOP; return RELOP; } "=" { yylval.second.opid = EQ; yylval.first=RELOP; return RELOP; } ">" { yylval.second.opid = GT; yylval.first=RELOP; return RELOP; } ">=" { yylval.second.opid = GE; yylval.first=RELOP; return RELOP; } %% int main () { TokenIDT t; while(t = TokenIDT(yylex()) ) { cout << yylval << endl; } return 0; }