18
Curs 7 1 Limbaje formale, automate şi compilatoare

Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

  • Upload
    others

  • View
    36

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Curs 7

1

Limbaje formale, automate şi

compilatoare

Page 2: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Limbaje formale şi automate

2

Limbaje de tipul 3

Gramatici regulate

Automate finite

Deterministe

Nedeterministe

Expresii regulate

a, a ∈ ∑, ε, ∅

E1.E2, E1|E2, E1*, (E1)

Limbaje de tipul 2

Gramatici de tipul 2

Page 3: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Plan

3

Istoric

Paşii compilării

Analiza lexicală

Descriere lexicală

Interpretare

Interpretare orientată dreapta

Descriere lexicală bine formată

Page 4: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Istoric – 1940

4

Programe scrise în instrucțiuni procesor

Calculatoare puține

Programatori puțini

Page 5: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Istoric – 1950

5

Fortran (1957): Primul compilator (expresii aritmetice, instrucțiuni, proceduri)

Încă este folosit pentru aplicații complexe computațional sau pentru testarea performanței

Algol (1958): Gramatici BNF (Backus-Naur Normal Form), bloc de instrucțiuni,

recursie

Precursorul sintaxei curente

Lisp (1958) Programare funcțională

Structuri aroborescente, gestiunea automată a spațiului de stocare, dynamic typing

COBOL (1959) Sintaxă similară limbii engleze

Business oriented

Pune accent pe citire și scriere de date in format text și numeric

Page 6: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Istoric – 1960 - 1970

6

Simula (1965)

Bazat pe ALGOL 60

Primul limbaj orientat obiect

Obiecte, clase, moștenire, funcții virtuale, etc.

Programare structurată (1968)

Edsger Dijkstra – GOTO Considered Harmful

Pascal (1970)

C (1973)

IRQ, variabile dinamice, multitasking

Page 7: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Istoric – 1980 - prezent

7

ADA (1980) primul limbaj standardizat

Objective C (1984) Inspirat de Smalltalk

Orientare obiect

C++ (1985) C with Classes;

Orientare-obiect, excepții, template-uri

Inspirat de Simula

Java (1995) just-in-time compilation

C# (2000 ) Tehnologia .NET

Page 8: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Compilare

8

Cod sursă

Analizor lexical

Analizor sintactic

Analizor semantic

Caractere Unități lexicale

Arbore sintactic

Generator de cod

Arbore sintactic decorat

Asamblare Interpretare

Cod maşină Cod intermediar

Page 9: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Compilare

9

Cod sursă

Analizor lexical

Analizor sintactic

Analizor semantic

Caractere Unități lexicale

Arbore sintactic

Generator de cod

Arbore sintactic decorat

Asamblare Interpretare

Cod maşină Cod intermediar

Page 10: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Analiza lexicală

10

Def. 1 Fie Σ un alfabet (al unui limbaj de programare). O

descriere lexicală peste ∑ este o expresie regulată E = (E1|

E2|…| En)+, unde n este numărul unităților lexicale, iar Ei

descrie o unitate lexicală, 1 ≤ i ≤ n.

Def. 2 Fie E o descriere lexicală peste Σ ce conține n

unități lexicale şi w ∈ ∑+. Cuvântul w este corect relativ la

descrierea E dacă w ∈ L(E). O interpretare a cuvântului w

∈ L(E) este o secvență de perechi (u1, k1), (u2, k2), …, (um,

km), unde w = u1u2…um, ui ∈ L(Eki) 1 ≤ i ≤ m, 1 ≤ ki ≤ n.

Page 11: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Exemplu

11

w = alpha := beta = 542

Interpretări ale cuvântului w:

(alpha, Id), (:=, Asignare), (beta, Id), (=, Egal),

(542, Intreg)

(alp, Id), (ha, Id), (:=, Asignare), (beta, Id), (=,

Egal), (542, Intreg)

(alpha, Id), (:, Dp), ( =, Egal), (beta, Id), (=, Egal),

(542, Intreg)

Page 12: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Analiza lexicală

12

Def. 3 Fie E o descriere lexicală peste ∑ şi w ∈ L(E).

O interpretare a cuvântului w, (u1, k1)(u2, k2), …(um,

km), este interpretare drept -orientată dacă (∀) 1≤ i≤m,

are loc:

|ui| = max{|v|, v ∈ L(E1| E2|…| En) ∩ Pref(uiui+1…um)}.

(unde Pref(w) este mulțimea prefixelor cuvântului w ).

Există descrieri lexicale E în care nu orice cuvânt din

L(E) admite o interpretare drept-orientată.

E = (a | ab | bc)+ şi w = abc.

Page 13: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Analiza lexicală

13

Def. 4 O descriere lexicală E este bine -formată dacă orice cuvânt w din limbajul L(E) are exact o interpretare drept-orientată.

Teoremă Dată o descriere lexicală E este decidabil dacă E este bine formată.

Def. 5 Fie E o descriere lexicală bine formată peste ∑. Un analizor lexical (scanner) pentru E este un program ce recunoaşte limbajul L(E) şi produce, pentru fiecare w ∈ L(E), interpretarea sa drept-orientată.

Page 14: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Analiza lexicală

14

Fie o descriere lexicală E peste Σ. Crearea unui

analizor lexical pentru E inseamnă:

1. Se construieşte automatul finit echivalent A

2. Din A se obține automatul determinist echivalent cu E,

fie acesta A’.

3. (Opțional) Automatul minimal echivalent cu A’.

4. Implementarea automatului A’.

Page 15: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Exemplu de analizor lexical

15

Fie descrierea lexicală:

litera → a | b |…|z

cifra → 0 | 1 |…| 9

identificator → litera (litera| cifra)*

semn → + | -

numar →(semn | ε) cifra+

operator → + | -| * | / | < | > | <= | >= | < >

asignare → :=

doua_puncte → :

cuvinte_rezervate → if| then|else

paranteze →) | (

Page 16: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

q0

Ai

An

Ao

Aa

Ad

Ac

Ap

16

Page 17: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

0

1

2

3

4

7

5 6

literă

literă, cifră

#i sau #c

cifră cifră

#n

cifră

),(

#o

operator – {+,-}

#d

:

+,-

= #a

#o

#p

17

Page 18: Limbaje formale, automate şiotto/LFAC2019-20/LFAC07.pdfLimbaje formale şi automate 2 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate

Bibliografie

18

G. Grigoraş, Construcția compilatoarelor. Algoritmi

fundamentali, Editura Universității “Alexandru Ioan

Cuza”, Iaşi, 2005