Compilatoare

Curs
7/10 (1 vot)
Domeniu: Calculatoare
Conține 10 fișiere: doc, pdf
Pagini : 319 în total
Cuvinte : 98904
Mărime: 5.09MB (arhivat)
Puncte necesare: 0
Profesor îndrumător / Prezentat Profesorului: Zafiu Adrian

Extras din curs

Proiectarea compilatoarelor

Capitolul 1

Analiza lexicala

§ 1.1. GENERALITATI

Obiectivele analizei lexicale

Ca prima faza a procesului de translatare, analiza lexicala transform programul sursa vazut ca un

sir de caractere intr-un sir de simboluri numite atomi lexicali sau particule lexicale (in elng.: tokens).

Un atom lexical poate fi privit ca un reprezentant al unei clase de siruri de caractere cu reguli de

formare precise. In majoritatea limbajelor de programare, printre alte clase, vom gasi:

- clasa identificatorilor;

- clasa constantelor intregi;

- clasa constantelor fractionare (reale);

- clasa operatorilor, etc.

Clasele sunt, pentru o anumita implementare, multimi finite. Totusi, daca in clasa operatorilor intra de

obicei putin operatori (10-20), in clasa identificatorilor sau a constantleor vom gasi un numar relativ

mare de elemente, de cele mai multe ori limitarea aparand in urma implementarii si nu datorita

definitiei limbajului.

Deci sarcina analizorului lexical (in engl.: scanner) este sa detecteze in sirul de caractere ale

programului sursa subsiruri ce resprecta regulile de formare ale atomilor lexicali, sa clasifice aceste

subsiruri si sa le traduca in atomi lexicali, adica in informatii codificate ce vor pastra esentialul: clasa

fiecarui subsir si eventual, modul de regasire al subsirului. De exemplu, in cazul unui sir clasificat ca

identificator, atomul lexical va contine un cod numeric, sa zicem 1, respectand clasa si un indicator

spre zona in care se gaseste memorat sirul de caractere (fig. III.1.a). In mod obisnuit insa, indicatia

este mai prelucrata pentru a servi si altor scopuri. Astfel, pentru fiecare identificator depistat ne

intereseaza daca el apare pentru prima data in program sau ce reprezinta el in general, atributele sale.

De aceea, compilatorul mentine o zona rezervata pentru tabela de simboluri, in esenta, un

„dictionar” al tuturor identificatorilor si constantelor din program. In aceasta tabela trebuie cautat

identificatorul depistat in sirul de la intrare, iar in loc de indicator spre sir, in atomul lexical se

plaseaza un indicator spre intarea din tabela de simboluri corespunzatoare identificatorului (fig.

III.1.1.b).

De ce analiza lexicala?

Rolul analizei lexicale este foarte asemnator cu cel al analizei sintactice: detectare, clasificare,

traducere. Este normal sa ne intrebam din ce ratiuni structura clasica a compilatorului separa net cele

doau faze? Argumentele pun mai bine in evidenta obiectivele specifice analizei lexicale[Gr 71].

a) Separarea conduce la o proiectare mai simpla a fiecarei parti(principiul proiectarii modulare).

b) Prelucrarea sirului de caractere ale programului sursa necesita: preluarea inregistrare cu

inregistrare a textului de pe suportul extern accesul la fiecare caracter, comparatii numeroase cu seturi

cunoscute de caractere in vederea clasificarii, cautarii in tabele etc. De aceea, aceasta prelucrare

consuma, de regula, mult timp in raport cu prelucrarile altor faze, operatiile in sine fiind de nivel

coborat: citire, acces la bit, comparatii de caractere etc. Pentru a avea o analiza lexicala mai eficienta,

se va prefera deci scrierea in limbaj de asamblare a analizorului lexical spre deosebire de fazele

urmatoare pentru care programarea se face deobicei in limbaj de nivel inalt.

c) Sintaxa atomilor lexicali este mai simpla, ea poate fi exprimata printr-o gramatica regulata ceea

ce simplifica mult procesu de analiza. In cadrul acestui proces se va simula in esenta un automat finit

- 2 -

si un un atomat „push-down” cum se intampla in cazul analizei sintactice. Vor fi deci necesare tehnici

mai simple de proiectare si programare.

d) In urma prelucrarii efectuate de analizorul lexical, textul este „curatat” din mai multe puncte de

vedere. Intai, numarul atomilor lexicali este, de regula, mult mai mic decat numarul caracterelor

textului programului. Apoi, se elimina portiunile inutile: comentarii, blancuri etc. In fine, analizorul

lexical preia analiza anumitor constructii dificil de exprimat in sintaxa limbajului, deci dificil de

analizat prin metodele sistematice cunoscute fara a face anumite derogari de la aceste metode. Vom

prefera intotdeauna sa rezolvam aceste probleme la analiza lexicala decat sa perturbam procesul mai

complex al analizei sintactice.

De exemplu, in instructiunea FORTRAN:

DO1I=5,M

de abea la intalnirea caracterului ”,” putem decide ca suntem intr-o instructiune de ciclare si nu intruna

de atribuire. O asemenea decizie poate si luata si la analiza sintactica, dar cu pretul unor

complicatii: se revine asupra identificatorului DO1I pentru a-l inlocui cu trei atomi lexicali

corespunzatori lui DO,1 si I. In schimb, pentru analizorul lexical rezolvarea este mai usoara: la

depistarea sirului DO se „cauta” caracterul ”,” in anumite conditii (dupa intalnirea caracterului „=”, sa

nu fie intre paranteze etc). Daca il gaseste, decide ca DO este cuvant cheie. Daca nu gaseste ”,” ,

decide ca DO1I este identificator. Decizia asupra tipului de instructiune este luata insa de analizorul

sintactic. (Din fericire, asemenea sittuatii se intalnesc tot mai rar in limbajele de programare mai noi

decat FORTRAN).

e) Separarea creste portabilitatea compilatorului, de fapt a algoritmului de compilare. De multe

ori, doua versiuni ale aceluiasi limbaj de programare difera prin reprezentarile elementelor de baza, ale

atomilor lexicali. De exemplu: $BEGIN in loc de „BEGIN” sau LOGAND in loc de & etc. Cele doua

implementari vor diferi prin analizoarele lor lexicale in timp ce analizorul sintactic va ramane acelasi.

Decizii in proiectarea analizoarelor lexicale

Proiectarea unui analizor lexical este strans legata de structura intregului compilator, de

restrictiile impuse proiectarii acestuia. In functie de aceste considerente, vom intalni diferite decizii in

proiectarea analizorului lexical.

Referitor l arelatia cu analizorul sintactic deosebim:

a) Analizor lexical independent de anlizorul sintactic. In acest caz analizorul lexical reprezinta un

pas al compilatorului, legatura cu fazele urmatoare fiind realizata pintr-un fisier sau zona de memorie

ce contin datele prelucrate.

b) Analizorul lexical comandat de analizorul sintactic. El apare ca o rutina a analizorului sintactic

pe care acesta o apeleleaza ori de cate ori are nevoi de un nou simbol. Este solutia cel mai frecvent

utilizata.

Preview document

Compilatoare - Pagina 1
Compilatoare - Pagina 2
Compilatoare - Pagina 3
Compilatoare - Pagina 4
Compilatoare - Pagina 5
Compilatoare - Pagina 6
Compilatoare - Pagina 7
Compilatoare - Pagina 8
Compilatoare - Pagina 9
Compilatoare - Pagina 10
Compilatoare - Pagina 11
Compilatoare - Pagina 12
Compilatoare - Pagina 13
Compilatoare - Pagina 14
Compilatoare - Pagina 15
Compilatoare - Pagina 16
Compilatoare - Pagina 17
Compilatoare - Pagina 18
Compilatoare - Pagina 19
Compilatoare - Pagina 20
Compilatoare - Pagina 21
Compilatoare - Pagina 22
Compilatoare - Pagina 23
Compilatoare - Pagina 24
Compilatoare - Pagina 25
Compilatoare - Pagina 26
Compilatoare - Pagina 27
Compilatoare - Pagina 28
Compilatoare - Pagina 29
Compilatoare - Pagina 30
Compilatoare - Pagina 31
Compilatoare - Pagina 32
Compilatoare - Pagina 33
Compilatoare - Pagina 34
Compilatoare - Pagina 35
Compilatoare - Pagina 36
Compilatoare - Pagina 37
Compilatoare - Pagina 38
Compilatoare - Pagina 39
Compilatoare - Pagina 40
Compilatoare - Pagina 41
Compilatoare - Pagina 42
Compilatoare - Pagina 43
Compilatoare - Pagina 44
Compilatoare - Pagina 45
Compilatoare - Pagina 46
Compilatoare - Pagina 47
Compilatoare - Pagina 48
Compilatoare - Pagina 49
Compilatoare - Pagina 50
Compilatoare - Pagina 51
Compilatoare - Pagina 52
Compilatoare - Pagina 53
Compilatoare - Pagina 54
Compilatoare - Pagina 55
Compilatoare - Pagina 56
Compilatoare - Pagina 57
Compilatoare - Pagina 58
Compilatoare - Pagina 59
Compilatoare - Pagina 60
Compilatoare - Pagina 61
Compilatoare - Pagina 62
Compilatoare - Pagina 63
Compilatoare - Pagina 64
Compilatoare - Pagina 65
Compilatoare - Pagina 66
Compilatoare - Pagina 67
Compilatoare - Pagina 68
Compilatoare - Pagina 69
Compilatoare - Pagina 70
Compilatoare - Pagina 71
Compilatoare - Pagina 72
Compilatoare - Pagina 73
Compilatoare - Pagina 74
Compilatoare - Pagina 75
Compilatoare - Pagina 76
Compilatoare - Pagina 77
Compilatoare - Pagina 78
Compilatoare - Pagina 79
Compilatoare - Pagina 80
Compilatoare - Pagina 81
Compilatoare - Pagina 82
Compilatoare - Pagina 83
Compilatoare - Pagina 84
Compilatoare - Pagina 85
Compilatoare - Pagina 86
Compilatoare - Pagina 87
Compilatoare - Pagina 88
Compilatoare - Pagina 89
Compilatoare - Pagina 90
Compilatoare - Pagina 91
Compilatoare - Pagina 92
Compilatoare - Pagina 93
Compilatoare - Pagina 94
Compilatoare - Pagina 95
Compilatoare - Pagina 96
Compilatoare - Pagina 97
Compilatoare - Pagina 98
Compilatoare - Pagina 99
Compilatoare - Pagina 100
Compilatoare - Pagina 101
Compilatoare - Pagina 102
Compilatoare - Pagina 103
Compilatoare - Pagina 104
Compilatoare - Pagina 105
Compilatoare - Pagina 106
Compilatoare - Pagina 107
Compilatoare - Pagina 108
Compilatoare - Pagina 109
Compilatoare - Pagina 110
Compilatoare - Pagina 111
Compilatoare - Pagina 112
Compilatoare - Pagina 113
Compilatoare - Pagina 114
Compilatoare - Pagina 115
Compilatoare - Pagina 116
Compilatoare - Pagina 117
Compilatoare - Pagina 118
Compilatoare - Pagina 119
Compilatoare - Pagina 120
Compilatoare - Pagina 121
Compilatoare - Pagina 122
Compilatoare - Pagina 123
Compilatoare - Pagina 124
Compilatoare - Pagina 125
Compilatoare - Pagina 126
Compilatoare - Pagina 127
Compilatoare - Pagina 128
Compilatoare - Pagina 129
Compilatoare - Pagina 130
Compilatoare - Pagina 131
Compilatoare - Pagina 132
Compilatoare - Pagina 133
Compilatoare - Pagina 134
Compilatoare - Pagina 135
Compilatoare - Pagina 136
Compilatoare - Pagina 137
Compilatoare - Pagina 138
Compilatoare - Pagina 139
Compilatoare - Pagina 140
Compilatoare - Pagina 141
Compilatoare - Pagina 142
Compilatoare - Pagina 143
Compilatoare - Pagina 144
Compilatoare - Pagina 145
Compilatoare - Pagina 146
Compilatoare - Pagina 147
Compilatoare - Pagina 148
Compilatoare - Pagina 149
Compilatoare - Pagina 150
Compilatoare - Pagina 151
Compilatoare - Pagina 152
Compilatoare - Pagina 153
Compilatoare - Pagina 154
Compilatoare - Pagina 155
Compilatoare - Pagina 156
Compilatoare - Pagina 157
Compilatoare - Pagina 158
Compilatoare - Pagina 159
Compilatoare - Pagina 160
Compilatoare - Pagina 161
Compilatoare - Pagina 162
Compilatoare - Pagina 163
Compilatoare - Pagina 164
Compilatoare - Pagina 165
Compilatoare - Pagina 166
Compilatoare - Pagina 167
Compilatoare - Pagina 168
Compilatoare - Pagina 169
Compilatoare - Pagina 170
Compilatoare - Pagina 171
Compilatoare - Pagina 172
Compilatoare - Pagina 173
Compilatoare - Pagina 174
Compilatoare - Pagina 175
Compilatoare - Pagina 176
Compilatoare - Pagina 177
Compilatoare - Pagina 178
Compilatoare - Pagina 179
Compilatoare - Pagina 180
Compilatoare - Pagina 181
Compilatoare - Pagina 182
Compilatoare - Pagina 183
Compilatoare - Pagina 184
Compilatoare - Pagina 185
Compilatoare - Pagina 186
Compilatoare - Pagina 187
Compilatoare - Pagina 188
Compilatoare - Pagina 189
Compilatoare - Pagina 190
Compilatoare - Pagina 191
Compilatoare - Pagina 192
Compilatoare - Pagina 193
Compilatoare - Pagina 194
Compilatoare - Pagina 195
Compilatoare - Pagina 196
Compilatoare - Pagina 197
Compilatoare - Pagina 198
Compilatoare - Pagina 199
Compilatoare - Pagina 200
Compilatoare - Pagina 201
Compilatoare - Pagina 202
Compilatoare - Pagina 203
Compilatoare - Pagina 204
Compilatoare - Pagina 205
Compilatoare - Pagina 206
Compilatoare - Pagina 207
Compilatoare - Pagina 208
Compilatoare - Pagina 209
Compilatoare - Pagina 210
Compilatoare - Pagina 211
Compilatoare - Pagina 212
Compilatoare - Pagina 213
Compilatoare - Pagina 214
Compilatoare - Pagina 215
Compilatoare - Pagina 216
Compilatoare - Pagina 217
Compilatoare - Pagina 218
Compilatoare - Pagina 219
Compilatoare - Pagina 220
Compilatoare - Pagina 221
Compilatoare - Pagina 222
Compilatoare - Pagina 223
Compilatoare - Pagina 224
Compilatoare - Pagina 225
Compilatoare - Pagina 226
Compilatoare - Pagina 227
Compilatoare - Pagina 228
Compilatoare - Pagina 229
Compilatoare - Pagina 230
Compilatoare - Pagina 231
Compilatoare - Pagina 232
Compilatoare - Pagina 233
Compilatoare - Pagina 234
Compilatoare - Pagina 235
Compilatoare - Pagina 236
Compilatoare - Pagina 237
Compilatoare - Pagina 238
Compilatoare - Pagina 239
Compilatoare - Pagina 240
Compilatoare - Pagina 241
Compilatoare - Pagina 242
Compilatoare - Pagina 243
Compilatoare - Pagina 244
Compilatoare - Pagina 245
Compilatoare - Pagina 246
Compilatoare - Pagina 247
Compilatoare - Pagina 248
Compilatoare - Pagina 249
Compilatoare - Pagina 250
Compilatoare - Pagina 251
Compilatoare - Pagina 252
Compilatoare - Pagina 253
Compilatoare - Pagina 254
Compilatoare - Pagina 255
Compilatoare - Pagina 256
Compilatoare - Pagina 257
Compilatoare - Pagina 258
Compilatoare - Pagina 259
Compilatoare - Pagina 260
Compilatoare - Pagina 261
Compilatoare - Pagina 262
Compilatoare - Pagina 263
Compilatoare - Pagina 264
Compilatoare - Pagina 265
Compilatoare - Pagina 266
Compilatoare - Pagina 267
Compilatoare - Pagina 268
Compilatoare - Pagina 269
Compilatoare - Pagina 270
Compilatoare - Pagina 271
Compilatoare - Pagina 272
Compilatoare - Pagina 273
Compilatoare - Pagina 274
Compilatoare - Pagina 275
Compilatoare - Pagina 276
Compilatoare - Pagina 277
Compilatoare - Pagina 278
Compilatoare - Pagina 279
Compilatoare - Pagina 280
Compilatoare - Pagina 281
Compilatoare - Pagina 282
Compilatoare - Pagina 283
Compilatoare - Pagina 284
Compilatoare - Pagina 285
Compilatoare - Pagina 286
Compilatoare - Pagina 287
Compilatoare - Pagina 288
Compilatoare - Pagina 289
Compilatoare - Pagina 290
Compilatoare - Pagina 291
Compilatoare - Pagina 292
Compilatoare - Pagina 293
Compilatoare - Pagina 294
Compilatoare - Pagina 295
Compilatoare - Pagina 296
Compilatoare - Pagina 297
Compilatoare - Pagina 298
Compilatoare - Pagina 299
Compilatoare - Pagina 300
Compilatoare - Pagina 301
Compilatoare - Pagina 302
Compilatoare - Pagina 303
Compilatoare - Pagina 304
Compilatoare - Pagina 305
Compilatoare - Pagina 306
Compilatoare - Pagina 307
Compilatoare - Pagina 308
Compilatoare - Pagina 309
Compilatoare - Pagina 310
Compilatoare - Pagina 311
Compilatoare - Pagina 312
Compilatoare - Pagina 313
Compilatoare - Pagina 314
Compilatoare - Pagina 315
Compilatoare - Pagina 316
Compilatoare - Pagina 317
Compilatoare - Pagina 318
Compilatoare - Pagina 319

Conținut arhivă zip

  • Compilatoare
    • cap1.doc
    • Capitolul 1.pdf
    • Capitolul 2.pdf
    • Capitolul 3.pdf
    • Capitolul 4.pdf
    • Capitolul 5.pdf
    • Capitolul 6.pdf
    • Capitolul 7.pdf
    • Capitolul 8.pdf
    • Capitolul 9+10 mod.pdf

Alții au mai descărcat și

Compilatoare

Grace Murray Hooper a fost o figură importantă în domeniul informaticii. Aceasta a fost un ofiţer în marina militară a Statelor Unite ale Americii...

Curs Excel pentru începători

1.1 Scopul cursului Cursul se adreseaza angajatilor care au un nivel elementar de cunostinte Excel, pentru a ajunge la nivelul mediu pentru ca mai...

Programare în Limbaj de Asamblare

Bitii din registrul Flag sunt indicatori de stare care se pozitioneaza functie de rezultatul ultimei operatii aritmetice sau logice si se testeaza...

Curs HTML

Curs – Programare WEB Curs – 1 Elemente de baza Pentru inceput sa descoperim originea abrevierii HTML - Hypertext Markup Language . Acest limbaj...

Test grilă tehnologia informației și comunicațiilor

1) Care tip de computer este folosit pentru lucru cu baze mari de date: 1. Calculatoarele de tip desktop 2. PDA (Personal Digital Asistent) 3....

Meniuri în Java

Metode add (MenuItem) Adds the specified item to this menu. add(String) Adds an item with with the specified label to this menu....

Serializarea Obiectelor în Java

Clasa ObjectInputStream Constructor public ObjectInputStream( java.io.InputStream in ) throws java.io.IOException,...

Șiruri de caractere în C și C++

Functii de intrare / iesire relative la siruri de caractere. Pentru a citi un sir de caractere de la intrarea standard se foloseste functia gets()...

Te-ar putea interesa și

Aplicație web de licitații online

Cuvant Inainte Aplicatiile distribuite sînt de o buna perioada de timp o prezenta uzuala în peisajul IT chiar si din tara noastra. Ultimii ani au...

Securitatea Informațiilor la Dispozitive Mobile

INTRODUCERE În ziua de azi, a fi informat reprezintă o caracteristică a celor care ies învingători în orice domeniu. Informaţiile sunt foarte...

Proiect - Record MidLet

Introducere în Java ME Telefoanele mobile sunt mai numeroase decât calculatoarele ca metodă de conectare la internet, iar trendul va continua. Cu...

Compilatoare

Grace Murray Hooper a fost o figură importantă în domeniul informaticii. Aceasta a fost un ofiţer în marina militară a Statelor Unite ale Americii...

Limbaje formale și proiectarea compilatoarelor

Scopul lucrării: 1.Pentru gramatica formală G=(VN, VT, P, S) construiţi 5 şiruri care aparţin limbajului L(G) generat de această gramatică....

Audit Financiar

Test iniţial În vederea evaluării iniţiale a demersului formativ în Audit financiar, vă rugăm să completaţi această pretestare, răspunzând sincer...

Compilatoare

Evolutia vietii este insotita de o permanenta acumulare de experienta statistica, dobandita prin incercari directe ale unor subiecti activi....

Programare II - limbajul C

Cap 1 INTRODUCERE ÎN LIMBAJUL C 1.1 Scurt istoric 1.2 Forma unui program C 1.3 Compilarea unui program C 1.1 Scurt istoric Strămoşii...

Ai nevoie de altceva?