Sunteți pe pagina 1din 85

Limbaje formale i translatoare (Compilatoare)

n 1954 IBM dezvolt 704, primul calculator cu producie de serie


Dezvoltarea software-ului pentru acest calculator (i n general la
acea dat) se fcea numai n limbaj de asamblare
Costurile software-ului erau cu mult mai mari dect cele ale
hardware-ului
Soluia 1: Speedcoding un interpretor; rezultat: rularea era mai
nceat de 10-20 de ori dect a codului (scris de mn) n limbaj
de asamblare
Soluia 2: John Backus are ideea de a translata codul de nivel
nalt n limbaj de asamblare, lucru pe care muli l considerau
imposibil deoarece euase n alte proiecte; rezultat: proiectul
FORTRAN I a fost un succes cu un impact enorm n tiina
calculatoarelor
Compilatoarele moderne pstreaz nc structura general a lui
FORTRAN I

Iniial compilatoarele erau scrise n limbaj de asamblare


Primul compilator capabil s i compileze propriul cod
surs scris ntr-un limbaj de nivel nalt a fost creat pentru
Lisp de ctre Hart i Levin de la MIT n 1962
ncepnd cu anii 1970 practica obinuit este de a scrie
compilatorul chiar n limbajul pe care l compileaz
Limbajele C i Pascal au fost i ele des folosite n acest
scop
Construirea unui auto-compilator este o problem de tip
bootstrapping (problem de tip Cine a fost primul: oul sau
gina?):
Primul compilator pentru un limbaj trebuie compilat fie de ctre
un compilator scris ntr-un alt limbaj de programare
Fie compilat prin rularea compilatorului ntr-un interpretor

Soarele vederea obiectele vizibile (Platon)


Limbajul contiina realitatea
Picture 001.jpg
Mitul peterii (Platon)
Calculator limbaj formal realitate
Picture 003.jpg

Limbajul arat de fapt felul n care noi


nelegem realitatea.
Ex: - n limba romn spunem:
Avionul zboar pe cer.

- n limbile francez i englez spunem:


Lavion vole dans le ciel.
The plane flies in the sky.

Iar acest lucru se regsete i n felul n care


au fost proiectate limbajele formale, adic
felul n care noi prezentm realitatea
calculatoarelor
6

A. Plato in his Republic describes a notion


called the "world of ideas: everything in the
universe has a corresponding abstract in the
world of ideas.
Ex: a table in the real world is just a reflection
of the Table in the world of ideas. These
abstracts continue to go up a hierarchy of
types until you get to the ultimate type. In
fact, this was a philosopher's job, according
to Plato. It was the finding by dialectic of the
ultimate type from which everything else
derives.
7

If you are heavily into Object Oriented


Programming, this may sound extremely
familiar. In fact, I would suggest that the
entire OOP paradigm is based upon Plato's
"world of ideas".
In Plato's famous "allegory of the cave", he
describes the ultimate Object as goodness.
Neo-Platonists in the second century AD
would describe this ultimate Object as God.
In OOP terms, this is the object from which
everything else implicitly derives.
8

Which programming languages can be


described as Platonic?
I would argue that Java, Perl (because all
objects derive from UNIVERSAL), and
Smalltalk all fall under the Platonic
description. They all have an ultimate Object
from which all other objects derive.

B. Now Plato's student Aristotle in his Physics


takes a completely different view of the
universe. Rather than each object in the
universe reflecting an Object in the "world of
ideas", the universe is made up of discrete
primitive things called atoms. From these
atoms, everything else in the universe is built.
Ex: To build a house, you must have all the
atoms arranged in the right way to make
wood. Then you have to arranged these
"wood" objects into a house.
10

I
would
suggest
that
programming
languages,
which
rely
upon
discrete
primitives can be described as Aristotelian.
Ex: C, C++, PASCAL.
The reason for this is that both of these
languages build larger abstractions based
upon fundamental primitives such as int,
float, char, etc.
Ex: an array of chars makes a string rather
than having a string object which represents
a line of text (or many lines depending).
11

C. Wittgenstein's most famous idea is that


objects in the real world are not the outcome
of some platonic classes, but that they come
in "families".
A family is a set of real objects that resemble
each other from various points of view.
Ex: The family "chair" is a set of all the
objects that we call by that name.

12

But we group together these objects in one


single family, not because they share some
common essence, but out of historic
accidents.
Ex: In Romanian a toilet seat is called a "toilet
chair" (because Romanians read sitting on the
toilet more often than the English). To
Romanians the toilet seat is part of the "chair"
family, while the English have a more
restrictive concept of "chair.

13

Wittgenstein used the metaphor of a rope: a rope


is made of many fibers, but there's no fiber that
has the same length as the entire rope.
In the same way, object A resembles object B,
which resembles object C, and which, in turn,
resemble object D, and all these objects may be
part of the same family, but nonetheless, object
A may not resemble object D in any dramatic
manner.
In other words, there's no common thread
through all the objects called by a certain name i.e. belonging to a certain family.
14

Maybe JavaScript is more of a Wittgensteinan


language.
It has three big differences compared to C++,
C# and Java:
there's no distinction between objects and classes
new objects are created not by instantiating classes
but by copying existing objects
it uses duck typing -- instead of checking whether
an object is derived from a particular class, you
check whether it has a given property or method
there's no enforced encapsulation; properties and
methods can be added or changed from without.
15

Structured - is a programming paradigm


aimed on improving the clarity, quality, and
development time of a computer program by
making extensive use of subroutines, block
structures and for and while loops in
contrast to using simple tests and jumps
such as the goto statement which could lead
to "spaghetti code" which is both difficult to
follow and to maintain

16

Imperative - is a programming paradigm that


describes computation in terms of statements
that change a program state. In much the
same way that imperative mood in natural
languages expresses commands to take
action,
imperative
programs
define
sequences of commands for the computer to
perform

17

Declarative - is a programming paradigm that


expresses the logic of a computation without
describing its control flow.[1] Many languages
applying this style attempt to minimize or
eliminate side effects by describing what the
program should accomplish, rather than
describing how to go about accomplishing
it[2] (the how is left up to the language's
implementation). This is in contrast with
imperative programming, which requires an
explicitly provided algorithm
18

Functional - is a programming paradigm that


treats computation as the evaluation of
mathematical functions and avoids state and
mutable data. It emphasizes the application
of functions, in contrast to the imperative
programming
style,
which
emphasizes
changes in state

19

Object-oriented
is
a
programming
paradigm using "objects" usually instances
of a class consisting of data fields and
methods together with their interactions to
design applications and computer programs.
Programming
techniques
may
include
features
such
as
data
abstraction,
encapsulation,
messaging,
modularity,
polymorphism, and inheritance

20

Event-driven - is a programming paradigm in


which the flow of the program is determined
by eventse.g., sensor outputs or user
actions (mouse clicks, key presses) or
messages from other programs or threads

21

Limbajul este o modalitate sistematic de


comunicare care utilizeaz sunete sau
simboluri convenionale.
Referindu-ne la limbajele de programare,
simbolurile convenionale sunt iruri de
caractere.
Pentru a defini un ir de caractere trebuie s
pornim de la un alfabet.
Un alfabet este o mulime finit de simboli.

22

Exemple:

S1 = {a, , , b, c, d, , z}: mulimea literelor din limba romn


S2 = {0, 1, , 9}: mulimea cifrelor (baza 10)
S3 = {a, b, , z, #}: mulimea literelor din alfabetul latin,
plus simbolul special #

Un ir de simboli peste alfabetul S este o


succesiune finit de simboluri din acest
alfabet.
abfbz este ir de caractere peste S1 = {a, b, c, d, , z}
9021 este ir de caractere peste S2 = {0, 1, , 9}
ab#bc este ir de caractere peste S3 = {a, b, , z, #}

23

Vom nota cu S* mulimea tuturor irurilor de caractere peste S,


iar S+ cu mulimea tuturor irurilor de caractere peste S cu
excepia irului vid.
Un limbaj este un set de iruri de simboli peste acelai alfabet.
Daca limbajul este finit atunci el poate sa fie definit prin
enumerare.
Cum poate fi definit un limbaj infinit?
Doua mecanisme distincte de definire finita a limbajelor: prin
generare sau prin recunoastere.
In primul caz este vorba de un "dispozitiv" care stie sa genereze
toate propozitiile din limbaj (si numai pe acestea) astfel incit
alegind o propozitie din limbaj intr-un interval finit de timp
dispozitivul va ajunge sa genereze propozitia respectiva. Gramatici formale
In al doilea caz este vorba de un "dispozitiv" care stie sa
recunoasca (sa accepte ca fiind corecte) propozitiile limbajului
dat. Automate finite, expresii regulate

24

Gramatica :

Unde:

VN
S
S
P

G = (VN, S, S, P )

- multimea de neterminale
- multimea de terminale,
- simbolul initial (de start), S VN
- reguli de productie

Regula de productie :
este un element de forma
-> , V +, V *,
si siruri de terminale si neterminale de lungime
finita ( trebuie sa contina cel putin un neterminal)
V = VN U S se numete alfabetul gramaticii
25

Exemplu:
VN = {subiect, predicat},
S = {Ana, Ion, nva, doarme, ., },
S = propoziie
P : propoziie -> subiect predicat.
subiect
-> Ana | Ion
predicat -> nva | doarme

26

Convenie de notaie:
literele mici de la inceputul alfabetului latin
(a,b,c,...) reprezinta elemente din S (simboli
terminali);
literele mici de la sfirsitul alfabetului latin (u, v, x,...)
reprezinta elemente din S* (siruri de simboli
terminali);
literele mari de la inceputul alfabetului latin (A, B,
C,...) reprezinta elemente din VN (simboli neterminali);
literele mari de la sfirsitul alfabetului latin (U, V,
X,...) reprezinta elemente din VN U S (simboli terminali
sau neterminali);
literele alfabetului grecesc reprezinta siruri din (VN U
S)* (siruri de simboli terminali si neterminali).

27

O forma propozitionala pentru o gramatica G


se defineste recursiv astfel:
(1) S este o forma propozitionala
(2) daca aBt este o forma propozitionala si
exista o productie
B -> r atunci art este o
forma propozitionala.
Exemplu:
propoziie, subiect predicat., Ana predicat.,
subiect nva., Ana nva.
28

O forma propozitionala care contine numai simboli


terminali se numeste propozitie generata de G.
Exemplu: Ana nva., Ion doarme.
Notam cu L(G) multimea tuturor propozitiilor generate de
G. L(G) este limbajul generat de gramatica G.
L(G) = { xS* S =*> x }
L(G) = {Ana nva., Ion nva., Ana doarme., Ion doame.}
O gramatica este o reprezentare finita (toate elementele
sale sint finite) a unui limbaj care poate sa fie infinit.
Nu orice limbaj are o reprezentare finita, cu alte cuvinte nu
pentru orice limbaj exista o gramatica care sa il reprezinte.

29

Gramatica independenta de context (GIC) :


G = (VN, S, S, P )

unde fiecare regula de productie ->


verifica VN, V*
adica este de forma A -> u, AVN

30

Exemplu:
Propoziie
S
Atr
P
C
verb Atr
Verb C
Subst
Adject
Adverb

-> S [Atr] P [C].


-> subst | verb
-> adject
-> verb
-> adverb
-> a merge Atr | a cnta Atr
-> este C | face C
-> copilul | cinele
-> frumos | ru
-> bine | mult
31

Gramatica liniara dreapta :

este o gramatica independenta de context unde fiecare


productie este de forma

A -> u sau A -> uB, unde uS*, A, B VN

Gramatica liniara stanga :

este o gramatica independenta de context unde fiecare


productie este de forma

A -> u sau A -> Bu , unde uS*, A, B VN

Daca u = a S atunci gramatica se numeste regulata.

32

Derivare directa : =>

Fie x,y,z si , (VN U S) si -> o regula de


productie din P

xy => xy

<=> -> P

Derivare in k pasi : =k>

=k> <=> () 1, ,k+1 cu proprietatile

1 = ; k+1= ; i -> i+1 , i[1, k]

Inchiderea tranzitiva a relatiei de derivare : =+>


=+> <=> () k>=1 a.i. = k>

Inchiderea tranzitiva si reflexiva : =*>


=*> <=> ( =) V ( =+>)

33

Forma propozitionala :
orice sir V * cu proprietatea S =*>

Propozitie :
orice sir x S* cu proprietatea S =+> x
Tipuri de derivare :
* derivare stanga - in fiecare forma propozitionala
se inlocuieste neterminalul cel mai din stanga
* derivare dreapta- in fiecare forma propozitionala
se inlocuieste neterminalul cel mai din dreapta

34

Tipuri de recursivitate :

* recursivitate stanga A =+> A

* recursivitate dreapta A =+> A

35

gramatica de tip 0: nu are nici un fel de restrictie asupra


regulilor decat cele din definitie (gramatici generale)
gramatica de tip 1: regulile sale sunt de tipul uxv -> urv,
unde u, v V*; x VN; r V+ sau de forma x -> , caz in
care x nu mai apare n partea dreapta a vreunei reguli din
gramatica (gramatici sensibile la (dependente de) context)

gramatica de tip 2: regulile sale sunt de tipul x -> r, unde


x VN; r V* (gramatici libere (independente) de context)
gramatica de tip 3: regulile sale sunt de tipul x -> px sau
x -> p; unde x; x VN; p S (gramatici regulate)

36

L0

Clasificare :
Limbaje * naturale
L1
L2
* formale (artificiale)
Limbaje * independente de context
* liniare
L3
* regulate
L0 - clasa limbajelor generate din gramatica Chomsky,
L1 - clasa limbajelor dependente de context,
L2 - clasa limbajelor independente de context,
L3 - clasa limbajelor regulate

37

Fie M - multime de noduri, R - relatie binara peste M,


un arc (a,b) R. Atunci (M, R) este un graf orientat. Fie:
Input(a) = { b / (b,a)R } si Output(a) = { b / (a,b) R }
Un arbore este un graf orientat cu urmatoarele restrictii:
1. r unic a.i. Input ( r ) =
2. a M , a r, card(Input( a )) = 1
3. a M , (r, a) R*
Un arbore de derivare sau S-arbore pentru o gramatica
G independenta de context, G = (VN, S, S, P ) este
arborele etichetat ordonat de la stnga la dreapta A =
(M, R) cu proprietatile:
1. radacina arborelui este etichetata cu S
2. pt. orice a M cu descendenti, A eticheta nodului
a , X1,,Xi etichetele descendentilor, () in P productia
A->X1Xi
38

39

Analiza sintactic se face pe baza arborelui de derivare.


Un arbore de derivare este o reprezentare grafica pentru
o secventa de derivari.
Intr-un arbore de derivare nu se mai poate identifica
ordinea in care s-a facut substitutia simbolilor
neterminali.
Fiecare nod interior arborelui, reprezinta un neterminal.
Descendentii unui nod etichetat cu un neterminal A sint
etichetati de la stinga la dreapta prin simbolii care
formeaza partea dreapta a unei productii care are in
partea stinga neterminalul A.
Parcurgind de la stinga la dreapta frunzele unui arbore
se obtine o forma propozitionala.
40

Construcia arborelui de derivare se poate


face n dou moduri:
Pornind de la radacina i aplicind succesiv
productii (corespunde analizei sintactice
descendente - top-down)
Pornind de la sirul de atomi lexicali (frunze) i
identificndu-se simbolii neterminali din care
se poate obine un ir de atomi lexicali
(corespunde analizei sintactice ascendente
bottom-up)
41

42

Teoria automatelor studiaz legile computaiei.


Se utilizeaz pentru a modela sisteme reale.
Pentru teoria limbajelor formale: sunt dispozitive
de calcul care accept/recunosc limbaje regulate.

Exemplu: ntreruptorul unui aparat electric:


apsarea utilizatorului poate s porneasc sau s
opreasc aparatul respectiv. Proiectai un
automat care s spun starea n care se afl
aparatul la un moment dat.

43

Aciune
utilizator

oprit

pornit
Aciune
utilizator

Despre dispozitive de acest fel este dificil de


discutat, deoarece pot fi proiectate ntr-o
infinitate de moduri.
Reprezentarea (modelarea) lor sub form de
automate ofer o baz matematic comun
pentru studiu.
44

Automatul finit determinist este un obiect matematic

M = (S, Q, F, q0, f)

unde
S - alfabetul limbajului de intrare al automatului,
Q - multimea finita de stari a automatului,
F - multimea strilor finale ale automatului (FQ),
q0 -stare initiala, q0Q,
f - functia de tranzitie f: QS -> Q.
Configuratie: este numit un dublet (x, q ) , unde x este
sirul de la intrare neanalizat inca; x S* ,iar q Q.

45

Un automat finit poate fi reprezentat n dou


moduri:
Cu ajutorul grafului de tranziie
Convenii de reprezentare:
Strile se reprezint prin cercuri.
Tranziiile se reprezint prin sgei ntre stri.
Cercul care reprezint starea iniial trebuie s aib o
sgeat care atinge acest cerc
Cercurile care reprezint strile finale se dubleaz.

Prin tabela de tranziie


Convenii de scriere:
Strile finale se marcheaz printr-un caracter star (*).
46

q0

1
1

Alfabet S = {0, 1}
Stri Q = {q0, q1, q2}
Starea iniial q0
Stri finale F = {q0, q1}

q1

0,1
0

q2

Tabela de tranziie:
intrri

stri

q0
*q1
q2

0
q0
q2
q2

1
q1
q1
q2
47

Relatia de miscare: |--- este definita astfel

(ax, q) |--- (x, q1)

Relatia de miscare in k pasi :

<=> f(q, a) = q1

(a1a2 akx, q ) |---k (x, q ) , daca () k+1


configuratii astfel nct

(a1a2 akx, q0 ) |---k (x, qk ) , q0 = q , qk = q si ()

(aiai+1 akx, qi-1 ) |--- (ai+1, akx, qi )

Relatia generala de miscare :

(x1 , q1) |---* (x2 , q2) <=>

(x1 =x2 si q1 =q2 ) sau ((x1 , q1) |---+ (x2 , q2))

48

Sir x acceptat de automatul M:


(x , q0) |--* (, q )

, qF

Limbajul acceptat de M:

L(M) = {x S* | f *(q0 , x) F }
unde f se extinde la f* astfel

f* (q, ) = q

f* (q, ax) = f* (f (q, a ), x)

Cu alte cuvinte: Limbajul acceptat de M este mulimea


irurilor din S care, pentru care, pornind de la q0 i urmnd
tranziiile pe msur ce irul este citit de la stnga la dreapta,
se ajunge la o stare final.
Automatul M este determinist daca pentru fiecare stare si
comanda de intrare exista o singura stare in care poate trece.

49

M = (S, Q, F, q0, f) , Q = {q0, q1, q2, q3}


F= {q3} , S = {a, b} , f definita astfel

Stare
initiala

f (q0, a) = q2

q0

f (q0, b) = q1
f (q1, a) = q3
f (q1, b) = q0
f (q2, a) = q0
f (q2, b) = q3
f (q3, a) = q1
f (q3, b) = q2

q1

a
a

q2

a
a

q
q33

Diagrama de stari a automatului determinist.


Propozitiile ab, ba, aaba, ... sunt acceptate de automatul M.

50

Automatele finite deterministe au un numr fix i


limitat de stri, i deci au o memorie finit.
Exist limbaje care nu pot fi recunoscute de ctre
un automat finit determinist, i deci nici de ctre
o expresie regulat, i nici de ctre un automat
finit nedeterminist.
Ex: Pentru limbajul L={anban|n>0}, un automat
finit determinist ar trebui s se afle ntr-o stare
diferit dup citirea irului ak, pentru fiecare
valoare a lui k>0 (deoarece numai dup k citiri de
a, automatul trebuie s accepte irul bak). Rezult
necesitatea unui numr infinit de stri, ceea nu
este posibil.

51

Automate finite nedeterministe :


M(S, Q, F, q0, f) unde f: QS -> 2Q -
Exemplu : Q = {q1, q2, q3, q4}, F= {q4}, S = {0,1}, f definita astfel:
f (q1, 0) = {q1 , q2 }

0,1

f (q1, 1) = {q1, q3 }
q1

f (q2, 0) = {q2 , q4 }
f (q2, 1) = q2
f (q3, 0) =
f (q3, 1) = q3
f (q4, 0) =
f (q4, 1) =

0
0,1

q2

q3

q4

Graful de stari
52

Teorema:
Pentru
fiecare
automat
finit
nedeterminist M, exista un automat finit
determinist M echivalent, adica L(M) = L(M).

M(S, Q, F, q0, f)

M(S, Q, F, q0, f )

Q - starile formate din combinatiile starilor


A.F.N. inclusiv

q0 - starea initiala a A.F.D.

F - combinatiile de stari care contin cel putin


o stare finala din A.F.N.

53

Stri

AFN

AFD

q0, q1, , qn

, q0}, {q1}, {q0,q1}, ,


{q0,,qn}
Cte una pt. fiecare submulime de stri
din AFN.

Starea iniial q0
f
Tranziii
Stri finale

q0}
f({qi1,,qik}, a) = f(qi1, a)
f(qik, a)

FQ

F = {S: S conine cel puin o stare


final AFN}
Dup aplicarea transformrilor se elimina strile i
tranziiile moarte.
54

0, 1
AFN:

q0

q1

q2

AFD:
{q0}

0, 1

{q0, q1}
0

{q0, q2}

{q1}

1
0

{q0, q1, q2}

0
1

{q2}

{q1, q2}

55

Aplicaie facultativ:
Implementarea ntr-un limbaj de programare
oarecare a unei aplicaii care s automatizeze
procesul de deducere a AFD echivalent pentru un
AFN dat.
Intrare: Pentru AFN se vor da, prin intermediul unui
fiier de intrare, alfabetul, mulimea strilor, starea
iniial, mulimea strilor finale, tabelul de definiie
a funciei de tranziie
Ieire: Elementele de definiie ale AFD echivalent i
desenarea grafului de tranziie dup eliminarea
strilor i tranziiilor moarte.
56

O tranziie este o tranziie dintr-o stare n


alta, fr a consuma niciun simbol din irul
de intrare.
Aceste
tranziii
sunt
practic
tranziii
spontane, care se fac fr a privi la simbolul
care urmeaz n irul de intrare.

57

Orice AFN este de fapt un AF- care nu are


nicio tranziie .
AFN i AF- sunt echivalente.
Deducerea AFN echivalent unui AF- const
n construirea unui AFN care accepta acelai
limbaj ca i AF- de la care am pornit.
Construirea se face combinnd fiecare
tranziie cu urmtoarea tranziie care se
face pe baza simbolului de la intrare.

58

Tranziia duce din starea iniial n starea a


doua.
Din starea a doua se trece n starea a treia pe
baza 1|2|9.
nlocuim tranziia cu o tranziie din starea
iniial direct n starea a treia pe baza 1|2|9.

59

nchiderea unei stri q se noteaz CL(q) closure


i cuprinde toate strile la care se poate ajunge
pornind din starea q i fcnd numai tranziii .
Dup eliminarea tranziiilor , toate strile ale cror
nchideri conin o stare final, devin stri finale.

Dac starea n care se trece prin tranziia nu are


nicio tranziie pe baza intrrii, atunci:
Dac starea respectiv este stare final, starea
din care pleac tranziia devine stare final, iar
tranziia este eliminat.
Altfel, se elimin pur i simplu tranziia (fiind
oricum o tranziie moart).
60


1
1

0
E

61

Aplicaie facultativ:
Implementarea ntr-un limbaj de programare
oarecare a unei aplicaii care s automatizeze
procesul de construire a AFN echivalent pentru un
AF- dat.
Intrare: Pentru AF- se vor da, prin intermediul
unui fiier de intrare, alfabetul, mulimea strilor,
starea iniial, mulimea strilor finale, tabelul de
definiie a funciei de tranziie
Ieire: Elementele de definiie ale AFN echivalent i
desenarea grafului de tranziie.

62

Atunci cnd am vorbit despre clasificarea gramaticilor, am dat urmtoarea


definiie pentru gramaticile regulate:
gramatica de tip 3: regulile sale sunt de tipul x -> px sau x -> p; unde x; x
VN; p S* (gramatici regulate)
Automatele finite, indiferent de tip, accept numai limbaje regulate. Este
foarte simplu de observat acest lucru, ncercnd s construim gramatica
formal care definete acelai limbaj ca i un AF dat. Vom vederea c toate
regulile de producie ale gramaticii respective vor avea, cel puin n forma
iniial, exact formatul de mai sus.
De exemplu, pentru AFD de mai jos, mulimea regulilor de producie a
gramaticii care definete acelai limbaj ar putea avea elementele:
S->0S | 1P |
P->1P | 0Q |
Q ->0Q | 1Q

0
q0

1
1

q1

0,1
0

q2
63

Aplicaie facultativ:
Implementarea ntr-un limbaj de programare oarecare a unei
aplicaii care s deduc gramatica formal echivalent pentru
un AFD dat.
Intrare: Pentru AFD se vor da, prin intermediul unui fiier de
intrare, alfabetul, mulimea strilor, starea iniial, mulimea
strilor finale, tabelul de definiie a funciei de tranziie
Ieire: Elementele de definiie ale gramaticii formale
echivalente.
Observaii:

Alfabetul AFD va fi mulimea terminalelor pentru G.


Mulimea strilor AFD va reprezenta mulimea neterminalelor pentru G.
Starea iniial va reprezenta simbolul de start pentru G.
Regulile de producie se vor construi pe baza tranziiilor AFD.

64

Expresiile regulate constituie un limbaj care


permite descrierea altor limbaje (descrierea
tuturor atomilor lexicali care pot aprea ntr-un
limbaj)
O expresie regulat R definete recursiv un
limbaj L (L(R)) astfel:
irul vid este o expresie regulat i reprezint irul
care nu conine niciun caracter. L()={}.
Orice caracter singular c este o expresie regulat i
reprezint irul de caractere care conin un singur
caracter, i anume pe c. L()={c}.
Concatenarea: Dac R1 i R2 sunt dou expresii
regulate, atunci R1R2 este o expresie regulat i
reprezint limbajul: L(R1R2)={s1s2| s1 R1 i s2 R2 }.

65

Reuniunea: Dac R1 i R2 sunt dou expresii


regulate, atunci R1|R2 este o expresie regulat i
L(R1|R2)=L(R1) U L(R2).
nchiderea: Dac R este o expresie regulat,
atunci R* este o expresie regulat i reprezint
limbajul format din mulimea de propoziii
obinute prin concatenarea a zero sau mai multe
iruri, fiecare din L(R). L(R*) = L() U L(R) U L(RR)
U L(RRR) U ... .
nchiderea nereflexiv: Dac R este o expresie
regulat, atunci R+ este o scriere prescurtat
pentru RR*. L(R+) = L(R) U L(RR) U L(RRR) U ... .
Opional: Dac R este o expresie regulat, atunci
R? Este o scriere prescurtat pentru R|.
66

Alte prescurtri permise:


[c1c2] este o prescurtare pentru c1|c2|
a1-an folosit ntr-o prescurtare de tipul anterior

reprezint toate caracterele dintre a1 i an


[^c1c2...] este o prescurtare pentru d1|d2|, unde d1, d2,
... Sunt toate acele caractere care nu apar printre c1, c2, ...
. Este o prescurtare pentru toate irurile de caractere care
au un singur caracter, iar acesta nu este un terminator de
linie

67

Operatorii nchidere i opional au prioritate


fa de concatenare, care are prioritate fa
de reuniune.
Pentru o scriere clar i fr ambiguiti se
pot utiliza parantezele rotunde.
Ex:
Expresia
regulat
ab?cd*ef|g
este
echivalent cu a(b?)c(d*)ef|g i reprezint
limbajul format din propoziiile: acef, g,
acefg, abcef, abcefg, acdddef, acdddefg,
abcdddefg, abcdddddef, .a.m.d.
68

1. Potrivirea unui text


Text:
Anna Jones and a friend went to lunch
Regex: went
Matches: Anna Jones and a friend went to lunch

2. Potrivirea unui singur caracter oarecare (punct)


Text:
abc def ant cow
Regex: a..
Matches: abc def ant cow

3. Potrivirea unui singur caracter dintr-un cuvnt


(backslash w mic)
Text:
abc anaconda ant cow apple
Regex:
a\w\w
Matches: abc anaconda ant cow apple

69

4. Potrivirea unui singur caracter care nu este


ntr-un cuvnt (backslash W mare)
Text:
abc anaconda ant cow apple
Regex:
a\W
Matches: abc anaconda ant cow apple

5. Potrivirea unui spaiu alb (backslash s mic)

Text:
abc anaconda ant
Regex: a\w\w\s
Matches: abc anaconda ant
Spaiu alb este definit ca fiind caracterul spaiu
(\0x0020), new line (\n), form feed (\f), carriage
return (\r), tab (\t) i vertical tab (\v).

70

6. Potrivirea unei cifre


Text:
123 12 843 8472
Regex:
\d\d\d
Matches: 123 12 843 8472

7. Potrivirea unui singur caracter dintr-un


anumit set
Text:
abc def ant cow
Regex: [da]..
Matches: abc def ant cow

Adugarea lui ^ la nceputul setului de caractere cere ca nici


unul dintre caracterele din setul specificat s nu fie cutate.
Text:
abc def ant cow
Regex: [^da]..
Matches: abc def ant cow

71

8. Potrivirea unui caracter dintr-o serie de caractere

Text:
abc pen nda uml
Regex: .[a-d].
Matches: abc pen nda uml
Text:
abc no 0aa i8i
Regex: [a-z0-9]\w\w
Matches: abc no 0aa i8i

9. Specificarea numrului de potriviri de zero sau de mai


multe ori
Text:
Anna Jones and a friend owned an anaconda
Regex: a\w*
Matches: Anna Jones and a friend owned an anaconda

10. Specificarea numrului de potriviri o dat sau de mai


multe ori
Text:
Anna Jones and a friend owned an anaconda
Regex:
a\w+
Matches: Anna Jones and a friend owned an anaconda

72

11. Specificarea numrului de potriviri de


zero ori sau o dat
Text:
Anna Jones and a friend owned an anaconda
Regex:
an?
Matches: Anna Jones and a friend owned an anaconda

12. Specificarea exact a numrului de potriviri

Text:
Anna Jones and Anne owned an anaconda
Regex: an{2}
Matches: Anna Jones and Anne owned an anaconda
Text:
Anna and Anne lunched with an anaconda annnnnex
Regex: an{2,3}
Matches: Anna and Anne lunched with an anaconda annnnnex

73

13. Potrivirea nceputului unui ir


Text:
an anaconda ate Anna Jones
Regex: ^a
Matches: an anaconda ate Anna Jones
14. Potrivirea sfritului unui ir
Text:
an anaconda ate Anna Jones
Regex: \w+$
Matches: Jones

74

n unele cazuri, secvene de caractere din codul surs se pot


potrivi la mai multe expresii regulate dintre cele folosite de ctre
analizor
Ex: Pentru expresiile regulate:(ab)* i ([a-c]*) i secvena de
caractere ab: secvena de caractere se potrivete ambelor
expresii. Deci trebuie convenit dac expresiile au prioritate n
ordinea apariiei sau n ordinea invers a apariiei.
Pentru aceeai expresie regulat pot exista secvene diferite din
codul surs care s se potriveasc la un moment dat.
Ex: Pentru expresia regulat ab|abcd i irul de intrare abcd:
se va extrage atomul ab sau atomul abcd?
Convenie n acest sens: leftmost longest cea mai lung din
partea stng:

Pentru operatorii ?,*,+ se va lua secvena cea mai mare de caractere care
se potrivete subexpresiei din care fac parte, i care permite i restului
codului surs s fie analizat.
Dac pentru o subexpresie R1|R2 se potrivete o aceeai secven de
caractere, atunci se va lua n considerare R1.

75

Orice expresie regulat simpl din definiia recursiv


a unei expresii regulate poate fi convertit ntr-un
automat finit.
Construcia automatului finit se face recursiv, pe baza
definiiei expresiei regulate.
Pentru fiecare dintre expresiile regulate de baz
prezentm automatul finit echivalent, cu o singur
stare final, folosind conveniile:
O eclips reprezint un automat care recunoate expresia
regulat R, sau aceeai main dar cu toate strile
componente transformate n stri nefinale.
O eclips este o colecie de stri i tranziii.
Cele dou stri marcate reprezint starea iniial i
respectiv starea final, sau starea iniial i starea final
transformat ntr-o stare nefinal.

76

77

Aplicaie facultativ:
Implementarea ntr-un limbaj de programare oarecare a unei
aplicaii care s construiasc AFD care accept acelai limbaj
ca i o expresie regulat dat.
Intrare: Expresia regulat.
Ieire:
1. Elementele de definiie ale AF epsilon
echivalent:
alfabetul, mulimea strilor, starea iniial, mulimea
strilor finale, graful de tranziie.
2. Codul care implementeaz funcionarea AFD echivalent
pentru AF epsilon de mai sus.

78

Istoria cultural a tuturor popoarelor a consemnat preocuparea


pentru limba perfect (pn n sec. XVII-lea)
(1) Dumnezeu i-a dat lui Adam o form a limbii ebraice, prin care El
i-ar fi vorbit lui Adam:
A dat apoi Domnul Dumnezeu lui Adam porunc i a zis: "Din toi

pomii din rai poi s mnnci, Iar din pomul cunotinei binelui i
rului s nu mnnci, cci, n ziua n care vei mnca din el, vei muri
negreit! (Geneza, 2:16-17)

Sau pe care Adam ar fi inventat-o dnd un nume animalelor:


i Domnul Dumnezeu, Care fcuse din pmnt toate fiarele

i n care ar fi avut primul dialog cu Eva.

cmpului i toate psrile cerului, le-a adus la Adam, ca s vad


cum le va numi; aa ca toate fiinele vii s se numeasc precum le va
numi Adam. i a pus Adam nume tuturor animalelor i tuturor
psrilor cerului i tuturor fiarelor slbatice. (Geneza, 2:19-20)

79

(2) Dumnezeu i-a dat lui Adam o gramatic


general, o form transcendental cu care s
construiasc toate limbile posibile (De Vulgari
Eloquentia, Dante).
A) Dumnezeu Chomskyan i-a dat lui Adam nite
structuri sintactice profunde ce se regsesc n orice
limb creat ulterior de ctre oameni.
B) Dumnezeu i-a dat lui Adam (Adam a identificat
n construirea primei limbi) nite universalii
semantice un sistem de noiuni atomice prin
combinarea crora se poate da seam de ntreg
mobilierul universului.
80

Din acetia [fii lui Noe] s-au format mulime de

popoare, care s-au aezat n diferite ri, fiecare


dup limba sa, dup neamul su i dup naia sa.
(Geneza, 10: 5)
Acetia sunt fiii lui Ham, dup familii, limb, ri i
dup naii. (Geneza, 10: 20)
Acetia sunt fiii lui Sem dup familii, dup limb,
dup ri i dup naii.(Geneza, 10: 31)
Versus
n vremea aceea era n tot pmntul o singur
limb i un singur grai la toi. (Geneza, 11:1)

81

Iniial se credea c exist o gramatic universal a


ideilor care reflect nsi organizarea universului.
Implic faptul c exist o structur de noiuni
universale prezente n limba i n gndirea oricrui
popor.
Exist deci un sistem al ideilor, acelai pentru toi
oamenii, iar de la popor la popor aceleiai idei i se
dau nume diferite.
Ex: ideogramele chinezeti, aceleai pentru chinezi,
japonezi i coreeni, pronunate cu sunete diferite
pentru fiecare popor n parte, pentru aceste
popoare diferite trimit la aceleai concepte.
82

Inventarea unor limbi (ulterior numite filosofice i a


priori) ele nu sunt descoperite, ci construite pe
baza unei viziuni filosofice asupra lumii.
Scopurile cutrii anterioare:
Convertirea necredincioilor la cretinism,
Regsirea comuniunii mistice cu Dumnezeu i cu
lucrurile pe care le nsemna limba perfect a lui
Adam.
Scopurile inveniilor:
Favorizarea schimburilor comerciale,
Ptrunderea colonial,
Rspndirea tiinei.
83

Common writing, Lodwick (1647)


Ars Signorum, Dalgarnus (1661)
Essay Towards a Real Character, John Wilkins
(1668)
Les estats et les empires de la lune, Cyrano de
Bergerac
Les estats et les empires du soleil, Cyrano de
Bergerac
The Man in the Moon, Francis Godwin
La terre australe connue, Gabriel de Foigny
LHistoire des Sevarambes, Deinis Veiras
84

http://news.softpedia.com/news/TheMetaphysics-of-Object-Oriented-Programming24906.shtml
http://www.perlmonks.org/?node_id=349593
http://en.wikipedia.org/wiki/Programming_paradig
m
http://www.scribd.com/doc/22056333/Limbajeformale-%C5%9Fi-automate
http://www.radsoftware.com.au/articles/regexlear
nsyntax.aspx
http://www.radsoftware.com.au/regexdesigner/
Umberto Eco, Limbajul Pmntului Austral, De la
arbore la labirint, edit. POLIROM, 2009.
85

S-ar putea să vă placă și