%{ /* In der Vorlesung am 19.11.2007 gemeinsam erstellte Loesung für einen * einfachen Taschenrechner mit lex. */ #include #include #include double akku = 0.0; double neue_zahl; enum op_t {plus, mal, minus, durch, clear} op = clear; %} %option main DIGIT [0-9] FLOAT {DIGIT}+("."{DIGIT}*)? %% "+" { op = plus; } "-" { op = minus; } "*" { op = mal; } "/" { op = durch; } [cC] { op = clear; } {FLOAT} { neue_zahl = atof(yytext); switch (op) { case plus: akku = akku + neue_zahl; break; case mal: akku = akku * neue_zahl; break; case minus: akku = akku - neue_zahl; break; case durch: akku = akku / neue_zahl; break; case clear: akku = neue_zahl; break; default: printf("Interner Fehler Nr. 42!"); exit(1); } printf("Akku = %g\n", akku); } [ \n\t] /* Nichts tun */ . { printf("Illegales Zeichen!\n"); } %%