%{ #include #include #include "parser.tab.h" extern int yylex(); extern size_t line_number; %} %option noyywrap %% ^[a-zA-Z]+ { yylval.symbol = strdup(yytext); return T_INSTRUCTION; } %*[a-zA-Z\_\-]+[a-zA-Z0-9\_\-]* { yylval.symbol = strdup(yytext); return T_LABEL; } 0x[0-9A-Fa-f]+ { yylval.i_val = atoi(yytext); return T_INTEGER; } [0-9]+ { yylval.i_val = atoi(yytext); return T_INTEGER; } -*[0-9]*\.*[0-9]* { yylval.i_val = atof(yytext); return T_FLOAT; } \".*\" { yylval.s_val = strdup(yytext+1); char *const close_paren = strrchr(yylval.s_val, '"'); if (close_paren != NULL) { *close_paren = '\0'; } return T_STRING; } , { return T_COMMA; } \$ { return T_IMMEDIATE; } [ \t] ; \n { ++line_number; return T_ENDL; } . ; %%