HERRAMIENTAS DE ANÁLISIS DE PROGRAMAS FUENTE <ul><li>Capítulo 3 </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Ar...
Introducción <ul><li>Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisi...
Editores de Estructuras <ul><ul><li>Un editor de estructuras toma como entrada una secuencia de ordenes para construir un ...
Impresoras Estéticas <ul><ul><li>Una impresora estética analiza un programa y lo  imprime de forma que la estructura del p...
Verificadores Estáticos <ul><li>Un verificador estático lee un programa, lo analiza e intenta descubrir errores potenciale...
Intérpretes <ul><ul><li>En lugar de producir un programa objeto como resultado de una traducción, un interprete realiza la...
Flex: Generador de Analizadores Léxicos <ul><li>Flex es una herramienta para generar scanners:  </li></ul><ul><ul><li>Prog...
Flex: Ejemplo <ul><li>La siguiente entrada de Flex especifica un escáner que siempre que encuentre la cadena &quot;usernam...
Flex: Formato del Fichero de Entrada <ul><li>El fichero de entrada de Flex está compuesto de tres secciones, separadas por...
INTERACCIÓN CON EL USUARIO <ul><li>Existen algunos compiladores como el DFD, que generan código por interacción con el usu...
PANTALLAS GENERADAS POR EL EJEMPLO <ul><li>El modo de encarar los programas es muy diferente entre el Basic y el Assembler...
Upcoming SlideShare
Loading in …5
×

Cap3 compiladores

1,521 views

Published on

Cap3 compiladores

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,521
On SlideShare
0
From Embeds
0
Number of Embeds
43
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Cap3 compiladores

  1. 1. HERRAMIENTAS DE ANÁLISIS DE PROGRAMAS FUENTE <ul><li>Capítulo 3 </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  2. 2. Introducción <ul><li>Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisis. </li></ul><ul><li>Algunos ejemplos de tales herramientas son: </li></ul><ul><ul><li>Editores de estructuras. </li></ul></ul><ul><ul><li>Impresoras estéticas. </li></ul></ul><ul><ul><li>Verificadores estáticos. </li></ul></ul><ul><ul><li>Intérpretes. </li></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  3. 3. Editores de Estructuras <ul><ul><li>Un editor de estructuras toma como entrada una secuencia de ordenes para construir un programa fuente. </li></ul></ul><ul><ul><li>El editor de estructuras no sólo realiza las funciones de creación y modificación de textos de un editor de textos ordinario, sino que también analiza el texto del programa imponiendo al programa fuente una estructura jerárquica apropiada. </li></ul></ul><ul><ul><li>De esa manera, el editor de estructuras puede realizar tareas adicionales útiles para la preparación de programas. </li></ul></ul><ul><ul><li>Por ejemplo: </li></ul></ul><ul><ul><ul><li>Puede comprobar si la entrada está formada correctamente. </li></ul></ul></ul><ul><ul><ul><li>Puede proporcionar palabras clave de manera automática. </li></ul></ul></ul><ul><ul><ul><li>Puede saltar desde un begin o un paréntesis izquierdo hasta su correspondiente end o paréntesis derecho. </li></ul></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  4. 4. Impresoras Estéticas <ul><ul><li>Una impresora estética analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. </li></ul></ul><ul><ul><li>Por ejemplo: </li></ul></ul><ul><ul><ul><li>Los comentarios pueden aparecer con un tipo de letra especial. </li></ul></ul></ul><ul><ul><ul><li>Las proposiciones pueden aparecer con una indentación proporcional a la profundidad de su anidamiento en la organización jerárquica de las proposiciones. </li></ul></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  5. 5. Verificadores Estáticos <ul><li>Un verificador estático lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. </li></ul><ul><li>La parte del análisis es similar a la que se encuentra en los compiladores de optimación. </li></ul><ul><li>Así un verificador estático puede detectar si hay partes de un programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser definida. </li></ul><ul><li>Además, puede detectar errores de lógica como intentar utilizar una variable real como apuntador, empleando las técnicas de verificación de tipos. </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  6. 6. Intérpretes <ul><ul><li>En lugar de producir un programa objeto como resultado de una traducción, un interprete realiza las operaciones que implica el programa fuente. </li></ul></ul><ul><ul><li>Para una proposición de asignación, por ejemplo, un intérprete podría: </li></ul></ul><ul><ul><ul><li>Construir un árbol y después efectuar las operaciones de los nodos conforme “recorre” el árbol. </li></ul></ul></ul><ul><ul><ul><li>En la raíz descubriría que tiene que realizar una asignación, y llamaría a una rutina para evaluar la expresión siguiente y después almacenaría el valor resultante en la localidad de memoria asignada con el identificador posición. </li></ul></ul></ul><ul><ul><ul><li>En el hijo siguiente de la raíz, la rutina descubriría que tiene que calcular la suma de dos expresiones. </li></ul></ul></ul><ul><ul><ul><li>Se llamaría a si misma de manera recursiva para calcular el valor de la variable inicial. </li></ul></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  7. 7. Flex: Generador de Analizadores Léxicos <ul><li>Flex es una herramienta para generar scanners: </li></ul><ul><ul><li>Programas que reconocen patrones léxicos en un texto. </li></ul></ul><ul><li>Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. </li></ul><ul><li>La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadas reglas. </li></ul><ul><li>Flex genera como salida un fichero fuente en C, `lex.yy.c', que define una rutina `yylex()'. </li></ul><ul><li>Este fichero se compila y se enlaza con la librería `-lfl' para producir un ejecutable. </li></ul><ul><li>Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de casos de las expresiones regulares. </li></ul><ul><li>Siempre que encuentra uno, ejecuta el código C correspondiente. </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  8. 8. Flex: Ejemplo <ul><li>La siguiente entrada de Flex especifica un escáner que siempre que encuentre la cadena &quot;username&quot; la reemplazará por el nombre de entrada al sistema del usuario: </li></ul><ul><ul><li>%% </li></ul></ul><ul><ul><li>username printf( &quot;%s&quot;, getlogin() ); </li></ul></ul><ul><li>Por defecto, cualquier texto que no reconozca el analizador léxico de Flex se copia a la salida, así que el efecto neto de este escáner es copiar su fichero de entrada a la salida con cada aparición de &quot;username&quot; expandida. </li></ul><ul><li>En esta entrada, hay solamente una regla: </li></ul><ul><ul><li>&quot;username&quot; es el patrón y el &quot;printf&quot; es la acción . </li></ul></ul><ul><ul><ul><li>El &quot;%%&quot; marca el comienzo de las reglas. </li></ul></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  9. 9. Flex: Formato del Fichero de Entrada <ul><li>El fichero de entrada de Flex está compuesto de tres secciones, separadas por una línea donde aparece únicamente un `%%' en esta: </li></ul><ul><ul><li>definiciones </li></ul></ul><ul><ul><li>%% </li></ul></ul><ul><ul><li>reglas </li></ul></ul><ul><ul><li>%% </li></ul></ul><ul><ul><li>código de usuario </li></ul></ul><ul><li>Definiciones: </li></ul><ul><ul><li>Contiene declaraciones de definiciones de nombres sencillas para simplificar la especificación del escáner, y declaraciones de condiciones de arranque. </li></ul></ul><ul><li>Reglas: </li></ul><ul><ul><li>Contiene una serie de reglas de la forma: </li></ul></ul><ul><ul><li>patrón acción </li></ul></ul><ul><li>Código de usuario: </li></ul><ul><ul><li>Simplemente se copia a `lex.yy.c' literalmente. </li></ul></ul><ul><ul><li>Esta sección se utiliza para rutinas de complemento que llaman al escáner o son llamadas por este. </li></ul></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  10. 10. INTERACCIÓN CON EL USUARIO <ul><li>Existen algunos compiladores como el DFD, que generan código por interacción con el usuario. </li></ul><ul><li>El programa del ejemplo que vemos, es un sencillo generador de código de Assembler y Basic, ambos generados a la vez por interacción con el usuario. </li></ul><ul><li>#include &quot;stdio.h“ #include &quot;conio.h“ #include &quot;iostream.h“ </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int variable,op,op2; </li></ul><ul><li>char comentario[20],posmem[5]; </li></ul><ul><li>clrscr(); </li></ul><ul><li>cout <<&quot;Compilador manual de Basic de 4 lineas para suma o restann&quot;; </li></ul><ul><li>cout<<&quot;Que instruccion: 1.PRINT 2.INPUT: &quot;; </li></ul><ul><li>cin>>variable; </li></ul><ul><li>if (variable==1){ </li></ul><ul><li>cout<<&quot;Que desea imprimir: 1.Texto 2.Variable:&quot;; </li></ul><ul><li>cin>>op; </li></ul><ul><li>if (op==1){ </li></ul><ul><li>cout<<&quot;Escriba el texto:&quot;; </li></ul><ul><li>gets(comentario); </li></ul><ul><li>gotoxy(30,10);cout<<&quot;EAP &quot;; </li></ul><ul><li>gotoxy(34,10);cout<<comentario; </li></ul><ul><li>gotoxy(50,10);cout<<&quot;PRINT '&quot;<<comentario<<&quot;'&quot;; </li></ul><ul><li>} </li></ul><ul><li>if (op==2){ </li></ul><ul><li>cout<<&quot;Que variable: 1.AX 2.Memoria:&quot;; </li></ul><ul><li>cin>>op2; </li></ul><ul><li>if (op2==1){ </li></ul><ul><li>gotoxy(30,10);cout<<&quot;EAP &quot;; </li></ul><ul><li>gotoxy(50,10);cout<<&quot;PRINT A&quot;; </li></ul><ul><li>} </li></ul><ul><li>if (op2==2){ </li></ul><ul><li>cout<<&quot;Que posicion de memoria: &quot;; </li></ul><ul><li>gets(posmem); </li></ul><ul><li>gotoxy(30,10);cout<<&quot;MOV AX,&quot;<<posmem; </li></ul><ul><li>gotoxy(30,11);cout<<&quot;EAP&quot;; </li></ul><ul><li>gotoxy(50,10);cout<<&quot;PRINT B&quot;; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (variable==2){ </li></ul><ul><li>gotoxy(30,10);cout<<&quot;LDTn&quot;; </li></ul><ul><li>gotoxy(30,11);cout<<&quot;MOV 1A,AXn&quot;; </li></ul><ul><li>gotoxy(50,10);cout<<&quot;INPUT A&quot;; </li></ul><ul><li>} </li></ul><ul><li>getch(); </li></ul><ul><li>} </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Este programa puede servir como base para diseñar un compilador
  11. 11. PANTALLAS GENERADAS POR EL EJEMPLO <ul><li>El modo de encarar los programas es muy diferente entre el Basic y el Assembler, por lo que se deberá ver en detalle su formato. </li></ul><ul><li>Como se puede apreciar el crear un compilador no es tarea sencilla, pero siguiendo los pasos de los estudios realizados por los expertos programadores se puede llegar a diseñarlos. </li></ul>Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Assembler Basic

×