Sunteți pe pagina 1din 2

PT Laborator 2-3

Analiza lexicala
Analiza lexicala este procesul de impartire a unui sir de caractere in grupuri de caractere apartinind unor
clase numite unitati lexicale, unitati avind relevanta pentru proramul care citeste sirul de intrare.
Un sistem de traducere automata de limbaj natural citeste la intrare un sir de caractere care reprezinta
textul de tradus. Primul pas este separarea sirului de intrare in unitati (cuvinte) si clasificarea acestor
cuvinte din punct de vedere morfologic.
Un compilator (translator) citeste la intrare un sir de caractere ASCII. Primul pas este analiza lexicala,
care grupeaza caracterele din sirul de intrare in unitati lexicale: cuvinte cheie, operatori, identificatori,
constante intregi, etc. De exemplu, urmatoarea secventa:
if ( i == 15) a = b;
se separa in:
| if | ( | i | = = | 15 | ) | a | = | b | ; |
O descriere posibila care este usor de reprezentat ca o structura (union) in C a acestor unitati ar fi:
(KEYWORD, IF), (LPAR0, 0), (ID, i), (OP, EQUAL), (INT, 15), (RPAR, 0), (ID, a),
(OP, ASG), (ID, b), (SEMI, 0)
Unitatile lexicale sunt limbaje regulate. De exemplu,, expresiile regulate care descriu unitatile ID; INT,
OP-EQ, OP-ASG sunt:
(A+B+Z+a+b+.z)(A+B+.z+0+1+9)*
(0+1+9)(0+1+9)*
==
=
O functie program care realizeaza analiza lexicala se numeste analizor lexical si se poate implementa ca
un automat finit determinist. Un exemplu de diagrama de sintaxa a automatului care recunoaste unitatile
de mai sus este data mai jos:

Starile finale recunosc unitati lexicale. Starile finale marcate cu * trebuie sa returneze la intrare
(ungetc()), un caracter, pentru a fi folosit corect la urmatorul apel al functiei. Se observa ca
spatiile tab, sp, se ignora in bucla s0.

Tema. Sa se proiecteze si sa se implementeze un analizor lexical care pe linga unitatile de mai


sus sa recunoasca numere flotante, paranteze, operatori aritmetici din C (+,-,/,*), operatori
relationali, si citeva cuvinte cheie in C.

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