Compiladores

138 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
138
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Compiladores

  1. 1. PONTIFICIA UNIVERSIDAD CATOLICA DE L ECUADORSEDE IBARRANOMBRE: EDISON MALESTEMA: COMPILADORESUtilidades y Generadores de Procesadores de LenguajesA continuación se muestran algunas de las herramientas disponibles que pueden utilizarsepara la realización de la Práctica de Procesadores de Lenguajes. Todas estas herramientasfuncionan bajo Windows, aunque se puede utilizar, si se desea, cualquier otra herramienta.Historia y aplicación de los lenguajes algorítmicos.Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos,existen lenguajes que realizan la comunicación entre los seres humanos y las
  2. 2. computadoras. Estos lenguajes permiten expresar los programas o el conjunto deinstrucciones que el operador humano desea que la computadora ejecute.Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras,como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. Ladificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad yproporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación másorientados hacia la expresión de soluciones con la notación de los problemas mismos.Diseño y Construcción de un compilador.Este apasionante libro combina un estudio detallado de las teorías modernas de diseño decompiladores con una descripción completa (con código fuente) de un compiladorfuncionando para un lenguaje pequeño. El libro refleja la convicción del autor de que losaspectos prácticos del diseño de compiladores no pueden entenderse sin una comprensiónde la teoría, y que los estudiantes universitarios no pueden comprender verdaderamente lateoría sin verla actuar en la práctica real. Para unificar la exposición de los conceptos deltexto se tiene un compilador completamente funcional escrito en C y desarrollado con lastécnicas comentadas en cada capítulo. Al final de cada capítulo se presentan abundantesejercicios que enfocan la atención del estudiante en problemas específicos deprogramación. Características * Una detallada presentación (capítulos 4 y 5) de losalgoritmos de análisis sintáctico descendentes que cubren los métodos de análisis sintácticodescendente recursivo y LL(1), análisis sintáctico ascendente, tablas de análisis sintácticoLALR(1) y el uso de la herramienta generadora de analizador sintáctico Yacc. * Unaexposición completa (capítulo 7) de formas comunes de ambientes de ejecución queabarcan desde el ambiente completamente estático de FORTRAN, pasando por las diversasvariedades de ambientes basados en pilas, hasta los ambientes completamente dinámicosde los lenguajes tipo LISP. * Cobertura de la generación de código (capítulo 8) con ungenerador de código completo para el lenguaje de muestra proporcionando junto con unaintroducción para técnicas de optimización de código.
  3. 3. HERRAMIENTA FLEX Y BISONINTRODUCCION:Con esta práctica se pretende introducir el uso de la herramienta bison. Estaherramienta se usa en consonancia con la herramienta flex y sirve para especificaranalizadores sintácticos. De la misma forma que flex tiene como base las expresionesregulares, la herramienta bison también se basa en otro formalismo para describir lenguajes,en este caso serán las gramáticas independientes del contexto las que constituirán el núcleode las especificaciones que procesará bison.Herramienta Flex:Que es y para qué sirve la herramienta Flex?Flex es un una herramienta que permite generar analizadores léxicos. A partir de unconjunto de expresiones regulares, Flex busca concordancias en un fichero de entrada yejecuta acciones asociadas a estas expresiones.Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguienteesquema:%%patrón1 {acción1}patrón2 {acción2}...donde:patrón: expresión regularacción: código C con las acciones a ejecutar cuando se encuentre concordancia del patróncon el texto de entrada-Ejemplo:
  4. 4. Flex recorre la entrada hasta que encuentra una concordancia y ejecuta el código asociado.El texto que no concuerda con ningún patrón lo copia tal cual a la salida. Por ejemplo:%%a*b {printf(“X”);};re ;El ejecutable correspondiente transforma el texto:abre la puertaabenX la puertXpues ha escrito X cada vez que ha encontrado ab o aab y nada cuando ha encontrado re.Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningúnnombre de fichero, con la descripción de un escáner a generar. La descripción se encuentraen forma de parejas de expresiones regulares y código C, denominadas reglas. Flex generacomo salida un fichero fuente en C, „lex.yy.c‟, que define una función „yylex()‟. Este ficherose compila y se enlaza con la librería de Flex para producir un ejecutable.La sección de definiciones contiene declaraciones de definiciones de nombres sencillas parasimplificar la especificación del escáner, y declaraciones de condiciones de arranque, quese explicarán en una sección posterior. Las definiciones de nombre tienen la forma:nombre definiciónEl "nombre" es una palabra que comienza con una letra o un subrayado („_‟) seguido porcero o más letras, dígitos, „_‟, o „-‟ (guión). La definición se considera que comienza en elprimer carácter que no sea un espacio enblanco siguiendo al nombre y continuando hasta el final de la línea. Posteriormente sepuede hacer referencia a la definición utilizando "{nombre}", que se expandirá a"(definición)".Por ejemplo,DIGITO [0-9]ID [a-z][a-z0-9]*define "DIGITO" como una expresión regular que empareja un dígito sencillo, e "ID" comouna expresión regular que empareja una letra seguida por cero o más letras o dígitos. Una
  5. 5. referencia posterior a{DIGITO}+"."{DIGITO}*es idéntica a([0-9])+"."([0-9])*y empareja uno o más dígitos seguido por un „.‟ seguido por cero o más dígitos.La sección de reglas en la entrada de Flex contiene una serie de reglas de la forma:patrón accióndonde el patrón debe estar sin sangrar y la acción debe comenzar en la misma línea.Finalmente, la sección de código de usuario simplemente se copia a „lex.yy.c‟ literalmente.Esta sección se utiliza para rutinas de complemento que llaman al escáner o son llamadaspor este. La presencia de esta sección es opcional; Si se omite, el segundo „%%‟ en elfichero de entrada se podría omitir también.El fichero de entrada de Flex está compuesto de tres secciones, separadas por una líneadonde aparece únicamente un „%%‟ en esta:definiciones%%reglas%%código de usuarioHerramienta BisonBison es un generador de analizadores sintácticos de propósito general que convierte unadescripción para una gramática independiente del contexto (en realidad de una subclase deéstas, las LALR) en un programa en C que analiza esa gramática.Usándolo junto a Flex esta herramienta permite construir compiladores de lenguajes.Un fuente de Bison (normalmente un fichero con extensión .y) describe una gramática. Elejecutable que se genera indica si un fichero de entrada dado pertenece o no al lenguajegenerado por esa gramática. La forma general de una gramática de Bison es la siguiente:%{declaraciones en C%}Declaraciones de Bison
  6. 6. %%Reglas gramaticales%%Código C adicionalLos „%%‟, „%{„ y „%}‟ son signos de puntuación que aparecen en todo archivo de gramáticade Bison para separar las secciones.Las declaraciones de Bison declaran los nombres de los símbolos terminales y noterminales, y también podrían describir la precedencia de operadores y los tipos de datos delos valores semánticos de varios símbolos.Las reglas gramaticales son las producciones de la gramática, que además pueden llevarasociadas acciones, código en C, que se ejecutan cuando el analizador encuentra las reglascorrespondientes.CREAR COMPILADORES EN FLEX Y BISONCOMO SE INSTALA FLEX Y BISON1. Descarga el software disponible en el sitio de la cátedra.2. Instalar el software en la unidad C: (para explicar a partir del punto 4 se tendrá comohipótesis de que flex y bison han sido instalados en la ruta: C:GnuWin32 donde contieneuna subcarpetallamada bin donde se encuentran los programas respectivos)
  7. 7. 3. Flex y bison son aplicaciones de consola, por lo que se deberá entrar al Símbolo delsistema y tipear líneas de comando para ejecutar Flex. Una alternativa es crear un archivode proceso por lotes (*.bat) que contenga las líneas de comando para la ejecución de Flex yBison y/o la compilación del archivo generado.
  8. 8. 4. Si deseas que flex y bison se integren al conjunto de variables del entorno (esto te va apermitir llamar a flex/bison desde cualquier ubicación en la línea de comandos) debes hacerlo siguiente:
  9. 9. • Clic derecho en “Mi PC”.• Selecciona “Propiedades”• Clic en la pestaña “Opciones Avanzadas”• Presiona el botón “Variables de entorno”• En la ventana de variables de entorno, ubicarse en la sección “Variables del sistema” luegohaz clic en PATH y luego en el botón “Modificar” (si no está hacer clic en “Nueva” y agregarPATH)COMO SE COMPILA CON FLEX Y BISON2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON.Codigo01.txt
  10. 10. ? 123456789101112131415Definir Constante Entero numero:= 145 ;Definir Booleano nume := 1 ;Funcion Entero ( Entero num;Real fre; Booleano boll;)Mientras ( )Booleano ghjfg;bocfgh:=1;Mientras ( a>=4 )Car:=Carro;Entero bandera;Booleano boole;boole:=1;Si ( a==4 )Bool:=1;Booleano boolean;SinoSi (a==5) EntoncesBool:=2;Sino EntoncesBool:=3;1617181920212223FinSiFinMientrasFinMientrasRetornaCarroFinFuncion
  11. 11. • En la nueva ventana, escribir la ruta completa al directorio “bin” de la aplicaciónflex/bison. Si existe otro valor, separarlos con comas• Aceptar los cambios y luego reiniciar el sistema operativo.5. Si deseas instalar un compilador de C como MinGwin, deberás integrar la ruta deacceso al compilador a las variables de entorno para facilitar la llamada al programa.Por ejemplo si se instaló MingWin en “C:Mingw” y dentro de la carpeta “bin” se encuentra“gcc.exe” que es el ejecutable, entonces de deberá agregar (análogo a los pasosanteriores) lo siguiente:6. Cuando tengas listo podrás llamar a flex/bison desde el símbolo del sistema sinnecesidad de ubicarte en la carpeta donde ha sido instalado flex/bison.
  12. 12. COMO SE COMPILA CON FLEX Y BISON2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON.Codigo01.txt? 123456789101112131415Definir Constante Enteronumero := 145 ;Definir Booleano nume := 1;Funcion Entero ( Enteronum; Real fre; Booleanoboll;)Mientras ( )Booleano ghjfg;bocfgh:=1;Mientras ( a>=4 )Car:=Carro;Entero bandera;Booleano boole;boole:=1;Si ( a==4 )Bool:=1;Booleano boolean;SinoSi (a==5) EntoncesBool:=2;Sino EntoncesBool:=3;

×