Académique Documents
Professionnel Documents
Culture Documents
A LEX
Ø Nombre_archivo.l
Contiene las especificaciones lexicográfica del
lenguaje L (escrita en Lex y no tiene una extensión
determinada)
Ø lex.yy.c
Analizador lexicográfico de L generado por Lex
Ø libl
Librería asociada a Lex que contiene estructuras de
datos y funciones a las que se puede hacer referencia
desde el código generado
3. ESQUEMA DE FUNCIONAMIENTO
4. FORMATO DEL FICHERO FUENTE
DEFINICIONES
%%
PATRÓN ACCIÓN
%%
SUBRUTINAS DEL USUARIO
Ø Caracteres especiales:
→ Guión (-): nos indica rangos.
Ejemplo: [a-z] representa todos los caracteres minúscula.
→ Signo de intercalación (^): se sitúa seguido del primer [ y
representa cualquier carácter que no esté entre los [ ] .
Ejemplo: [^abc] representa todos los caracteres excepto a,b y c.
→ \ para incluirlos individualmente y “” para incluirlos en
grupo
5.1 OPERADORES
Ø Declaraciones C.- Se colocan entre dos líneas %{ y %}, las cuales le indican a
LEX que tienen que ser copiadas sin modificar al archivo generado C.
letra [a-z]
separación
8. VARIABLES GLOBALES
Ejemplo 1:
%% // Mínimo de un programa
Ejemplo 2:
%%
integer printf(“ palabra reservada INT ”) ;
Ejemplo 3:
%{
int count = 0;
%}
%%
username { ++count;
printf("%s", getlogin());
}
Ejemplo 4: Nombre del fichero: analizador1.l
%{
int Num_palabras = 0, Num_numeros = 0;
%}
letra [a-z]
cifra [0-9]
%%
{letra}+ { Num_palabrass++; }
{cifra}+ { Num_numeros++; }
\$ { return 0; }
\n {;}
. {;}
%%
main () {
yylex ();
printf ("Palabras: %d\n", Numpalabras);
printf ("Numerous : %d\n", Num_numeros); }
Ejemplo 5: Nombre del fichero: analizador2.l
%{ /* Necesario para la llamada a atoi() */
#include <math.h>
%}
DIGIT [0-9]
ID [a-z][a-z0-9]*
%%
{DIGIT}+ printf(“Un entero: %s %d\n", yytext,atoi(yytext));
if|then|begin|end printf(“Una palabra reservada: %s\n", yytext);
{ID} printf(“Un identificador: %s\n", yytext);
"+”|"-”|"*”|"=" printf(“Un operador: %s\n", yytext);
%%
main(int argc, char *argv[]) {
++argv; --argc; /*Evita el nombre del programa */
if (argc > 0)
yyin = fopen(argv[0], "r");
else
yyin = stdin;
yylex(); }
9.1 COMPILACIÓN Y EJECUCIÓN
Ø Sin paso de parámetros:
$ flex analizador1.l
$ cc lex.yy.c -o analizador1 –lfl
$ ./analizador1
if salir then
begin
x + 2345
end$
Palabras: 6
Números: 1
9.1 COMPILACIÓN Y EJECUCIÓN
#if YY_MAIN
int main()
{
yylex();
return 0;
}
#endif
#line 10 "analizador2.l"
yacc gram.y
lex analiza.l
cc y.tab.c –ly –ll
Ø http://sourceforge.net/projects/lex/
14. PREGUNTAS