SlideShare una empresa de Scribd logo
1 de 2
LEX
El lex es un generador de programas diseñado para el proceso léxico de cadenas de
caracteres de input. El programa acepta una especificación, orientada a resolver un
problema de alto nivel para comparar literales de caracteres, y produce un programa C
que reconoce expresiones regulares. Estas expresiones las especifica el usuario en las
especificaciones fuente que se le dan al lex. El código lex reconoce estas expresiones en
una cadena de input y divide este input
en cadenas de caracteres que coinciden con las expresiones. En los bordes entre los
literales, se ejecutan las secciones de programas proporcionados por el usuario. El fichero
fuente lex asocia las expresiones regulares y los fragmentos de programas. Puesto que
cada expresión aparece en el input del programa escrito por el lex, se ejecuta el
fragmento correspondiente. El usuario proporciona el código adicional necesario para
completar estas funciones, incluyendo código escrito por otros generadores. El programa
que reconoce las expresiones se genera en forma de fragmentos de programa C del
usuario, El lex no es un lenguaje completo sino un generador que representa una cualidad
de un nuevo lenguaje que se añade al leguaje de programación C. El lex convierte las
expresiones y acciones del usuario (llamadas fuente en este capítulo) en un programa C
llamado yylex. El programa yylex reconoce expresiones en un flujo (llamado input en este
capítulo) y lleva a cabo las acciones especificadas para cada expresión a medida que se
va detectando Considere un programa para borrar del input todos los espacios en blanco
y todos los tabuladores de los extremos de las líneas. Las líneas siguientes:
%%
[b t]+ $ ;
es todo lo que se requiere. El programa contiene un delimitado %% para marcar el
principio de las órdenes, y una orden. Esta orden contiene una expresión que coincide
con una o más apariciones de los caracteres espacio en blanco o tabulador (escrito  t
para que se vea con mayor claridad, de acuerdo con la convención del lenguaje C) justo
antes del final de una línea. Los corchetes indican la clase del carácter compuesto de
espacios en blanco y tabuladores; el + indica uno o más del item anterior; y el signo de
dólar ($) indica el final de la línea. No se especifica ninguna acción, por lo tanto el
programa generado por el lex ignorará estos caracteres. Todo lo demás se copiará . Para
cambiar cualquier adena de caracteres en blanco o tabuladores que queden en un solo
espacio en blanco, añada otra orden:
%%
[b t]+$ ;
[b t] + printf (“ ”);
El lex se puede usar sólo para transformaciones sencillas, o por análisis o
estadísticas buscando en un nivel léxico. El lex también se puede usar con un
generador reconocedor para llevar a cabo la fase de análisis léxico;
-------------------------------------------------------------------------------------
Lex es una herramienta de los sistemas UNIX/Linux que nos va a permitir generar código
C que luego podremos compilar y enlazar con nuestro programa.
 La principal característica de Lex es que nos va a permitir asociar acciones descritas en
C, a la localizaci ón de las Expresiones Regulares que le hayamos definido. Para ello Lex
se apoya en una plantilla que recibe como parámetro, y que deberemos diseñar con
cuidado.
 Internamente Lex va a actuar como un autómata que localizará las expresiones regulares
que le describamos, y una vez reconocida la cadena representada por dicha expresión
regular, ejecutará el código asociado a esa regla.
HISTORIA
En 1975, con la aparición de LEX surge el concepto de un generador automático de
analizadores léxicos a partir de expresiones regulares, basado en el sistema
operativo UNIX.
A partir de los trabajos de Chomsky ya citados, se produce una sistematización de la
sintaxis de los lenguajes de programación, y con ello un desarrollo de
diversos métodos de análisis sintáctico.

FLEX
flex es una herramienta para generar escaneres: programas que reconocen patrones
lexicos en un texto. flex lee los ficheros de entrada dados, o la entrada estandar si no se
le ha indicado ningun nombre de fichero, con la descripcion de un escaner a generar. La
descripcion se encuentra en forma de parejas de expresiones regulares y codigo C,
denominadas reglas. flex genera como salida un fichero fuente en C, `lex.yy.c', que define
una rutina `yylex()'. Este fichero se compila y se enlaza con la libreria `-lfl' para producir un
ejecutable. Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de
casos de las expresiones regulares. Siempre que encuentra uno, ejecuta el codigo C
correspondiente.
El principal objetivo de diseño de flex es que genere analizadores de alto rendimiento.
Este ha sido optimizado para comportarse bien con conjuntos grandes de reglas. Aparte
de los efectos sobre la velocidad del analizador con las opciones de compresion de
tablas `-C' anteriormente introducidas, hay un numero de opciones/acciones que
degradan el rendimiento. Estas son, desde la mas costosa a la menos:lex ofrece dos
maneras distintas de generar analizadores para usar con C++. La primera manera es
simplemente compilar un analizador generado por flex usando un compilador de C++ en
lugar de un compilador de C. No deberia encontrarse ante ningun error de compilacion
(por favor informe de cualquier error que encuentre a la direccion de correo electronico
dada en el section Autor). Puede entonces usar codigo C++ en sus acciones de las reglas
en lugar de codigo C. Fijese que la fuente de entrada por defecto para su analizador
permanece como yyin, y la repeticion por defecto se hace aun a yyout. Ambos
permanecen como variables `FILE *' y no como flujos de C++.Tambien puede
utilizar flex para generar un analizador como una clase de C++, utilizando la opcion `-+' (o,
equivalentemente, `%option c++'), que se especifica automaticamente si el nombre del
ejecutable de flex finaliza con un `+', tal como flex++. Cuando se usa esta opciox, flex
establece por defecto la generacion del analizador al fichero `lex.yy.cc' en vez
de `lex.yy.c'. El analizador generado incluye el fichero de cabecera `FlexLexer.h', que
define el interfaz con las dos clases de C++.

Más contenido relacionado

La actualidad más candente (17)

Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
Tutorial Flex y Bison
Tutorial Flex y BisonTutorial Flex y Bison
Tutorial Flex y Bison
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Flex y bison
Flex y  bisonFlex y  bison
Flex y bison
 
Compiladores
CompiladoresCompiladores
Compiladores
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De Compilador
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
TALLER FLEX Y BISON
TALLER FLEX Y BISONTALLER FLEX Y BISON
TALLER FLEX Y BISON
 
Herramientas flex y bison
Herramientas flex y bisonHerramientas flex y bison
Herramientas flex y bison
 
Analizador lexico
Analizador lexicoAnalizador lexico
Analizador lexico
 
Flex bison
Flex bisonFlex bison
Flex bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Compiladores flex bison
Compiladores flex bisonCompiladores flex bison
Compiladores flex bison
 
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,CompiladoresTabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
 

Similar a Generador lex para expresiones regulares en C

Taller compiladores conceptos
Taller compiladores conceptosTaller compiladores conceptos
Taller compiladores conceptosjuniortroya
 
Analizador lexico.pdf
Analizador lexico.pdfAnalizador lexico.pdf
Analizador lexico.pdfShadowArt2
 
Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y BisonSteven Tabango
 
Funcion del lex
Funcion del lexFuncion del lex
Funcion del lexPaul MG
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladoresCJAO
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Taller 21 de junio
Taller 21 de junioTaller 21 de junio
Taller 21 de junioAlex Ortiz
 
Cap3
Cap3Cap3
Cap3CJAO
 
Taller flex y bison
Taller flex y bisonTaller flex y bison
Taller flex y bisondanilopuente
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++juliancetis109
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_oscar020615
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++juliancetis109
 
Alejandra gomez
Alejandra gomezAlejandra gomez
Alejandra gomezalejitaacg
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)alejandra985
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)alejandra985
 
Visual Basic
Visual BasicVisual Basic
Visual BasicIrismar_6
 
Taller de Compiladores flx y bsn
Taller de Compiladores flx y bsnTaller de Compiladores flx y bsn
Taller de Compiladores flx y bsnDanielRosero23
 

Similar a Generador lex para expresiones regulares en C (20)

Taller compiladores conceptos
Taller compiladores conceptosTaller compiladores conceptos
Taller compiladores conceptos
 
Lex yacc
Lex yaccLex yacc
Lex yacc
 
Analizador lexico.pdf
Analizador lexico.pdfAnalizador lexico.pdf
Analizador lexico.pdf
 
Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y Bison
 
Funcion del lex
Funcion del lexFuncion del lex
Funcion del lex
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladores
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Taller 21 de junio
Taller 21 de junioTaller 21 de junio
Taller 21 de junio
 
Cap3
Cap3Cap3
Cap3
 
Taller flex y bison
Taller flex y bisonTaller flex y bison
Taller flex y bison
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Alejandra gomez
Alejandra gomezAlejandra gomez
Alejandra gomez
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)
 
Alejandra gomez (1)
Alejandra gomez (1)Alejandra gomez (1)
Alejandra gomez (1)
 
Articulo
ArticuloArticulo
Articulo
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Taller de Compiladores flx y bsn
Taller de Compiladores flx y bsnTaller de Compiladores flx y bsn
Taller de Compiladores flx y bsn
 

Generador lex para expresiones regulares en C

  • 1. LEX El lex es un generador de programas diseñado para el proceso léxico de cadenas de caracteres de input. El programa acepta una especificación, orientada a resolver un problema de alto nivel para comparar literales de caracteres, y produce un programa C que reconoce expresiones regulares. Estas expresiones las especifica el usuario en las especificaciones fuente que se le dan al lex. El código lex reconoce estas expresiones en una cadena de input y divide este input en cadenas de caracteres que coinciden con las expresiones. En los bordes entre los literales, se ejecutan las secciones de programas proporcionados por el usuario. El fichero fuente lex asocia las expresiones regulares y los fragmentos de programas. Puesto que cada expresión aparece en el input del programa escrito por el lex, se ejecuta el fragmento correspondiente. El usuario proporciona el código adicional necesario para completar estas funciones, incluyendo código escrito por otros generadores. El programa que reconoce las expresiones se genera en forma de fragmentos de programa C del usuario, El lex no es un lenguaje completo sino un generador que representa una cualidad de un nuevo lenguaje que se añade al leguaje de programación C. El lex convierte las expresiones y acciones del usuario (llamadas fuente en este capítulo) en un programa C llamado yylex. El programa yylex reconoce expresiones en un flujo (llamado input en este capítulo) y lleva a cabo las acciones especificadas para cada expresión a medida que se va detectando Considere un programa para borrar del input todos los espacios en blanco y todos los tabuladores de los extremos de las líneas. Las líneas siguientes: %% [b t]+ $ ; es todo lo que se requiere. El programa contiene un delimitado %% para marcar el principio de las órdenes, y una orden. Esta orden contiene una expresión que coincide con una o más apariciones de los caracteres espacio en blanco o tabulador (escrito t para que se vea con mayor claridad, de acuerdo con la convención del lenguaje C) justo antes del final de una línea. Los corchetes indican la clase del carácter compuesto de espacios en blanco y tabuladores; el + indica uno o más del item anterior; y el signo de dólar ($) indica el final de la línea. No se especifica ninguna acción, por lo tanto el programa generado por el lex ignorará estos caracteres. Todo lo demás se copiará . Para cambiar cualquier adena de caracteres en blanco o tabuladores que queden en un solo espacio en blanco, añada otra orden: %% [b t]+$ ; [b t] + printf (“ ”); El lex se puede usar sólo para transformaciones sencillas, o por análisis o estadísticas buscando en un nivel léxico. El lex también se puede usar con un generador reconocedor para llevar a cabo la fase de análisis léxico; ------------------------------------------------------------------------------------- Lex es una herramienta de los sistemas UNIX/Linux que nos va a permitir generar código C que luego podremos compilar y enlazar con nuestro programa. La principal característica de Lex es que nos va a permitir asociar acciones descritas en C, a la localizaci ón de las Expresiones Regulares que le hayamos definido. Para ello Lex se apoya en una plantilla que recibe como parámetro, y que deberemos diseñar con cuidado. Internamente Lex va a actuar como un autómata que localizará las expresiones regulares que le describamos, y una vez reconocida la cadena representada por dicha expresión regular, ejecutará el código asociado a esa regla.
  • 2. HISTORIA En 1975, con la aparición de LEX surge el concepto de un generador automático de analizadores léxicos a partir de expresiones regulares, basado en el sistema operativo UNIX. A partir de los trabajos de Chomsky ya citados, se produce una sistematización de la sintaxis de los lenguajes de programación, y con ello un desarrollo de diversos métodos de análisis sintáctico. FLEX flex es una herramienta para generar escaneres: programas que reconocen patrones lexicos en un texto. flex lee los ficheros de entrada dados, o la entrada estandar si no se le ha indicado ningun nombre de fichero, con la descripcion de un escaner a generar. La descripcion se encuentra en forma de parejas de expresiones regulares y codigo C, denominadas reglas. flex genera como salida un fichero fuente en C, `lex.yy.c', que define una rutina `yylex()'. Este fichero se compila y se enlaza con la libreria `-lfl' para producir un ejecutable. Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de casos de las expresiones regulares. Siempre que encuentra uno, ejecuta el codigo C correspondiente. El principal objetivo de diseño de flex es que genere analizadores de alto rendimiento. Este ha sido optimizado para comportarse bien con conjuntos grandes de reglas. Aparte de los efectos sobre la velocidad del analizador con las opciones de compresion de tablas `-C' anteriormente introducidas, hay un numero de opciones/acciones que degradan el rendimiento. Estas son, desde la mas costosa a la menos:lex ofrece dos maneras distintas de generar analizadores para usar con C++. La primera manera es simplemente compilar un analizador generado por flex usando un compilador de C++ en lugar de un compilador de C. No deberia encontrarse ante ningun error de compilacion (por favor informe de cualquier error que encuentre a la direccion de correo electronico dada en el section Autor). Puede entonces usar codigo C++ en sus acciones de las reglas en lugar de codigo C. Fijese que la fuente de entrada por defecto para su analizador permanece como yyin, y la repeticion por defecto se hace aun a yyout. Ambos permanecen como variables `FILE *' y no como flujos de C++.Tambien puede utilizar flex para generar un analizador como una clase de C++, utilizando la opcion `-+' (o, equivalentemente, `%option c++'), que se especifica automaticamente si el nombre del ejecutable de flex finaliza con un `+', tal como flex++. Cuando se usa esta opciox, flex establece por defecto la generacion del analizador al fichero `lex.yy.cc' en vez de `lex.yy.c'. El analizador generado incluye el fichero de cabecera `FlexLexer.h', que define el interfaz con las dos clases de C++.