This shows you the differences between two versions of the page.
cpl:teme-draft:t2-draft-2015 [2015/11/24 13:57] bogdan.nitulescu [Testare automata] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==T2 Draft== | ||
- | |||
- | În cadrul acestei teme veti implementa atât analiza semnatică 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 ===== | ||
- | * Un framework pentru analiza semantică. | ||
- | |||
- | ===== Testare ===== | ||
- | - TBD | ||
- | |||