Académique Documents
Professionnel Documents
Culture Documents
Octubre 2008
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
1 / 12
Uso de FLEX
FLEX: traduce la especicacin de un analizador lxico a un programa C que lo implementa
Analizador lxico descrito/especicado mediante expresiones regulares (E.R.) A las E.R. se les pueden asociar acciones (cdigo C) Cada vez que el analizador encuentra una secuencia que encaja con una de las E.R., ejecutar la accin asociada
fichero.l FLEX lex.yy.c
GCC
ejecutable
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
2 / 12
Pasos de compilacin
1
Compilar la especicacin del analizador y crear el chero yy.lex.c con el cdigo del autmata $ flex fichero.l Compilar el analizador C y generar el programa ejecutable
1
Enlazar con librera de FLEX (proporciona implemenatciones por defecto para yywrap() y main()) $ gcc lex.yy.c -lfl Compilar y enlazar con cheros .c del usuario $ gcc lex.yy.c (ficheros .c)
Usuario proporciona implementaciones para main() e yywrap() Deber llamar a la funcin yylex() que reconocer un TOKEN por cada llamada.
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
3 / 12
Funcionamiento de FLEX
tablas del autmata generado funcin int yylex(void) yylex() simula el analizador especicado y sirve de interfaz con el cdigo de usuario lex.yy.c contiene
yylex() debe de ser llamada desde el cdigo de usuario
toma caracteres de la entrada hasta que machea una E.R. el texto que macheado se almacena en la variable yytext se ejecutan las acciones asociadas al patrn de esa E.R. Puede ser simplemente el procesamiento del texto macheado para enviarlo de nuevo a la salida. En otras ocasiones podrn suponer la alteracin de variables del cdigo de ususario y la devolucin a la rutina que llama a yylex() (mediante return) de un valor numrico que identique al TOKEN reconocido
Acciones:
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
4 / 12
< seccin de reglas y acciones > %% < seccin de rutinas de usuario >
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
5 / 12
Seccin de declaraciones
Cdigo C necesario para las acciones asociadas a los patrones
El cdigo C ir entre % y %, ser copiado tal cual a lex.yy.c Generalmente sern #include, #define y estructuras o variables del cdigo de usuario afectadas por las acciones
Denicin de macros
Asocia un alias a expr. regulares usadas en la seccin de reglas (mejoran la legibilidad) En las reglas se referencia ese alias ponindolo entre llaves
denicin: uso (en reglas ): LETRA_MAYUSCULA [A-Z] DIGITO [0-9] {LETRA_MAYUSCULA} {DIGITO}
%start NOMBRE [patron] {BEGIN(NOMBRE)} /*inicio entorno*/ <NOMBRE>[sub-patron] {[accion]} <NOMBRE>[sub-patron] {BEGIN(INITIAL)} /*fin entorno*
Introduccin a FLEX Octubre-2008 6 / 12
PL0809 (CCIA)
Seccin de reglas
[exp. reg. 1] [accin 1]
Formato: ....
[exp. reg. n] [accin n]
El primer carcter de la expr. reg. debe de comenzar en la primera columna de texto Si no se especica ninguna accin, se aplica la accin por defecto (se copia el string macheado en la salida)
Manejo de ambigedades
Si la entrada machea ms de 1 expr. reg. se elegir la expresin que machee mayor nm. caracteres Si nm. caracteres macheados es el mismo, se elige a la que aparezca primero en el chero FLEX
PL0809 (CCIA) Introduccin a FLEX Octubre-2008 7 / 12
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
8 / 12
Expresiones simples c reconoce el carcter c . cualquier carcter excepto salto de linea (\n) [abc] cualquier carcter del conjunto (a, b c) [abc] cualquier carcter excepto los del conjunto [a-z] cualquier carcter del rango indicado [a-z] cualquier carcter excepto los del rango "xxxx" reconoce la cadena indicada de forma literal {ALIAS} expande la expr. reg. asociada al alias indicado (denido en sec. declaraciones)
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
9 / 12
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
10 / 12
<AAA>R
Algunos smbolos de escape: \n salto de lnea \t tabulador \\ barra invertida \+, \, \ , \$ \[, \], \(, \), \{, \}
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
11 / 12
yyleng: Entero con la longitud de la cadena yytext yyin: Variable de tipo FILE * con un puntero al descritor del chero de donde se leen los caracteres
Por defecto se corresponde con la entrada estndar Para que el analizador FLEX lea de un chero distinto es necesario modicarla haciendo una llamada a fopen(...)
yyout: Variable de tipo FILE * con un puntero al chero en el que escribe el analizador lxico al utilizar la accin ECHO
Por defecto se corresponde con la salida estndar
PL0809 (CCIA) Introduccin a FLEX Octubre-2008 12 / 12
Acciones predenidas ECHO: Escribe en yyout el contenido de yytext BEGIN(...): Indica la entrada en una condicin de arranque ( mini-analizador)
BEGIN(INITIAL) retorna al amanizador principal
REJECT: Rechaza el macheo actual asignado a yytext y pasa a la siguiente regla que encaje (si la hay) unput(), input(): Modican los caracteres de entrada fuera del control del analizador FLEX
PL0809 (CCIA)
Introduccin a FLEX
Octubre-2008
12 / 12