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