Sunteți pe pagina 1din 8

Tema3 - POO

Tema3
De la POO
Salt la: Navigare, cutare Responsabili: Adriana DRAGHICI Mihnea MURARU Data publicarii: 15-12-2012, ora 17:00 Data ultimei modificari: Termenul de predare: 13-01-2013, ora 23:59 Obiective urmarite: dezvoltarea unei aplicatii practice, utilizand design pattern-ul Visitor

Cuprins
[ascunde] [ascunde] 1 Introducere 2 Scopul temei 3 Cerinte 3.1 Arborele de parsare 3.2 Analiza semantica 3.3 Evaluarea expresiilor 4 Precizari generale 5 Incarcarea temelor 6 Notare

[modific] Introducere
In general, compilatoarele, indiferent de limbajul pe care il trateaza, parcurg un fisier sursa (sau mai multe), efectueaza o serie de prelucrari asupra acestuia, pentru ca in final sa obtina un set de instructiuni simple ce vor fi executate de procesor (ADD, OR, XOR etc.). Enumeram cateva din prelucrarile cele mai importante realizate de compilator: transformarea codului sursa intr-o forma logica (arborele de parsare - parse tree) ce sa evidentieze structura acestuia. In acest sens, un cod sursa orientat obiect este transformat intr-un arbore cu o radacina generica, avand drept copii clasele programului. Copii unei clase sunt metodele si variabilele membru. Copiii unei metode sunt instructiunile s.a.m.d. pe baza parse tree-ul astfel construit, compilatorul poate sa: verifice daca programul contine erori (ex.: constructia int n = "sir"; este eronata) realizeze optimizari asupra programului (ex.: secventa c = 5; b = c + 0; va fi transformata de compilator in: b = 5;) genereze codul masina pentru rularea programului translateze acest cod intr-un alt limbaj (ex.: conversia de la cod Java la cod JavaScript)

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

Din punct de vedere conceptual, orice proces de compilare poate fi "spart" in doua etape fundamentale: obtinerea unui arbore de parsare realizarea unei parcurgeri specifice a acestuia, in functie de scopul urmarit

[modific] Scopul temei


Fie un limbaj de programare primitiv constituit din declaratii de variabile si expresii. Iata un prim exemplu de cod:
a b c d e = = = = = 5 a + 3 * 6 b + 1 true d * false

Limbajul contine doua tipuri de date:


integer boolean .

Operatorii pentru tipul integer sunt: + (adunare) * (inmultire). Operatorii pentru tipul boolean sunt: + (SAU logic) * (SI logic). Pe langa acestea, mai avem operatorul de atribuire, =. Drept operanzi putem avea: variabile: a, b, x etc. valori concrete (literali): intregi pozitivi: 2, 15 etc. booleeni: true , false . Limbajul NU include: paranteze declaratii de tip (de genul int a). Tipul unei variabile va fi dedus din tipul expresiei care i se atribuie. Exemplu: din instructiunea a = 2 + 3, rezulta ca a are tipul integer. Scopul temei consta in a construi un compilator al acestui limbaj. Numele fisierului de intrare va fi dat ca parametru in linia de comanda. Fiecare instructiune se gaseste pe cate o linie .

[modific] Cerinte
Tema poseda 3 parti, detaliate in cele ce urmeaza: arborele de parsare
file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

analiza semantica evaluarea expresiilor

[modific] Arborele de parsare


Un arbore de parsare pentru expresia b = a + 3 * 6 este:

Un arbore de parsare pentru programul:


a = 5 b = a + 3 * 6 c = b + 1 + 2

este

Pentru constructia arborelui de parsare puteti folosi alogritmul anexat (nu este obligatoriu). Definiti o ierarhie de clase care sa modeleze un arbore de parsare (Parse Tree) pentru acest limbaj. Ierarhia va avea drept varf clasa Node . Din ea veti deriva cate o clasa pentru fiecare tip de nod de arbore ( Variabila , Valoare, OperatorEgal, OperatorPlus etc. - numele nu sunt impuse). Clasa Node va retine (folosind colectiile Java) lista nodurilor copil . In clasa Node implementati o metoda de afisare a arborelui ( in adancime ); aceasta va afisa subarborele cu radacina in nodul curent. Apeland metoda pentru nodul radacina, se va afisa intregul arbore. Afisati arborele de parsare in fisierul <fisier_intrare>_pt . Exemplu : Daca fisierul de intrare are numele in.txt, fisierul de iesire va avea numele in.txt_pt . Exemplu de formatare a afisarii pentru programul anterior:

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

Folositi tab-uri ( \t) pentru indentare. In fata unui nod se va afisa un numar de tab-uri egal cu adancimea sa in arbore. Radacina are adancime 0. Precizare: Se considera ca programul este CORECT din punct de vedere sintactic; nu exista erori de sintaxa de genul:
a = 5 + b = + c 5

[modific] Analiza semantica


Folosind design pattern-ul Visitor (va puteti uita si aici), realizati o clasa vizitator , SemanticVisitor , pentru parcurgerea arborelui construit la cerinta 1 si verificarea corectitudinii semantice a expresiilor. Erorile semantice ce trebuie semnalate: E1
a = 3 5 = a (membrul stang nu este o variabila la linia 2 coloana 1)

E2
a = 3 c = a + b (b nedeclarata la linia 2 coloana 9)

E3
a = 3 b = false c = a + b (+ intre tipuri incompatibile la linia 3 coloana 7)

Erorile vor fi afisate, cate una pe linie, intr-un fisier intitulat <fisier_intrare>_sv . Exemplu: Daca fisierul de intrare are numele in.txt, fisierul de iesire va avea numele in.txt_sv . Atentie ! Pentru a inlesni testarea automata, mesajele de eroare vor fi exact cele mentionate in parantezele de mai sus! Fiecare mesaj va contine linia si coloana in care s-a identificat problema: Linia - reprezinta linia din fisierul de intrare (numerotarea liniilor incepe de la 1) Coloana - reprezinta pozitia din cadrul liniei a token-ului care a generat eroare (numerotarea

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

coloanelor incepe de la 1). Se vor lua in considerare si spatiile albe . Pentru simplitate, vom presupune ca toti token-ii sunt delimitati prin exact 1 spatiu (ca in cazurile de mai sus). De exemplu, pentru programul:
a a c b a e = = = = = = true 3 false a + c true + b 1 * c * a

output-ul este:
+ intre tipuri incompatibile la linia 4 coloana 7 b nedeclarata la linia 5 coloana 12 * intre tipuri incompatibile la linia 6 coloana 7

Din cele de mai sus, se observa: o variabila poate fi redefinita ( a = true , apoi a = 3, caz in care tipul sau se schimba de la boolean la integer ) daca nu se poate determina tipul unei expresii, cum este in cazul a + c, definitia esueaza . In exemplul nostru, b ramane nedefinit, fapt semnalat in expresia true + b, care il refera intereseaza doar erorile "independente" : pentru o expresie oarecare, nu mai semnalam eroare daca am semnalat deja una pentru o subexpresie a ei. In exemplul de mai sus, o data semnalat faptul ca b este nedefinit, nu mai semnalam ca nu putem realiza "adunarea" in expresia true + b in expresia e = 1 * c * a, avem o inmultire intre tipuri compatibile; in functie de constructia arborelui de parsare, putem identifica fie: * intre tipuri incompatibile la linia 6 coloana 7 (depistam eroarea la inmultirea lui 1 cu c) * intre tipuri incompatibile la linia 6 coloana 11 (depistam eroarea la inmultirea lui c cu a) Oricare dintre cele doua erori semnalate este corecta, insa nu amandoua simultan Pentru programul de mai jos:
a = 1 * z + 2 * z

output-ul este:
z nedeclarata la linia 1 coloana 9 z nedeclarata la linia 1 coloana 17

Ambele erori sunt afisate deoarece cele doua subexpresii sunt independente . Precizari: In vizitator va trebui sa retineti un dictionar in care sa asociati fiecarei variabile tipul acesteia ( integer sau boolean) (utilizati Map ). Definiti o interfata Visitor, cu cate o metoda visit pentru fiecare clasa derivata din clasa Node . SemanticVisitor va implementa aceasta interfata.

[modific] Evaluarea expresiilor


Implementati o a doua clasa vizitator, ResultVisitor , dupa modelul primeia, care evalueaza expresiile si afiseaza valorile variabilelor in ordine alfabetica in fisierul <fisier_intrare>_rv . De exemplu, daca fisierul

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

de intrare are numele in.txt, fisierul de iesire va avea numele in.txt_rv . Pentru programul:
a b c d b e = = = = = = 3 4 5 a + b * c b + 1 true * false

output-ul va fi:
a b c d e = = = = = 3 5 5 23 false

[modific] Precizari generale


clasa principala a aplicatiei, ce contine metoda main , se va numi Main clasa de baza (parinte), a ierarhiei de clase se va numi Node clasa Node va implementa o metoda display (care va respecta formatul de afisare descris mai sus) clasa vizitator de la punctul 2 se va numi SemanticVisitor clasa vizitator de la punctul 3 se va numi ResultVisitor ambele vor implementa interfata Visitor numele fisierului de intrare se va da in linia de comanda fiecare instructiune ocupa exact o linie termenii expresiei sunt separati prin spatii, pentru a usura parsarea (ex.: a = 2 + 3) (puteti folosi clasa Scanner pentru parsare) output-ul aplicatiei va consta din 3 fisiere: <fisier_intrare>_pt (parse tree-ul) <fisier_intrare>_sv (semantic visitor) <fisier_intrare>_rv (result visitor) parcurgerea de la punctul 3 nu se mai face daca s-au identificat erori semantice la punctul 2 RESPECTAREA REGULILOR DE IMPLEMENTARE ESTE OBLIGATORIE

[modific] Incarcarea temelor


Temele se vor incarca pe site sub forma unei arhive zip , avand numele in formatul GrupaSerie_NUME_Prenume.zip . Exemplu de nume: 321CB_IONESCU_Ion.zip. Arhiva va avea urmatoarea structura: folderul src - contine toate fisierele sursa; folderul doc - contine fisierele si folderele generate de utilitarul javadoc pentru fisierele sursa; fisierul text README - contine descrierea programului vostru.

[modific] Notare
Notarea se va efectua dupa urmatoarea schema:

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

90 puncte - acordate de testerul automat; 5 puncte - existenta javadocurilor; 5 puncte - calitatea codului, a comentariilor si a readme-ului - apreciate de asistent. Pentru notare se va folosi acest tester, toate testele fiind publice. Gasiti in fisierul readme.txt din arhiva detalii de intrebuintare. Daca testerul acorda 0 puncte, atunci acesta va fi punctajul pentru intreaga tema, indiferent de indeplinirea celorlalte cerinte! Temele care nu compileaza nu vor fi luate in considerare. Temele trimise inainte de aparitia testerului nu fac exceptie de la aceasta regula. Pentru fiecare zi de intarziere se vor scadea cate 5/100 puncte. Dupa 14 zile de la trecerea termenului nu se vor mai putea incarca arhive pe site. Adus de la "http://cursuri.cs.pub.ro/~poo/wiki/index.php/Tema3"
Vizualizri

Pagin Discuie Modific Istoric terge Mut Protejeaz Urmrete


Unelte personale

Mmuraru Discuii preferine Pagini urmrite Contribuii nchide sesiunea


Navigare

Pagina principal Portalul comunitii Discut la cafenea Schimbri recente Pagin aleatorie Ajutor
Caut

Du-te

Caut

Trusa de unelte

Ce se leag aici Modificri corelate Trimite fiier

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

Tema3 - POO

Pagini speciale Versiune de tiprit Legtur permanent Print as PDF

Ultima modificare 15:01, 15 decembrie 2012. Aceast pagin a fost vizitat de 5.022 ori. Coninutul este disponibil sub GNU Free Documentation License 1.2. Politica de confidenialitate Despre POO Termeni

file:///C|/Users/Mihnea/Desktop/Tema3%20-%20POO.htm[02.01.2013 18:02:57]

S-ar putea să vă placă și

  • Test 1 PDF
    Test 1 PDF
    Document1 pagină
    Test 1 PDF
    Irina Catrinescu
    Încă nu există evaluări
  • Aa - Examen - 2015
    Aa - Examen - 2015
    Document5 pagini
    Aa - Examen - 2015
    Irina Catrinescu
    Încă nu există evaluări
  • Test 2 2013 PDF
    Test 2 2013 PDF
    Document1 pagină
    Test 2 2013 PDF
    Irina Catrinescu
    Încă nu există evaluări
  • Examen 1 PDF
    Examen 1 PDF
    Document1 pagină
    Examen 1 PDF
    Irina Catrinescu
    Încă nu există evaluări
  • Model - E-Plan de Marketing
    Model - E-Plan de Marketing
    Document4 pagini
    Model - E-Plan de Marketing
    popescuiulia
    Încă nu există evaluări
  • Examen 1 PDF
    Examen 1 PDF
    Document1 pagină
    Examen 1 PDF
    Irina Catrinescu
    Încă nu există evaluări
  • Examen 1
    Examen 1
    Document1 pagină
    Examen 1
    Irina Catrinescu
    Încă nu există evaluări
  • Tort de Mere1
    Tort de Mere1
    Document1 pagină
    Tort de Mere1
    Irina Catrinescu
    Încă nu există evaluări
  • Scrisoare de Intentie
    Scrisoare de Intentie
    Document1 pagină
    Scrisoare de Intentie
    Irina Catrinescu
    Încă nu există evaluări
  • Etape de Lucru AutoCAD
    Etape de Lucru AutoCAD
    Document5 pagini
    Etape de Lucru AutoCAD
    vasea
    Încă nu există evaluări
  • Codul Ascii
    Codul Ascii
    Document1 pagină
    Codul Ascii
    Tatiana Dinu
    Încă nu există evaluări
  • ALGAD
    ALGAD
    Document203 pagini
    ALGAD
    posescu_ciprian
    Încă nu există evaluări
  • Codul Ascii
    Codul Ascii
    Document1 pagină
    Codul Ascii
    Tatiana Dinu
    Încă nu există evaluări
  • Codul Ascii
    Codul Ascii
    Document1 pagină
    Codul Ascii
    Tatiana Dinu
    Încă nu există evaluări
  • Schelet Si Muschi Cap Si Gat
    Schelet Si Muschi Cap Si Gat
    Document11 pagini
    Schelet Si Muschi Cap Si Gat
    Irina Catrinescu
    Încă nu există evaluări
  • Alexandru Lapusneanu - Caracterizare
    Alexandru Lapusneanu - Caracterizare
    Document2 pagini
    Alexandru Lapusneanu - Caracterizare
    Irina Catrinescu
    100% (1)
  • SECETA
    SECETA
    Document24 pagini
    SECETA
    Irina Catrinescu
    Încă nu există evaluări
  • Epson-Stylus-DX4000-Fişă Tehnică
    Epson-Stylus-DX4000-Fişă Tehnică
    Document2 pagini
    Epson-Stylus-DX4000-Fişă Tehnică
    Irina Catrinescu
    Încă nu există evaluări
  • Bros Cute Le
    Bros Cute Le
    Document19 pagini
    Bros Cute Le
    Irina Catrinescu
    Încă nu există evaluări
  • Bros Cute Le
    Bros Cute Le
    Document19 pagini
    Bros Cute Le
    Irina Catrinescu
    Încă nu există evaluări
  • Balta - Alba
    Balta - Alba
    Document2 pagini
    Balta - Alba
    Vucu Paul-Catalin
    Încă nu există evaluări
  • Gradele Comei
    Gradele Comei
    Document1 pagină
    Gradele Comei
    Irina Catrinescu
    Încă nu există evaluări
  • E F Fizica Mecanica2009
    E F Fizica Mecanica2009
    Document100 pagini
    E F Fizica Mecanica2009
    Andreea Radici
    75% (12)
  • 5.2.reactia de Fisiune
    5.2.reactia de Fisiune
    Document16 pagini
    5.2.reactia de Fisiune
    Irina Catrinescu
    Încă nu există evaluări
  • 5.2.reactia de Fisiune
    5.2.reactia de Fisiune
    Document16 pagini
    5.2.reactia de Fisiune
    Irina Catrinescu
    Încă nu există evaluări
  • 5.2.reactia de Fisiune
    5.2.reactia de Fisiune
    Document16 pagini
    5.2.reactia de Fisiune
    Irina Catrinescu
    Încă nu există evaluări
  • Brazilia
    Brazilia
    Document12 pagini
    Brazilia
    Irina Catrinescu
    Încă nu există evaluări
  • Balta - Alba
    Balta - Alba
    Document2 pagini
    Balta - Alba
    Vucu Paul-Catalin
    Încă nu există evaluări
  • Excel Referat
    Excel Referat
    Document6 pagini
    Excel Referat
    Irina Catrinescu
    100% (3)
  • De la Everand
    Încă nu există evaluări
  • De la Everand
    Încă nu există evaluări