This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:06-aplicatii-cu-tda-uri [2015/03/30 16:52] matei.popovici |
laboratoare:06-aplicatii-cu-tda-uri [2015/05/07 13:48] (current) radu.stoenescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laborator 6 - Aplicatii cu TDA-uri ===== | ===== Laborator 6 - Aplicatii cu TDA-uri ===== | ||
- | * Definiti un tip de date care codifica expresii generate de urmatoarea gramatica BNF | ||
<code> | <code> | ||
<expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | <expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | ||
<variabila> ::= string | <variabila> ::= string | ||
- | <valoare> :: orice | + | <valoare> ::= orice |
- | </code> | + | |
- | * Inrolati tipul vostru in clasa Show. Definiti explicit o reprezentare (usor de urmarit) | + | <prog> ::= <variabila> = <expr> | if <expr> then <prog> else <prog> | <prog> ; <prog> | return <variabila> |
- | * Definiti o expresie formata cu Intregi (care va fi folosita ulterior pentru testare) | + | </code> |
- | * Definiti un tip care reprezinta o multime de asocieri ale unor | + | - Definiti un tip de date care codifica expresii ''<expr>'' 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 ''<prog>'' 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 ''<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 | ||
+ | |||
+ | [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Solutii]] |