Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:teme-draft:t2-draft-2015 [2015/11/24 15:16]
bogdan.nitulescu [Testare]
— (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) Obținerea informațiilor 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. 
- 
- 
-2) Verificarea 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.) 
- 
-În procesul de a obține informațiile din primul paragraf, puteți întâlni erori, cum sunt cele exemplificate in al doilea paragraf. Aceste erori trebuie raportate ca erori semantice. 
- 
-===== Arhiva de pornire ===== 
- 
-Arhiva conține o implementare parțială a analizei semantice pentru LCPL. Ceea ce trebuie să faceți este să identificați porțiunile lipsa (marcate cu un comentariu **TODO** in cod ) și să completați cu logica necesară conform indicațiilor de acolo. 
- 
-Porțiunile lipsă se găsesc în fișierele **src/​SemanticAnalysis.cpp** si **src/​TypeTable.cpp** . Puteți modifica sau adăuga și alte fișiere, dar nu este neapărat necesar. Dacă simțiți nevoia unui fișier #include suplimentar,​ puteți folosi **include/​SemanticAnalysisImpl.h** . 
- 
-Framework-ul conține: 
-  *   ​**include/​*.h** - structurile de date pentru AST 
-  *   ​**src/​SymbolTable.cpp** - implementarea unei tabele de simboli 
-  *   ​**src/​TypeTable.cpp** - implementarea unei liste de tipuri, și câteva funcții ajutătoare 
-  *   ​**src/​SemanticAnalysis** - implementarea analizei semantice folosind visitor pattern. Clasa conține o funcție visit pentru fiecare nod din AST. 
- 
- 
-===== Testare ===== 
-Pentru a putea face un build și a rula testele, puteți urma pașii următori: 
- 
- tar zxf lcpl-semant.tgz ​        # Extrageți conținutul arhivei 
- cd lcpl-semant 
- cmake .                         # Utilitarul CMake va crea Makefile-uri pentru build și teste 
- ​make ​                           # Build pentru teste și analiză sintactică 
- make run-hello ​                 # Rulează testul hello.lcpl 
- make run-all ​                   # Rulează toate testele 
- 
-<note important>//​Out of the box//, dacă rulați **make run-parent_loop** așa cum vine din arhiva de pornire, programul se blochează într-o buclă infinită. Este un bug care va trebui fixat de către voi, adăugând cod care verifică dacă ierarhia de clase este corectă!</​note>​ 
  
cpl/teme-draft/t2-draft-2015.1448370999.txt.gz · Last modified: 2015/11/24 15:16 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0