Vous êtes sur la page 1sur 55

FACULTAD DE CIENCIAS Y TECNOLOGIA

RED NACIONAL UNIVERSITARIA

SYLLABUS

Facultad de Ciencias y Tecnologa


Ingeniera de Sistemas

SEPTIMO SEMESTRE

Diseo y Desarrollo de Compiladores


Gestin Acadmica I / 2011

Syllabus elaborado por: Ing. Reynaldo Einar Zabaleta Rioja

U N I V E R S I D A D

D E 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

UDABOL
UNIVERSIDAD DE AQUINO BOLIVIA Acreditada como PLENA mediante R. M. 288/01

VISION DE LA UNIVERSIDAD Ser la Universidad lder en calidad educativa.

MISION DE LA UNIVERSIDAD Desarrollar la Educacin Superior Universitaria con calidad y competitividad al servicio de la sociedad.

U N I V E R S I D A D

D E 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

I.
Asignatura: Cdigo: Requisito: Carga horaria: Horas tericas: Horas prcticas: Crditos:

SYLLABUS
Diseo y Desarrollo de Compiladores
CMP 515

CMP 417
80 horas

80 8

II. OBJETIVOS GENERALES DE LA ASIGNATURA. Disear y desarrollar compiladores a travs del tratamiento de cadenas a partir de gramticas y autmatas, en consecuencia el estudiante debe enfocar sus esfuerzos en las practicas de diseo del analizador lexicogrfico a travs de autmatas, el diseo del analizador sintctico a travs de gramticas, el diseo del analizador semntico y la generacin de cdigo en un programa objeto basado en teora de lenguajes. III. PROGRAMA ANALTICO DE LA ASIGNATURA. UNIDAD I. INTRODUCCIN A COMPILADORES TEMA 1. 1.1. 1.2. 1.3. 1.4. 1.5. VISIN GENERAL DE COMPILADORES Conceptos bsicos. Esquema de un compilador. Lenguajes y Gramticas. Programas de sistemas relacionados con un compilador Herramientas para la construccin de un compilador

UNIDAD II. ETAPA DE ANLISIS DEL COMPILADOR TEMA 2. LENGUAJES Y GRAMTICAS REGULARES, Y AUTMATAS FINITOS 2.1 Introduccin 2.2 Jerarqua de Chomsky 2.3 Gramticas regulares 2.4 Autmatas finitos 2.4.1 AF Determinstico 2.4.2 AF No Determinstico TEMA 3. ANLISIS LEXICOGRAFICO Y TABLA DE SMBOLOS 3.1 Introduccin 3.2 Anlisis lexicogrfico y tabla de Smbolos 3.3 Scanner 3.4 Funciones principales del scanner 3.5 Tokens, lexemas, patrones
U N I V E R S I D A D D E 3 A Q U I N O B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

3.6 3.7 3.8

Tabla de smbolos Interaccin ente Anlisis lexicogrfico y tabla de smbolos Generador de Analizadores Lexicogrficos

TEMA 4. MANEJO DE ERRORES 4.1 Introduccin 4.2 Creacin de errores 4.3 Informe de Errores 4.4 Deteccin y recuperacin de errores TEMA 5. LENGUAJES LIBRES DE CONTEXTO, GRAMTICAS LIBRES DE CONTEXTO, Y AUTMATAS DE PILA 5.1 Introduccin 5.2 Gramticas libres de contexto 5.2.1 Derivacin y rbol de derivacin 5.2.2 Gramtica Ambigua 5.2.3 Simplificacin (Limpieza) de una gramtica 5.2.3.1 Supresin de smbolos intiles e inaccesibles 5.2.3.2 Reglas lambda y unitarias 5.2.4 Formas normales 5.2.4.1 Forma Normal de Greibach 5.2.4.2 Forma Normal de Chomsky 5.3 Autmatas de Pila 5.4 Lenguajes Libres de contexto 5.4.1 Operaciones 5.4.2 Lema de Bombeo 5.4.3 Algoritmos 5.5 Analizadores sintcticos TEMA 6. ANLISIS SINTCTICO 6.1 Introduccin 6.2 Anlisis sintctico Anlisis gramatical - Parser 6.3 Rol del analizados sintctico 6.3.1 Anlisis sintctico ascendente 6.4 Gramticas LR 6.5 Anlisis sintctico descendente 6.5.1 Gramticas LL 6.5.2 Anlisis con y sin retroceso 6.6 Generador de analizadores sintcticos TEMA 7. ANLISIS SEMNTICO Y GENERACIN DE CDIGO INTERMEDIO 7.1 Introduccin. Definiciones 7.2 Funciones del anlisis semntico 7.2.1 Verificacin esttica 7.2.2 rbol semntico 7.3 Lenguajes intermedios 7.4 Representacin de Cdigo Intermedio 7.4.1 rbol semntico y grafo acclico dirigido 7.4.2 Cdigo de tres direcciones 7.5 Sentencias y expresiones 7.6 Traduccin dirigida por la sintaxis

U N I V E R S I D A D

D E 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

TEMA 8. ENTORNOS DE EJECUCIN 8.1 Introduccin. Definiciones 8.2 Aspectos del lenguaje fuente 8.3 Organizacin de la memoria 8.4 Estrategias de asignacin de memoria 8.5 Entornos de ejecucin 8.6 Acceso a variables no locales 8.7 Paso de parmetros 8.8 Tablas de smbolos 8.9 Instrumentos de los lenguajes para asignacin dinmica de memoria 8.10 Tcnicas para asignacin dinmica de memoria TEMA 9. PREPARACIN PARA GENERACIN DE CDIGO Y OPTIMIZACIN 9.1 Introduccin 9.2 Criterios generales 9.3 Principales casos de optimizacin 9.4 Generacin de copias 9.5 Optimizacin de Bucles 9.6 Sustitucin de subexpresiones 9.6.1 Algebraicas 9.6.2 Aritmticas 9.7 Bloques bsicos 9.8 Transformaciones para mejorar el cdigo TEMA 10. GENERACIN DE CDIGO Y TRADUCCIN 10.1 Introduccin 10.2 Criterios para la transformacin 10.3 Generacin de cdigo 10.3.1 Sentencias 10.3.2 Expresiones 10.3.3 Condiciones 10.4 Generacin de cdigo al vuelo 10.4.1 Sentencias 10.4.2 Expresiones 10.4.3 Condiciones 10.5 Depuracin simblica de cdigo IV. SISTEMA DE EVALUACIN DE APRENDIZAJES. El sistema de evaluacin hace hincapi en varios tipos de calificacin: Diagnstica: es la evaluacin de los saberes o conocimientos previos de los y las estudiantes, as como de sus ritmos y estilos de aprendizaje y sus tipos de inteligencia, que sirve al docente como punto de partida para, el desarrollo curricular, para la mejor organizacin y estructuracin de las secuencias de aprendizaje, de modo que estas tengan en cuenta no slo el punto de partida del grupo con el que trabajar durante el semestre sino adems las diferencias y especificidades de cada estudiante para que los aprendizajes resulten ms efectivos y permitan el ptimo desarrollo integral de cada uno(a).

U N I V E R S I D A D

D E 5

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Procesual o de desempeo o formativa: en esta forma de evaluacin se valora el avance del o de la estudiante de su nivel de desarrollo real (detectado mediante la evaluacin diagnstica) a su nivel de desarrollo potencial (detectado mediante diversas actividades o tareas). Esta forma de evaluacin, por su naturaleza, es eminentemente cualitativa aunque puede ser valorada cuantitativamente mediante un sistema de puntaje que permita apreciar los avances del o de la estudiante en su zona de desarrollo prximo (zdp) (o, incluso, fuera de ella, en el caso de que el proceso de aprendizaje rebase la misma y d lugar a nuevas zdp). La ponderacin de la asignatura de Arquitectura de Computadoras dentro la Evaluacin Procesual, contempla la realizacin de actividades formativas a desarrollar (Work Papers, Difs, Participacin, evaluacin diaria, Investigacin, Congresos, Jornadas Cientficas y Seminarios) y su calificacin es sobre el 50 % de la calificacin del primer y segundo parcial, estimando un promedio de todas las actividades. La ponderacin de esta evaluacin es el promedio de todas las actividades desarrolladas (Work Papers, Dif s, Participacin, Laboratorio, Investigacin, Congresos, Jornadas Cientficas, Aula Abierta y Seminarios) y su calificacin es sobre el 50 % de la calificacin del primer y segundo parcial. De resultados del proceso de aprendizaje: es la valoracin de los resultados de los procesos de aprendizaje del o de la, estudiante durante el semestre. Esta forma de evaluacin es tanto cualitativa como cuantitativa, por su naturaleza y por la funcin que cumple dentro de la evaluacin. La evaluacin de resultados en la asignatura especfica se llevar a cabo de forma terica y prctica aplicada a sistemas reales. La ponderacin de esta evaluacin es sobre 50 % de la calificacin del primer y segundo parcial, en el caso del examen final es de 100%, que por disposiciones actuales esta dividido en 50% como prueba final y 50% procesual. . EVALUACION PARCIAL 1 PARCIAL 2 FINAL PROCESUAL 50% 50% 50% DE RESULTADO 50% 50% 50% TOTAL 100% 100% 100% 100%

EVALUACION FINAL PROMEDIO PARCIAL 1, 2 Y FINAL

V. BIBLIOGRAFA AHO V., A., SETHI, R ULLMAN D., Compiladores. Principios y tcnicas de herramientas, TEUFEL, B. SCHMIDT, S. TEUFEL, Compiladores. Conceptos fundamentales, T., Addison Wesley PYSTER B. ARTHUR, Compiler Design and Construction. Tools and Techniques, Van Nostrand Reinhold Company MAK, RONALD, JOHN WILEY & SONS, Writing Compilers and Interpreters, And apllied aproach Inc. KAREN, LEMONE, Compiladores.

U N I V E R S I D A D

D E 6

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

VI. PLAN CALENDARIO


UNIVERSIDAD DE AQUINO-BOLIVIA UNIDAD ACADMICA DE ORURO

CALENDARIO ACADMICO
GESTIN I/2011 TURNOS REGULAR-TRABAJO ESTUDIANTES NUEVOS-ANTIGUOS
SEMANA 1ra. 2da. 3ra. 4ta. 5ta. 6ta. 7ma. 8va. 9na. 10ma. 11ra. 12da. 13ra. 14ta. 15ta. 16ta. 17ma. 18va. 19na. 20va. 21ra. DEL 09-Mar 14-Mar 21-Mar 28-Mar 04-Abr 11-Abr 18-Abr 25-Abr 02-May 09-May 16-May 23-May 30-May 06-Jun 13-Jun 20-Jun 27-Jun 04-Jul 11-Jul 18-Jul 25-Jul AL 12-Mar 19-Mar 26-Mar 02-Abr 09-Abr 16-Abr 23-Abr 30-Abr 07-May 14-May 21-May 28-May 04-Jun 11-Jun 18-Jun 25-Jun 02-Jul 09-Jul 16-Jul 23-Jul 26-Jul Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia Avance de materia ACTIVIDADES TEMA 1. Visin General de Compiladores TEMA 2. Lenguajes y Gramticas Regulares, y Autmatas Finitos TEMA 3. Anlisis Lexicografico y Tabla de Smbolos TEMA 3. Anlisis Lexicografico y Tabla de Smbolos TEMA 4. Manejo de Errores Inicio Primera Evaluacin Parcial Conclusin Primera Evaluacin Parcial TEMA 5. Lenguajes Libres de Contexto, Gramticas Libres de Contexto, y Autmatas de Pila TEMA 6. Anlisis sintctico TEMA 7. Anlisis Semntico y Generacin de Cdigo Intermedio TEMA 7. Anlisis Semntico y Generacin de Cdigo Intermedio Inicio Segunda Evaluacin Parcial Conclusin Segunda Evaluacin Parcial TEMA 8. Entornos de Ejecucin TEMA 9. Preparacin para Generacin de Cdigo y Optimizacin TEMA 9. Preparacin para generacin de cdigo y optimizacin TEMA 10. Generacin de Cdigo y Traduccin Inicio Evaluacin Final Conclusin Evaluacin Final Evaluacin del segundo turno Cierre de Gestin FERIADOS 22 de abril 1 de mayo 23 de junio Viernes Santo Da del Trabajo Corpus Christi Presentacin de Notas Transcripcin de Notas Transcripcin de Notas Presentacin de Notas Presentacin de Notas Presentacin de Notas Presentacin de Notas OBSERVACIONES

U N I V E R S I D A D

D E 7

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

VII. CONTROL DE EVALUACIONES 1 evaluacin parcial Fecha: Nota: 2 evaluacin parcial Fecha: Nota: Examen final Fecha: Nota: APUNTES

U N I V E R S I D A D

D E 8

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 1

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 8

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: INTRODUCCIN A LA COMPILACIN DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 515

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad I

FECHA DE DIFUSIN: : Marzo 2011

FECHA DE ENTREGA: : Marzo 2011

U N I V E R S I D A D

D E 9

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

INTRODUCCIN A LA COMPILACIN La computadora es el dispositivo ms verstil creado por el hombre. Inicialmente concebida como un mecanismo de clculo de prestaciones superiores a los primeros dispositivos mecnicos y electromecnicos, se le incorporaron capacidades para la realizacin de operaciones lgicas y, posteriormente, para la manipulacin de datos no numricos. Un largo proceso evolutivo ha llevado a este dispositivo calculador de la aritmtica de cifras a la generacin de informacin, teniendo como meta la manipulacin del conocimiento. Los actuales computadores son capaces de realizar los ms complejos clculos aritmticos, lgicos y simblicos, de emular los ms elaborados mecanismos (incluyendo a otros computadores), de similar eventos naturales y de crear mundos virtuales. Las crecientes capacidades con que se presentan generacin tras generacin de nuevos computadores los acercan cada vez ms a la realizacin de tareas cada vez ms complejas y que se antojan imposibles, como pueden ser la emulacin de la mente y el pensamiento. Todas esto se sustenta, por supuesto, en la electrnica y en la capacidad de programacin del computador. Sabemos que la electrnica del computador se denomina digital y que funciona con base en valores discretos. Sabemos que es a travs de cdigos y estrategias de representacin de datos como podemos alimentar al computador con nuestras ideas y las expresiones con que identificamos a los objetos en nuestro mundo anlogo y tridimensional. Tambin sabemos que mediante reglas de operacin perfectamente definidas podemos instruir al computador en la manipulacin de dichos datos para la generacin de otros y la obtencin de informacin en la resolucin de problemas. La forma de expresar dicha instruccin y la manera de llevar a cabo su traduccin a algo que el computador entienda es el tema de estas pginas. El tema del diseo de compiladores y lenguajes en las ciencias de la computacin es usualmente visto como uno de los ms complejos, ridos y abstractos. Adicionalmente, suele considerarse que estos temas no dejan de ser de un inters meramente acadmico, a menos que se trate de una enorme compaa de software dedicada a la creacin de herramientas para el desarrollo de software. Ideas que han creado mitos, como los siguientes: Para competir con productos de calidad en un mercado tan dinmico, amplio e internacional como es el de la informtica y computacin, se requiere de una enorme cantidad de recurso humanos, materiales y econmicos. Usualmente se considera que el conocimiento terico asociado con los compiladores os lenguajes de programacin no son necesarios si se puede "estar al da" en lo que a tendencias y productos de hardware y software se refiere. Las actividades en informtica y computacin en Mxico estn dedicadas al desarrollo de software administrativo en su mayora. Es poco probable que los profesionistas en estas reas se enfrenten al reto del desarrollo de un compilador o lenguaje de computacin. Es ms barato comprar software que desarrollarlo. El desarrollo de compiladores es una actividad reservada para grandes y especificas compaas de software. El diseo de compiladores y lenguajes de programacin es una actividad reservada para investigadores y catedrticos en ciencias computacionales. Los intrpretes no son adecuados para el desarrollo de sistemas de informacin, estos son slo un recurso para la programacin de computadoras pequeas. Brevemente expondremos el porqu las aseveraciones anteriores deben ser consideradas como falsas, imprecisas, y el resultado de la inadecuada apreciacin tanto sobre la teora de compiladores y lenguajes como en su didctica y utilizacin.

U N I V E R S I D A D

D E 1 0

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Existe una gran variedad de lenguajes de programacin. Cada uno retrata una corriente en la conceptualizacin de datos, informacin y procesos. Para cada uno de estos lenguajes existen una o diversas implementaciones, as como herramientas de desarrollo adicionales. Algunos de estos productos son freeware, otros son shareware y algunos otros ms son productos de marca. Los dos primeros resultan, respectivamente, gratis y baratos. Los ltimos son un recurso muy caro, tanto que inclusive puede superar el costo de muchos otros, como puede ser el del hardware. Sea cual fuere el tipo de herramienta que usemos para desarrollar bajo un determinado lenguaje de programacin, tendremos dos tipos de costos a considerar como resultado de nuestra decisin. El costo directo de estos productos, que incluye: Licencias: El mayor de todos los costos son las licencias de desarrollo. Es a travs de ste como el fabricante del software recupera la inversin hecha en investigacin y desarrollo. Capacitacin: El uso de nuevo lenguaje o software de desarrollo puede requerir un determinado aprendizaje. Documentacin:La adquisicin de material bibliogrfico y manuales. Soporte tcnico: Si la herramienta o el ciclo de desarrollo con sta es complejo, o si se trata de una nueva herramienta o lenguaje de programacin, se requiere contar con la asesora especializada del fabricante o de un desarrollador con experiencia para resolucin de dudas o problemas particulares. Contratos de actualizacin: El avance en el desarrollo de la computacin e informtica obliga a que se compren nuevas versiones del producto o que se cuente con un contrato que garantice su actualizacin. Adicionalmente, pero definitivamente influenciado por la adquisicin de un software de desarrollo, tenemos costos indirectos. Curvas de aprendizaje: Sobre todo si se trata de algo nuevo, existe un periodo de tiempo que debe pasar antes de que el desarrollador se familiarice y adquiera experiencia con un lenguaje o herramienta de programacin. Compra o actualizacin de equipo: Conforme el software de desarrollo se hace ms complejo se requiere que se cuente con determinados requerimientos mnimos de hardware. Estos sern ms elevados conforme el software de desarrollo libere al programador de ms y ms tareas. Distribucin de desarrollos: Esto es algo muy difcil de cuantificar y es lo que ms repercute para poder obtener un valor de retorno sobre la inversin en la adquisicin de un software de desarrollo. Ciertos productos requieren que se distribuyan bibliotecas, intrpretes o elementos para que el producto final pueda trabajar. Esto o el pago de regalas es algo que no siempre se considera y siempre afecta a toda organizacin. Dependencias: Una plataforma de desarrollo crear un vinculo de negocio con el proveedor o el equipo usado. Limitaciones. Un lenguaje o herramienta de desarrollo imponen ciertas reglas de funcionamiento. La organizacin debe acoplarse a stas. Como podemos ver la seleccin de una herramienta de desarrollo tiene diversas implicaciones. De manera genrica ya se ha presentado lo que esto representa para nuestros recursos econmicos, de equipo y personal. Ahora habra que preguntarse qu es lo que en un momento dado puede inclinarnos a elegir una herramienta haciendo caso omiso de las implicaciones que ya conocemos. La respuesta es esto es simple: publicidad y desconocimiento.

U N I V E R S I D A D

D E 1 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

La publicidad juega un papel importante en nuestro mundo. Una hbil campaa publicitaria har que se venda cualquier producto, lo necesite o no el consumidor, sea de alta o baja calidad. Desafortunadamente, la publicidad puede exagerar la verdad as como tambin puede desvirtuarla. Si el que est a cargo de la decisin de compra no posee los conocimiento necesarios para saber que es verdad, que es una exageracin y que es una mentira, entonces fcilmente ser influenciado por las cifras, colores, propaganda y dems elementos decorativos entorno al producto que est evaluando. Es aqu donde el conocimiento cumple su cometido y permite develar aquello que es cierto de lo que es slo parte de un arreglo mercado tcnico para centrar la atencin del comprador en ciertos elementos del producto. Por ejemplo, muchas herramientas de desarrollo o de depuracin (debuggers) son usadas como principal elemento de venta. Sabiendo que la correccin de un programa en desarrollo o ya hecho es una de las actividades ms demandantes en tiempo, el vendedor tratar de hacer ver a su producto como la solucin final o universal. Algunas veces argumentar que inclusive es capaz de descompilar. La teora atrs del diseo de un compilador permite saber que una herramienta de depuracin completa o universal, y mucho menos con capacidades de descompilacin, son imposibles de construir. En un ambiente de desarrollo es posible tener capacidades de depuracin amplias. Pero, el cdigo ejecutable slo es descompilable si este es generado con informacin de depuracin y referencia al cdigo fuente. Esta podra parecer algo deseable y que no traiga consigo mayores complicaciones al producto final. Sin embargo, si esta caracterstica no es seleccionable considerada, el resultado puede ser un cdigo enorme, lento y demandante de recursos. Los compiladores comerciales estn destinados a obtener productos mucho ms depurados y cuentan con numerosas alternativas para la generacin de cdigo. Este puede ser optimizados en tamao y tiempo de ejecucin. Los lenguajes de programacin son el conjunto de reglas y elementos gramaticales de los que un programador dispone para escribir el conjunto de instrucciones necesarias para que una computadora realice aquello que l quiere. En un principio no se dispona de lenguajes de programacin o algo que se le pareciera. La programacin del computador se llevaba a cabo, literalmente, recablendolo. En un gran panel de contactos que asemejaba a un conmutador telefnico, el operador introduca el programa uniendo componentes especficos al unirlos mediante un cable. Como tales, los primeros lenguajes fueron los lenguajes ensambladores. Estos requieren de un slido conocimiento de la arquitectura del computador, por lo que la programacin y depuracin resultaba un proceso arduo y costoso. A mediados de los 50s surge Fortran (contraccin del ingls FORmula TRANslation) como el primer lenguaje de alto nivel. Aunque originalmente inclua elementos de un lenguaje ensamblado permita a los programadores escribir expresiones algebraicas en lugar de la codificacin necesaria para el clculo. Un ejemplo de codificacin en este lenguaje se ilustra a continuacin. C El clsico programa en una de las primeras versiones de Fortran Program Hello implicit none logical DONE DO while (.NOT. DONE) write(*,10) END DO

U N I V E R S I D A D

D E 1 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

10 format('Hello, world.') END Lisp (LISt Processing) aparece como un lenguaje en el que todo clculo es expresado como la aplicacin de una funcin sobre uno o ms objetos. Los objetos en s pueden ser funcione tambin. COBOL (siglas del ingls COmmon BusinessOriented Language) apareci un poco despus y fue desarrollado para manejar registros, archivos y datos junto con las operaciones ms sencillas necesarias para las aplicaciones de negocio y administrativas. Tiempo despus lleg Prolog (de PROgramming in LOGic). Prolog se basa en los conceptos de resolucin (en trmnos de deduccin lgica) y unificacin (a manera de bsqueda y empate de patrones) para llegar a las metas que el programador ha establecido junto con las reglas y conjuntos de datos sobre los que el programa de be apegarse y restringirse. Los programas son una secuencia de metas que deben ser obtenidas a satisfaccin de las restricciones especificadas. Desde la aparicin de los primeros lenguajes de programacin, diversos lenguajes han aparecido en respuesta a las tendencias y modelos de desarrollo de sistemas. Uno de ellos, el modelo basado en objetos ha dado lugar a la aparicin de lenguajes de programacin orientados a objetos (en ingls object-oriented languages). Bajo este enfoque datos y procedimientos son agrupados bajo lo que se conoce como encapsulacin. Al encapsular datos y programacin se logra ocultar la informacin irrelevante del campo de visin del programador y garantizar la integridad de los datos al establecer los procedimientosque sobre estos trabajarn. La programacin se logra creando objetos que envan mensajes entre ellos que al ser tomados son procesados por los mtodos propios de cada uno. Uno de los primeros lenguajes de programacin creados a partir de este modelo fue Smalltalk. Forth es un lenguaje extensible de alto nivel que combina caractersticas de lenguajes compilados e interpretados. Sus primeros usos fueron para control de radiotelescopios y otros equipos astronmicos. Su nombre originalmente fue Fourth (por FOURTHgeneration computer language), pero desafortunadamente la computadora IBM 1130 slo aceptaba identificadores de cinco letras. Niklaus Wirth, del Federal Institute of Technology, Zrich; Suiza; desarrolla Pascal (nombrado asi en honor del filsofo y matemtico Blaise Pascal) en 1971. El primer compilador est disponible al pblico en 1974 y es utilizado por muchas universidades desde entonces. Wirth haba venido desarrollando al lenguaje desde finales de los 60s, pensado como una herramienta educacional para la enseanza sistmica de la programacin de computadoras bajo estructuras de control y declarativas claras y simples. B es el precursor de C, el cual fue descendiente de otro lenguaje denominado BCPL (Basic Combined Programming Language). Fue desarrollado a inicios de los 70s por Dennis Ritchie, en aquel entonces programador de sistemas en AT&T Bell Laboratories. Considerado como un lenguage de alto nivel posee muchas caractersticas de bajo nivel como el manejar direcciones de memoria y bits. Ada (nombrado as en honor de Augusta Ada King, Condesa de Lovelace, hija del poeta Lord Byron y primera programadora en la historia al trabajar como asistente de Charles Babbage en el desarrollo de su Mquina Analtica) es el resultado de un proyecto de estandarizacin del Departamento de Defensa de los USA iniciado a mediados de los 70s. Dada la gran diversidad de equipo y lenguajes de programacin con que el Departamento contaba en edificios y equipo, se necesitaba un lenguaje nico que pudiera ser usado en todos los computadores (incluyendo sistemas empotrados en equipo mvil) que incorporara caractersticas de abstraccin de datos, multitarea, concurrencia y manejo de excepciones. La necesidad de desarrollo de sistemas y la solucin a problemas cada vez ms complejos ha llevado al desarrollo de lenguajes enfocados a la solucin y desarrollo de actividades mediante especificaciones de nivel conceptual superior. Lo que se busca con estos lenguajes es establecer la manera de como llevar a cabo las operaciones necesarias para realizar alguna actividad o de como llegar a una solucin, sin necesariamente indicar el detalle de todos los pasos requeridos. Se indica lo que debe hacerse, mas no como debe hacerse. Esta tendencia es hacia el desarrollo de lenguajes con un nivel

U N I V E R S I D A D

D E 1 3

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

de abstraccin mayor para permitir al programador pensar y comunicarse con la mquina a un nivel mucho ms elevado del cdigo mquina. Ejemplos de este tipo de lenguajes son SQL (Structured Query Language) creado para consultar bases de datos mediante comandos y estructuras muy similares al ingls y los Lenguajes de Cuarta Generacin (4GL). Como parte de las nuevas tendencias del desarrollo de sistemas y resultado de las populares interfaces grficas tenemos los llamados lenguajes visuales. Con estos el programador grficamente transfiere su algoritmo auxilindose de iconos y flechas para representar acciones, operaciones, procesos, decisiones, flujo de datos y paso de mensajes en una determinada secuencia en el tiempo. Aunque es equivocado, es comn encontrar referencias en documentacin de productos, publicidad y textos (e inclusive escuchar a la gente del medio informtico) utilizando los trminos traductor, compilador e intrprete de una forma libre e indistinta. Estas palabras no se utilizan para identificar de manera genrica a un programa que nos permitira poder programar una computadora. Debemos ser precisos al emplear estas palabras, ya que se refieren a programas de distinta naturaleza que realizan labores encaminadas a un objetivo especfico y particular. Aunque la conducta manifestada pueda ser similar, su comportamiento interno definitivamente es diferente. Genricamente hablando, en ciencias de la computacin, los procesadores de lenguajes son aquellos programas destinados a trabajar sobre una entrada que, por la forma como ha sido elaborada, pertenece a un lenguaje particular reconocido o aceptado por el programa en cuestin. Los procesadores de Lenguajes se clasifican como traductores o intrpretes. Un traductor es un programa que recibe una entrada escrita en un lenguaje (el lenguaje fuente) a una salida perteneciente a otro lenguaje (el lenguaje objeto), conservando su significado. En trminos computacionales esto significa que tanto la entrada como la salida sean capaces de producir los mismos resultados. Un intrprete, por otra parte, no lleva a cabo tal transformacin; en su lugar obtiene los resultados conforme va analizando la entrada. Los traductores son clasificados en compiladores, ensambladores y preprocesadores. Un compilador es un programa que recibe como entrada un programa escrito en un lenguaje de nivel medio o superior (el programa fuente) y lo transforma a su equivalente en lenguaje ensamblador (el programa objeto), e inclusive hasta lenguaje mquina (el programa ejecutable) pero sin ejecutarlo. Un compilador es un traductor. La forma de como llevar a cabo la traduccin es el objetivo central en el diseo de un compilador. Un ensamblador es el programa encargado de llevar a cabo un proceso denominado de ensamble o ensamblado. Este proceso consiste en que, a partir de un programa escrito en lenguaje ensamblador, se produzca el correspondiente programa en lenguaje mquina (sin ejecutarlo), realizando: La integracin de los diversos mdulos que conforman al programa. La resolucin de las direcciones de memoria designadas en el rea de datos para el almacenamiento de variables, constantes y estructuras complejas; as como la determinacin del tamao de stas. La identificacin de las direcciones de memoria en la seccin de cdigo correspondientes a los puntos de entrada en saltos condicionales e incondicionales junto con los puntos de arranque de las subrutinas. La resolucin de los diversos llamados a los servicios o rutinas del sistema operativo, cdigo dinmico y bibliotecas de tiempo de ejecucin. La especificacin de la cantidad de memoria destinada para las reas de datos, cdigo, pila y montculo necesarios y otorgados para su ejecucin.

U N I V E R S I D A D

D E 1 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

La incorporacin de datos y cdigo necesarios para la carga del programa y su ejecucin. Un precompilador, tambin llamado preprocesador, es un programa que se ejecuta antes de invocar al compilador. Este programa es utilizado cuando el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer (de aqu en adelante denominado lenguaje anfitrin-- en ingls host language), incluye estructuras, instrucciones o declaraciones escritas en otro lenguaje (el lenguaje empotrado-- en ingls embeded language). El lenguaje empotrado es siempre un lenguaje de nivel superior o especializado ( de consulta, de cuarta generacin, simulacin, clculo numrico o estadstico, etctera). Siendo que el nico lenguaje que el compilador puede trabajar es aquel para el cual ha sido escrito, todas las instrucciones del lenguaje empotrado deben ser traducidas a instrucciones del lenguaje anfitrin para que puedan ser compiladas. As pues un precompilador tambin es un traductor. Los precompiladores son una solucin rpida y barata a la necesidad de llevar las instrucciones de nuevos paradigmas de programacin (e.g. los lenguajes de cuarta generacin), extensiones a lenguajes ya existentes (como el caso de C y C++) y soluciones de nivel conceptual superior (por ejemplo paquetes de simulacin o clculo numrico) a cdigo mquina utilizando la tecnologa existente, probada, optimizada y confiable (lo que evita el desarrollo de nuevos compiladores). Facilitan la incorporacin de las nuevas herramientas de desarrollo en sistemas ya elaborados (por ejemplo, la consulta a bases de datos relacionales substituyendo las instrucciones de acceso a archivos por consultas en SQL). Resulta comn encontrar que el flujo de proceso en los lenguajes de cuarta generacin o de propsito especial puede resultar demasiado inflexible para su implantacin en los procesos de una empresa, flujos de negocio o interaccin con otros elementos de software y hardware, de aqu que se recurra o prefiera la creacin de sistemas hbridos soportados en programas elaborados en lenguajes de tercera generacin con instrucciones empotradas de nivel superior o propsito especial. Un pseudocompilador es un programa que acta como un compilador, salvo que su producto no es ejecutable en ninguna mquina real sino en una mquina virtual. Un pseudocompilador toma de entrada un programa escrito en un lenguaje 4determinado y lo transforma a una codificacin especial llamada cdigo de byte. Este cdigo no tendra nada de especial o diferente al cdigo mquina de cualquier microprocesador salvo por el hecho de ser el cdigo mquina de un microprocesador ficticio. Tal procesador no existe, en su lugar existe un programa que emula a dicho procesador, de aqu el nombre de mquina virtual. La ventaja de los pseudocompiladores que permite tener tantos emuladores como microprocesadores reales existan, pero slo se requiere un compilador para producir cdigo que se ejecutar en todos estos emuladores. Este mtodo es una de las respuestas ms aceptada para el problema del tan ansiado lenguaje universal o cdigo portable independiente de plataforma. Un intrprete es un programa que ejecuta cada una de las instrucciones y declaraciones que encuentra conforme va analizando el programa que le ha sido dado de entrada (sin producir un programa objeto o ejecutable). La ejecucin consiste en llamar a rutinas ya escritas en cdigo mquina cuyos resultados u operaciones estn asociados de manera unvoca al significado de las instrucciones o declaraciones identificadas. Los intrpretes son tiles para el desarrollo de prototipos y pequeos programas para labores no previstas. Presentan la facilidad de probar el cdigo casi de manera inmediata, sin tener que recurrir a la declaracin previa de secciones de datos o cdigo, y poder hallar errores de programacin rpidamente. Resultan inadecuados para el desarrollo de complejos o grandes sistemas de informacin por ser ms lentos en su ejecucin.

U N I V E R S I D A D

D E 1 5

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

CUESTIONARIO: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Cmo ayuda este dispositivo al hombre? En que se sustenta esta tecnologa de las computadoras? Cmo se aplica la utilizacin de estos conocimientos? Que tcnicas y herramientas son usadas para el diseo de compiladores? En que medida impacta la Ingeniera de Software en el, aspecto comercial y de desarrollo? Cuales son los Productos? Cuales son sus los costos de esos productos? Qu son los Lenguajes en computacin e informtica? Cuales fueron los primeros lenguajes? Que significado tiene el lenguaje FORTAN y cuando naci? Ejemplifique un ejemplo de programa en FORTRAN Cite otros lenguajes de programacin En los lenguajes modernos como se emplea el encapsulamiento y que es? Que son los compiladores? Que son los interpretes? Que es el lenguaje Ensamblador? Que es un Preprocesador? Qu es un Pseudocomplador?

U N I V E R S I D A D

D E 1 6

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 2

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 3

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: CLASIFICACIN DE GRAMTICAS DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 515

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: : Marzo 2011

FECHA DE ENTREGA: : Marzo 2011

U N I V E R S I D A D

D E 1 7

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

CLASIFICACIN DE GRAMATICAS A partir de la primera clasificacin de Chomsky, se clasifico las gramticas por tipos, pero a partir de esa clasificacin fue modificando teniendo en cuenta ciertas refinaciones para tener diferencias entre gramticas similares y no existan confusiones , e aqu una de esas refinaciones Las reglas generales. La clasificacion de las gramaticas estan dadas por los siguientes tipos: Tipo 0: Sin restricciones. No se impone ninguna restriccin a las producciones en particular las tiras pueden contraerse. Con estructura de frase --> , (NUT) + y (NUT) * Pueden achicarse, extenderse y cambiar smbolos. Tipo 1 : Sensibles al contexto Monotnicas. El segundo miembro de las producciones debe ser de longitud mayor o igual al primer miembro. --> , (NUT) + y (NUT) + y || <= | | No pueden achicarse. Ej: L = { an bn cn , con n>0} S --> aSBC bB --> bb CB -->BC cC --> cc o bien S --> abc | aSC S --> abC aB --> ab bCc --> bbcc cC --> Cc bC --> bc

pero no puede haber ms no terminales a izquierda que a derecha Tipo 2: Sensibles o dependientes del contexto A --> , A N, y (NUT)* y (NUT)+ Cambia A por pero solo en el contexto de y Son equivalentes a las Monotnicas Ej: L = { an bn cn , con n>0} S --> aSBC bB --> bb CB -->BC cC --> cc S --> abC aB --> ab bC --> bc

CB -> CX

CX ->BX

BX -> BC

U N I V E R S I D A D

D E 1 8

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Tipo 3: Libres o independientes del contexto A --> , A N , (NUT)* Ej: L= { an bn , con n>0} S --> aS b | es un caso particular sin , no se acepta A --> El primer miembro de las producciones esta compuesta por un nico smbolo No Terminal . El segundo miembro debe ser nulo (b) este tipo de gramticas se denominan de contexto libre.

Tipo4 : Regulares : Tanto el primer miembro como en el segundo estarn compuestas por un nico smbolo terminal. A --> aB, o bien A --> a A --> Ba , o bien A --> a A, B N y a T* Ej: 0*1 Lineal Derecha Lineal Izquierda

S -->A1 , A -->A0 |

CUESTIONARIO: 1. 2. 3. 4. 5. Por que se hizo modificaciones en la clasificacin inicial de Chomsky? En esta refinacin cuales son las diferencias? Citar los tipos de gramticas segn esta clasificacin refinada Determinar las caractersticas ms importantes de cada una de estos tipos. Citar dos ejemplos de cada uno de estos tipos, que no estn en el presente WP.

U N I V E R S I D A D

D E 1 9

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 3

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 3

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: MANEJO DE ERRORES DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 515

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: : Abril 2011

FECHA DE ENTREGA: Abril 2011

U N I V E R S I D A D

D E 2 0

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

MANEJO DE ERRORES El manejo de errores es una de las misiones ms importantes del compilador. Se utiliza ms en el anlisis pero los errores pueden darse en cualquier fase. El manejo de errores es una tarea difcil por dos motivos: 1. A veces algunos errores ocultan otros 2. Un error puede provocar una avalancha de errores que se solucionan con el primero Los criterios a seguir a la hora de manejar errores dentro de la compilacin son: Pararse al detectar el primer error (conveniente para un compilador interactivo) Detectar todos los errores de una pasada (conveniente para un compilador de lnea) Reconocimiento de Errores Lxicos Dentro del analizador lxico tpicamente se pueden detectar varios tipos de errores de acuerdo a circunstancias que asi lo determinen, los mas importantes son los siguientes errores: El utilizar caracteres que no pertenecen al alfabeto del lenguaje. Encontrar una cadena que no coincide con ninguno de los patrones de los tokens posibles. Posibles acciones que el analizador lxico puede llevar a cabo para recuperarse de los errores. Ignorar los caracteres no vlidos hasta formar un token segn los patrones dados. Borrar los caracteres extraos. Insertar un carcter que pudiera faltar. Reemplazar un carcter presuntamente incorrecto por uno correcto. Conmutar las posiciones de dos caracteres adyacentes.

En el reconocimiento de tokens en vez de generar el cdigo en base a los diagramas de estado, se genera cdigo en base a las tablas de transicin equivalentes a los diagramas de estado y adems sirven para efectuar el manejo de errores. Se refiere a una serie de estados consecutivos los cuales expresan una cierta expresin regular. Un estado n cualquiera que se encuentre subrayado (n ) significa que es un estado final . La primera fila de la tabla corresponde al estado inicial, de este modo, es posible seguir el reconocimiento de una cadena mediante el seguimiento de esta tabla . Para propsito de implementacin, se realizaran algunas modificaciones sobre esta tabla de transicin, las mismas consisten en: Cada casilla de la tabla de transicin tendr un valor que deber corresponder a alguna de las siguientes alternativas 1. Al siguiente estado 2. A un smbolo f que significa que el reconocimiento a finalizado. 3. A un smbolo r que significa que el reconocimiento a fallado. Si en una casilla se encuentra el smbolo f como transicin hacia el siguiente estado entonces el reconocimiento terminara y el token correspondiente podr ser calculado de la siguiente manera: con le numero de estado correspondiente a la fila donde es encontrado el smbolo f , se debe buscar en otra estructura la informacin

U N I V E R S I D A D

D E 2 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

adicional que puede ser una lista el token asociado a tal numero de estado. Esta estructura de informacin adicional, que asocia un nmero de estado construido en forma consecuente con la tabla de transicin. Si en la casilla se encuentra el smbolo r como transicin hacia el siguiente estado entonces el reconocimiento falla. El programa que almacena de alguna manera la tabla de reconocimiento de errores se deber implementar con los siguientes tres procedimientos: 1. Un procedimiento de funcin que devuelva en forma consecutiva un carcter a la vez del programa fuente. 2. Un procedimiento que elija en base al carcter ledo del programa fuente la entrada correspondiente a la tabla para que el reconocimiento empiece. 3. Procedimiento para implementar el recorrido a travs de la tabla segn sean los caracteres restantes ledos del programa fuente. De manera tal que cuando se llegue a un estado de aceptacin se devuelva el token reconocido o en cambio se llegue a un estado de rechazo que reporte un mensaje de error o que finalmente cambie el estado segn sea el numero de estado encontrado en la tabla. En ambas alternativas tambin es posible implementar el hecho de que cuando existe error lexicogrfico, se puede imprimir el nmero de lnea y posicin del carcter en esa lnea donde se encontr el carcter donde se produjo el error lexicogrfico. CUESTIONARIO: 1. 2. 3. 4. 5. 6. Cuales son los motivos para el manejo de errores? Cuantas y cuales son las circunstancias de errores que se pueden detectar? En base a que tambin es posible detectar los errores de los tokens? Cuando y como se reconoce si un estado es final o no? Que valores alternativos pueden adoptar cada una de las casillas dentro del reconocimiento de tokens? Cuantas y cuales son los procedimientos de implantacin en el programa de reconocimiento?

U N I V E R S I D A D

D E 2 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 4

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 3

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: ANALIZADOR SINTACTICO DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 515

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: Abril 2011

FECHA DE ENTREGA: Abril 2011

U N I V E R S I D A D

D E 2 3

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

ANALIZADOR SINTACTICO El anlisis sintctico constituye el corazn del compilador. A travs de la buena eleccin del anlisis sintctico es posible construir no solo el analizador sintctico correspondiente si no tambin el resto de los componentes del compilador. Introduccin Las gramticas libres de contexto especifican la estructura sintctica de los lenguajes de programacin. Para reconocer lenguajes libres de contexto, se pueden utilizar laso autmatas de pila. Un autmata de pila provee la base para el diseo de algunos mtodos de anlisis sintctico. El autmata de pila ser usado como base para derivar la construccin de un analizador sintctico descendente llamado tambin Productivo Recursivo desafortunadamente, los autmatas de pila para el reconocimiento de varios lenguajes libres de contexto son altamente no deterministicos por lo tanto los mtodos derivados de esta maquina pueden presentar el mismo problema. La mayora de los mtodos de anlisis sintctico son no deterministicos pero se busca en cada momento analizadores sintcticos deterministicos , para ello se han impuesto ciertas restricciones a las gramticas libres de contexto sobre las cuales se genera el analizador sintctico y algunos mecanismos sobre los mtodos para que el mismo sea deterministico. As por ejemplo se pueden construir analizadores sintcticos no deterministicos usando BACK TRAKING (paso hacia atrs) los cuales proveen una forma de implementar el problema del no determinismo, mediante la reeleccin de pasos errneos con el consiguiente costo de memoria y tiempo de computacin en algunos casos. Tambin se pueden construir analizadores sintcticos con ciertos mecanismos adicionales como ser el conjunto LOOK a HEAD que sobre ciertos tipos de gramticas resultan ser deterministicos y constituyen ser mtodos mas eficientes. En general, los analizadores sintcticos que utilizan el conjunto Look a Head son no deterministicos para la mayora de las gramticas de contexto para los cuales los autmatas de pila y mtodos de anlisis sintctico con Look a Head son deterministicos. Definicin del anlisis sintctico Anlisis sintctico es el proceso de reconocer si una cadena de tokens de entrada, puede ser generada por la gramtica libre de contexto que especifica su estructura sintctica y la construccin del rbol de derivacin correspondiente. RECONOCER: Es el proceso de determinar si una cadena de token puede ser generada por la gramtica que especifica su estructura sintctica. La estructura sintctica de un lenguaje de programacin puede ser descrita por una gramtica libre descrita por una gramtica libre de contexto mediante la notacin BNF. El anlisis sintctico presenta un conjunto de tareas a efectuar, las ms importantes son: Reconocer y construir el correspondiente rbol de derivacin para el lenguaje de entrada Efectuar la verificacin de tipos de las expresiones y condiciones de contexto para algunas construcciones del lenguaje fuente En algunos casos el analizador sintctico tiene ciertos mecanismos los mismos que ayudan a la generacin del cdigo objeto.

U N I V E R S I D A D

D E 2 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

CUESTIONARIO: 1. 2. 3. 4. 5. A que se pudiera llamar Anlisis Sintctico y Analizador Sintctico?, Ejemplificar. Con que componentes del Compilador de conecta al analizador Sintctico?. Que es un analizador sintctico deterministico y no deterministico? Con un ejemplo identificar los analizadores de la pregunta anterior. Con que tipos de lenguajes se relaciona el Anlisis Sintctico?

U N I V E R S I D A D

D E 2 5

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 5

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 3

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: GRAMTICAS CON ATRIBUTOS DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 51

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: Mayo 2011

FECHA DE ENTREGA: Mayo 2011

U N I V E R S I D A D

D E 2 6

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

GRAMTICAS CON ATRIBUTOS Una gramtica con atributos es un sistema formal para modelar la semntica esttica de un lenguaje. Intuitivamente, podemos decir que consiste en una gramtica libre del contexto donde se agregan campos a los smbolos (tanto terminales como no-terminales) para guardar la informacin semntica asociada a ellos. Estos campos reciben el nombre de atributos. Adems, para mover esta informacin semntica durante el proceso de anlisis de una cadena, se define (para cada regla de la gramtica) un conjunto de elementos llamados reglas semnticas. Los atributos se dividen en sintetizados y heredados. Los primeros se utilizan para transferir la informacin de los nodos hijos a los nodos padres en el rbol correspondiente al anlisis sintctico. Los heredados se utilizan para recibirla en un determinado nodo desde su nodo padre o desde los nodos hermanos. Este sistema formal fue definido por Donald Knuth en el ao 1968. Su definicin matemtica es la siguiente: Definicin. Una gramtica con atributos (GA) es un sistema de la forma: (G, A, R) donde G, A y R se definen como sigue: G: Es una gramtica libre del contexto, llamada gramtica base del sistema. A: Es un conjunto finito de elementos llamados atributos, tal que: A = AS U AH AS AH = A S es el conjunto de atributos sintetizados A H es el conjunto de atributos heredados El conjunto de atributos asociado a cada X (V N U V T ), lo denotaremos por A(X). Sus atributos sintetizados los denotaremos por S(X) y los heredados por H(X). Los smbolos terminales solamente poseen atributos sintetizados. R: Es un conjunto finito de elementos llamados reglas semnticas de la forma: X.a := f(y 1 ,........,y m ) donde a es un atributo del smbolo X; y 1 ,......,y m son ocurrencias de atributos de smbolos en G y f es una funcin cualquiera de m argumentos. A cada regla de la GLC G le corresponde un subconjunto (que puede ser vaco) de R. Cada regla semntica debe cumplir alguna de las dos condiciones siguientes: a) X es la parte izquierda de la regla en G, a es un atributo sintetizado de X y los y 1 , ......,y m son ocurrencias de atributos sintetizados de los smbolos de la parte derecha de esta regla o: b) X es alguno de los smbolos de la parte derecha de la regla en G, a es un atributo heredado de X y cada uno de los y 1 , ......,y m es una ocurrencia de un atributo sintetizado de cualquiera de los smbolos de la parte derecha o una ocurrencia de un atributo heredado de la parte izquierda de esta regla. Debe notarse como las dos condiciones anteriores no hacen ms que formalizar la explicacin dada al inicio sobre el uso diferenciado de los atributos sintetizados y los heredados. La condicin a) nos refleja la primera afirmacin, es decir, que los nodos sintetizados se utilizan para transferir informacin desde los nodos hijos hacia su nodo padre, luego de sintetizarla mediante la funcin dada; mientras que la condicin b) nos est diciendo que los atributos heredados de un nodo reciben informacin de los atributos heredados del padre y de los atributos sintetizados de sus hermanos. Notacin Si un smbolo se repite en alguna regla en G, se indican sus ocurrencias en esa regla de forma tal que si es el smbolo de la parte izquierda el que se repite, sta ocurrencia se indica con cero y las restantes a partir de uno. Si el smbolo que se repite se encuentra en la parte derecha solamente, sus ocurrencias se indican a partir de uno. Por ejemplo, si tenemos la regla siguiente:

U N I V E R S I D A D

D E 2 7

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

A ----> AbAX Esta se denotar, al expresar sus reglas semnticas, como: A 0 ----> A 1 bA 2 X Luego, escribiramos, por ejemplo: A 0 .t:=f(A 1 .p , A 2 .q , X.r) El uso diferenciado que se establece para cada tipo de atributo, permite escribir una gramtica con atributos sin especificar explcitamente la clase de los mismos ya que a partir de las reglas semnticas se deduce esta informacin. Ejemplo Sea la GA siguiente: E ABC Aa BX X b Cd E ABC E.d:=f(A.t , B.c) E.p:=B.c C.r:=g(A.p , B.q) Aa A.t:=h(a.q) BX X.q:=B.r Los conjuntos S(X) y H(X) para cada uno de los X (V N U V T ) en esta GA son: S(E) = {E.d , E.p} S(A) = {A.t , A.p} S(B) = {B.c , B.q} S(C) = S(X) = S(a) = {a.q} CUESTIONARIO: 1. 2. 3. 4. Con sus propias palabras defina que entiende por gramticas atributivas o con atributos. De donde parte una gramtica atributiva, y porque?. Cual es la notacin de las gramticas atributivas?. Ejemplifique con una gramtica diferente al del actual W.P. H(E) = H(A) = H(B) = {B.r} H(C) = {C.r} H(X) = {X.q} S(b) = S(d) =

U N I V E R S I D A D

D E 2 8

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 6

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 2

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja

CDIGO: CMP 515

TTULO DEL WORK PAPER: ANLISIS SEMANTICO Y GENERACIN DE REPRESENTACIONES INTERMEDIAS DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST. OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: Mayo 2011

FECHA DE ENTREGA: Mayo 2011

U N I V E R S I D A D

D E 2 9

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

ANLISIS SEMANTICO Y GENERACIN DE REPRESENTACIONES INTERMEDIAS Existen dos representaciones intermedias principales: Notacin Cudruplas Los operadores didicos (o binarios) pueden especificarse mediante tres notaciones principales: Prefija: el operador didico es analizado antes que sus operandos. Infija: el operador didico es analizado entre sus operandos. Sufija: el operador didico es analizado despus que sus operandos. En los lenguajes de programacin clsicos, los operadores didicos se representan usualmente en notacin infija. La notacin prefija permite al operador influir sobre la manera en que se procesan sus operandos, pero a cambio suele exigir mucha ms memoria. La sufija no permite esa influencia, pero es ptima en proceso de memoria y permite eliminar el procesado de los parntesis. Los operadores mondicos slo pueden presentarse en notacin prefija o sufija. Adems, un rbol sintctico puede representarse en forma de tuplas de n elementos, de la forma (operador, operando-1, ..., operando-k, nombre). Las tuplas pueden tener longitud variable o fija (con operandos nulos). Las ms tpicas son las cudruplas, aunque stas pueden representarse tambin en forma de tripletes. Notacin sufija. Llamada tambin postfija o polaca inversa, se usa para representar expresiones sin necesidad de parntesis. Ejemplos: a*b ab* a*(b+c/d) abcd/+* a*b+c*d ab*cd*+ Los identificadores aparecen en el mismo orden. Los operadores en el de evaluacin (de izquierda a derecha). Problema: operadores mondicos (unarios). O bien se transforman en didicos (binarios) o se cambia el smbolo. Ejemplo: -a se convierte en 0-a o en -@a a*(-b+c/d) ab@cd/+* Existen dos problemas principales: Construir la notacin sufija a partir de la infija.

Analizar la notacin sufija en el segundo paso de la compilacin. CUESTIONARIO: 1. Cuales son las notaciones de lenguajes intermedios?. 2. Que tipos de notaciones existen?. 3. Comentar cada una de ellas.

U N I V E R S I D A D

D E 3 0

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

WORK PAPER # 7

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 3

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: ENTORNOS DE EJECUCIN RBOLES DE ACTIVACIN DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

CDIGO: CMP 515

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: Junio 2011

FECHA DE ENTREGA: Junio 2011

U N I V E R S I D A D

D E 3 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

ENTORNOS DE EJECUCIN RBOLES DE ACTIVACIN Se tienen dos supuestos en el flujo de control de procedimientos en la ejecucin de un programa.

Control que fluye secuencia mente, costa de varios pasos, el control esta dentro de un punto especifico de pasos. Cada ejecucin de un procedimiento comienza al principio del cuerpo del procedimiento y en algn momento devuelve el control al punto situado inmediatamente tras el lugar donde fue llamado el procedimiento.

Duracin se refiere a una secuencia consecutiva de pasos durante la ejecucin de un programa.

..............................

n+1 pasos

Procedimientos recursivos Pueden existir procedimientos recursivos, si puede comenzar una nueva activacin antes de que haya terminado una activacin anterior del mismo procedimiento. Entra eje 1 .(ab) Entra eje 2 (cd) Sale eje 2 (cd) Entra eje 1 (ef) Entra eje 2 (cd) Sale eje 2 (cd) Sale eje 1 (ef) Sale eje 1 .(ab) Pilas de Control Se usa para llenar un registro de las actividades de los procedimientos en curso
nodo a (1,1) b (1,2) b (1,3) a (1,2) a (1,3) a (1,4) b(1,5) ( ) b (1,4)

U N I V E R S I D A D

D E 3 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

mbito de Declaracin. Una declaracin en un lenguaje es una construccin sintctica que asocia informacin a un nombre. Las declaraciones pueden ser explcitas como: Var i: integer Implcitas Como por ejemplo se supone que cualquier nombre de variable que contiene x indica un programa en Fortran, a menos que se declare lo contrario. Program ordenamiento(input,output ); var a : array [0..10] of integer; procedure lectura; var i : integer ; begin for i := 1 to 6 do read (a[i]) end; ................................................................. var i : real ; begin for i := 1 to 2 do read (b[i]) end; ................................................................. CUESTIONARIO: 1. 2. 3. 4. Que son los rboles de activacin? Que es un procedimiento recursivo? Que es un a pila de control? Que es mbito de declaracin?

U N I V E R S I D A D

D E 3 3

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

_____________________________________________________________________________ WORK PAPER # 8

PROGRAMA DE CONTROL DE CALIDAD

No. DE PROCEDIMIENTO: APRO 07

No. DE HOJAS: 4 CDIGO: CMP 515

ELABOR: Ing. Reynaldo Einar Zabaleta Rioja TTULO DEL WORK PAPER: GENERACIN DE CDIGO FINAL DPTO.: Facultad de Ingeniera DESTINADO A: DOCENTES ALUMNOS X ADMINIST.

OTROS

OBSERVACIONES: Ingeniera de Sistemas, Diseo y Desarrollo de Compiladores, Unidad II

FECHA DE DIFUSIN: Julio 2011

FECHA DE ENTREGA: Julio 2011

U N I V E R S I D A D

D E 3 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

GENERACIN DE CDIGO FINAL Generacin de cdigo utilizando atributos: Para entender este mtodo, es conveniente suponer que la traduccin de algn lenguaje fuente bajado en una gramtica que hacia un lenguaje objeto Z puede ser descrito por un esquema de traduccin dirigida por la sintaxis. Bajo esta suposicin, para cada smbolo no termina A de la gramtica G, existe una funcin de traduccin T A cuyo dominio y codominio es: T A : L (A) Z Y para cada regla de produccin P P = (A O X O Z O , X 1 Z 1 , X 2 Z 2 ... X n Z n ) Existe una funcin T P cuyo dominio y codominio es P : ZU Z De tal forma que: Si x L( AO ) AO = X 1 A1 , X 2 A2 , X 3 X 3 ,... X n An

X 1Y1 , X 2Y2 , X 3Y3 ... X nYn

T A0 (X) = p ( T A! (Y 1 ); T A2 (Y 2 ); T A3 (Y 3 ).......... T An (Y n ) Generacin de cdigo al vuelo: Para este mtodo de generacin de cdigo se debe considerar nuevamente que la traduccin de una lenguaje fuente generado por una gramtica G a algn lenguaje Z 1 es descrito por un esquema de traduccin dirigido por la sintaxis. La generacin de Cdigo al vuelo para producir la correspondiente generacin de cdigo SI las.funciones: T P : ZU Z Asociados a las Reglas de Produccin: P = (A o X O A O , X 1 , A 1 , X n A n ) Las reglas de produccin P satisfacen la llamada condicin de generacin de cdigo al vuelo. Condicin de generacin de cdigo al vuelo: Una gramtica cumple la generacin de Cdigo al Vuelo si: Una cadena X L (A o ) es generado por las derivaciones

Ao = X o A1 X 1... X n An11 X n11 X 0Y1 X 1... X nYn1 X n +1 = X

U N I V E R S I D A D

D E 3 5

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

y se tiene:

TA0 0TA1 ( y1 )1...vn 1TAn (Yn ) n


Donde 0 hasta n son cadenas de Z correspondientes a la reglas P. En otras palabras en la traduccin de x, la traduccin de i , es decir, la traduccin de las producciones terminales de A i aparecen sucesivamente para i 1, 2, .... h En un orden determinado. Se debe notar que este es el mismo orden en la cual estas cadenas son tratadas por el anlizador sintctico descendente bajo esta situacin es posible generar el cdigo al vuelo. Luego se tiene la siguiente declaracin: UAR Cdigo : ARCHIVO DE Z Es decir, cdigo es una variable de tipo archivo que corresponde al archivo de salida que contendr el cdigo objeto, generando, entonces cuando se use a generacin del cdigo al vuelo, cada procedimiento del anlisis PB directamente escribir la traduccin TB (y) de la parte de entrada por PB hacia un archivo de salida denominado cdigo. Durante el anlisis sintctico de X mediante PA 0 para los procedimientos: PA 1 , PA 2 ... PA u Son llamados sucesivamente estos procedimientos describen en forma sucesiva las traducciones. TA 1 (Y 1 ), ..., JA n (y n ) Al archivo de salida denominado cdigo Conclusin del mtodo de generacin de cdigo utilizando atributos: No resulta difcil imaginar como se puede generar el cdigo para las construcciones del Lenguaje Fuente L.F. y por lo tanto para muchas construcciones de lenguajes interactivos en general ya que la generacin de cdigo para dichas construcciones resultan ser bastante parecidas. Conclusiones del mtodo de generacin de cdigo al vuelo: La ventaja de este mtodo comparado con el que utiliza atributos para la generacin de cdigo, es que el espacio de memoria para los atributos que generan el cdigo no es necesario. Sin embargo, la complejidad de las posibles traducciones de las construcciones de los lenguajes de programacin imperativos hace que el uso de la generacin de cdigo al vuelo sea restrictivo en la prctica puede usarse la combinacin de ambos mtodos para generar el cdigo es decir en algunos casos la tcnica de generacin de cdigo al vuelo para la mayor parte de las traducciones sencillas y solo de pequeas construcciones ms complejas usar la generacin de cdigo utilizando atributos. Optimizacin de cdigo: Para crear un programa en un lenguaje objeto eficiente un programador necesita ms que un compilador optimizador, funciones que se disponen para que el compilador pueda crear programas objeto eficientes se mencionan los tipos de

U N I V E R S I D A D

D E 3 6

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

transformaciones para mejorar el cdigo que supone que el programador y quien escribe un compilador utilizarn para mejorar el rendimiento de un programa. Criterio para las transformaciones para mejorar el cdigo: Dicho de una manera sencilla las mejores transformaciones de programas son las que producen mayor beneficio con el menor esfuerzo. Las transformaciones de un optimizador debe tener varias propiedades. Primero: Una transformacin debe preservar el significado de los programas es decir, una optimizacin no debe cambiar el resultado producido por un programa para una entrada dada o causar un error como una divisin por cero que no estuviera presente en la versin original del programa fuente. Segundo: Una transformacin, como promedio, acelerar los programas en una cantidad mensurable. En ocasiones interesa reducir el espacio que ocupa el cdigo compilado aunque el tamao del cdigo tenga menos importancia que la que tenia antes. Por supuesto no toda transformacin consigue mejorar los programas y ocasionalmente una optimizacin no necesariamente mejore la ejecucin de un programa determinado. Tercero: Una transformacin debe valer la pena no tiene sentido que el escritor de un compilador haga el esfuerzo intelectual de aplicar una transformacin que mejore el cdigo y que el compilador gaste el tiempo adicional compilando el programa fuente, si este esfuerzo no es recomendado cuando se ejecutan los programas objeto. CUESTIONARIO: 1. 2. 3. 4. 5. 6. 7. Que es la generacin de cdigo utilizando atributos? Que es la generacin de cdigo al vuelo? Cual es la condicin para la generacin de cdigo al vuelo? Cual de estas dos es al mas aconsejable y porque? Concluya cada uno de estos dos mtodos. Que es optimizacin de cdigo? Cuantos y cuales son los criterios de transformaciones para generar el cdigo?

U N I V E R S I D A D

D E 3 7

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 001 PROCESO DE CREACIN DE UN PROGRAMA Recuerde: En realidad escribir un programa es formular la solucin de un problema utilizando un lenguaje comprensible por el humano - programador. Esta formulacin escrita, que aqu se llama cdigo fuente, es traducido despus a instrucciones comprensibles por el procesador (el lenguaje mquina); el resultado de esta traduccin es el denomina ejecutable; una secuencia de instrucciones que controlan el funcionamiento de la maquina. Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Presentacin del problema Hay bastante literatura sobre programacin en general; a los acadmicos les gusta hablar de "Teora de la Programacin", y mucha gente se ha dedicado a especular sobre el tema; incluso hay "modas" al respecto es posible confeccionar una lista de las caractersticas que "debe" y "no debe" tener un buen programa (incluyendo la del Jefe, que solo tiene dos puntos: "Que est para ayer; que salga barato"). El propio Stroustrup ( C++PL) compara las condiciones para escribir un buen programa con las de escribir buena prosa. Segn l, existen dos respuestas: "Saber que se quiere decir" y "Prctica. Imitar buenos escritores". Ms adelante nos recuerda que aprender a manejar bien un lenguaje puede constar tanto tiempo y esfuerzo como aprender a expresarse en un lenguaje natural o tocar un instrumento. Por supuesto sera un atrevimiento por mi parte contradecir esta opinin, pero puestos a filosofar me gustara puntualizar que el verdadero problema est en el segundo punto de la segunda respuesta. Siempre me ha parecido que programar (programar bien) tiene mucho de arte; me parece que debe ocurrir como con la msica; seguramente muchos pueden decir que debe tener una buena ejecucin de violn, pero imitar a Paganini debe ser harina de otro costal. Seguramente los profesores de armona saben que debe tener y no tener una buena sinfona, pero otra cosa debe ser imitar a Mozart. Bajando a la tierra; tampoco se trata aqu de hacer "Paganinis de la programacin C++" (ya me gustara para m); el mensaje que quisiera transmitir es doble: El contenido en un viejo Refrn Espaol: "La Universidad no presta lo que la naturaleza no da". Como suena un poco duro, aadir un consuelo para los que somos menos dotados; un proverbio que le hace tiempo, en lnea con la respuesta de Stroustrup: "Por el dinero del trabajo los Dioses lo venden todo". A continuacin se comentan brevemente los pasos imprescindibles en la creacin de un programa C++. Vaya por delante, que las anotaciones de los puntos son opinin del que suscribe basados en la propia experiencia, por tanto totalmente subjetivos y opinables. Comprender el problema. Esta es la tpica obviedad que a veces se pasa por alto. Hemos dicho que escribir un programa es formular la solucin de un problema; parece lo ms natural del mundo enterarse primero de cual es el problema; tener una imagen mental lo ms clara posible del asunto y de lo que se pretende conseguir con el programa. A esta fase se la suele denominar anlisis, y mi consejo particular es que despus de una primera toma de contacto, el segundo paso sea definir de la forma ms detallada posible el principio y el final del problema, es decir: Cual es la informacin de partida (incluyendo su formato y en que soporte se recibe) y cual es la informacin final y en que soporte se proporcionar; no es lo mismo mostrar una imagen que componer una factura o disparar un proceso si un sensor analgico - digital nos suministra una determinada seal (por citar algn ejemplo). Normalmente en ambas cuestiones tiene mucho que decir el cliente, es lo que se llama especificacin; el resto (lo que hay entre los datos de entrada y la salida), debe rellenarlo el programador. Generalmente si se tienen bien definidos ambos extremos, se tiene resuelta la mitad del problema; cuando se tengan diseados los ficheros se tendrn dos terceras partes . Este sistema tiene adems la ventaja de poner inmediatamente

U N I V E R S I D A D

D E 3 8

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

de manifiesto las indefiniciones de partida; a veces los clientes no saben exactamente que desean y hay que ayudarles a centrar el problema. Dentro de esta fase tiene especialsima importancia el tema de los lmites; esto se refiere al orden de magnitudes que se manejarn. De que rango sern las magnitudes numricas? Podrn adoptarse valores negativos? Hay informacin alfanumrica? Como son de largas estas cadenas?. Especialmente si el programa implica diseo de archivos (como es casi seguro), Cual podr llegar a ser su tamao dentro de la vida del programa?. Si se manejan ficheros u objetos binarios, Como son de grandes? Que concepto tiene el cliente de los que sera "rpido" o "lento"? (milisegundos, minutos, horas?). En esta fase sea especialmente precavido y no se crea a pi juntillas todo lo que le digan (intente hacer de abogado del diablo). Como postre, disee las lneas maestras de una estrategia de recuperacin de errores de ejecucin, incluyendo que har con los no recuperables (errores fatales). Piense por ejemplo que si algn da lo llaman para ver "que ha pasado", quizs le interese disponer de un vocablo de texto ASCII en el disco con una descripcin del status del programa como parte de las funciones de salida Hoy da, cuando se empieza a hablar de frigorficos que avisarn de que faltan provisiones o de lavadoras que avisarn al tcnico si se estropean, no estara de ms que sus programas estuviesen a la altura de las circunstancias. Disear los ficheros Si el programa debe utilizar ficheros que no vengan impuestos (ya existentes), y suponiendo que todo lo anterior est suficientemente claro, este es el momento de hacerlo. Ponga por escrito la especificacin de tales ficheros, incluyendo el nombre que dar a las variables y, en su caso, el que tendrn en el disco o almacenamiento externo. Esto puede concretarse quizs a la definicin de algunas estructuras. En esta fase es posible que tenga que re preguntar alguna cosa que se pas por alto. Escribir el cdigo Suponiendo cumplimentados los pasos anteriores y una imagen mental clara de cmo ser esa conexin entre la informacin de entrada y la salida (que es justamente el programa que se pretende), puede empezarse a escribir el cdigo. Nota: Para escribir el cdigo solo hace falta un editor de texto plano, aunque las modernas "suites" de programacin incluyen editores especficos que estn conectados con el depurador, el compilador el enlazador (ver ms adelante) e incluso el sistema de ayudas, de forma que, por ejemplo, pueden mostrarnos automticamente la sentencia en la que se ha producido un error de compilacin, o la pgina correspondiente del manual si pulsamos en una palabra reservada y pedimos ayuda (F1 generalmente). Tambin muestran en diversos colores las palabras clave, los comentarios, etc. Los ms avanzados disponen incluso de opciones que podramos calificar de "inteligentes", en el sentido que pueden prever cual ser nuestro prximo movimiento en funcin de la sentencia que estamos escribiendo (por ejemplo, ofrecernos una lista de las propiedades y mtodos de una clase si nos estamos refiriendo a ella). Si el programa es mediano o grande, es posible que todava tenga que realizar una labor previa: disear a grandes rasgos cuales sern los mdulos del programa; mdulos que se correspondern aproximadamente con la distribucin del cdigo en ficheros fuente independientes. Quizs tenga que decidir tambin si algunas partes aparecern como libreras . Recuerde: lo indicado al respecto al tratar de los Sub espacios de Nombres. Esta fase es especialmente importante en el caso de programas muy grandes, cuyo desarrollo se reparte entre varios programadores que se encargan de uno o varios de estos mdulos. En estos casos, el anlisis, la especificacin, la subdivisin en partes (con sus especificaciones particulares), y la asignacin de estas como tareas a los programadores, lo habr realizado el jefe de programacin y desarrollo o un equipo de analistas de sistemas.
U N I V E R S I D A D D E 3 9 A Q U I N O B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Durante la fase de escritura no desdee dos puntos: Incluir la mayor cantidad de comentarios y aclaraciones posibles. Cuando se est muy "metido" en el programa todo parece evidente, pero piense que tiene que retocarlo dentro de unos aos, quizs entonces le parezca "Chino" y agradecer haber dejado la mayor cantidad de documentacin y aclaraciones al respecto. Incluso si es seguro que no volver a verlo, piense en el sufrido programador que le seguir si tiene que habrselas con su cdigo. En este sentido C++ no es precisamente COBOL, aunque afortunadamente permite incluir en el fuente comentarios todo lo extensos que se desee .No caiga tampoco en el error de pensar que esa informacin ya est en la documentacin escrita que le han obligado a entregar junto con los fuentes; posiblemente dentro de unos aos. Usted mismo no encuentre esos documentos. Incluir la mayor cantidad posible de rutinas y condiciones de comprobacin de errores. Piense que el operador es un "manazas" o que los datos pueden venir con alguna corrupcin, error de transmisin, etc. Verifique constantemente que las condiciones son las esperadas. Una vez que se tiene el cdigo fuente (en uno o varios mdulos), el proceso de traducirlo a instrucciones comprensibles por el procesador (lenguaje mquina) puede hacerse siguiendo dos modelos: los intrpretes y los compiladores. En el caso de lenguajes compilados como C++, el fichero de texto plano (ASCII que contiene el fuente del programador (con la terminacin .C .CPP), es sometido a un proceso de varias fases que terminan en la obtencin del ejecutable. De forma genrica, todo este proceso se denomina "compilacin", aunque es una generalizacin un tanto incorrecta, ya que la compilacin propiamente dicha es solo una de las etapas intermedias. Sera ms correcto decir "construccin" del ejecutable, aunque por la extensin y generalizacin de su uso seguiremos utilizando el trmino genrico "compilacin" para referirnos a l. Los procesos de construccin del ejecutable se esquematizan en la figura que comentamos a continuacin: Preprocesado En la primera fase de la compilacin; un programa especial, denominado make, es encargado de iniciar el proceso llamando a los diversos mdulos que se encargan de la construccin del ejecutable El primero de estos mdulos es el preprocesador. El preprocesador estudia el texto buscando directivas de preprocesado por ejemplo sentencias que pueden ser suprimidas, incluye los ficheros correspondientes a las directivas #include, sustituye los #define, elimina los comentarios y expande las macros encontradas en el fuente y en los propios ficheros incluidos. El resultado obtenido es lo que se denomina unidad de compilacin. Anlisis El segundo paso consiste en un anlisis lxico (scaning) y sintctico (parsing) del fichero resultante para identificar los tokens finalmente el fuente es tokenizado, esto es, reducido a tokens y separadores.

U N I V E R S I D A D

D E 4 0

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

El fuente es escaneado, el analizador sintctico (parser) extrae los tokens de forma que selecciona el que coincida con la secuencia de caracteres ms larga posible dentro de la secuencia analizada. Por ejemplo, la palabra clave external es reconocida como un solo token (identificador de clase de almacenamiento) en vez de seleccionar externamente (una palabra reservada) y al (que sera un identificador). En esta fase tambin se realizan tambin algunas comprobaciones; bsicamente la comprobacin esttica de tipos, es decir, que las variables y las operaciones entre ellas se usan correctamente. Esto supone verificar que las llamadas a funciones, los valores devueltos por estas y los operandos de las expresiones corresponden con el tipo que se supone en cada caso; tambin se realizan comprobaciones sintcticas, como que los parntesis estn cerrados, que no aparecen expresiones incompletas, etc. Los separadores (whitespaces) es el nombre genrico dado a los espacios tabulaciones verticales VT, horizontales TAB nueva linea NL) y retorno de carro CR . Los separadores sirven para indicar donde empiezan y terminan las palabras, pero despus de esto cualquier separador redundante es descartado. Por ejemplo, las dos secuencias: int i; float f; ----------------int i ; float f; son lxicamente equivalentes y el resultado del anlisis son las seis palabras siguientes: int i ; float f ; El carcter ASCII espacio puede formar parte de cadenas literales (alfanumricas), en cuyo caso es protegido del proceso de anlisis, permaneciendo como parte de la cadena. Por ejemplo: char name = "Playa Victoria"; Es reducido a siete tokens, incluyendo una cadena literal "Playa Victoria" char name [ ] = "Playa Victoria" ;

Generador de cdigo Todos estos tokens identificados por el analizador sintctico, son organizados en una estructura como las hojas de un rbol. A continuacin, el generador de cdigo recorre este rbol traduciendo sus hojas directamente en cdigo de la mquina para la que se compila. Si se solicita, el compilador tambin puede en esta fase generar un fichero en lenguaje macro ensamblador para su posible inspeccin por el programador (este cdigo es tambin dependiente de la mquina para la que se compila y fcilmente entendible por el humano; puede contener incluso comentarios para facilitar su lectura).

U N I V E R S I D A D

D E 4 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

El compilador Borland C++ dispone de opciones que permiten generar cdigo optimizado para procesadores Intel de modelos especficos. A veces, despus del generador de cdigo puede ejecutarse un optimizador (peephole optmizer). Este generador de cdigo sera propiamente el compilador, es decir, el encargado de traducir algo entendible por el humano en cdigo mquina. En cualquier caso, el resultado es un fichero "objeto", generalmente con la terminacin obj. Tambin puede ordenarse al compilador que incluya en el "objeto", determinada informacin adicional que ser utilizada ms tarde por el depurador , por ejemplo los nmeros de lnea de las sentencias. Cuando se hace as, se habla de una compilacin "provisional" o de "depuracin"; distinta de la que se realiza para la versin definitiva (de campo) del programa en la que no se incluyen este tipo de informacin que ya no es necesaria. Recuerde: La comparacin del contenido del presente Dif debe ser analizado por el grupo de discusin.

U N I V E R S I D A D

D E 4 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 002 LENGUAJES Y GRAMATICAS Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Recuerde: Es importante la lectura de este documento en su integridad para su posterior anlisis. En este documento de discusin y anlisis se presenta y menciona el Enfoque Lingstico como una nueva forma de ver la realidad, en la cual se considera que, cualquier cosa se puede ver como una oracin de algn lenguaje. Mediante este enfoque puede representar como oraciones de algn lenguaje las imgenes, las reglas de un sistemas expertos, las trayectorias de un planeta, el movimiento de la mano, la trayectoria que sigue una pieza de ajedrez al moverse, una huella digital, la seal de un electrocardiograma, etc., con lo que se amplia el concepto de lenguaje que normalmente se restringa a los lenguajes naturales (como el Espaol, Ingles, Chino o rabe) y artificiales (como Fortran, Pascal o C), para incluir cualquier cosa. Como primer punto se comenta que el Enfoque Lingstico surgi en varios pases como ser Mxico a mediados de los 70's y que tiene como antecedentes los trabajos desarrollados por Noam Chomsky a mediados de los 50's para representar la estructura de los lenguajes naturales, la aplicacin de estos trabajos a la construccin de compiladores, con lo que se generalizo el concepto de lenguaje para incluir a los lenguajes artificiales de programacin y el surgimiento del Reconocimiento Sintctico de Formas donde se plantea que la forma de cualquier objeto o el patrn de comportamiento de cualquier proceso se puede ver como una oracin de algn lenguaje, con lo que se generaliz an ms el concepto de lenguaje para incluir a cualquier patrn o forma, de donde se llego finalmente a la idea del Enfoque Lingstico. Como siguiente punto se generaliza el concepto de unidad lxica para incluir a cualquier cosa que se pueda percibir o conceptualizar. La presentacin de ejemplos de mltiples tipos de lenguajes, como: lenguajes naturales restringidos, lenguajes de trayectoria, lenguajes para representar sistemas de diagnostico y toma de decisiones y una ecuacin lingstica con la cual se tiene la estructura de cualquier elemento de la naturaleza , tiene mucho uso es la actualidad y esta orientado a la muchas aplicaciones. Recuerde: Una Gramtica (o conjunto de reglas que representan a un lenguaje) es equivalente a un sistema de informacin, por lo que si se tienen un conjunto de oraciones de un lenguaje se puede encontrar su gramtica y de ah obtener el sistema que trabaja con ese lenguaje. Finalmente el uso de oraciones en un lenguaje tienen una estructura fractal, ya que, segn el enfoque lingstico cada una de las unidades lxicas que componen a la oracin se pueden ver a su vez como oraciones. Recuerde: La comparacin del contenido del presente Dif debe ser analizado por el grupo de discusin.

U N I V E R S I D A D

D E 4 3

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 003 ANALIZADOR LEXICOGRFICO Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Recuerde: Es de mucha importancia que el contenido del presente Dif tenga relacin con lo que se avanza en clase. Al introducir lo que es el analizador lexicogrfico es necesario saber cual es el rol de esta principal elemento dentro de la compilacin de un programa fuente. El rol del analizador lexicogrfico en la construccin de un compilador, su finalidad y su caracterstica paulatinamente se ira sentando las bases para el diseo del analizador lexicogrfico utilizando expresiones regulares y autmatas de estado finito como herramientas para su implementacin. Rol del analizador lexicogrfico en el modelo de un compilador
TOKENS PROGRAMA FUENTE ANALIZADOR LEXICOGRAFICO OBTENER EL SIGUIENTE TOKEN PARSERS

INFORMACION ADICICONAL DE LOS TOKENS

La razn o existencia de la entidad de la informacin adicional de los tokens es por que el analizador lexicogrfico almacena informacin adicional de los tokens la cual es necesaria para la compilacin. Dicha informacin adicional es almacenada en algn tipo de estructura de datos como colas, pilas, etc. Esta informacin corresponde al atributo del Token de esta manera por ejemplo es posible conocer si un identificador es una palabra reservada o se trata del nombre de una variable. Anlisis lexicogrfico La entrada del compilador consiste en una serie de caracteres almacenados en un archivo que contiene el programa o lenguaje fuente, en tal archivo existen varios grupos de caracteres que representen un solo objeto, los cuales son llamados TOKENS, un token es una pieza constituyente del programa fuente como ejemplos de tokens puede mencionarse a los siguientes: identificador, numero, etc. La principal tarea del analizador lexicogrfico consiste en la particin del archivo de entrada en tokens , en forma mas precisa la respuesta del analizador lexicogrfico deber ser : proporcionar el siguiente token del archivo fuente en forma sucesiva, cada vez que el modulo encargado del anlisis sintctico lo reuniera si se considera que durante la compilacin del programa fuente el analizador lexicogrfico tomara un cierto tiempo para encontrar el siguiente token , es importante por eso que la construccin de un analizador lexicogrfico debe ser eficiente en cuanto a tiempo y espacio. Por supuesto que la eficiencia y complejidad del analizador lexicogrfico esta relacionada con las cadenas a ser reconocidas, esta complejidad se puede reducir mediante el manejo de ciertas propiedades de los lenguajes. Recuerde: La comparacin del contenido del presente Dif debe ser analizado por el grupo de discusin.

U N I V E R S I D A D

D E 4 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 004 ROL DEL ANALIZADOR SINTACTICO Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente El anlisis sintctico, es la fase del compilador que toma como entrada una secuencia de token provisto por el analizador lexicografico , para verificar si tal entrada es generada por una gramtica libre de contexto. Se espera que el analizador sintctico reporte cualquier error sintctico que encuentre, adems un analizador sintctico debera ser capaz de recuperarse de la ocurrencia de algunos errores comunes, para que el resto de la entrada pueda seguir siendo procesada.

REPRESENTACIN TOKEN PROGRAMA RBOL

ANALIZADOR

ANALIZADOR
DE
SIGUIENTE

RESTO DEL FRENTE DEL COMPILADOR INTERMEDIA

FUENTE

TOKEN DERIVACIN

INFORMACIN ADICIONAL DE LOS TOKENS

Esta es la forma de la maquina que hace posible el reconocimiento de lenguajes de gramticas de libre contexto tambin es til recordar un teorema muy importante de la computacin que dice Un lenguaje de libre contexto es si y solo si, es aceptado por una autmata de pila no deterministico. Desgraciadamente, para un autmata de pila no deterministico no siempre es posible la construccin de un autmata de pila deterministico equivalente; este hecho reduce el conjunto de leguajes de libre contexto por los que existe AFD, entonces tambin se tiene una clase de mtodos de Autmatas Deterministicos basados o no en AF que solo trabajan en un conjunto reducido de lenguajes libre contexto. Mtodos de anlisis sintcticos. Existen tres mtodos generales de Analizadores sintcticos para gramticas de libre contexto. 1. mtodos universales de anlisis sintctico, para gramticas de libre contexto el algoritmo Cooke-Younger-kasami y el de Earleys 2. Mtodo descendente (Top Down) 3. Mtodo Ascendente (Botton up) El primer mtodo a demostrado ser por su alto grado de no determinismo no eficiente, los dos ltimos mtodos son mas utilizados para los analizadores sintcticos de un compilador debido a las grandes facilidades el mtodo descendente es muy importante en la implementacin de un compilador.

U N I V E R S I D A D

D E 4 5

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Es necesario anotar que existe varias maneras de implementar estos mtodos de analizadores sintcticos no obstante siempre se prefiere aquellos que proporcionan una forma eficiente de memoria, tiempo y presentan sencillez en su diseo. Diferencia entre los mtodos ascendentes y descendentes. Como su nombre indica el analizador sintctico descendente construye el rbol de direccin empezando desde la raz hasta los nodos que son las hojas del rbol, mientras que el analizador sintctico ascendente construye el rbol de derivacin empezando por los nodos y continua hacia arriba hasta llegar a la raz del rbol. Similitud entre los mtodos ascendentes y descendentes. En ambos casos la entrada del analizador sintctico es buscada (scanned) de izquierda a derecha un smbolo a la vez. Los mtodos de analizadores sintcticos ascendentes y descendente mas eficientes pueden trabajar solamente sobre una determinada clase de gramticas, varias de estas determinadas gramticas son suficientes para describir muchas construcciones sintcticas de los lenguajes de programacin y son dos LL y LR Analizador sintactico descendente El problema Del A.S se resuelve con la construccin de un rbol de derivacin para la secuencia de token de entrada o simplemente , cadena de entrada , aunque el compilador en realidad no construya tal rbol de derivacin en forma explicita , en base de una gramtica de libre contexto. Para cualquier G.L.C. es posible la construccin de un A.S descendente, sin embargo la mayora de estos son no deterministicos , solo para una determinada clase de gramticas es posible construir A.S descendentes deterministicos. La popularidad del A.S descendente se debe al hecho que se puede construir fcilmente A.S. eficientes y por que adems es posible aplicar a este mtodo ciertas tcnicas que permiten la consideracin de las condiciones de contexto y de la generacin de cdigo. Existen dos etapas hasta llegar a los nodos (hojas) que contienen los tokens reconocidos: 1. Para cada nodo n , etiquetado por un smbolo N.A seleccionar una de las P d A (A) y construir nodos fijos para este nodo n con los smbolos del nodo derecho de la P 2. Encontrar el siguiente nodo mas a la izquierda , para el cual otro sub rbol ser construido. <tipo><simple> Correspondiente al fragmento | id arreglo [num...........num] | arreglo <simple> entero | char | num.........num

U N I V E R S I D A D

D E 4 6

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

- Etapas de construccin de un rbol de derivacin descendente: a) <Tipo> b) < Tipo > arreglo [<simple] ] de <Tipo>

c)

arreglo

< Tipo > [<simple] ] de

<Tipo>

Num

......

Num

d)

< Tipo > arreglo [<simple] ] Num ...... Num

de <Tipo> < simple>

e)

arreglo

< Tipo > [<simple] ] de

<Tipo>

Num

......

Num

< simple>

entero

Recuerde: La comparacin del contenido del presente Dif debe ser analizado por el grupo de discusin.

U N I V E R S I D A D

D E 4 7

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 005 ATRIBUTOS Y MANEJO DE ATRIBUTOS: LL1 CON LLAMADA DE FUNCIONES: Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Recuerde: Es de mucha importancia que el contenido del presente Dif tenga relacin con lo que se avanza en clase. Recuerde: Pasar cada atributo heredado como un argumento. Pasar cada atributo sintezado como resultado de la ejecucin de la funcin que corresponde al no terminal. Puede ocurrir que exista ms de un atributo sintezado y ser ms apropiado pasar cada uno como puntero. Desventaja del mtodo: Necesitamos de cambiar todas las funciones lo que incrementa enormemente la probabilidad de error. Ejemplo: Tenemos: S : AxBCDa La lnea correspondiente de cdigo es: .... int token; sem_t yylval; #define _T(x) { if (token!=x) error(); else token=get_next_token();} ... void S() { .... .... A(); _T(x); B(); C(); D(); _T(a); -Con calculo de atributos (valores sematicos de tipo sem_t) ...... sem_t S(sem_t h /* heredado */) { sem_t v0,v1,v2,v3,v4,v5,v6; .... v1=A(h); v2=yylval; _T(x); v3=B(h); v4=C(h); v5=D(h); v6=yylval; v0= func(v1,...,v6); return v0; .... Notar que el atributo v4 por ejemplo se puede calcular en manera mas compleja: v4=C(h,v1,v2,v3); El calculo de v0 nos da todas ventajas de LR. Es la esquema mas general posible de calculo de atributos. Desventaja -- utilizable solo con lenguajes LL1. Recuerde: La comparacin del contenido del presente Dif debe ser analizado por el grupo de discusin.
U N I V E R S I D A D D E 4 8 A Q U I N O B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 006 ANLISIS SEMNTICO Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente Recuerde : Es de mucha importancia que el contenido del presente Dif tenga relacin con lo que se avanza en clase. Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfolgico y sintctico. El anlisis semntico utiliza como entrada el rbol sintctico detectado por el anlisis sintctico para comprobar restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo. En compiladores de un solo paso, las llamadas a las rutinas semnticas se realizan directamente desde el analizador sintctico y son dichas rutinas las que llaman al generador de cdigo. El instrumento ms utilizado para conseguirlo es la gramtica de atributos. Recuerde: En compiladores de dos o ms pasos, el anlisis semntico se realiza independientemente de la generacin de cdigo, pasndose informacin a travs de un archivo intermedio, que normalmente contiene informacin sobre el rbol sintctico en forma linealizada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar). En cualquier caso, las rutinas semnticas suelen hacer uso de una pila (la pila semntica) que contiene la informacin semntica asociada a los operandos (y a veces a los operadores) en forma de registros semnticos. Propagacin de atributos. Sea la expresin int a,b,c; a/(b+c^2) El rbol sintctico es: / --------| | Graf. propagacin de atributos a + --------| | b ^ --------| | c 2 De la instruccin declarativa, la tabla de smbolos y el analizador morfolgico obtenemos los atributos de los operandos: / --------| | a + int ---------

U N I V E R S I D A D

D E 4 9

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

| | Graf. Atributos de los operandos b ^ int --------| | c 2 int int

Propagando los atributos obtenemos: / int --------| | a + int int --------| | b ^ int int --------| | c 2 int int Si la expresin hubiera sido a/(b+c^-2) El rbol sintctico sera el mismo, sustituyendo 2 por -2. Sin embargo, la propagacin de atributos sera diferente: / real --------| | a + real Graf. Atributos de expresin int --------| | b ^ real int --------| | c -2 int int En algn caso podra llegar a producirse error (por ejemplo s / representara slo la divisin entera). Si la expresin hubiera sido int a,b,c,d; a/(b+c^d) El rbol sintctico sera el mismo, sustituyendo 2 por d. Sin embargo, la propagacin de atributos sera incompleta: / {int,real} --------| | a + {int,real} Atributos enteros y reales int --------U N I V E R S I D A D D E 5 0 A Q U I N O B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

| | b ^ {int,real} int --------| | c d int int El analizador semntico podra reducir los tipos inseguros al tipo mximo (real) o utilizar un tipo interno nuevo (ej. arit={int,real}, una unin). Lo anterior es un ejemplo de propagacin bottom-up. La propagacin top-down tambin es posible: lo que se transmite son las restricciones y los tipos de las hojas sirven de comprobacin. Por ejemplo, si la divisin slo puede ser entera, transmitimos hacia abajo la restriccin de que sus operandos slo pueden ser enteros. Al llegar a esa restriccin se convierte en que d debe ser positiva. Si no lo es, error. La implantacin de todos los casos posibles de operacin con tipos mixtos podra ser excesivamente cara. En su lugar, se parte de operaciones relativamente simples (ej. int+int, real+real) y no se implementan las restantes (ej. int+real, real+int), aadiendo en su lugar operaciones mondicas de cambio de tipo (ej. int->real). Esta decisin puede introducir ambigedades. Por ejemplo, sea el programa real a; int b,c; a:=b+c El rbol sintctico es: := --------| | a + Graf. rbol sintctico de suma y de conversiones real --------| | b c int int Existen dos conversiones posibles: := real --------| | a + real real --------| | b c int int := real --------| | a + int real --------| | b c int int

El problema es que no tenemos garanta de que los dos procedimientos sean equivalentes. El segundo puede dar overflow, el primero prdida de precisin. La definicin del lenguaje debe especificar estos casos. Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son los tipos de datos y cada arco indica una transformacin. Dado un operando de tipo A que se desea convertir al tipo B, se trata de encontrar una cadena

U N I V E R S I D A D

D E 5 1

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

de arcos que pase de A a B en el grafo anterior. Podra haber varios grafos, cada uno de los cuales se aplicar en diferentes condiciones, por ejemplo, uno para las asignaciones, otro para las expresiones, etc.

U N I V E R S I D A D

D E 5 2

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 007 ENTORNOS DE EJECUCCIN Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Recuerde: Es de mucha importancia que el contenido del presente Dif tenga relacin con lo que se avanza en clase. Antes de considerar la generacin de cdigo, hay que relacionar el texto fuente esttico de un programa con las acciones que deben ocurrir en el momento de la ejecucin del programa. La asignacin y designacin de objetos es llevada a cabo mediante el paquete de apoyo durante la ejecucin, que consta de rutinas cargadas de cdigo generado. Recuerde: Durante la ejecucin el mismo nombre en el texto fuente puede denotar distintos objetos de datos en la maquina objeto. El entorno de ejecucin entonces establece y examina las relaciones entre nombres y los objetos de datos. Entornos de Ejecucin

Texto fuente Esttico

Acciones de ejecucin

Implementacin

Asignacin y des asignacin Asignacin Des


PROGRAMA APOYO DURANTE LA EJECUCCION

IMPLEMENTACION

La ejecucin es la activacin del procedimiento Si el procedimiento es recursivo es que esta funcionando varias de sus actividades al mismo tiempo En el lenguaje pascal cada llamada a procedimiento puede activar a manipular objetos de datos asignados a un uso determinado. La representacin de un objeto de datos durante la ejecucin esta determinada por su tipo. Los tipos de datos elementales pueden ser caracteres enteros y reales, pueden estar representados por objetos de datos equivalentes.
U N I V E R S I D A D D E 5 3 A Q U I N O B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

Los tipos de datos compuestos o agregados Matrices, Cadenas, estructuras etc, estn representados por conjunto de objetos.

Recuerde: Un programa esta compuesto por procedimientos, como el pascal, se debe distinguir el texto fuente de su procedimiento t y sus actividades durante la ejecucin. Procedimiento: Una definicin de procedimiento es una declaracin que en su forma mas simple asocia un identificador con una proposicin, donde el identificador es el nombre de la proposicin y la proposicin es el cuerpo del procedimiento.

IDENTIFICADOR

PROPOSICION
Cuerpo de procedimiento

Program ordenamiento(input,output ); var a : array [0..10] of integer; procedure lectura; var i : integer ; begin for i := 1 to 6 do read (a[i]) end; ................................................................. ................................................................. ................................................................. ................................................................. Recuerde: En algunos identificadores que aparecen en la definicin de un procedimiento son especiales y se denominan parmetros formales otros como en c y en Fortran Falsos argumentos

U N I V E R S I D A D

D E 5 4

A Q U I N O

B O L I V I A -

FACULTAD DE CIENCIAS Y TECNOLOGIA

PROGRAMA DE CALIDAD UDABOL DIF 008 GENERACIN DE CDIGO OBJETO Recuerde: Es necesario leer muy bien el texto para poder interpretarlo correctamente. Recuerde: Es de mucha importancia que el contenido del presente Dif tenga relacin con lo que se avanza en clase. La generacin de cdigo debe ser llevada mediante la correspondiente generacin de la traduccin del lenguaje fuente hacia el lenguaje objeto, de este modo se completa la construccin del compilador. Recuerde: La generacin de cdigo (resultado de las funciones de las traducciones) se puede llevar a cabo, usando dos tcnicas compatibles con los procedimientos del anlisis sintctico, ms precisamente con el anlisis sintctico descendente. Tcnicas de generacin de cdigo final. Existen dos tcnicas de generacin de cdigo final.

Tcnica que utiliza atributos para generar el cdigo:

Mediante esta tcnica los smbolos no terminales de la Gramtica Atribuida G.A. a travs de los atributos sintetizados contienen su contribucin a la traduccin, pueden presentar un conjunto de la traduccin correspondiente al lenguaje objeto, de este todo cuando se ha llegado a la raz del rbol atribuido el valor del atributo de generacin contendr el cdigo objeto equivalente al cdigo fuente.

Tcnica de generacin de cdigo al vuelo:

Para esta tcnica, los procedimientos asociados a los smbolos no terminales, describen de modo inmediato su contribucin para la traduccin hacia un archivo de salida, que contendr el cdigo objeto generado. Recuerde: De estas dos tcnicas, la 2da es la ms restrictiva, sin embargo la ventaja que presenta esta 2da alternativa es que utiliza menos espacio de memoria para la compilacin, debido al hecho de que describe el cdigo generado en forma directa a la archivo de salida.

U N I V E R S I D A D

D E 5 5

A Q U I N O

B O L I V I A -

Vous aimerez peut-être aussi