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 binar ''out''
fișier binar ''flex.c''
fișier binar ''lex.yy.c''
fișier text ''lex.yy.c''
Operatorul regex "?" semnifică:
poate fi inlocuit cu un caracter alfanumeric
elementul precedent acestui operator este optional
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 ultima potrivire gasita
se alege potrivirea de lungime minima
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
utilitarul " g++"
utilitarul " flex"
compilatorul "bison"
compilatorul "gcc"
In utilitarul "flex", o declaratie o data definita:
se apeleaza folosindu-se parantezele patrate "[]"
se apeleaza prefixandu-se cu simbolul "%"
se apeleaza folosindu-se acoladele "{}"
se apeleaza prefixandu-se cu simbolul "&"
Fisierul de intrare flex contine sectiunile
directive, reguli
declaratii, reguli, rutine auxiliare
reguli de intrare, reguli de iesire
declaratii, directive, reguli
Operatorul regex "*" semnifica
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
substringul se poate repeta de mai multe ori, inclusiv de 0 ori
Iesirea analizatorului lexical este
un fisier c
un fisier c++
un sir de atomi lexicali
un binar(daca e sub linux) sau un executabil(sub windows)
Utilitarul flex este folosit pentru:
analiza lexicală și sintactică;
analiza lexicală;
analiza sintactică;
analiza semantică
Valoarea semantică a unui simbol neterminal (care primește valori) se reprezintă prin:
simbolul “_”
simbolul “=” sau *
simbolul “%%”
simbolul “$$”
Compilarea fișierelor de specificații “bison” generează:
fișiere .tab
fișiere .lex
fișiere .c
fișiere binare (executabile)
Un fișier de specificatii bison va avea secțiunile:
declarații C, cod utilizator C
declarații flex, declarații bison, reguli gramaticale
reguli gramaticale, declarații C (opțional)
declarații C, declarații bison, reguli gramaticale, cod utilizator C
Sintaxa generică a comenzii “bison” este:
bison flex
bison gcc <fișier specificatii>
bison -options <fișier specificatii>
bison [opțiuni] <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 obligatorie
este optionala
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 “main()” internă
funcția “yylex()”
funcția “ylexx()”
funcția “yyparse()”
Un fișier de specificatii gramaticale bison va contine:
doar producțiile gramaticale ce conțin simboluri terminale
Bo singura varianta pentru producțiile gramaticale posibile
mai multe variante ale producțiilor gramaticale
doar producțiile gramaticale ce conțin simboluri neterminale
Secțiunea “Rutine auxiliare” a unui fișier de reguli flex:
nu poate contine simbolul “.”
este opțională
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 interpretor
un analizator sintactic
un compilator ce genereaza output in limbajul C
un analizator lexical
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:
nu avem alte variante
-pentru generarea unui analizor lexical de tipul case-insensitiv
-pentru cautarea raspunsului corect
-pentru viata mea
Sintaxa generala a comenzii “flex” este:
-flex [ovi the best][fis]
-flex [opțiune][fis]
-flex [4 de da][fis]
-flex [as da zile][fis]