SlideShare una empresa de Scribd logo
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

PDF
Conceptos Básicos acerca de Procesadores de Lenguajes
PPT
Incorporacion De Una Tabla De Simbolos Compiladores
PPT
TABLA DE SIMBOLOS
PDF
Flex bison
PDF
Taller de actividades de compiladores, Flex y Bison
PDF
Tabla simbolos
PPT
Analizador léxico
DOCX
Procedimiento Para Utilizar Flex Y Bison
Conceptos Básicos acerca de Procesadores de Lenguajes
Incorporacion De Una Tabla De Simbolos Compiladores
TABLA DE SIMBOLOS
Flex bison
Taller de actividades de compiladores, Flex y Bison
Tabla simbolos
Analizador léxico
Procedimiento Para Utilizar Flex Y Bison

La actualidad más candente (17)

PPTX
Tutorial de visual c++
PDF
Taller de flex y bison
PDF
Compiladores
PDF
Flex y Bison
PDF
Tutorial Flex y Bison
PDF
Flex y bison
PDF
Compiladores
PPT
DiseñO De Compilador
PDF
TALLER FLEX Y BISON
PDF
Herramientas flex y bison
PDF
Flex bison
PDF
Flex y bison
PDF
Compiladores flex bison
PPT
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tutorial de visual c++
Taller de flex y bison
Compiladores
Flex y Bison
Tutorial Flex y Bison
Flex y bison
Compiladores
DiseñO De Compilador
TALLER FLEX Y BISON
Herramientas flex y bison
Flex bison
Flex y bison
Compiladores flex bison
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Publicidad

Similar a Lex (20)

PDF
Taller compiladores conceptos
PDF
Analizador lexico.pdf
PDF
Compiladores - Flex y Bison
PDF
Funcion del lex
PPT
Cap3 compiladores
PDF
Taller analisis semantico
PDF
Taller 21 de junio
PPTX
Cap3
PDF
Taller flex y bison
PPTX
Tutorial de visual_c_
PPTX
Tutorial de visual C++
PPTX
Tutorial de visual c++
PPTX
IDENTIFICACION DE ELEMENTOS DEL LENGUAJE C
PDF
Flex y bison
PPTX
Alejandra gomez
PPTX
Alejandra gomez (1)
PPTX
Alejandra gomez (1)
PDF
Articulo
PPTX
Visual Basic
Taller compiladores conceptos
Analizador lexico.pdf
Compiladores - Flex y Bison
Funcion del lex
Cap3 compiladores
Taller analisis semantico
Taller 21 de junio
Cap3
Taller flex y bison
Tutorial de visual_c_
Tutorial de visual C++
Tutorial de visual c++
IDENTIFICACION DE ELEMENTOS DEL LENGUAJE C
Flex y bison
Alejandra gomez
Alejandra gomez (1)
Alejandra gomez (1)
Articulo
Visual Basic
Publicidad

Lex

  • 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++.