Jlex
Procesadores de Lenguajes 4o Informática PL curso 2008-2009 (CCIA)
CCIA
Octubre 2008
PL–0809 (CCIA)
Introducción a FLEX
Octubre-2008
1 / 12
Uso de FLEX
FLEX: traduce la especificación de un analizador léxico a un programa C que lo implementa
Analizador léxico descrito/especificado mediante expresiones regulares (E.R.) A las E.R. se lespueden asociar acciones (código C) Cada vez que el analizador encuentra una secuencia que encaja con una de las E.R., ejecutará la acción asociada
fichero.l → FLEX → lex.yy.c
lex.yy.c + (ficheros .c)
→ GCC →
ejecutable
PL–0809 (CCIA)
Introducción a FLEX
Octubre-2008
2 / 12
Pasos de compilación
1
Compilar la especificación del analizador y crear el fichero yy.lex.c conel código del autómata $ flex fichero.l Compilar el analizador C y generar el programa ejecutable
1
2
2
Enlazar con librería de FLEX (proporciona implemenatciones por defecto para yywrap() y main()) $ gcc lex.yy.c -lfl Compilar y enlazar con ficheros .c del usuario $ gcc lex.yy.c (ficheros .c)
Usuario proporciona implementaciones para main() e yywrap() Deberá llamar a la función yylex()que reconocerá un TOKEN por cada llamada.
PL–0809 (CCIA)
Introducción a FLEX
Octubre-2008
3 / 12
Funcionamiento de FLEX
tablas del autómata generado función int yylex(void) yylex() simula el analizador especificado y sirve de interfaz con el código de usuario lex.yy.c contiene
yylex() debe de ser llamada desde el código de usuario
Funcionamiento: En cada llamada, yylex():
12 3
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 patrón de esa E.R. Puede ser simplemente el procesamiento del texto macheado para enviarlo de nuevo a la salida. En otras ocasiones podrán suponer la alteración de variables del código de ususario y la devolución a la rutina que llama ayylex() (mediante return) de un valor numérico que identifique al TOKEN reconocido
Acciones:
PL–0809 (CCIA)
Introducción a FLEX
Octubre-2008
4 / 12
Partes de una especificación FLEX
Tres partes separadas por el símbolo % % Las dos primeras son obligatorias, aunque pueden estar vacías < sección de declaraciones > %%
< sección de reglas y acciones > %% < sección de rutinas deusuario >
PL–0809 (CCIA)
Introducción a FLEX
Octubre-2008
5 / 12
Sección de declaraciones
Código C necesario para las acciones asociadas a los patrones
El código C irá entre % y %, será copiado tal cual a lex.yy.c Generalmente serán #include, #define y estructuras o variables del código de usuario afectadas por las acciones
Definición de macros
Asocia un ”alias” a expr. regularesusadas en la sección de reglas (mejoran la legibilidad) En las reglas se referencia ese ”alias” poniéndolo entre llaves
definición: uso (en reglas ): LETRA_MAYUSCULA [A-Z] DIGITO [0-9] {LETRA_MAYUSCULA} {DIGITO}
Definición de entornos de reconocimiento (start conditions)
Entornos dentro de los cuales se podrán reconocer sub-expresiones dependiendo del contexto Permite generar”mini-analizadores” dentro del analizador
definición: uso: (en reglas)
%start NOMBRE [patron] {BEGIN(NOMBRE)} /*inicio entorno*/ [sub-patron] {[accion]} [sub-patron] {BEGIN(INITIAL)} /*fin entorno*
Introducción a FLEX Octubre-2008 6 / 12
PL–0809 (CCIA)
Sección de reglas
[exp. reg. 1] [acción 1]
Formato: ....
[exp. reg. n] [acción n]
Cada par ([exp. reg.], [acción]) recibe el nombre de regla
Si laacción involucra varias sentencias C, irán entre llaves ({...}) Si varias expr. reg. comparten la misma acción se indica con |
exp_reg1 | exp_reg2 | . . . exp_regN acción_común Notas:
El primer carácter de la expr. reg. debe de comenzar en la primera columna de texto Si no se especifica ninguna acción, se aplica la acción por defecto (se copia el string macheado en la salida)
Manejo de...
Regístrate para leer el documento completo.