%{ #include #include #include "scanType.h" #include "token.tab.h" static int line=1; static int setValue(int linenum, int tokenClass, char *svalue) { // create the pass-back data space yylval.tokenData = new TokenData; // stuff it up yylval.tokenData->linenum = linenum; yylval.tokenData->tokenstr = strdup(svalue); // duplicating string yylval.tokenData->numValue = atof(svalue); if (tokenClass == ID) { yylval.tokenData->idIndex = svalue[0]-'a'; } // return the tokenclass return tokenClass; } %} %option noyywrap %% \n { line++; return setValue(line, '\n', yytext); } [\=\+\*\-\(\)] { return setValue(line, yytext[0], yytext); } "quit" { return setValue(line, QUIT, yytext); } [a-z] { return setValue(line, ID, yytext); } [0-9]+ { return setValue(line, NUMBER, yytext); } . ; // print scanner error %%