%option noyywrap %{ #include #include int v = 0; %} hiljade M* stotine CM|CD|DC*|C* desetice XC|XL|LX*|X* jedinice IX|IV|VI*|I* %% {hiljade} { v += yyleng * 1000; } {stotine} { if (strcmp(yytext,"CM") == 0) v += 900; else if (strcmp(yytext, "CD") == 0) v += 400; else if (yytext[0] == 'D') if ( yyleng > 4) printf("Vise slova C\n"); else v += 500 + (yyleng-1)*100; else if (yyleng >=4) printf("Vise slova C\n"); else v += yyleng * 100; } {desetice} { if (strcmp(yytext,"XC") == 0) v += 90; else if (strcmp(yytext, "XL") == 0) v += 40; else if (yytext[0] == 'L') if ( yyleng > 4) printf("Vise slova X\n"); else v += 50 + (yyleng-1)*10; else if ( yyleng >= 4) printf("Vise slova X\n"); else v += yyleng * 10; } {jedinice} { if (strcmp(yytext,"IX") == 0) v += 9; else if (strcmp(yytext, "IV") == 0) v += 4; else if (yytext[0] == 'V') if ( yyleng > 4) printf("Vise slova I\n"); else v += 5 + (yyleng-1); else if ( yyleng >= 4) printf("Vise slova I\n"); else v += yyleng; } %% int main() { yylex(); printf("Vrednost rimskog broja je %d\n",v); return 0; }