html

Super Kalkulator

Termin oddawania rozwiązań: 21.06.2003 18:00

Napisz program obliczający wartość wyrażeń arytmetycznych ze zmiennymi.

Wejście

Wejście programu składa się z linii postaci:
SET Identyfikator = Wyrazenie
(która oznacza przypisanie zmiennej oznaczonej Identyfikator wartości podanej przez Wyrazenie) lub
PRINT Wyrazenie
(wypisanie na ekran wartości Wyrażenia). gdzie Wyrazenie oznacza:
Wyrazenie := Liczba | Zmienna | 
             Wyrazenie Operator Wyrazenie |
	     - Wyrazenie |
	     ( Wyrazenie )
Operator  := + | - | * | /	     
Można założyć, że dane wejściowe spełniają specyfikację. Wartość wyrażenia (jak i wszystkie wyniki pośrednie) mieści się w zakresie typu longint. Identyfikatory mają postać [A-Za-z][A-Za-z0-9]*, początkowo wszystkie zmienne mają wartość 0. W danych może pojawić się co najwyżej 100 różnych identyfikatorów.

Wyjście

Na wyjściu należy wypisać wyniki wszystkich poleceń PRINT.

Przykład 1

Dla danych:
SET x=1+2+3*2
PRINT x
poprawną odpowiedzią jest:
9

Przykład 2

Dla danych:
SET x=2
SET y=12
PRINT x
PRINT (y)
PRINT -(y)
PRINT x*4+y
poprawną odpowiedzią jest:
2
12
-12
20

Uwaga

Zadanie można rozwiązywać tylko w Bisonie/Flexie.

Sposób kompilacji

Rozwiązanie powinno składać się z jednego pliki ZIP, zawierajacego pliki skalk.l i skalk.y. Rozwiązania będą kompilowane w następujący sposób:
flex skalk.l     # powstaje lex.yy.c
bison -d skalk.y # powstaja skalk.tab.c i skalk.tab.h
gcc -o lex.yy.o lex.yy.c 
gcc -c skalk.tab.c -o skalk.tab.o 
gcc -o skalk.e skalk.tab.o lex.yy.o -lfl