%option noyywrap %option nounput %{ #include #include #include /* Ukljucujemo zaglavlje koje nam generise yacc u kome su deklarisani tokeni koje moze leksicki analizator da vraca i u kome je deklarisan tip promenljive yylval */ #include "y.tab.h" %} CIFRA [0-9] SLOVO [a-zA-Z_] %% /* Prvo moramo da prepoznamo kljucnu rec print, pa tek onda nize identifikator */ print { return print; } /* Za prepoznati token num, postavljamo vrednost promenljive v u uniji yylval */ {CIFRA}+(\.{CIFRA}+)? { yylval.v = atof(yytext); return num; } /* Za prepoznati token id, postavljamo vrednost promenljive s u uniji yylval */ {SLOVO}({SLOVO}|{CIFRA})* { yylval.s = malloc((yyleng + 1) * sizeof(char)); if (yylval.s == NULL) { fprintf(stderr, "Nedovoljno memorije\n"); exit(EXIT_FAILURE); } strcpy(yylval.s, yytext); return id; } ":=" { return op_dodele; } [-+*/();] { return *yytext; } [ \t\n] { } . { fprintf(stderr, "Leksicka greska: Neprepoznat karakter %c\n", *yytext); exit(EXIT_FAILURE); } %%