Date post: | 01-Mar-2018 |
Category: |
Documents |
Upload: | erick-fernando |
View: | 224 times |
Download: | 0 times |
of 19
7/25/2019 Flex Introduccion
1/19
Introduccin a Flex
7/25/2019 Flex Introduccion
2/19
Qu es lex?
Es un programa que genera analizadoreslxicos (tambin conocido como scannerseningls).
Usualmente se usa junto a Yacc Originalmente escrito por Eric Schmidt and
i!e "es! Est#ndar en Unix http$%%en.&i!ipedia.org%&i!i%"ex'programming'tool
http://en.wikipedia.org/wiki/Lex_programming_toolhttp://en.wikipedia.org/wiki/Lex_programming_tool7/25/2019 Flex Introduccion
3/19
Qu es Lex?
usca concordancias de un conjunto deexpresiones regulares un archi*o deentrada ejecuta acciones asociadas.
Expr1 =>Accin1Expr2 =>Accin2
Entrada
LexTokens
+
Acciones
7/25/2019 Flex Introduccion
4/19
Qu es flex?
+ast "exical ,nalizer generator Una alternati*a a "ex So-t&are libre Usualmente usado junto a bison Escrito orignalmente en por /ern 0axson
en 1234 5o es 65U http$%%en.&i!ipedia.org%&i!i%+lex'lexical'analser
http://en.wikipedia.org/wiki/Flex_lexical_analyserhttp://en.wikipedia.org/wiki/Flex_lexical_analyser7/25/2019 Flex Introduccion
5/19
Lexemas, patrones lxicos y
tokens "exema$ secuencia de caracteres de entrada 0atr7n lxico$ -orma compacta de describir
conjuntos de lexemas 8o!en$ clase de elementos 1 to!en 9 1 patr7n 1 to!en 9 1 lexema
7/25/2019 Flex Introduccion
6/19
Expresiones regulares
:e-inici7n -ormal delos lexemas quecorresponden a unto!en
0ermite decidircuando se reconoceun to!en a partir deuna secuencia deelementos deentrada
7/25/2019 Flex Introduccion
7/19
Ejemplos de expresiones en
flex :;gito 9< =>1>?>@>A>B>C>4>3>2 :;gito 9< D=2F 5Gmero entero$ D=2FH 5Gmero entero$ I:;gitoJH 5Gmero real sin signo$ I:;gitoJ
HK.KI:;gitoJL Mdenti-icador 9< Daz,NFD'az,
NFL 8-no. -ijo tamps 9< D3@AFD=2FI4J 0alabras que empiezan por e-e$
D-+FDaz,NFL ";neas que 5O empiezan por
e-e$ D-+F.L "iteral Pa5dK exacto$ a5d 0alabra PandK$ Da,FDn5FDd:F
7/25/2019 Flex Introduccion
8/19
Proceso de compilacin
7/25/2019 Flex Introduccion
9/19
Estructura de un archio Lex
Secci7n de de-inici7nQQSecci7n de reglas
QQSecci7n de c7digo
7/25/2019 Flex Introduccion
10/19
!eccin de definiciones
Se inclue c7digo para declarar *ariablesR-uncionesR tipos enumeradosR includesR etc que se*aan a necesitar.
Se copia exactamente en lex..c /a entre QI QJ
Se declaran to!ens a partir de expresiones regulares Se pueden establecer condiciones iniciales del
analizador lxico que se est# construendo 8;picamente contiene una declaraci7n de tipos
enumerados para los posibles to!ens O mejor aGnR un Tinclude a un archi*o que lo
contenga
7/25/2019 Flex Introduccion
11/19
!eccin de reglas
8iene el -ormato$ patr7n I acci7n J "os patrones son E.. la acci7n es c7digo :os tipos de l;neas$
+uente $ empiezan por blanco >> PQIK >> PQJK 0atr7nacci7n$ empiezan por otra cosa
El +uente se copia literalmente en lex..c Si ha concordancia con el patr7n se ejecuta la
acci7n asociada Si ha *arios patrones coincidentes se decide cu#l
corresponde se ejecuta la acci7n Si no ha concordanciaR ejecuta EVO (copia el
lexema en la salida)
7/25/2019 Flex Introduccion
12/19
!eccin de reglas "cont#
En la de-inici7n de patrones$ Usar D F para conjuntos de caracteres Usar ( ) para agrupar.
Es t;pico que *aan seguidos de L Usar IJ para utilizar los PbautizosK de la primera
secci7n uidado con$
omentarios de aracteres especiales$ . L W Q D etc Espacios en blanco tabuladores a principio de l;nea
7/25/2019 Flex Introduccion
13/19
!eccin de cdigo $
7digo creadas por necesidad delprogramador +lex
Se copian literalmente en el lex..c ,qu; es donde situaremos gran parte de la
l7gica -uncional de nuestras pr#cticas enlugar de hacerlo en la parte de acciones
7/25/2019 Flex Introduccion
14/19
Primer ejemplo en flex
econocer nGmeros de tel-ono de8amaulipas el :+R di-erenciarlos de otrosnGmeros tele-7nicos
7/25/2019 Flex Introduccion
15/19
%ccediendo al lexema
text contiene un puntero global al lexemareconocido
leng contiene la longitud del lexema Va otras m#s$ inR out... 8ambin ha -unciones$ lex()R &rap()R
more()R less()R terminate()... e*isar manual de +lex
7/25/2019 Flex Introduccion
16/19
&edefiniendo el main"#
0or de-ectoR +lex crea un main() que llama alex()
Si rede-inimos el main()R ha que llamar a
lex() lex() entra en un bucle in-inito hasta que
no ha m#s to!ens o se hace un return
7/25/2019 Flex Introduccion
17/19
$onsideraciones a tener encuenta
Ser mu riguroso con la estructura$ Si comienza por blancoR a no es l;nea de patr7n
acci7n :e-inir claramente las tres zonas delimitadas por Q
Q 8ener cuidado con los anidamientos de ()RDFRIJ 8ener presente la -orma de resoluci7n de mGltiples
patrones coincidentes
Elige el que concuerda con el stringm#s largo Si los patrones reconocen el mismo stringR elige el
que aparece primero en las declaraciones +lex
7/25/2019 Flex Introduccion
18/19
$onsideraciones a tener encuenta "cont#
Seguir principio Pdi*ide *encer#sK Si -alla el analizador lxicoR lo m#s simple es ir
eliminando patr7nacci7n hasta localizar el con-licti*o
Seguir principio XMSS (Xeep it simpleR stupid) 0ensar mu bien las E.. a utilizar puede simpli-icarmucho la tarea
8ener presente la di-erencia entre maGsculas minGsculas de los lexemas$
omplicar# el c7digo con un mont7n de Da,FDn5FDd:F... Se resuel*e con -lex Zi
7/25/2019 Flex Introduccion
19/19
&econocimientos
asado en seminario de :a*id 0ortols