Sie sind auf Seite 1von 3

Lex (informtica)

Lex es un programa para generar analizadores lxicos (en


ingls scanners o lexers). Lex se utiliza comnmente con
el programa yacc que se utiliza para generar anlisis sintctico. Lex, escrito originalmente por Eric Schmidt y
Mike Lesk, es el analizador lxico estndar en los sistemas Unix, y se incluye en el estndar de POSIX. Lex toma como entrada una especicacin de analizador lxico
y devuelve como salida el cdigo fuente implementando
el analizador lxico en C.

te generado. Estas sentencias contienen generalmente el cdigo llamado por las reglas en la seccin de
las reglas. En programas grandes es ms conveniente
poner este cdigo en un archivo separado y enlazarlo en tiempo de compilacin.

Aunque tradicionalmente se trata de software propietario, 2 Ejemplo de archivo Flex


existen versiones libres de lex basadas en el cdigo original de AT&T en sistemas como OpenSolaris y Plan 9 de Lo siguiente es un ejemplo de archivo lex para la versin
los laboratorios Bell. Otra versin popular de software li- Flex de lex. Reconoce cadenas de nmeros (nmeros enbre de lex es Flex.
teros) en la entrada, y simplemente los imprime en la salida.

/*** Seccin de declaraciones ***/ %{ /* Cdigo en C


que ser copiado */ #include <stdio.h> %} /* Esto indica a Flex que lea slo un chero de entrada */ %option noyywrap %% /*** Seccin de reglas ***/ /* [0-9]+
identica una cadena de uno o ms dgitos */ [0-9]+ {
/* yytext es una cadena que contiene el texto coincidente. */ printf(Encontrado un entero: %s\n, yytext); } . {
/* Ignora todos los dems caracteres. */ } %% /*** Seccin de cdigo en C ***/ int main(void) { /* Ejecuta el
''lexer'', y despus termina. */ yylex(); return 0; }

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 lneas que contienen
solamente dos smbolos "%", como sigue:
Seccin de declaraciones %% Seccin de reglas %% Seccin de cdigo en C
La seccin de declaraciones es el lugar para denir macros y para importar los archivos de cabecera
escritos en C. Tambin es posible escribir cualquier
cdigo de C aqu, que ser copiado en el archivo
fuente generado. Este cdigo en C debe ir entre los
smbolos %{ %}.

Si se da esta entrada a ex, ser convertida en un archivo


de C, lex.yy.c. Esto se puede compilar en un ejecutable
que encuentre y haga salir cadenas de nmeros enteros.
Por ejemplo, dando la entrada:
abc123z.!&*2ghj6

el programa imprimir:
Tambin se pueden incluir atajos para denir patrones Encontrado un entero: 123 Encontrado un entero: 2 Ende la Seccin de Reglas, por ejemplo en vez del patrn contrado un entero: 6
[0-9]* (cero o ms dgitos que reconoceran cualquier nmero natural), se puede denir en esta seccin el atajo":
nmeros [0-9]*, as, en la seccin de cdigo pondramos
el patrn {nmeros} {accin_en_C;}. Con esto se clarica la escritura del cdigo en lex.
3 Uso de Lex con Yacc
La seccin de reglas es la seccin ms 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
patrn dado, ejecuta el cdigo asociado de C. sta
es la base de del funcionamiento de lex.

Lex y Yacc (un generador de analizadores sintcticos)


suelen ser utilizados juntos. Yacc utiliza una gramtica
formal para analizar un ujo de entradas, algo que Lex
no puede hacer con expresiones regulares simples (Lex se
limita a los autmatas de estados nitos simples). Sin embargo, Yacc no puede leer en un ujo de entradas simple
La seccin de cdigo C contiene sentencias en C - requiere una serie de smbolos. Lex se utiliza a menudo
y funciones que sern copiadas en el archivo fuen- para proporcionar a Yacc estos smbolos.
1

Vase tambin
Analizador lxico Flex
Yacc

Enlaces externos
Sitio ocial de Flex (en ingls)
Manual de Flex (en ingls)

ENLACES EXTERNOS

Text and image sources, contributors, and licenses

6.1

Text

Lex (informtica) Fuente: http://es.wikipedia.org/wiki/Lex%20(inform%C3%A1tica)?oldid=79312677 Colaboradores: Chobot, YurikBot, Jgaray, KnightRider, FedericoMP, CEM-bot, Rosarinagazo, Thijs!bot, JAnDbot, TXiKiBoT, Rei-bot, Moscar, Elabra sanchez, Shooke, SieBot, Alberto44768, UA31, Diegusjaimes, TobeBot, KLBot2, Polsaker, SteenthIWbot y Annimos: 5

6.2

Images

6.3

Content license

Creative Commons Attribution-Share Alike 3.0

Das könnte Ihnen auch gefallen