Zadání úlohy č. 11

Generování zásobníkového kódu

[Řešení]

Rozšiřte překladač jazyka aritmetických výrazů s celými čísly, proměnnými, operátory +, -, *, /, závorkami a přiřazením o generování instrukcí zásobníkového kódu podle následující tabulky:
CONST n Vložení konstanty n na vrchol zásobníku.
LOAD x Vložení hodnoty proměnné se jménem x na vrchol zásobníku.
STORE x Uložení hodnoty z vrcholu zásobníku do proměnné se jménem x. Hodnota je ponechána na vrcholu zásobníku.
ADD, SUB, MUL, DIV Provedení aritmetické operace se dvěma položkami z vrcholu zásobníku a jejich nahrazení výsledkem.
NEG Změna znaménka hodnoty na vrcholu zásobníku.
PRINT Tisk a odstranění hodnoty z vrcholu zásobníku.

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, 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 posloupnost vygenerovaných instrukcí, pro každý výraz bude tato posloupnost končit instrukcí PRINT.

Příklad:

Vstup:

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

Výstup:

   CONST 3
   CONST 5
   MUL
   STORE b
   STORE a
   PRINT
   LOAD a
   LOAD b
   ADD
   PRINT