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.