fbpx
Wikipedia

Lex (informática)

Lex es un programa para generar analizadores léxicos (en inglés scanners o lexers). Lex se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico. Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el estándar de POSIX. Lex toma como entrada una especificación de analizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.

Aunque tradicionalmente se trata de software propietario, existen versiones libres de lex basadas en el código original de AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versión popular de software libre de lex es Flex.

Estructura de un archivo de lex

La estructura de un archivo de lex es intencionadamente similar a la de un archivo del yacc; los archivos se dividen en tres secciones, separadas por líneas que contienen solamente dos símbolos "%", como sigue:

Sección de declaraciones %% Sección de reglas %% Sección de código en C 
  • La sección de declaraciones es el lugar para definir macros y para importar los archivos de cabecera escritos en C. También es posible escribir cualquier código de C aquí, que será copiado en el archivo fuente generado. Este código en C debe ir entre los símbolos %{ %}.

      También se pueden incluir "atajos" para definir patrones de la Sección de Reglas, por ejemplo en vez del patrón [0-9]* (cero o más dígitos que reconocerían cualquier número natural), se puede definir en esta sección el "atajo":  números [0-9]*, así, en la sección de código pondríamos el patrón {números} {acción_en_C;}. Con esto se clarifica la escritura del código en lex.

  • La sección de reglas es la sección más importante; asocia patrones a sentencias de C. Los patrones son simplemente expresiones regulares. Cuando el lexer encuentra un texto en la entrada que es asociable a un patrón dado, ejecuta el código asociado de C. Esta es la base de del funcionamiento de lex.
  • La sección de código C contiene sentencias en C y funciones que serán copiadas en el archivo fuente generado. Estas sentencias contienen generalmente el código llamado por las reglas en la sección de las reglas. En programas grandes es más conveniente poner este código en un archivo separado y enlazarlo en tiempo de compilación.

Ejemplo de archivo Flex

Lo siguiente es un ejemplo de archivo lex para la versión Flex de lex. Reconoce cadenas de números (números enteros) en la entrada, y simplemente los imprime en la salida.

/*** Sección de declaraciones ***/ %{ /* Código en C que será copiado */ #include <stdio.h> %} /* Esto indica a Flex que lea sólo un fichero de entrada */ %option noyywrap %% /*** Sección de reglas ***/ /* [0-9]+ identifica una cadena de uno o más dígitos */ [0-9]+ { /* yytext es una cadena que contiene el texto coincidente. */ printf("Encontrado un entero: %s\n", yytext); } . { /* Ignora todos los demás caracteres. */ } %% /*** Sección de código en C ***/ int main(void) { /* Ejecuta el ''lexer'', y después termina. */ yylex(); return 0; }

Si se da esta entrada a flex, será convertida en un archivo de C, lex.yy.c. Esto se puede compilar en un ejecutable que encuentre y haga salir cadenas de números enteros. Por ejemplo, dando la entrada:

abc123z.!&*2ghj6 

el programa imprimirá:

Encontrado un entero: 123 Encontrado un entero: 2 Encontrado un entero: 6 

Uso de Lex con Yacc

Lex y Yacc (un generador de analizadores sintácticos) suelen ser utilizados juntos. Yacc utiliza una gramática formal para analizar un flujo de entradas, algo que Lex no puede hacer con expresiones regulares simples (Lex se limita a los autómatas de estados finitos simples). Sin embargo, Yacc no puede leer en un flujo de entradas simple - requiere una serie de símbolos. Lex se utiliza a menudo para proporcionar a Yacc estos símbolos.

Véase también

  • Analizador léxico Flex
  • Yacc

Enlaces externos

  • Sitio oficial de Flex (en inglés)
  • Manual de Flex (en inglés)
  •   Datos: Q306650

informática, programa, para, generar, analizadores, léxicos, inglés, scanners, lexers, utiliza, comúnmente, programa, yacc, utiliza, para, generar, análisis, sintáctico, escrito, originalmente, eric, schmidt, mike, lesk, analizador, léxico, estándar, sistemas,. Lex es un programa para generar analizadores lexicos en ingles scanners o lexers Lex se utiliza comunmente con el programa yacc que se utiliza para generar analisis sintactico Lex escrito originalmente por Eric Schmidt y Mike Lesk es el analizador lexico estandar en los sistemas Unix y se incluye en el estandar de POSIX Lex toma como entrada una especificacion de analizador lexico y devuelve como salida el codigo fuente implementando el analizador lexico en C Aunque tradicionalmente se trata de software propietario existen versiones libres de lex basadas en el codigo original de AT amp T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell Otra version popular de software libre de lex es Flex Indice 1 Estructura de un archivo de lex 2 Ejemplo de archivo Flex 3 Uso de Lex con Yacc 4 Vease tambien 5 Enlaces externosEstructura de un archivo de lex EditarLa estructura de un archivo de lex es intencionadamente similar a la de un archivo del yacc los archivos se dividen en tres secciones separadas por lineas que contienen solamente dos simbolos como sigue Seccion de declaraciones Seccion de reglas Seccion de codigo en C La seccion de declaraciones es el lugar para definir macros y para importar los archivos de cabecera escritos en C Tambien es posible escribir cualquier codigo de C aqui que sera copiado en el archivo fuente generado Este codigo en C debe ir entre los simbolos Tambien se pueden incluir atajos para definir patrones de la Seccion de Reglas por ejemplo en vez del patron 0 9 cero o mas digitos que reconocerian cualquier numero natural se puede definir en esta seccion el atajo numeros 0 9 asi en la seccion de codigo pondriamos el patron numeros accion en C Con esto se clarifica la escritura del codigo en lex La seccion de reglas es la seccion mas importante asocia patrones a sentencias de C Los patrones son simplemente expresiones regulares Cuando el lexer encuentra un texto en la entrada que es asociable a un patron dado ejecuta el codigo asociado de C Esta es la base de del funcionamiento de lex La seccion de codigo C contiene sentencias en C y funciones que seran copiadas en el archivo fuente generado Estas sentencias contienen generalmente el codigo llamado por las reglas en la seccion de las reglas En programas grandes es mas conveniente poner este codigo en un archivo separado y enlazarlo en tiempo de compilacion Ejemplo de archivo Flex EditarLo siguiente es un ejemplo de archivo lex para la version Flex de lex Reconoce cadenas de numeros numeros enteros en la entrada y simplemente los imprime en la salida Seccion de declaraciones Codigo en C que sera copiado include lt stdio h gt Esto indica a Flex que lea solo un fichero de entrada option noyywrap Seccion de reglas 0 9 identifica una cadena de uno o mas digitos 0 9 yytext es una cadena que contiene el texto coincidente printf Encontrado un entero s n yytext Ignora todos los demas caracteres Seccion de codigo en C int main void Ejecuta el lexer y despues termina yylex return 0 Si se da esta entrada a flex sera convertida en un archivo de C lex yy c Esto se puede compilar en un ejecutable que encuentre y haga salir cadenas de numeros enteros Por ejemplo dando la entrada abc123z amp 2ghj6 el programa imprimira Encontrado un entero 123 Encontrado un entero 2 Encontrado un entero 6Uso de Lex con Yacc EditarLex y Yacc un generador de analizadores sintacticos suelen ser utilizados juntos Yacc utiliza una gramatica formal para analizar un flujo de entradas algo que Lex no puede hacer con expresiones regulares simples Lex se limita a los automatas de estados finitos simples Sin embargo Yacc no puede leer en un flujo de entradas simple requiere una serie de simbolos Lex se utiliza a menudo para proporcionar a Yacc estos simbolos Vease tambien EditarAnalizador lexico Flex YaccEnlaces externos EditarSitio oficial de Flex en ingles Manual de Flex en ingles Datos Q306650 Obtenido de https es wikipedia org w index php title Lex informatica amp oldid 132841107, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos