Zadání úlohy č. 9

Jednoduchá tabulka symbolů

[Řešení]

Rozšiřte interpret jazyka aritmetických výrazů s celými čísly, operátory +, -, *, / a závorkami o celočíselné proměnné a operátor přiřazení = (zprava asociativní a s nejnižší prioritou).

Každá proměnná je definována v okamžiku přiřazení hodnoty. Použití nedefinované proměnné na jiné pozici ve výrazu vede k hlášení chyby; hodnota takové proměnné bude považována za nulovou. Operátor přiřazení vrací jako výsledek přiřazovanou hodnotu.

Specifikace vstupu:

Vstupem je textový soubor obsahující posloupnost aritmetických výrazů ukončených středníkem. Mezery, tabulátory a konce řádků mezi symboly se vynechávají. Čísla mohou být zapsána ve tvaru konstanty jazyka C, tj. v desítkové, osmičkové (začínající nulou) a šestnáctkové (začínající znaky 0x) soustavě. Proměnné jsou označeny identifikátory tvořenými posloupností písmen a číslic začínající písmenem.

Specifikace výstupu:

Program vypíše na standardní výstup hodnoty vyhodnocených výrazů (v desítkové soustavě), vždy jeden výsledek na řádku. Je-li detekována syntaktická chyba, překlad se ukončí. Při výskytu nedefinované proměnné se vypíše text CHYBA: následovaný jménem proměnné.

Příklad:

Vstup:

   a = b = 3 * 5; 
   a+b;
   2 * c + 3;

Výstup:

   15
   30
   CHYBA: c
   3