%{ /* In der Vorlesung am 27.11.2006 gemeinsam erstellte Lösung für einen * einfachen Taschenrechner mit lex. */ #include double akku = 0; enum op_t { plus, minus, mal, geteilt, clear} op = clear; %} DIGIT [0-9] %option main %% "-"?{DIGIT}+("."{DIGIT}*)? { double tmp=atof(yytext); switch (op) { case plus: akku += tmp; break; case minus: akku -= tmp; break; case mal: akku *= tmp; break; case geteilt: akku /= tmp; break; case clear: akku = tmp; break; } printf("Ergibt %g\n", akku); } "+" op=plus; "-" op=minus; "*" op=mal; "/" op=geteilt; [cC] op=clear; [ \t\n] /* Leerraum ignorieren */ . printf("Ungültiges Zeichen '%s'!\n", yytext); <> return 0;