%{ int posint = 0; int posfrac = 0; int negint = 0; int negfrac = 0; int errors = 0; %} d [0-9] %% (\+?|-){d}*\.-{d}+ errors++; // invalid numbers (\+?|-){d}*\.\+{d}+ errors++; // invalid numbers \+?{d}+\/[1-9]{d}* posfrac++; -{d}+\/[1-9]{d}* negfrac++; (\+?|-){d}+\/{d}+ errors++; \+?{d}+ posint++; -{d}+ negint++; \+?{d}*\.{d}+ posfrac++; -{d}*\.{d}+ negfrac++; \n ; . ; %% int main(void) { yylex(); printf("%d positive integers\n" , posint); printf("%d positive fractions\n" , posfrac); printf("%d negative integers\n" , negint); printf("%d negative fractions\n" , negfrac); printf("%d errors\n" , errors); } int yywrap() { return(1); }