%{ /* In der Vorlesung am 14.1.2008 gemeinsam erstellte Variante von * calc-int.[ly], bei der zusätzlich ein unaeres Minus vorkommen * darf. Ausserdem wird ausgegeben, wann dieses ausgewertet wird. */ #include #define YYERROR_VERBOSE void yyerror(char *); %} %token NUMBER ILLEGAL_CHAR %left '-' '+' %left '*' '/' %right UMINUS %% eingabe: /* empty */ | eingabe berechnung ; berechnung: term '=' { printf("Ergebnis: %d\n", $1); } ; term: NUMBER | term '+' term { $$ = $1 + $3; } | term '-' term { $$ = $1 - $3; } | term '*' term { $$ = $1 * $3; } | term '/' term { $$ = $1 / $3; } | '-' term { $$ = -$2; printf("Zwischenergebnis: %d\n", -$2); } /* %prec UMINUS */ | '(' term ')' { $$ = $2; } ; %% void yyerror(char *msg) { printf("\nEingabefehler: %s\n", msg); } int main() { return yyparse(); }