Differences

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

Link to this comparison view

cpl:teme:tema1 [2015/10/27 21:32]
raluca.grigoras [Testarea şi notarea]
cpl:teme:tema1 [2017/11/28 05:51] (current)
bogdan.nitulescu [Informaţii organizatorice]
Line 8: Line 8:
 ===== Informaţii organizatorice ===== ===== Informaţii organizatorice =====
  
-  * **Deadline**:​ Termenul limită până când se pot trimite temele fără depunctări de întârziere este **marți10 noiembrie 2015, ora 23:59**. Pentru mai multe detalii, consultaţi [[:​cpl:​teme:​general|regulamentul]] aferent temelor de casă.+  * **Deadline**:​ Termenul limită până când se pot trimite temele fără depunctări de întârziere este **luni15 ianuarie 2018, ora 23:59**. Pentru mai multe detalii, consultaţi [[:​cpl:​teme:​general|regulamentul]] aferent temelor de casă.
   * **Colaborare**:​ Tema va fi rezolvată **individual**.   * **Colaborare**:​ Tema va fi rezolvată **individual**.
-  * **Punctare**: ​În funcţie de varianta de implementare aleasă se vor acorda diverse punctaje:+  * **Punctare**: ​125p, din care
     * 100p pentru implementarea completă şi corectă a analizei sintactice     * 100p pentru implementarea completă şi corectă a analizei sintactice
-    * 125p pentru implementarea operațiilor pe vectori în limbajul LCPL+    * 25p pentru implementarea operațiilor pe vectori în limbajul LCPL
  
 ===== Enunţ ===== ===== Enunţ =====
Line 18: Line 18:
 Va trebui să realizaţi în limbajul C++, folosind Flex și Bison, porţiunea responsabilă cu analiza lexicală şi sintactică a codului sursă pentru un compilator al limbajului LCPL. Programul vostru va trebui să primească la intrare codul sursă LCPL şi să furnizeze la ieşire informaţii (un AST) pentru analiza semantică. Va trebui să realizaţi în limbajul C++, folosind Flex și Bison, porţiunea responsabilă cu analiza lexicală şi sintactică a codului sursă pentru un compilator al limbajului LCPL. Programul vostru va trebui să primească la intrare codul sursă LCPL şi să furnizeze la ieşire informaţii (un AST) pentru analiza semantică.
  
-Documentaţia principală în cadrul acestei teme va fi {{:​cpl:​teme:​lcpl-manual.pdf | manualul limbajului LCPL}}. Rezultatul programului realizat de voi va fi folosit de restul compilatorului în temele următoare.+Documentaţia principală în cadrul acestei teme va fi {{:​cpl:​teme:​lcpl_manual_2.0.pdf | manualul limbajului LCPL}}. Rezultatul programului realizat de voi va fi folosit de restul compilatorului în temele următoare.
  
 ==== Analiza lexicală ==== ==== Analiza lexicală ====
Line 96: Line 96:
 } }
 </​code>​ </​code>​
 +
  
 ===== Prezentarea arhivei ===== ===== Prezentarea arhivei =====
  
-Pentru a rezolva această temă va trebui să porniţi de la **{{:​cpl:​teme:​tema1-arhiva.zip|această arhivă}}**.+Pentru a rezolva această temă va trebui să porniţi de la **{{:​cpl:​teme:​arhiva-tema1.zip|această arhivă}}**.
  
 Structura arhivei este următoarea:​ Structura arhivei este următoarea:​
Line 107: Line 108:
   * ''​lcpl-AST/​src''​ - implementarea funcționalității de serializare în format JSON   * ''​lcpl-AST/​src''​ - implementarea funcționalității de serializare în format JSON
   * ''​test''​ - trei programe simple scrise in LCPL   * ''​test''​ - trei programe simple scrise in LCPL
-  * ''​Makefile''​ - Secvența de comenzi necesară pentru a compila biblioteca ce oferă arborele sintactic și parserul+  * ''​CMakeLists.txt''​ - Folosită pentru generarea Makefile-urilor continand secvența de comenzi necesară pentru a compila biblioteca ce oferă arborele sintactic și parserul
   * ''​README''​ - Descrieți implementarea voastră în acest fișier.   * ''​README''​ - Descrieți implementarea voastră în acest fișier.
  
Line 121: Line 122:
  
 ===== Vectori ===== ===== Vectori =====
 +Extindeți limbajul LCPL prin adăugarea unui tip de date vector. Acest tip de date va fi folosit conform sintaxei din exemplele următoare.
  
-Acest bonus va fi punctat doar dacă ați implementat complet varianta de **100 puncte**. +  ​* declararea unui vector de siruri de caractere, inițializat cu null.
-Puteți obține un punctaj bonus de **25 puncte** dacă implementați o extensie pentru limbajul LCPL care să permită folosirea vectorilor. +
- +
-Implementarea **NU** trebuie să introducă noduri noi în AST, ci trebuie să funcţioneze cu AST-ul existent. +
- +
-<note tip> +
-Cum limbajul LCPL nu suportă implicit operații pe obiecte de tip vector, va trebui să vă definiți o clasă ajutătoare pentru a simula aceste funcționalități;​ puteţi apoi ca în timpul parsării să adugaţi codul acestei clase la fişierul LCPL primit la intrare. Clasa trebuie implementată folosind doar facilităţile oferite de limbajul LCPL de bază.  +
- +
-Sugerăm ca acest cod LCPL suplimentar scris de voi să fie plasat în arhivă într-un fișier numit **''​src/​Vector.lcpl''​**.</​note>​ +
- +
-==== Sintaxă ==== +
- +
-Sintaxa obiectelor de tip vector ar trebui să fie compatibilă cu exemplele următoare:​ +
- +
-  ​* declararea unui vector de siruri de caractere+
 <code java> <code java>
  ​String[] myArray;  ​String[] myArray;
 </​code>​ </​code>​
-  * instanțierea unui obiect vector:+  ​* funcție ce are ca parametru un vector și întoarce un vector. 
 +<code java> 
 + init sort String[] anArray -> String[]; 
 +</​code>​ 
 +  ​* instanțierea unui nou obiect ​de tip vector:
 <code java> <code java>
  ​myArray = new String[8];  ​myArray = new String[8];
Line 153: Line 145:
 </​code>​ </​code>​
  
-Nu este necesar să suportaţarray-uri ​de tip Int, însă va trebui să introduceţîn AST noduri de tip CAST necesare pentru compatibilitatea tipurilor.+Nu este necesar să implementațvectori ​de tip Int, însă va trebui să putețavea vectori din orice tip derivat din Object, nu doar String.
  
 ==== Exemplu de utilizare ==== ==== Exemplu de utilizare ====
Line 185: Line 177:
  class Main inherits IO  class Main inherits IO
  var  var
-     Stack stack = [(new Stack).init 8];+     StringStack ​stack = [(new StringStack).init 8];
  end;  end;
      main :       main : 
Line 195: Line 187:
 </​code>​ </​code>​
  
-===== Change Log =====+==== Implementare ​==== 
 + 
 +In LCPL, vectorii nu fac parte din limbajul de bază, ci sunt doar o extensie de sintaxă (//Syntax Sugar//). 
 + 
 +Implementarea **NU** trebuie să introducă noi tipuri de noduri în AST, ci trebuie să se folosească doar de clasele și nodurile existente. Practic va trebui să simulați vectorii folosind o altă structură de date. 
 + 
 +<note tip> 
 +Cum limbajul LCPL nu suportă implicit operații pe obiecte de tip vector, va trebui să vă definiți o clasă ajutătoare pentru a simula aceste funcționalități;​ puteţi apoi ca în timpul parsării să adugaţi codul acestei clase la fişierul LCPL primit la intrare. Clasa trebuie implementată folosind doar facilităţile oferite de limbajul LCPL de bază.  
 + 
 +Sugerăm ca acest cod LCPL suplimentar scris de voi să fie plasat în arhivă într-un fișier numit **''​src/​Vector.lcpl''​**.</​note>​ 
 + 
 +Nu uitați să introduceţi în AST noduri de tip CAST necesare pentru compatibilitatea tipurilor. 
  
 ===== Testarea şi notarea ===== ===== Testarea şi notarea =====
Line 201: Line 205:
 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: 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 publice (80p)**
 +    * Testele ''​simple''​ (40p)
 +    * Testele ''​advanced''​ (30p)
 +    * Testele ''​complex''​ (10p) 
   * **Calitatea implementării (20p)**   * **Calitatea implementării (20p)**
     * Organizarea codului sursă     * Organizarea codului sursă
Line 206: Line 213:
     * 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. ​     * 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. ​
  
-La punctajele de mai sus se adaugă **25 puncte** dacă acesta este implementat ​complet ​şi trece toate testele.+La punctajele de mai sus se adaugă **25 puncte** dacă operațiile pe vectori sunt implementate ​complet ​șparserul ​trece toate testele.
  
 +
 +===== Change Log =====
  
 ===== FAQ ===== ===== FAQ =====
Line 214: Line 223:
  
 **A:** De la clasa "​Program"​. Conține o listă de "​Class",​ care conține o listă de "​Feature",​ ce pot fi "​Attribute"​ sau "​Method"​ ... și așa mai departe. **A:** De la clasa "​Program"​. Conține o listă de "​Class",​ care conține o listă de "​Feature",​ ce pot fi "​Attribute"​ sau "​Method"​ ... și așa mai departe.
 +
 +Pentru a înțelege mai bine ierarhia nodurilor din arbore și care sunt structurile de date corespunzătoare,​ puteți încărca fișierele *.ast.ref din arhiva de teste într-un viewer de JSON.
  
 **Q:** Cum tratăm erorile sintactice? **Q:** Cum tratăm erorile sintactice?
Line 228: Line 239:
 ===== Download ===== ===== Download =====
  
-  * **{{:​cpl:​teme:​lcpl-manual.pdf|Manualul}}** limbajului LCPL. +  * **{{:​cpl:​teme:​lcpl_manual_2.0.pdf|Manualul}}** limbajului LCPL. 
-  * **{{:​cpl:​teme:​tema1-arhiva.zip|Arhiva}}** de pornire pentru rezolvarea temei.+  * **{{:​cpl:​teme:​arhiva-tema1.zip|Arhiva}}** de pornire pentru rezolvarea temei.
   * **{{:​cpl:​teme:​tema1-teste.zip|Set de teste}}** conținând fișiere LCPL și AST-ul corespunzător. ​   * **{{:​cpl:​teme:​tema1-teste.zip|Set de teste}}** conținând fișiere LCPL și AST-ul corespunzător. ​
 +  ​
cpl/teme/tema1.1445974371.txt.gz · Last modified: 2015/10/27 21:32 by raluca.grigoras
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