===== Laborator 6 - Aplicatii cu TDA-uri ===== ::= | | + | * | () ::= string ::= orice ::= = | if then else | ; | return - Definiti un tip de date care codifica expresii '''' generate de gramatica BNF de mai sus * Tipul definit de voi va fi monomorfic sau polimorfic? - 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: * scrieti signatura pentru ''eval'' * realizati implementarea efectiva - Definiti un tip de date care codifica expresii '''' generate de gramatica BNF de mai sus. * Tipul definit de voi va fi monomorfic sau polimorfic? - 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 ''''. Observati faptul ca implementarea procedurii de evaluare a fost realizata anterior. * Realizati o instanta a ''Evaluable'' pentru constructorul de tip al ''''. 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 [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Solutii]]