This shows you the differences between two versions of the page.
|
cpl:teme:tema1 [2015/10/27 21:39] 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ți, 10 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 **luni, 15 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ţi array-uri de tip Int, însă va trebui să introduceţi în AST noduri de tip CAST necesare pentru compatibilitatea tipurilor. | + | Nu este necesar să implementați vectori de tip Int, însă va trebui să puteți 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> | ||
| - | ===== 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 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. | ||
| + | | ||