Você está na página 1de 20

UNIVERSIDAD SAN PEDRO

Escuela de Ingeniera de Sistemas e Informtica

CONSTRUCCION MANUAL DE
UN ANALIZADOR LEXICO
Integrantes:
- Ruby Lozada Pariahuache
- Julio Corpus Mechato

Docente:
- Ing. Mitchell Paulo Blancas Nuez

- Ronald Roldan Salinas


- Jhair Rivera Martnez
- Elvis Zarate Vergaray
CHIMBOTE PER 2014
Rivera, Corpus, Roldan, Lozada, Zarate

INDICE
1. Qu es un Flex? .3
2. Ejemplo breve 1 . 4
3. Ejemplo breve 2 . 5
4. Formato del Fichero .. 6
5. Patrones 7
6. Cmo se empareja la entrada ?
7. Acciones
8. Escner generado
9. Condiciones de arranque
10. Mltiples buffers de Entrada
11. Reglas de Fin-de-Fichero
12. Macros miscelneas
13. Valores disponibles l usuario
14. Interfaz con YACC
15. Invocando a Flex
1. Sinopsis
2. Opciones
16. Consideraciones de rendimiento
17. Generando escneres en C++
18. Incompatibilidades con lex y POSIX
Rivera, Corpus, Roldan, Lozada - FLEX

QU ES UN FLEX?
Es una herramienta para
generarescneres.
Programas que reconocen
patrones lxicos en un texto
Flexlee los ficheros de entrada
dados, o la entrada estndar

Rivera, Corpus, Roldan, Lozada - FLEX

EJEMPLOS BREVES

1. %%
username printf ("%s", getlogin() );
-. Username = El Patrn
-. Printf = Es la Accin
-. % % = Marca el comienzo de las reglas

Rivera, Corpus, Roldan, Lozada - FLEX

EJEMPLOS BREVES

2. int num_lineas = 0, num_caracteres = 0;


%%
\n ++num_lineas; ++num_caracteres;
. ++num_caracteres;
%%
main() { yylex();
printf( "# de lneas = %d, # de caracteres. = %d\n",

Rivera, Corpus, Roldn, Lozada - FLEX

FORMATO DEL FICHERO


El fichero de entrada deFLEXest
compuesto de tres secciones, separadas
por una lnea donde aparece nicamente
un`%%'en esta:
definiciones
%%
reglas
%%
cdigo de usuario

Rivera, Corpus, Roldan, Lozada - FLEX

PATRONES
Los patrones en la entrada se escriben
utilizando un conjunto extendido de
expresiones regulares. Estas son:

`x'
`.'
`[xyz]'
`[abj-oZ]'
`[^A-Z]'
`[^A-Z\n]'
`r*'

Rivera, Corpus, Roldan, Lozada - FLEX

PATRONES

`r+'
`r?'
`r{2,5}'
`r{2, }'
`r{4}'
`{nombre}'
`\0'
`\123

Entre otros.

Rivera, Corpus, Roldan, Lozada - FLEX

COMO SE EMPAREJA
LA ENTRADA
Cuando
el
scner
generado
est
funcionando, este analiza su entrada
buscando cadenas que concuerden con
cualquiera de sus patrones.

Si encuentra ms de 1 emparejamiento:
Toma el que empareje ms texto.
Si encuentra 2 o ms emparejamiento:
Se escoge la regla listada en primer lugar
en el fichero de entrada de flex.

Rivera, Corpus, Roldan, Lozada - FLEX

COMO SE EMPAREJA
LA ENTRADA
El texto correspondiente al emparejamiento
(token) est disponible en el puntero a
carcter global yytext, y su longitud en la
variable global entera yyleng.
Entonces la accin correspondiente al
patrn emparejado se ejecuta, y la entrada
restante
se
analiza
para
otro
emparejamiento.
Si no se encuentra un emparejamiento,
entonces se ejecuta la regla por defecto: el
siguiente carcter en la entrada se considera
reconocido y se copia a la salida estndar.

Rivera, Corpus, Roldan, Lozada - FLEX

10

ACCIONES
Cada patrn en una regla tiene una
accin asociada, que puede ser cualquier
sentencia en C.
El patrn finaliza en el primer carcter de
espacio en blanco que no sea una
secuencia de escape, lo que queda de la
lnea es su accin,
Si la accin est vaca, entonces cuando
el patrn se empareje el token de
entrada simplemente se descarta.

Rivera, Corpus, Roldan, Lozada - FLEX

11

ESCANER GENERADO
La salida de flex es el fichero lex.yy.c que
contiene la rutina de anlisis yylex(), un
nmero de tablas usadas por esta para
emparejar tokens y un nmero de rutinas
auxiliares y macros.

Por defecto, yylex() se declara as:


Int yylex ( )
{
aqu van varias definiciones y las acciones
}

Rivera, Corpus, Roldan, Lozada - FLEX

12

CONDICIONES DE
ARRANQUE
Flex dispone de un mecanismo para activar reglas condicionalmente.
Cualquier regla cuyo patrn se prefije con <sc> nicamente estar activa
cuando el analizador se encuentre en la condicin de arranque llamada
sc. Por ejemplo:
<STRING>[^"]*
{ /* se come el cuerpo de la cadena ... */
...
}
estar activa solamente cuando el analizador est en la condicin de
arranque "STRING", y
<INITIAL,STRING,QUOTE>\. { /* trata una secuencia de escape ... */
...
}

Rivera, Corpus, Roldan, Lozada - FLEX

13

Rivera, Corpus, Roldan, Lozada - FLEX

14
14

Rivera, Corpus, Roldan, Lozada - FLEX

15
15

Rivera, Corpus, Roldan, Lozada - FLEX

16
16

Rivera, Corpus, Roldan, Lozada - FLEX

17
17

Rivera, Corpus, Roldan, Lozada - FLEX

18
18

Rivera, Corpus, Roldan, Lozada - FLEX

19
19

Rivera, Corpus, Roldan, Lozada - FLEX

20
20

Você também pode gostar