Definiti un tip de date care codifica expresii <expr> generate de gramatica BNF de mai sus
Inrolati tipul vostru in clasa Show. Definiti explicit o reprezentare (usor de urmarit)
Definiti o expresie formata cu intregi (care va fi folosita ulterior pentru testare)
Definiti un tip care reprezinta o multime de asocieri ale unor variabile la valori. Obiecte avand un astfel de tip sunt interpretari pentru o multime de variable. Interpretarea pentru o variabila consta intr-o valoare.
Definiti o functie eval care determina rezultatul unei expresii, pe baza unei interpretari:
Definiti un tip de date care codifica expresii <prog> generate de gramatica BNF de mai sus.
Inrolati tipul definit de voi in clasa Show.
Definiti o clasa (type-class) Evaluable care modeleaza faptul ca o valoare de tip container poate fi evaluata la o valoare de tipul continut de containerul respectiv.
Clasa pune la dispozitie o singura operatie eval care generalizeaza operatia eval definita pentru expresii
Realizati o instanta a Evaluable pentru constructorul de tip al <expr>. Observati faptul ca implementarea procedurii de evaluare a fost realizata anterior.
Realizati o instanta a Evaluable pentru constructorul de tip al <program>. Mai exact, implementati evaluarea unui program.
In implementare, observati ca interpretarea se modifica pe masura ce programul este evaluat.
Asadar, aveti nevoie de o functie auxiliara, care construieste o interpretare, pe baza unui program