miercuri, 13 mai 2020

LFA si Compilatoare Recapitulare

Buna ziua,

Este practic ultima intalnire cu fiecare semigrupa de laborator de compilatoare.

Voi face doar o recapitulare, marcand principalele idei pe care le-am intalnit
in aceste ore.

REC. DIN PARTEA DE CONSTRUCTIE A COMPILATOARELOR

Revedeti va rog urmatoarele elemente, asigurati-va ca le-ati inteles si le-ati studiat.

Cap 1: Compilatorul
- Ideea de translator de limbaje, de compilator  [ pg8]
- Nevoia de a folosi o definitie inductiva, pentru  procesul de traducere [pg9]
- Notiunea de sintaxa a unui limbaj - se leaga de gramatici
- Definitia compilatorului [pg10]
- Componentele compilatorului si rolul acestora [pg 10-11-12]
- Notiunea de interpretor [pg 12]
- Limbajul Simple [pg 14-15-16] cu instructiunile si declaratiile lui

Cap 2: Parserul
- Notiunea de analizor sintactic = parser (din eng. parse=a parcurge) [pg 17]
- Cele 3 sectiuni ale fisierului pentru Yacc/Bison
- %start, %token, %left, %right - semnificatiile lor  [pg 18]
- Relatia intre %start si gramatica limbajului
- Sintaxa limbajului Simple in formatul Bison-ului
- Functii importante: yyparse() , yyerror() si rolul lor.
- Forma functiei main() la un compilator [pg 20]
- Cum arata fisierul pentru Yacc/Bison [pg24]
- Intelegeti ce alte fisiere genereaza Bison/Yacc din acest fisier

Cap 3. Scanerul
- Ce face un analizor lexical, adica un scanner [pg 25]
- Cele trei sectiuni ale fisierului pentru Flex/Lex [pg 25-26]
- Macrouri Lex/Flex cu expresii regulare: Ex. DIGIT, ID [pg 26 - 27]
- Sectiunea cu sabloane si acolade cu instructiuni de executat
- Cum comunica Flex/Lex Bisonului ce atom a gasit ?
- Scrierea expresiilor regulare pentru Lex/Flex [pg 28]
- procesarea fisierelor Lex [pg 29]
- Constructia compilatorului, [pg 30] si anexa 2.
- Exemplu de fisier Lex/Flex [pg 31-32]

Cap 4. Contextul
-De ce are nevoie un compilator de o tabela de simboluri ? [pg 33]
-Cea mai simpla tabela de simboluri posibila [pg 34]
-Functii pentru a accesa aceasta tabela, functii care le apeleaza pe acestea [pg 34-35]
- Cum arata o implementare [pg 36-37]
- Modificari ale parserului si scanerului ca sa manipuleze corect simbolurile din tabela (aka. denumirile variabilelor,etc) [pg 38-42]
- Implementarea [pg 43-46] pina la Cap 5.

Cap 5. Optimizarea
- Optimizari posibile
- Daca le-ar face programatorii
- si daca le face compilatorul.
- Transformari de arbori, cautati va rog fisele pozate si trimise pe e-mail.

Cap 6. Masina virtuala [aprox pg 50->60]
- Rolul unei masini virtuale, in acest caz
- Masina virtuala cu stiva [pg 52]
- Registrii procesorului
- Instructiunile [pg 53-54-55]
- Functionarea, initializarea si bucla fetch-execute (adu si executa)
-  Implementarea

Cap 7. Generarea codului
- Traducerea diferitelor feluri de instructiuni
- Traducerea expreiilor
- Functii  necesare generatorului de cod [pg 64]
- Modificari ale tabelei de simboluri ca sa contina adresele variabilelor
- Modificari ale parserului ca sa genereze codul
- Exemple de cod generat pentru diferite programe (pe blog)
- Modificarile scannerului ca sa transmita si constantele [pg 72/sau 74 - depinde de editie] Functia pentru afisarea codului.

Va rog cititi, informativ, si Cap 8,9 si 10.

Sfarsit.
Recap la LFA va fi luni.

Niciun comentariu:

Trimiteți un comentariu