This shows you the differences between two versions of the page.
cpl:teme-draft:t2-draft-2015 [2015/11/24 11:25] bogdan.nitulescu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==T2 Draft== | ||
- | [[cpl:teme-draft:t3-draft-2015|]] | ||
- | În cadrul acestei teme veti implementa atât analiza semnatică, cât și generarea de cod pentru limbajul LCPL. | ||
- | ===== Informaţii organizatorice ===== | ||
- | |||
- | * **Deadline**: Termenul limită până când se pot trimite temele fără depunctări de întârziere este **joi, 17 decembrie 2015, ora 23:59**. Pentru mai multe detalii, consultaţi [[:cpl:teme:general|regulamentul]] aferent temelor de casă. | ||
- | * **Colaborare**: Tema va fi rezolvată **individual**. | ||
- | * **Punctare**: 125p pentru implementarea completă şi corectă | ||
- | |||
- | |||
- | ===== Enunţ ===== | ||
- | |||
- | Va trebui să realizaţi în limbajul C++, porţiunea responsabilă cu analiza semantică a codului rezultat in urma temei 1. Programul vostru va trebui să primească la intrare output-ul temei 1 şi să genereze [...], in cazul in care analiza semnatica nu a detectat erori, sau o lista de erori. | ||
- | |||
- | ===== Analiza Semantica ===== | ||
- | |||
- | În cadrul analizei semantice va trebui să colectați informații semantice (de ex. tipul expresiilor) și să verificați că programul reprezentat de AST-ul construit la tema 1 respectă restricțiile impuse de limbajul LCPL (a se consulta în acest sens manualul). Analiza va avea doua scopuri: | ||
- | |||
- | 1) Se va verifica corectitudinea definirii structurii de clase a programului. Câteva exemple de probleme care ar trebui semnalate la acest pas: | ||
- | * definirea unei clase de mai multe ori sau redefinirea uneia de bază - deja implementată în arhiva de pornire | ||
- | * moștenirea unui tip care nu poate avea succesori (String, Int) - deja implementată în arhiva de pornire | ||
- | * absența unei clase Main cu metoda main - deja implementată în arhiva de pornire | ||
- | * moșteniri recursive (A moștenește B care moștenește A) | ||
- | * variabilă sau clasă nedefinită | ||
- | * metodă inexistentă sau apel nevalid (de ex. ca nr. de parametri) | ||
- | * incompatibilitate de tipuri (între operanzi și operator, în argumentele unei funcții etc.) | ||
- | |||
- | 2) Dacă primul pas a fost trecut cu succes, veți completa cu informații suplimentare fiecare nodurile din AST. Exemple de informații ce sunt necesare pentru generarea de cod: | ||
- | * Tipul fiecărei expresii, variabile locale, metode, parametru formal sau atribut | ||
- | * Clasa de baza a fiecarei clase derivate. | ||
- | * Pentru fiecare simbol folosit, se va identifica variabila pe care il refera (locala, parametru formal, atribut) | ||
- | * Pentru fiecare apel de metoda, se vor identifica metoda care va fi apelata si clasa din care face parte. | ||
- | |||
- | |||
- | |||
- | |||
- | ===== Arhiva de pornire ===== | ||
- | * Biblioteca de runtime LCPL. Aceasta implementează clasele si funcțiile predefinite din LCPL. Pentru a putea folosi această bibliotecă va trebui sa înţelegeţi şi să respectaţi reprezentarea internă a obiectelor LCPL. | ||
- | * O **tema1** de referință | ||
- | * Un framework pentru analiza semantică și generarea de cod. | ||
- | |||
- | ===== Testare ===== | ||
- | - TBD | ||
- | |||
- | ===== Testare automata ===== | ||
- | |||
- | Testarea temei de casă va folosi o serie de teste ce vor fi disponibile pe vmchecker. Modul în care este distribuit punctajul pentru această temă este următorul: | ||
- | * **Testele publice (80p)** | ||
- | * Testele ''simple'' (40p) | ||
- | * Testele ''advanced'' (30p) | ||
- | * Testele ''complex'' (10p) | ||
- | * **Calitatea implementării (20p)** | ||
- | * Organizarea codului sursă | ||
- | * Comentariile din cod | ||
- | * Explicațiile din README - acestea trebuie să conţină o prezentare extinsă a modului de implementare a temei şi a problemelor întâmpinate pe parcurs. | ||
- |