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 17:12] matei.popovici |
laboratoare:06-aplicatii-cu-tda-uri [2015/05/07 13:48] (current) radu.stoenescu |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| <expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | <expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | ||
| <variabila> ::= string | <variabila> ::= string | ||
| - | <valoare> :: orice | + | <valoare> ::= orice |
| - | <program> ::= <variabila> = <expr> | if <expr> then <prog> else <prog> | <prog> ; <prog> | return <variabila> | + | <prog> ::= <variabila> = <expr> | if <expr> then <prog> else <prog> | <prog> ; <prog> | return <variabila> |
| </code> | </code> | ||
| - Definiti un tip de date care codifica expresii ''<expr>'' generate de gramatica BNF de mai sus | - Definiti un tip de date care codifica expresii ''<expr>'' generate de gramatica BNF de mai sus | ||
| Line 15: | Line 15: | ||
| * scrieti signatura pentru ''eval'' | * scrieti signatura pentru ''eval'' | ||
| * realizati implementarea efectiva | * realizati implementarea efectiva | ||
| - | - Definiti un tip de date care codifica expresii ''<program>'' generate de gramatica BNF de mai sus. | + | - 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? | * Tipul definit de voi va fi monomorfic sau polimorfic? | ||
| - Inrolati tipul definit de voi in clasa ''Show''. | - Inrolati tipul definit de voi in clasa ''Show''. | ||
| - | - Definiti o clasa (type-class) ''Evaluable'' care modeleaza **o relatie** intre un **tip container** si un **tip continut** de containerul respectiv. | + | - 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. |
| - | * Relatia specifica faptul ca tipul container poate fi evaluat, in raport cu o interpretare pentru elemente de tipul continut de container. | + | |
| * Clasa pune la dispozitie o singura operatie ''eval'' care generalizeaza operatia eval definita pentru expresii | * 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>'', si un tip generic. Observati faptul ca implementarea procedurii de evaluare a fost realizata anterior. | + | * 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>'', si un tip generic. Mai exact, implementati evaluarea unui program. | + | * 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. | * 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]] | ||