Compilatoare



Yüklə 215,83 Kb.
səhifə1/10
tarix06.08.2018
ölçüsü215,83 Kb.
#67459
  1   2   3   4   5   6   7   8   9   10


Facultatea de electronica, Telecomunicatii si tehnologia informatiei

Compilatoare

Tema de casa Sisteme de Operare











Prof. coordonator:Doctor Inginer Stefan Stancescu

Agape Alexandra

Altiparmac Andreea

Grigoras Andra

433A



CUPRINS:

Agape Alexandra 433A:


CUPRINS: 2

Agape Alexandra 433A: 2

1.Introducere și istorie 6

1.1 Tipuri de compilatoare 7

1.2Design-ul compilatorului 8

1.2Procesul de compilare 8

1.4Structură generală 11

15


2.Descrierea BNF (Backus-Naur Form) a gramaticii unui limbaj 15

Exemplu 1 16

Exemplu 2 – definirea unei cifre 16

Exemplu 3 – definirea unui numar intreg 16

2.1Descrierea EBNF (Extended BNF) 16

3.Analiza lexicală 19

3.1 Token 19

3.2 Gramatica lexicală 20

3.3 Scanner-ul 21

3.4 Evaluator-ul 21

3.5 Generatorul de lexer 22

4. Analiza sintactica 23

4.1 Parser 23

4.2 Tipuri de parser 25

5.Arborele sintactic 26

5.1 Aplicarea în compilatoare 26

5.2 Proiectarea unui arbore sintactic 27

5.3 LL parser 29

Exemplu 30

5.4 LR parser 31

Exemplu: A*2 + 1 31

Pasul 31


Stiva 31

Unparsed 31

Shift/Reduce 31

0 31


goala 31

A*2+1 31


shift 31

1 31


id 31

*2+1 31


Value id 31

2 31


Value 31

*2+1 31


Products Value 31

3 31


Products 31

*2+1 31


shift 31

4 31


Products* 31

2+1 31


shift 31

5 31


Products*int 31

+1 31


Value int 31

6 31


Products*Value 31

+1 31


Products Products*Value 31

7 31


Products 31

+1 31


SumsProducts 31

8 31


Sums 31

+1 31


shift 31

9 31


Sums+ 31

1 31


shift 31

10 31


Sums+ int 31

eof 31


Valueint 31

11 31


Sums+ Value 31

eof 31


ProductsValue 31

12 31


Sum+Products 31

eof 31


SumsSums+Products 31

13 31


Sums 31

eof 31


done 31

6.Generalitati 34

7.Introducere Lex 34

7.1Sursa Lex 36

7.2Expresii regulate 37

Exemple de expresii regulate: 37

7.4Actiuni Lex 38

7.5Definitii sursa Lex 39

Exemplu de program in Lex 40

8.Introducere Yacc 41

8.1Specificatii Yacc 42

8.2Actiuni Yacc 43

8.3Analiza lexicala 44

Exemplu Yacc 44

Bibliografie 47


AGAPE ALEXANDRA

1.Introducere și istorie


Un compilator este un program (sau un set de programe) care transformă codul sursă scris într-un limbaj de programare (limbaj sursă) într-un alt limbaj (limbaj țintă, care au adesea un format binar cunoscut sub numele de codul obiect).


Obiectivul programului

Compilator

Programul sursă


Mesaje de eroare

Limbajul sursă este întotdeauna un limbaj de nivel superior, în comparație cu codul mașină, limbajul de asamblare fiind cel mai puțin compatibil limbaj(asamblorul fiind un caz special de compilator care traduce limbajul de asamblare în codul mașină). Limbajele de nivel superior sunt cele mai complexe, nu numai pentru că acestea cresc nivelul de abstractizare între codul sursă și codul mașină rezultat, ci pentru că creșterea complexității este necesară pentru a formaliza aceste structure abstracte.

Limbajul țintă este în mod normal un limbaj de nivel scăzut (cum ar fi limbajul de asamblare), scris cu abrevieri oarecum criptice pentru instrucțiunile mașină, în acest caz rulând, de asemenea, un limbaj de asamblare pentru a genera codul mașină final. Dar unele compilatoare pot genera direct codul mașină pentru un computer real sau virtual, de exemplu, byte-code pentru Java Virtual Machine.

Cele mai multe compilatoare traduc codul sursă într-un limbaj de nivel înalt față de codul obiect sau limbajul mașină, care pot fi executate direct de către un calculator sau o mașină virtual. Cu toate acestea, traducerea de la un limbaj de nivel scăzut la un nivel înalt este, de asemenea, posibil; acest lucru este, în mod normal, cunoscut că un decompilator în cazul în care se reconstruiește un program de limbaj de nivel înalt, care ar fi generat programul de limbaj de nivel scăzut. Există, de asemenea, compilatoare care traduc de la un limbaj de nivel înalt la altul (compilatoare cross), sau, uneori, la un limbaj intermediary care are încă nevoie de o prelucrare ulterioară; acestea sunt cunsocute sub numele de cascaders.

Compilatoarele de ieșire, așa numitele obiecte care conțin practice codul mașină cu informații despre numele și amplasarea de pucte de intrare și apeluri externe (pentru funcții care nu sunt cuprinse în obiect). Un set de fișiere obiect, care nu a fost nevoie să aparțină aceluiași compilator, cu condiția că compilatoarele folosite să aibă un format de ieșire comun, poți fi legate împreună pentru a creă executabilul final, care poate fi rulat direct de către un utilizator.

Mai multe compilatoare experimentale au fost dezvoltate în anii 1950, dar echipa FORTRAN condusă de John Backus de la IBM a fost cunoscută că fiind cea care a introdus primul compilator complet în 1957. COBOL a fost un limbaj care a fost compilat pe mai multe arhitecturi, în 1960.

Ideea de compilare a prins repede, iar cele mai multe dintre principiile de design de compilare au fost dezvoltate în anii 1960.

Un compilator este el însuși un program scris într-un limbaj de implemetare. Vechile compilatoare au fost scrise în limbaje de asamblare. În timpul anilor 1990, un număr mare de compilatoare și instrumente de dezvoltare ale compilatoarelor au fost dezvoltate pentru toate tipurile de limbaje, făcând parte atât din proiectul GNU, cât și din alte inițiative open-source.


Yüklə 215,83 Kb.

Dostları ilə paylaş:
  1   2   3   4   5   6   7   8   9   10




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin