%{ #include #include double akku = 0.0, neue_zahl = 0.0; enum op_t {plus, minus, mal, durch, clear} op = clear; %} %option main DIGIT [0-9] %% {DIGIT}+("."{DIGIT}*)? { neue_zahl = atof(yytext); switch(op) { case plus: akku = akku + neue_zahl; break; case minus: akku = akku - neue_zahl; break; case mal: akku = akku * neue_zahl; break; case durch: akku = akku / neue_zahl; break; case clear: akku = neue_zahl; break; default: /* Dies wird nie erreicht. */ printf("Arrrgh!"); exit(1); } printf("Ergibt: %g\n", akku); } "+" { op = plus; } "-" { op = minus; } "*" { op = mal; } "/" { op = durch; } [Cc] { op = clear; } [ \t\n] { /* ignoriere Whitespace */ } . { printf("Ungueltiges Zeichen '%s'!\n", yytext); }