Lex (software)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Utilidad estándar UNIX

Lex es un programa informático que genera analizadores léxicos ("scanners" o "lexers").

Lex se usa comúnmente con el generador de analizadores yacc. Lex, originalmente escrito por Mike Lesk y Eric Schmidt y descrito en 1975, es el generador de analizador léxico estándar en muchos sistemas Unix, y se especifica una herramienta equivalente como parte del estándar POSIX.

Lex lee un flujo de entrada que especifica el analizador léxico y escribe el código fuente que implementa el analizador léxico en el lenguaje de programación C.

Además de C, algunas versiones antiguas de Lex podían generar un lexer en Ratfor.

Código abierto

Aunque originalmente se distribuyó como software propietario, algunas versiones de Lex ahora son de código abierto. Las versiones de código abierto de Lex, basadas en el código propietario original, ahora se distribuyen con sistemas operativos de código abierto como OpenSolaris y Plan 9 de Bell Labs. Una popular versión de código abierto de Lex, llamada flex, o el 'analizador léxico rápido', no se deriva de la codificación propietaria.

Estructura de un archivo Lex

La estructura de un archivo Lex es intencionalmente similar a la de un archivo yacc: los archivos se dividen en tres secciones, separadas por líneas que contienen solo dos signos de porcentaje, de la siguiente manera:

  • El definiciones sección define macros e importa archivos de cabecera escritos en C. También es posible escribir cualquier código C aquí, que será copiado literal en el archivo fuente generado.
  • El reglas en la sección se asocian patrones de expresión regulares con las declaraciones C. Cuando el lexer vea texto en la entrada que coincida con un patrón dado, ejecutará el código C asociado.
  • El Código C sección contiene C declaraciones y funciones que son copiadas literales al archivo fuente generado. These statements presumably contain code called by the rules in the rules section. En los programas grandes es más conveniente colocar este código en un archivo separado vinculado en el tiempo de compilación.

Ejemplo de un archivo Lex

El siguiente es un archivo Lex de ejemplo para la versión flexible de Lex. Reconoce cadenas de números (enteros positivos) en la entrada y simplemente los imprime.

- Sí. Sección de definición ***/%{}/* C code to be copied verbatim */#include Identificado.h%}%% - Sí. Sección ***/ /* [0-9]+ coincide con una cadena de uno o más dígitos */[0-9]+ {} /* yytext es una cadena que contiene el texto emparejado. */ printf()"Ver un entero: %sn", Yytext); }.Silencion {} /* Ignora a todos los demás personajes. */ }%%- Sí. C Code section ***/int principal()vacío){} /* Llame al lexer, luego déjelo. */ Yylex(); retorno 0;}

Si esta entrada se da a flex, se convertirá en un archivo C, lex.yy.c. Esto se puede compilar en un ejecutable que coincide y produce cadenas de enteros. Por ejemplo, dada la entrada:

abc123z.

el programa imprimirá:

Vi un entero: 123
Vi un entero: 2
Vi un entero: 6

Usando Lex con otras herramientas de programación

Usando Lex con generadores de parser

Lex y los generadores de analizadores, como Yacc o Bison, suelen usarse juntos. Los generadores de analizadores utilizan una gramática formal para analizar un flujo de entrada, algo que Lex no puede hacer con expresiones regulares simples, ya que Lex se limita a autómatas de estado finito simples.

Por lo general, es preferible tener un analizador, uno generado por Yacc, por ejemplo, que acepte un flujo de tokens (un "flujo de tokens") como entrada, en lugar de tener que procesar un flujo de caracteres (un "character-stream") directamente. Lex se usa a menudo para producir un flujo de tokens de este tipo.

El análisis sin escáner se refiere al análisis del flujo de caracteres de entrada directamente, sin un lexer distinto.

Lex y hacer

make es una utilidad que se puede usar para mantener programas que involucren a Lex. Make asume que un archivo que tiene una extensión de .l es un archivo fuente Lex. La macro interna make LFLAGS se puede usar para especificar las opciones de Lex que make invocará automáticamente.

Contenido relacionado

Sierra circular

Una sierra circular es una sierra eléctrica que utiliza un disco o una cuchilla dentada o abrasiva para cortar diferentes materiales mediante un movimiento...

Vino (software)

Wine es una capa de compatibilidad gratuita y de código abierto que tiene como objetivo permitir que el software de aplicación y los juegos de computadora...

Rastra (herramienta)

En agricultura, una rastra es un implemento agrícola utilizado para la labranza superficial. Se utiliza después del arado para romper y alisar la superficie...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save