Secțiunile unui fișier de reguli flex sunt separate de simbolul:
"%%"
"&"
"%"
","
În urma compilării implicite a unui fișier de reguli flex, va rezulta:
fișier text ''lex.yy.c''
fișier binar ''out''
fișier binar ''flex.c''
fișier binar ''lex.yy.c''
Operatorul regex "?" semnifică:
elementul precedent acestui operator este optional
poate fi inlocuit cu un caracter alfanumeric
permite evaluarea ''greedy'' a expresiei
permite evaluarea ''lazy'' a expresiei
Daca un sir de intrare in tokenizator are mai multe potriviri(conform pattern-ului)
se alegea potrivirea de lungime cea mai mare
se alege potrivirea de lungime minima
se alege ultima potrivire gasita
se genereaza eroare
Fisierul de reguli flex poate contine operatori regex
da
da, daca acestia sunt incadrati de simbolurile "[]"
da, daca acestia sunt incadrati de simbolurile "{}"
da, daca sunt folositi cel mai mult doar unul pe o linie de cod
Fisierul de reguli flex sunt compilate folosind
compilatorul "gcc"
utilitarul " g++"
utilitarul " flex"
compilatorul "bison"
In utilitarul "flex", o declaratie o data definita:
se apeleaza folosindu-se acoladele "{}"
se apeleaza folosindu-se parantezele patrate "[]"
se apeleaza prefixandu-se cu simbolul "%"
se apeleaza prefixandu-se cu simbolul "&"
Fisierul de intrare flex contine sectiunile
declaratii, reguli, rutine auxiliare
directive, reguli
reguli de intrare, reguli de iesire
declaratii, directive, reguli
Operatorul regex "*" semnifica
substringul se poate repeta de mai multe ori, inclusiv de 0 ori
substringul este unic in stringul pe care se face cautarea
substringul se poate repeta de mai multe ori, dar cel putin o data
substringul se repeta doar o data
Iesirea analizatorului lexical este
un sir de atomi lexicali
un fisier c
un fisier c++
un binar(daca e sub linux) sau un executabil(sub windows)
Utilitarul flex este folosit pentru:
analiza lexicală;
analiza lexicală și sintactică;
analiza sintactică;
analiza semantică
Valoarea semantică a unui simbol neterminal (care primește valori) se reprezintă prin:
simbolul “$$”
simbolul “_”
simbolul “=” sau *
simbolul “%%”
Compilarea fișierelor de specificații “bison” generează:
fișiere .tab.c
fișiere .lex
fișiere binare (executabile)
Un fișier de specificatii bison va avea secțiunile:
declarații C, declarații bison, reguli gramaticale, cod utilizator C
declarații C, cod utilizator C
declarații flex, declarații bison, reguli gramaticale
reguli gramaticale, declarații C (opțional)
Sintaxa generică a comenzii “bison” este:
bison [opțiuni] <fișier specificatii>
bison flex
bison gcc <fișier specificatii>
bison -options <fișier specificatii>
Un fișier de specificatii bison va avea secțiunile separate prin:
simbolurile “%%”,”%{“ și “}%”
simbolurile “{}” și “%%”
de linii goale
Secțiunea “Declarații” a unui fișier de reguli flex:
este optionala
este obligatorie
nu poate contine simbolul “. “
nu exista în flex
Programul C obținut la execuția aplicației “flex” rezidă într-o:
funcție yylex()
funcție ytext()
funcție main()
funcție yerror()
Analiza sintactica din cadrul unui parser “bison” se face prin:
funcția “yyparse()”
funcția “main()” internă
funcția “yylex()”
funcția “ylexx()”
Un fișier de specificatii gramaticale bison va contine:
mai multe variante ale producțiilor gramaticale
doar producțiile gramaticale ce conțin simboluri terminale
Bo singura varianta pentru producțiile gramaticale posibile
doar producțiile gramaticale ce conțin simboluri neterminale
Secțiunea “Rutine auxiliare” a unui fișier de reguli flex:
este opțională
nu poate contine simbolul “.”
Care din comenzile urmatoare permit lansarea in executie a unui navigator de fișiere sub shell-ul Linux
mc
nano
./
mv (mn)
”Flex” este
un analizator lexical
un interpretor
un analizator sintactic
un compilator ce genereaza output in limbajul C
Utilizarea operatorului “./” in shell-ul Linux permite
lansarea in executie a unui binar executabil
invocarea interpretorului binar pentru executarea unui script bash
compilarea unui program sursa
invocarea interpretorului bash pentru editarea unui script bash
Utilitarul “flex” folosește parametrul “-i” pentru:
-pentru generarea unui analizor lexical de tipul case-insensitiv
nu avem alte variante
-pentru cautarea raspunsului corect
-pentru viata mea
Sintaxa generala a comenzii “flex” este:
-flex [opțiune][fis]
-flex [ovi the best][fis]
-flex [4 de da][fis]
-flex [as da zile][fis]