Cititi aceste note cu manualul de compilatoare la indemana. Deschideti-l la pagina 8.
Ca de obicei blog-ul va contine comentarii la manual si alte explicatii, dar nu tine loc de curs COMPLET !
In esenta, un compilator este un translator pentru o multime potential infinita de programe, scrise intr-un limbaj, pentru a obtine un cod obiect. Definitia completa o gasiti la pagina 8.
De ce este nevoie de un instrument atat de sofisticat: Deoarece trebuie sa ai posibilitatea de a procesa un numar infinit de programe, toate scrise in acelasi limbaj, dar limbajul trebuie descris printr-un set FINIT de reguli. Altfel nu poti face un compilator finit.
Modul ales de a stapani infinitatea de programe posibile este cu ajutorul inductiei.
Dar sunt mai multe feluri de inductii:
Inductia cu o baza si o regula:
Baza: P(0) - adevarat
Pasul inductiv: P(n)-> P(n+1)
Este instrument pentru a demonsta doar pe axa numerelor naturale ca e adevarata o propozitie.
Inductia cu doua baze si un pas inductiv:
Baza 1: P(0) - adevarat
Baza 2: P(1) - adevarat
Pasul inductiv : P(n)-> P(n+2)
Inductia cu o baza si doua reguli:
Pe cadranul din planul N+ x N+ al numerelor de doua coordonate intregi pozitive, ca varfurile
unor patratele de pe un caiet cu patratele (imaginati-va coordonatele lor) putem avea:
Baza 1: P(0,0) - adevarat
Pasul inductiv : P(x,y)-> P(x+1,y)
Pasul inductiv : P(x,y)-> P(x,y+1)
Exercitiu: Desenati pe o foaie de caiet cu patratele, prin sageti, cum se propaga proprietatea pe plan.
Trimiteti scanarea paginii pe e-mail la profesor.
Exercitiu de gandire: Cum este legat un limbaj de programare structurata de ideea de inductie matematica cu mai multe baze si cu mai multe reguli ?
Exercitiu: La pagina 9 din manual gasiti un exercitiu de traducere, rezolvat. Scrieti functia recursiva T(x) care spune cum se traduce sirul de numere ale lui Peano in descrierea sumei de unitati sub forma de text...
Cititi de la pg 10 ..
Fazele unei compilari:
Analiza lexicala : Cu scopul recunoasteri si clasificarii atomilor lexicali, fie ei cuvinte cheie, numere, identificatori, operatori din doua litere, semne de comparatie si alte semne de punctuatie si de elemente ale sintaxei. Acestea vor fi un fel de "litere chinezesti" - adica litere cu semnificatie de cuvant, care vor intra, intr-o anumita ordine si intercalate cu neterminali, in alcatuirea sintaxei:
De exemplu if x>=0 then write x fi se desparte in urmatorii atomi lexicali:
if
x
>=
0
then
write
x
fi
Analiza sintactica: Recunoaste structurile sintactice generice prezente in text in forme concrete si creaza ca efect suplimentar arborele sintactic (sau direct arborele operatorial) sau ramuri din el (cand il parcurge). Da acel mesaj "syntax error".
Verifica sintaxa conform regulilor gramaticale ale acesteia
Analiza semantica: face diverse verificari semantice, in esenta prin verificarea daca elemente folosite in text, variabile , functii etc sunt folosite asa cum au fost declarate. Pentru aceasta tine si un dictionar de declaratii, un dictionar de denumiri numit tabela de simboluri. E normal sa faca aceasta deoarece pe de o parte compilatorul nu stie ce denumiri de variabile a inventat autorul programului si nici daca sunt folosite corect.
Mai multe, in carte la pg 11-12. Cititi pg 11-12.
Optimizatorul arborelui: daca exista, optimizeaza arborele sintactic sau arborele operatorial.
Generatorul de cod: Ghiciti ce face ?
Optimizatorul de cod: Codul generat din bucatele poate crea portiuni de cod absurde la limita imbinarii bucatilor, de exemplu poate alatura un ultim PUSH AF dintr-o secventa de cod cu un POP AF sau un POP BC din inceputul altei secvente.
E clar ca
PUSH AF
POP AF
e totuna cu un
NOP
sau cu nici o instructiune, si codul se scurteaza.
Iar
PUSH AF
POP BC
ar putea fi inlocuit cu o incarcare directa
LD BC, AF (daca limbajul de Asamblare permite) sau cu doua partiale
LD B,A
LD C,F
sa zicem.
Definitia interpretorului este la pg 12-13.
La pagina 13 gasiti limbajul Simple.
Este momentul sa scriem programe in Simple, aceste programe le veti folosi la testarea compilatorului.
Intrebare individuala pentru Sorin.P Care este cel mai simplu program Simple, conform regulii gramaticale care contine cuvantul program ? Inspiratie: Anexa 7.
Sorin va da raspunsul pe e-mail.
Salvati fisierul rezultat in folderul Lab1 cu numele p1.sim.
Intrebare individuala pentru O Alex: Cum arata conform paginii 13 un program Simple care are structura celui mai simplu program si o declaratie a unei variabile intregi pe nume X ?
Pg 13 si Anexa 7 !
Alex va da raspunsul pe e-mail.Salvati fisierul rezultat in folderul Lab1 cu numele p2.sim.
Intrebare individuala pt Cristiana:
O secventa de identificatori este scrisa conform acelei a treia reguli gramaticale, dar poate fi vida sau poate fi o alta secventa la care mai adaugam un identificator si o virgula.
Ca efect obtinem declaratii mai lungi .
Scrieti programul Simple care contine :Structura generala a unui program si
doua declaratii de variabile.
Salvati in dosarul Lab1 cu numele p3.sim
Intrebare individuala pentru Marius P.
Conform regulii 4 de la pagina 13 secventa de comenzi in limbajul Simple e formata dintr-o secventa de comenzi mai scurta care poate fi si vida si o alta comanda. Cum o comanda poate fi skip; cf. regulii a 5 -a adaugati la programul anterior, si doua comenzi skip.
Salvati programul in format .sim. Sub numele p4.sim
Raspundeti dupa pauza de la ora 13.
Intrebare individuala pt Alexandru A.
Intrebare individuala pt Alexandru A.
Conform ultimii reguli de la pagina 13 (regula cont. pe pg 14) o instructiune poate fi o atribuire formata din identificator := si o expresie.
Scrieti programul cu doua declaratii de variabile si doua atribuiri simple, de ex la dati val 10 si 20.
Scrieti programul cu doua declaratii de variabile si doua atribuiri complexe: Formulele vor avea toate operatiile aritmetice.
Salvati programele in folderul dvs Lab1 sub numele p4b.sim si p5.sim.
Intrebare individuala pt Alexandra S.
Limbajul Simple are o instructiune While (pg 14 sus). Scrieti un program care calculeaza suma numerelor dintr-un sir de numere terminat cu zero. O intrebare clasica de clasa incepatoare.
Salvati programul in folderul Lab1 cu numele P6.sim
Intrebare individuala pt. Daniel O
Limbajul Simple are un If si un While conform regulilotr de la pagina 14.
Scrieti in Simple micul program care face calculul sumei numerelor impare dintr-un sir terminat cu zero.
Intrebare suplimentara: Cum scrieti, intr-un limbaj care face calcule cu numere intregi, conditia ca un numar sa fie impar folosind doar cele patru operatii aritmetice ?
Salvati programul sub numele p7.sim in folderul Lab1.
Intrebare pentru B.Catalin
Scrieti programul Simple care primind un numar, afiseaza divizorii acestuia
de la 1 la numarul insusi.
Salvati programul sub numele p7b.sim
Intrebare pt I. Marius Dorin
Scrieti programul simple care calculeaza divizorul comun a doua numere prin scaderi repetate, unul din altul si invers.
Daca am obtinut 0, predentul scazator (sau descazutul) este divizorul comun.
Salvati programul sub numele p10.sim
Exercitii in continuare: Scrieti inca zece programe Simple cu grade diferite de complexitate sisalvati-le in folderul Lab1.
Veti avea nevoie de aceste programe pentru testarea compilatorului final. Fara ele si fara compilator nu participati la examen.
Pauza 20 minute. Intre timp voi incerca sa incarc video-urile ajutatoare pentru capitolul al doilea.
Nota : Participarea la laborator este obligatorie conform contractului incheiat, va rog sa recititi contractul.
Niciun comentariu:
Trimiteți un comentariu