Differences

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

Link to this comparison view

cpl:teme:tema1 [2015/10/27 21:40]
raluca.grigoras [Change Log]
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.
  
-Implementarea operațiilor pe vectori va fi punctată doar dacă varianta de **100 de puncte** este implementată corect si complet. +  ​* declararea unui vector de siruri de caractere, inițializat cu null.
- +
-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 152: 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 184: 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 194: Line 187:
 </​code>​ </​code>​
  
 +==== 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.
  
  
Line 210: Line 215:
 La punctajele de mai sus se adaugă **25 puncte** dacă operațiile pe vectori sunt implementate complet și parserul trece toate testele. La punctajele de mai sus se adaugă **25 puncte** dacă operațiile pe vectori sunt implementate complet și parserul trece toate testele.
  
 +
 +===== Change Log =====
  
 ===== FAQ ===== ===== FAQ =====
Line 216: 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 230: 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.1445974817.txt.gz · Last modified: 2015/10/27 21:40 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