+ All Categories
Home > Documents > Materie Predata Teoria Compilatoarelor

Materie Predata Teoria Compilatoarelor

Date post: 26-Jan-2016
Category:
Upload: knut-terra
View: 31 times
Download: 8 times
Share this document with a friend
23
Condiţii examen Este permis cu documentaţie. Documentaţie înseamnă carte, caiet sau foi legate cu numele şi prenumele scris pe prima pagină. Foile volante sunt considerate fiţuici nu documentaţie. Documentaţia este individuală. Nu se acceptă 2 studenţi cu aceeaşi documentaţie. 01 Curs – 05.10.2015 ************************** Importanţa domeniului – Error: Reference source not found – pag. 7 Ce este un compilator – Error: Reference source not found – pag. 11 Limbajele de programare – Error: Reference source not found – pag. 3 ************************** 02 Curs – 12.10.2015 ************************** Descrierea sintaxei şi semanticii unui limbaj – Error: Reference source not found – pag. 3 Tipuri de gramatici folosite: gramatici regulare ( expresiilor regulare) în analiza lexicală ,
Transcript
Page 1: Materie Predata Teoria Compilatoarelor

Condiţii examen Este permis cu documentaţie. Documentaţie înseamnă carte, caiet sau foi legate cu numele şi

prenumele scris pe prima pagină. Foile volante sunt considerate fiţuici nu documentaţie.

Documentaţia este individuală. Nu se acceptă 2 studenţi cu aceeaşi documentaţie.

01 Curs – 05.10.2015

**************************

Importanţa domeniului – Error: Reference source not found – pag. 7

Ce este un compilator – Error: Reference source not found – pag. 11

Limbajele de programare – Error: Reference source not found – pag. 3

**************************

02 Curs – 12.10.2015

**************************

Descrierea sintaxei şi semanticii unui limbaj – Error: Reference source not found – pag. 3

Tipuri de gramatici folosite: gramatici regulare (expresiilor regulare) în analiza lexicală,

respectiv a gramaticilor independente de context în analiza sintactică.

Gramatică BNF

Page 2: Materie Predata Teoria Compilatoarelor

Exemplu de gramatică (BNF) ce descrie un minilimbaj de programare:

<program> —> begin <lista_de_instructiuni> end

<lista de instructiuni> —> <instructiune> | <lista_de_instructiuni> <instructiune>

<instructiune> —> <variabila> = <expresie>

Se referă doar la instrucţiuni de atribuire.

<variabila> —> LITERA | <variabila> LITERA | <variabila> | CIFRA

Variabilă se referă la Identificator.

<expresie> —> <expresie> + <expresie>

| <expresie> – <expresie>

| <variabila >

| NUMĂR

Aici apar două tokenuri: LITERA şi NUMĂR. Acestea pot la rândul lor să fie descrise prin

acelaşi mecanism:

LITERA —> a | b | c | d | e | f | g | h | i | j | k | 1 | m | n | o | p | q | r | s | t | u | v | w | x | y | z

NUMĂR —> < cifra > | NUMĂR < cifra >

<cifra> —> 0|1|2|3|4|5|6|7|8|9

**************************

03 Curs – 19.10.2015

**************************

1.3. Specificarea unui limbaj de programare 18

2. ANALIZA LEXICALĂ22

2.1. Detectare şi clasificare 22

Page 3: Materie Predata Teoria Compilatoarelor

if (x==z) {x = y;}

Etapa de clasificare necesită ca fiecărui atom lexical să i se asocieze o singură clasă de

apartenenţă. În cazul în care un atom nu poate fi asociat nici unei clase, adică nu respectă condiţiile

de apartenenţă la clasa respectivă, atunci analiza lexicală se termină cu insucces: a fost detectată o

eroare lexicală.

Algoritmul 2.1 Analiza lexicală - versiunea 1

while (mai există caractere necitite în sursă) do

detectare (atom);

clasificare(atom);

codificare(atom)

end while

Clasele de atomiClasele de atomi corespunzătoare oricărui limbaj de programare au menirea de a descrie toate

entităţile importante dintr-un limbaj:

identificatori;

constante;

cuvinte rezervate (cuvinte cheie);

operatori;

separatori (delimitatori).

Pentru clasele cuvintelor rezervate, separatorilor şi operatorilor se testează apartenenţa la

mulţimea respectivă. Pentru clasele identificatorilor şi constantelor este necesar să se verifice

respectarea criteriilor corespunzătoare, care sunt descrise prin:

expresii regulare;

automate finite.

Page 4: Materie Predata Teoria Compilatoarelor

2.2. Codificare

Tabelul următor prezintă o astfel de codificare parţială. în realitate, fiecare atom lexical are un

cod ataşat.

Tabel de coduri

Atom Cod

Identificator 1

Constantă 2

+ 3

– 4

== 10

( 11

) 12

{ 13

} 14

= 15

; 16

if 17

else 18

for 19

while 20

do 21

... ...

Astfel rezultatul analizei lexicale, numit Forma Internă a

Programului (FIP), reprezintă o secvenţă de perechi, în care primul

element este codul corespunzător, iar al doilea element al perechii îl

reprezintă poziţia

Page 5: Materie Predata Teoria Compilatoarelor

if (x==z) {x = y;}

Cod Atom Poziţie în TS

17 011 01 110 01 312 013 01 115 01 216 014 0

SUBIECT DE EXAMEN nr. 1

Se va da altă instrucţiune if (x==z) {x = y;}

Să se intocmească forma internă a programului (FIP)

2.3. Modelul analizorului lexical 27

Algoritmul 2.2 Analiza lexicală - versiunea 2

INPUT: program sursă., codificare

OUTPUT: FIP, TS, erori

while (mai există caractere necitite în program sursă) do detectare(atom);

if este cuvânt rezervat sau operator sau separator then genFIP(cod,0)

else

if este identificator then

indice := poz(atom,TS);

genFIP(codidentificator, indice);

else

if este constantă then

indice := poz(atom,TS);

gcnFir(cod.constanta, indicc),

Page 6: Materie Predata Teoria Compilatoarelor

else

mesaj:”Eroare lexicala la atomul:’1, atom

end if

end if

end if

end while

**************************

04 Curs – 26.10.2015

**************************

4. Expresii regulare Error: Reference source not found

Notaţii utilizate în gramatici:a, b, c – elemente terminale;

= {a, b, c} – alfabet, mulţime de elemente terminale,

u, v, x, y, z – secvenţă de elemnte terminale

w = secvenţă de elemente terminale,

* = {… u, v, x, y, z} – mulţimea secvenţelor peste , secvenţe de simboluri terminale. O secvenţă de elemente terminale se numeşte propoziţie (cuvânt).

N = {A, B, C} – mulţime de elemente neterminale;

{ β,α, } – secvenţă de elemente terminale şi neterminale;

(N )* = { β,α, } – mulţimea secvenţelor peste mulţimea elementelor terminale reunite cu mulţimea elementelor neterminale. Secvenţele de elemente terminale şi neterminale se numesc forme propoziţionale.

A a, producţie. Exemplu: număr binar 01101. O producţie βα se mai notează

β,α P, şi se înţelege că α dintr-o anumită secvenţă se înlocuieşte cu β .

Gramatică

Definiţie:

Ansamblul G = ( N, , P, S ) unde:

Page 7: Materie Predata Teoria Compilatoarelor

N este un alfabet de simboluri neterminale; este un alfabet de simboluri terminale; P este o mulţime de finită de producţii, P (N )* N (N )* (N )*; S N – simbolul iniţial de start;

se numeşte gramatică.

Clasificarea gramaticilor. Ierarhia lui Chomsky 1

4. Expresii regulare Error: Reference source not found 2

Teoremă: 3

Soluţia ecuaţiei de forma X = X.a + b este X = b.a*

Se dă automatul finit următor, care reprezintă o gramatică regulară. Să se calculeze expresia regulară corespunzătoare.

Expresiile regulare ataşate vârfurilor A, B şi C sunt următoarele:o A = ε + Cbo B = Aao C = Ab + Bb + Ca

Valoarea ε defineşte starea A ca şi stare iniţială a automatului. Starea C este stare finală a automatului.

1 Error: Reference source not found. Error: Reference source not found2 Error: Reference source not found. Error: Reference source not found3 Error: Reference source not found. Error: Reference source not found

Page 8: Materie Predata Teoria Compilatoarelor

Rezolvarea sistemului de ecuaţii regulare: 4

C = Ab + Bb + Ca = (ε + Cb)b + Aab + Ca == (ε + Cb)b + (ε + Cb)ab + Ca == εb + Cbb + εab + Cbab + Ca =

= b + ab + C(bb + bab + a) =

Rezultă C = (b + ab)(bb + bab + a)*

Exemplu: 5

SUBIECT DE EXAMEN nr. 2.

Se va da un alt automat finit, care reprezintă o gramatică regulară. Să se calculeze expresia regulară corespunzătoare.

**************************

05 Curs – 02.11.2015

**************************SUBIECT DE EXAMEN – Să se explice forma regulară a constantei

întregi fără semn.

2. Constantă: şir de caractere care conţine doar cifre, cu următoarele excepţii:

• primul caracter poate fi ”+“ sau ” –“ în cazul constantelor cu semn;

• poate conţine caracterul ”.” cel mult o dată, în cazul constan¬telor reale.

Prima cifră este nenulă, exceptând constanta 0 sau numerele subunitare, de exemplu 0.56.

Forma BNF a unei constante:

<cifra_nenula> –> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<cifra> –> <cifra_nenula> | 0

<intreg> –> <cifra_nenula> | <intreg><cifra>

În limbajul BNF nu am introdus <intreg> egal cu numărul 0.

Cum se poate realiza cu BNF numărul 0. Forma BNF a unei constante:

<cifra_nenula> –> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<cifra> –> <cifra_nenula> | 0

4 Error: Reference source not found. Error: Reference source not found5 Error: Reference source not found. Error: Reference source not found

Page 9: Materie Predata Teoria Compilatoarelor

<intreg_fara_rezo> –> <cifra_nenula> | <intreg_fara_rezo ><cifra>

<intreg> –> <intreg_fara_rezo >| 0

În limbajul BNF am introdus numărul 0.

1. Constante întregi fără semn:

automat finit pentru constante întregi (fără semn)

Forma regulară a unei constante:

cifra_nenula = „1” + „2” + „3” + „4” + „5” + „6” + „7” + „8” + „9”

cifra = cifra_nenula + „0”

intreg = cifra_nenula + intreg.cifra

rezultă

intreg = cifra_nenula.cifra*

sau

intreg = cifra_nenula.cifra* + "0"

În gramatica regulară nu am introdus <intreg> egal cu număr format dintr-o singură cifră.

În mod asemănător putem construi un automat finit pentru constante întregi (fără semn), ca

Figura 1:

Figura 1. Automat finit pentru constante întregi fără semn.

Exemplu de gramatică (BNF) ce descrie un minilimbaj de programare:

<program> —> begin <lista_de_instructiuni> end

<lista de instructiuni> —> <instructiune> | <lista_de_instructiuni> <instructiune>

Page 10: Materie Predata Teoria Compilatoarelor

<instructiune> —> <variabila> = <expresie>

Se referă doar la instrucţiuni de atribuire.

<variabila> —> LITERA | <variabila> LITERA | <variabila> CIFRA

Variabilă se referă la Identificator.

<expresie> —> <expresie> + <expresie>

| <expresie> – <expresie>

| <variabila >

| NUMĂR

Aici apar două tokenuri: LITERA şi NUMĂR. Acestea pot la rândul lor să fie descrise prin

acelaşi mecanism:

LITERA —> a | b | c | d | e | f | g | h | i | j | k | 1 | m | n | o | p | q | r | s | t | u | v | w | x | y | z

NUMĂR —> < cifra > | NUMĂR < cifra >

<cifra> —> 0|1|2|3|4|5|6|7|8|9

SUBIECT DE EXAMENUn exemplu de program în minilimbajul de programare descris mai sus este următorul:

Se va da o altă secvenţă de program.

gramatică (BNF) ce descrie un minilimbaj de programare

begin a = b + c; d = 5 – a end

Compilatorul foloseşte doar atomi recunoscuţi de el.

begin ID = ID + ID; ID = INTREG – ID end

O derivare a acestui program în gramatica dată este (Pentru fiecare derivare să se scrie

producţia corespunzătoare):

<program> => begin <lista_de_instructiuni> end

(=> derivare)

<lista de instructiuni> —> <lista_de_instructiuni> <instructiune>

(—> producţie)

=> begin <lista_de_instructiuni>; <instructiune> end

<lista de instructiuni> —> <instructiune>

=> begin <instructiune>; <instructiune> end

<instructiune> —> <variabila> = <expresie>

Page 11: Materie Predata Teoria Compilatoarelor

=> begin <variabila> = <expresie>; <instructiune> end

<variabila> —> LITERA

=> begin LITERA = <expresie>; <instructiune> end

<expresie> —> <expresie> + <expresie>

=> begin LITERA = <expresie> + <expresie>; <instructiune> end

<expresie> —> <variabila >

=> begin LITERA = <variabila > + <expresie>; <instructiune> end

<variabila> —> LITERA

=> begin LITERA = LITERA + <expresie>; <instructiune> end

<expresie> —> <variabila >

=> begin LITERA = LITERA + <variabila>; <instructiune> end

<variabila> —> LITERA

=> begin LITERA = LITERA + LITERA; <instructiune> end

<instructiune> —> <variabila> = <expresie>

=> begin LITERA = LITERA + LITERA; <variabila> = <expresie> end

variabila> —> LITERA

=> begin LITERA = LITERA + LITERA; LITERA = <expresie> end

<expresie> —> <expresie> – <expresie>

=> begin LITERA = LITERA + LITERA; LITERA = <expresie> – <expresie> end

<expresie> —> NUMĂR

=> begin LITERA = LITERA + LITERA; LITERA = NUMAR – <expresie> end

<expresie> —> <variabila >

=> begin LITERA = LITERA + LITERA; LITERA = NUMAR – < variabila > end

<variabila> —> LITERA

=> begin LITERA = LITERA + LITERA; LITERA = NUMAR – LITERA end

Să se construiască 2 tipuri de arbori.

Page 12: Materie Predata Teoria Compilatoarelor

SUBIECT DE EXAMEN nr. 3. Un exemplu de program în minilimbajul de programare descris mai

sus este următorul: d = 5 – a . Se va da alt exemplu de program.

<program> => <instructiune>

(=> derivare)

<instructiune> —> <variabila> = <expresie>

(—> producţie)

=> <variabila> = <expresie>

<variabila> —> LITERA

=> LITERA = <expresie> end

<expresie> —> <expresie> – <expresie>

=> LITERA = <expresie> – <expresie> end

<expresie> —> NUMĂR

=> LITERA = NUMAR – <expresie> end

<expresie> —> <variabila >

=> LITERA = NUMAR – < variabila > end

<variabila> —> LITERA

=> LITERA = NUMAR – LITERA end

Page 13: Materie Predata Teoria Compilatoarelor

Să se construiască 2 tipuri de arbori.

**************************

06 Curs – 09.11.2015

**************************SUBIECT DE EXAMEN Automat_finit_identificator

2. Identificator:

Identificator: şir de caractere care începe obligatoriu cu o literă, conţine doar caractere

alfanumerice (litere sau cifre) şi eventual unele caractere speciale (”_“, ”#“), dar în mod

categoric nu spaţiu.

Regula BNF pentru Identificator:

<cifra > –> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<litera> = A | B | ... | Z | a | b | ... | z

<special> = _ | #

<identificator> = <litera> | <identificator><litera> | <identificator><cifra> |

<identificator><special>

Gramatică regulară pentru Identificator:

cifra = „1” + „2” + „3” + „4” + „5” + „6” + „7” + „8” + „9”

litera = „A” + „B” + ... + „Z” + „a” + „b” + ... + „z”

special = „_” + „#”

identificator =litera (litera + cifra + special) *

(un identificator este o secvenţă de caractere alfanumerice sau speciale, din care prima

este obligatoriu literă).

Identificator

Figura 2. Automat finit pentru identificatori.

3. Cuvinte rezervate:

Rezervat = „if” + „else” + „for” + „do” + ...

Page 14: Materie Predata Teoria Compilatoarelor

4. Operatori:

operator = „+” + „– „ + „*” + ... + „<” + „>” + „==” + ... + „&&” + „!” + „|”

+ ...

5. Separatori:

separator = „(„ + ”)” + „{” + „}” + „;” + ...

1.4. Tabela de simboluri 6

2.4.1. Tabele de dispersie

coliziune

adresare deschisă;

înlănţuire (sau zonă auxiliară),

6 Error: Reference source not found. Error: Reference source not found – pag. 30.

Page 15: Materie Predata Teoria Compilatoarelor

Subiecte de exmen

Tabele de dispersie cu înlănţuire

Tabele de dispersie cu înlănţuire

Exemplul 2.2. Presupunem că într-un program se întâlnesc următoarele nume simbolice

(în această ordine) iar valoarea funcţiei de dispersie asociate este cea din paranteză:

Forma Internă a Programului (FIP) – Se dă şi lungimea Tabelei de dispersie.

NODE (1), AN (3), FUNCTION (9), STORE (2), B (9), ADD (3), BRAN (9),

PARAMETER (9).

Page 16: Materie Predata Teoria Compilatoarelor

SUBIECT DE EXAMEN, nr. 4.

Se va da o altă Formă Internă a Programului şi lungimea Tabelei de dispersie.

Să se întocmească cele două tabele de dispersie.

**************************

07 Curs – 16.11.2015

**************************

3.1. Analizor sintactic descendent cu reveniri 46

Page 17: Materie Predata Teoria Compilatoarelor

**************************

08 Curs – 23.11.2015

**************************

3. Automate finite7

Mulţimea configuraţiilor

(q, w) este o configuraţie

tranziţia(p, aw) (q, w)

Configuraţia (q0, w) se numeşte configuraţie iniţială, iar (q, ), q F se numeşte configuraţie finală.

3.1.1. Modelul analizorului sintactic descendent cu reveniri498

Automatul push-down corespunzător analizorului sintactic descendent cu

reveniri poate fi caracterizat de următoarea configuraţie [Şer87):

(s, i, α, β)

Expandare

Avans

Revenire

Altă încercare

Succes

7 Error: Reference source not found. Error: Reference source not found8 Error: Reference source not found. Error: Reference source not found – pag. 49.

Page 18: Materie Predata Teoria Compilatoarelor

**************************

09 Curs – 30.11.2015

**************************

Sfântul Andrei zi liberă

**************************

10 Curs – 07.12.2015

**************************

**************************


Recommended