LEX - Lexical Analyzer

Previzualizare curs:

Extras din curs:

LEX (lexical analyzer) este un analizor lexical. In mod normal el este folosit impreuna cu YACC pentru a crea un compilator, dar poate fi folosit si separat.

LEX citeste un fisier cu extensia .L. Acest fisier il transforma intr-un fisier cu cod C, fisier care are numele fisierului initial si extensia .C. Exista mai multe variante ale LEX: FLEX (fast LEX), PCLEX.

Structura unui fisier LEX este urmatoarea:

Sectiune definitii

%%

Sectiune reguli

%%

Sectiune cod C

1. In prima sectiune se definesc macro-uri (se asociaza nume unor expresii regulate care vor fi folosite in sectiunea a doua), se includ fisiere antet scrise in C, se scrie cod C, care se va copia efectiv in fisierul C generat de LEX. Codul C va fi scris intre delimitatorii %{ si %}.

2. In a doua sectiune se definesc reguli (expresii regulate), precum si codul C ce se executa atunci cand ele sunt indeplinite. Cand se intalneste un text care corespunde expresiei regulate, se executa codul C asociat acelei expresii. Textul gasit este depus in variabila yytext (de tip char*), iar lungimea textului este depusa in variabila intreaga yyleng.

3. In ultima sectiune se scrie cod C ce se copiaza in fisierul C rezultat. Aici apar definitii de functii, inclusiv functia main (daca este cazul). De obicei in functia main se apeleaza functia yylex() care declanseaza efectiv analizarea lexicala.

Expresiile regulate se pot defini astfel:

1. Un caracter care nu este un metacaracter este o expresie regulata care corespunde acelui caracter (de exemplu A este expresia regulata ce corespunde caracterului A)

2. Doua expresii regulate concatenate r1r2 formeaza o noua expresie regulata, in care un text care corespunde primei expresii este urmat de un text corespunzator celei de-a doua expresii. Exemplu: ABCD.

3. Doua expresii regulate despartite prin |, r1|r2 este o noua expresie regulata. Un text corespunde lui r1|r2, daca el corespunde lui r1 sau lui r2. De exemplu, rosu|galben|albastru corespunde textului format cu unul dintre aceste cuvinte.

4. In generarea expresiilor regulate se pot folosi parantezele () pentru grupare.

5. Doua expresii regulate despartite prin /, r1/r2. Daca un text t1 corespunde regulii r1 si t2 corespunde regulii r2, atunci expresiei r1/r2 ii corespunde t1 numai daca este urmat de t2. De exemplu, expresiei PC/LEX ii corespunde textul PC numai daca este urmat de LEX.

6. Punctul . corespunde oricarui caracter cu exceptia delimitatorului de sfarsit de linie. De exemplu, A. corespunde oricarui cuvant din doua caractere, dintre care primul este litera A.

7. Caracterul ^ pus in fata unei expresii regulate. Textul corespunde expresiei regulate numai daca este la inceput de linie. De exemplu, pentru ^AB, cuvantul AB este acceptat numai daca este la inceput de linie.

8. Caracterul $ pus in fata unei expresii regulate textul corespunde expresiei regulate numai daca este la sfarsit de linie. De exemplu, pentru $AB, cuvantul AB este acceptat numai daca se gaseste la sfarsit de linie.

9. Intre paranteze patrate [ ] se pune o expresie regulata ce defineste o clasa de caractere. Regulile de definire a expresiei regulate din cadrul unei clase difera.

Concatenarea in cadrul unei clase reprezinta “sau”.

De exemplu, [0123456789] reprezinta orice cifra.

Caracterul - este folosit pentru a defini in cadrul unei clase un interval de caractere. De exemplu, [a-z] reprezinta orice litera mica, iar [a-zA-Z] reprezinta orice litera mica sau mare.

Caracterul ^ este folosit ca negatie daca este pus ca prim caracter in cadrul unei clase. De exemplu, [^0123456789] inseamna orice alt caracter in afara de cifra.

10. Ceea ce este pus intre ghilimele “” in cadrul unei clase sau in exterior anuleaza semnificatia metacarcterelor. De exemplu, “1.4*2” reprezinta textul 1.4*2.

11. Caracterul backslash anuleaza semnificatia caracterului ce urmeaza dupa el. De exemplu, {, }, ] etc. De asemenea, backslash este folosit pentru a construi secvente escape (cele din C): n, t etc.

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • LEX - Lexical Analyzer.doc
Alte informații:
Tipuri fișiere:
doc
Nota:
7/10 (1 voturi)
Nr fișiere:
1 fisier
Pagini (total):
4 pagini
Imagini extrase:
5 imagini
Nr cuvinte:
1 220 cuvinte
Nr caractere:
6 746 caractere
Marime:
12.02KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Curs
Domeniu:
Calculatoare
Predat:
la facultate
Materie:
Calculatoare
Sus!