This is an old revision of the document!


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 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

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.
cpl/teme-draft/t2-draft-2015.1448357274.txt.gz · Last modified: 2015/11/24 11:27 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