Está en la página 1de 2

LEX

Lex es un programa para generar analizadores léxicos. 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. Ésta 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.

YACC

Yacc es un programa para generar analizadores sintácticos. Las siglas del nombre


significan Yet Another Compiler-Compiler, es decir, "Otro generador de compiladores
más". Genera un analizador sintáctico (la parte de un compilador que comprueba que la
estructura del código fuente se ajusta a la especificación sintáctica del lenguaje) basado en
una gramática analíticaescrita en una notación similar a la BNF. Yacc genera el código para
el analizador sintáctico en el Lenguaje de programación C.

Fue desarrollado por Stephen C. Johnson en AT&T para el sistema operativo Unix.


Después se escribieron programas compatibles, por ejemplo Berkeley Yacc, GNU bison,
MKS yacc y Abraxas yacc (una versión actualizada de la versión original de AT&T que
también es software libre como parte del proyecto de OpenSolaris de Sun). Cada una ofrece
mejoras leves y características adicionales sobre el Yacc original, pero el concepto ha
seguido siendo igual. Yacc también se ha reescrito para otros lenguajes,
incluyendo Ratfor, EFL, ML, Ada, Java, y Limbo.

Puesto que el analizador sintáctico generado por Yacc requiere un analizador léxico, se
utiliza a menudo conjuntamente con un generador de analizador léxico, en la mayoría de
los casoslex o Flex, alternativa del software libre. El estándar de IEEE POSIX P1003.2
define la funcionalidad y los requisitos a Lex y Yacc.

La versión Yacc de AT&T se convirtió en software libre; el código fuente está disponible
con las distribuciones estándares del Plan 9 y de OpenSolaris.

También podría gustarte