Sei sulla pagina 1di 10

Facultad De Ingeniera Ciencias Fsicas

Matemtica
Lenguajes y compiladores

Paralelo 1

Diseo de un compilador utilizando LEX


y YACC
1. Objetivos

Crear una gua que facilite el proceso de instalacin de Lex y Yacc

Mostrar como configurar las variables de entorno para un fcil y


correcto funcionamiento.
Mostrar un ejemplo que ayude a la comprensin del manejo de
estas dos herramientas.

2. Marco terico
Lex es una herramienta de los sistemas UNIX/Linux que nos va a
permitir generar cdigo C que luego podremos compilar y enlazar
con nuestro programa. La principal caracterstica de Lex es que
nos va a permitir asociar acciones descritas en C, a la localizacin
de las Expresiones Regulares que le hayamos definido. Para ello
Lex se apoya en una plantilla que recibe como parmetro, y que
deberemos disear con cuidado. Internamente Lex va a actuar
como un autmata que localizar las expresiones regulares que le
describamos, y una vez reconocida la cadena representada por
dicha expresin regular, ejecutar el cdigo asociado a esa regla.
Estructura de un archivo LEX.
Seccin de declaraciones
%%
Seccin de reglas
%%
Cdigo en C
Se compone de tres secciones con estructuras distintas y
claramente delimitadas por una lnea en la que lo nico que
aparece es el carcter doble %. Las secciones de Declaraciones y
la de Procedimientos de Usuario son opcionales, mientras que la de
Reglas es obligatoria (aunque se encuentre vaca).
Yacc no es directamente un analizador sino un generador de
analizadores. A partir de un fichero fuente en yacc, se genera un
fichero fuente en C que contiene el analizador sintctico. Sin
embargo, un analizador sintctico de yacc no puede funcionar por
s solo, sino que necesita un analizador lxico externo para
funcionar. Dicho de otra manera, el fuente en C que genera yacc
contiene llamadas a una funcin yylex() que debe estar definida y
debe devolver el tipo de lexema encontrado. Adems, es necesario
incorporar tambin una funcin yyerror(), que ser invocada

cuando el analizador sintctico encuentre un smbolo que no


encaja en la gramtica.
La estructura de un archivo YACC se divide en tres secciones y es
similar a la estructura de LEX, estas son:
Seccin de declaraciones
%%
Seccin de reglas
%%
Seccin de rutinas en C.
De estas tres secciones, slo la segunda es obligatoria, y esta no
debe estar vaca.
La seccin de declaraciones puede incluir varias cosas, tal y como
ocurra en lex, pero ahora su funcin principal no es definir
expresiones regulares, sino declarar los smbolos terminales de la
gramtica mediante la directriz %token. Todo lo que no sea un
terminal, ser considerado un smbolo no terminal, y por tanto
debe haber una regla para l.
La seccin de reglas contiene la gramtica en s la cual debe ir
acompaada de una combinacin de terminales y no terminales
que describe al no terminal de la izquierda de la regla.
La seccin de rutinas tiene
yacc (dependiendo de su
funciones main(), yylex() e
aqu, o bien en otro fichero
compilacin.

la misma funcin que la de lex, pero


variante) no define por defecto las
yyerror(), as que hay que incluirlas
que se enlazar en la fase final de la

Yacc genera una funcin llamada yyparse() que contiene el


analizador sintctico. Esta funcin se comporta como una mquina
de estados cuya misin es intentar reducir todo el fichero de
entrada al smbolo inicial de la gramtica (el primero que se haya
definido). Si yacc lo consigue, el analizador sintctico volver sin
error, y en caso contrario, se invocar a la funcin yyerror(), que
debe estar definida tambin en algn sitio.

3. Instalacin de LEX y YACC

Lex y Yacc, fueron desarrollados en los 70's en los laboratorios Bell


de AT&T, y aunque tradicionalmente se trata de software
propietario existen versiones libres como flex y bison (Anlogos a
lex y yacc respectivamente) que cuentan con algunas
caractersticas extra adems de las tradicionales, as como un
mejor soporte para reducciones o expresiones muy largas o
complejas. Cualquier persona que est familiarizada con Lex y Yacc
podra utilizar Flex y Bison respectivamente sin problemas.
El proceso de instalacin de Flex y Bison es muy sencillo en el
sistema operativo Windows en general ya que cuenta con un
asistente de instalacin que nos guiar durante todo el proceso.
Instalador Flex

Instalador Bison

Para ello basta con dar doble clic uno a uno en los instaladores que
se incluyen en el CD y seleccionar la ruta de instalacin, el resto
basta con dar clic sobre el botn siguiente. Es recomendable
instalar los dos programas en una ruta que sea de acceso corto
para facilitar la creacin de la variable de entorno en el sistema
operativo.
Una vez instalados los programas, en la ruta que seleccionamos
nos crear una carpeta con el nombre de GnuWin32 la cual en su
interior contiene una carpeta con el nombre bin, dentro de esta
carpeta encontraremos a Flex y Bison con un otros archivos que
cuentan con las libreras y procedimientos tiles para el correcto
funcionamiento de estos dos programas.

4. Instalacin del compilador de C (Mingw)


Otro de los programas que utilizaremos en el proceso de creacin
de un compilador es el compilador de C llamado Mingw el cual se
puede descargar solo el compilador o la versin con el IDE, un
ejemplo de este ltimo es DevC++ o Visual C.

En este caso utilizaremos solo el compilador, el instalador del


compilador de C igualmente se encuentra en CD, as mismo la
instalacin del compilador es muy sencilla en Windows, damos
doble clic y seguimos las instrucciones que nos brinda el asistente
e inmediatamente el programa empezar a descargar los archivos
necesarios para la instalacin, debemos procurar instalar en una
direccin corta para su fcil acceso en la compilacin de archivos
de Flex, Bison y el compilador final.
Asistente de instalacin Mingw

5. Creacin de variables de entorno.


Como se mencion anteriormente Flex y Bison se instalan en el
mismo directorio as que se necesita configurar una sola variable
para el funcionamiento de estos dos programas. Para configurar
esta variable de entorno en Windows lo que necesitamos hacer es
lo siguiente.
1. Dirigirnos a Equipo.
2. Damos clic derecho en un espacio en blanco y accedemos a
propiedades.
3. Se nos despliega una pantalla y aqu buscamos la opcin
Configuracin avanzada del sistema.
4. Se nos vuelve a desplegar otra pantalla y ahora buscamos la
opcin Variables de Entorno.
5. Damos clic sobre esta opcin y se nos despliega una nueva
pantalla, en la seccin de variables del sistema buscamos la
variable Path.
6. Una vez encontrada la variable, damos doble clic y se nos muestra
una pantalla pequea, la cual nos muestra el nombre y el valor de
la variable.
7. En el valor de la variable, con mucho cuidado de no borrar el
contenido, nos dirigimos al final y seguido de un punto y coma
colocamos la ruta de la carpeta bin que se encuentra en la carpeta
de instalacin de Flex y Bison llamada GnuWin32.

8. Damos clic en aceptar en todas las pantallas que dejamos antes y


listo.
Una vez concluido este proceso debemos configurar la variable de
entorno del compilador de C, para lo cual seguimos el mismo
procedimiento antes descrito, solo que en este caso colocamos la
ruta de instalacin de la carpeta bin que se encuentra en la
carpeta de instalacin del compilador de C llamada Mingw.
Creacin de las variables de entorno

6. Creacin del analizador lxico con Flex


Vamos a crear un analizador lxico de tal forma que pueda los
operandos puedan ser: Identificadores normales, constantes
numricas (enteros, reales, notacin cientfica y expresiones entre
parntesis) y los
operadores puedan ser suma, resta
multiplicacin, divisin, div y mod.
Para ello necesitamos un editor de texto plano en donde podamos
especificar los patrones de los lexemas mediante expresiones
regulares, nosotros ocuparemos el Bloc de Notas de Windows.
1. Para generar este analizador lxico tenemos las siguientes
especificaciones. Aparte de las caractersticas antes indicadas le
estamos dando la caracterstica de nos informe si al ingresar un
carcter que no pertenece a los que antes indicamos nos informe
que este es un carcter desconocido.

Todo lo que encuentra luego de la palabra return es lo que Flex a


travs de su funcin yylex() le pasar a bison para el anlisis
sintctico. No debemos olvidar colocar la funcin yywrap()
indicando que se ha llegado al fin de archivo.

2. Luego de terminar la especificacin del analizador lxico abrimos


una ventana de comandos en Windows en donde colocaremos la
ruta de instalacin de Flex antecedido de la palabra clave cd y
presionamos Enter.
En mi caso se instal en C:\GnuWin32\bin.
3. Copiamos nuestro archivo que contiene la especificacin del
analizador lxico con extensin l en la misma ruta que se instal
flex, en mi caso el archivo se llama lexer.l.
4. En la ventana de comandos ejecutamos la sentencia: flex lexer.l,
si el archivo que contiene la especificacin tiene otro nombre de
archivo diferente al nombre de mi archivo, se deber sustituir en la
sentencia de la ventana de comandos lexer por el nombre que se
ha elegido en vez de este.
5. Al presionar enter, si el archivo no contiene errores en la
especificacin del analizador lxico, en la misma ruta de
instalacin de Flex nos crear un archivo con el nombre lex.yy.c el
cual contiene el analizador lxico implementado en cdigo C.

7. Creacin del analizador sintctico con Bison


Como uno de los objetivos de este manual es crear un ejemplo que
relacione las dos herramientas hemos elegido el compilador que
transforma expresiones infijas a postfijas, para ello le asignamos
en la especificacin las siguientes caractersticas: Los operadores
suma y resta tienen igual prioridad y son asociativos por la
izquierda. Los operadores multiplicacin, divisin, div y mod son de
igual prioridad asociativos por la izquierda pero de mayor prioridad
que la suma y la resta.
El proceso de creacin de un analizador sintctico es similar al
proceso de creacin del analizador lxico, para empezar debemos
seguir los siguientes pasos:

1. Debemos especificar en un editor de texto plano las caractersticas


de nuestro analizador sintctico. Nuevamente utilizaremos el Bloc
de notas de Windows.
Para cumplir con las caractersticas antes mencionadas, la
especificacin de nuestro analizador sintctico es la
siguiente.

En la parte de bloque escribimos la palabra reservada error,


la cual nos ayudar a tener un mecanismo de recuperacin
de errores, en el caso de que suceda. Una de las cosas que
no debemos olvidar escribir es la funcin yyerror() la cual
nos ayudar a emitir un mensaje de error en el caso de que
se encuentre con una estructura que no reconozca nuestro
analizador sintctico. Y por ltimo escribir la funcin main()
la cual contendr a la funcin yyparse() que iniciar el
proceso de anlisis.
2. Luego de terminar la especificacin del analizador sintctico
abrimos una ventana de comandos en Windows en donde
colocaremos la ruta de instalacin de bison antecedido de la
palabra clave cd y presionamos Enter. En mi caso se instal en
C:\GnuWin32\bin.

3. Copiamos nuestro archivo que contiene la especificacin del


analizador sintctico con extensin y en la misma ruta que se
instal bison, en mi caso el archivo se llama parser.y.
4. En la ventana de comandos ejecutamos la sentencia: bison dy
parser.y, si el archivo que contiene la especificacin tiene otro
nombre de archivo diferente al nombre de mi archivo, se deber
sustituir en la sentencia de la ventana de comandos parser por el
nombre que se ha elegido en vez de este.
5. Al presionar enter, si el archivo no contiene errores en la
especificacin del analizador sintctico, en la misma ruta de
instalacin de Bison nos crear un archivo con el nombre y.tab.c el
cual contiene el analizador sintctico implementado en cdigo C y
un archivo adicional llamado y.tab.h el cual contiene la tabla de
smbolos.

8. Compilacin del cdigo que transforma expresiones infijas


a postfijas.
Despus de haber pasado por el proceso anterior lo nico que nos
resta es compilar los tres archivos juntos para obtener nuestro
compilador funcionando correctamente. Para los cual lo que nos
resta hacer es:
1. Copiar estos tres archivos resultantes del proceso anterior los
cuales son: lex.yy.c, y.tab.c y tambin y.tab.h, a la carpeta bin en
donde est instalado el compilador de C en mi caso el compilador
de C se encuentra en el directorio: C:\MinGW\bin.
2. Luego abrimos una ventana de comando de Windows en donde
colocaremos la ruta de instalacin del compilador de C antecedido
de la palabra clave cd y presionamos Enter
3. Luego de esto, ejecutamos la sentencia: gcc lex.yy.c y.tab.c -o
Compilador, si desea que su compilador tenga otro nombre solo
debe intercambiar la palabra Compilador en la sentencia de la
ventana de comando de Windows por otro nombre que sea de su
eleccin.
4. Luego de haber ejecutado todos estos pasos en la misma ruta de
instalacin del compilador de C se crear un archivo con extensin
exe el cual basta con dar doble clic para empezar a utilizarlo.

Potrebbero piacerti anche