s7- diseno_y_desarrollo_de_compiladores.pdf

Upload: migust

Post on 16-Oct-2015

43 views

Category:

Documents


0 download

TRANSCRIPT

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    1/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1

    RED NACIONAL UNIVERSITARIA

    SYLLABUS

    Facultad de Ciencias y Tecnologa

    Ingeniera de Sistemas

    SEPTIMO SEMESTRE

    Diseo y Desarrol lo de Compi ladores

    Gestin Acadmica I / 2011

    Syllabus elabor ado por: Ing . Reynaldo Ein ar Zabaleta Rioja

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    2/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2

    UDABOLUNIVERSIDAD 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 dela sociedad.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    3/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3

    SYLLABUSI.

    Asignatura: Diseo y Desarrollo deCompiladores

    Cdigo: CMP 515

    Requisito: CMP 417Carga horaria: 80 horas

    Horas tericas: 80Horas prcticas: -Crditos: 8

    II. OBJETIVOS GENERALES DE LA ASIGNATURA.

    Disear y desarrollar compiladores a travs del tratamiento de cadenas a partir de gramticas y autmatasconsecuencia el estudiante debe enfocar sus esfuerzos en las practicas de diseo del analizador lexicogrfico a travautmatas, el diseo del analizador sintctico a travs de gramticas, el diseo del analizador semntico y la generade cdigo en un programa objeto basado en teora de lenguajes.

    III. PROGRAMA ANALTICO DE LA ASIGNATURA.

    UNIDAD I. INTRODUCCIN A COMPILADORES

    TEMA 1. VISIN GENERAL DE COMPILADORES1.1. Conceptos bsicos.1.2. Esquema de un compilador.

    1.3. Lenguajes y Gramticas.1.4. Programas de sistemas relacionados con un compilador1.5. Herramientas para la construccin de un compilador

    UNIDAD II. ETAPA DE ANLISIS DEL COMPILADOR

    TEMA 2. LENGUAJES Y GRAMTICAS REGULARES, Y AUTMATAS FINITOS2.1 Introduccin2.2 Jerarqua de Chomsky2.3 Gramticas regulares2.4 Autmatas finitos2.4.1 AF Determinstico

    2.4.2 AF No Determinstico

    TEMA 3. ANLISIS LEXICOGRAFICO Y TABLA DE SMBOLOS3.1 Introduccin3.2 Anlisis lexicogrfico y tabla de Smbolos3.3 Scanner3.4 Funciones principales del scanner3.5 Tokens, lexemas, patrones

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    4/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4

    3.6 Tabla de smbolos3.7 Interaccin ente Anlisis lexicogrfico y tabla de smbolos3.8 Generador de Analizadores Lexicogrficos

    TEMA 4. MANEJO DE ERRORES4.1 Introduccin

    4.2 Creacin de errores4.3 Informe de Errores4.4 Deteccin y recuperacin de errores

    TEMA 5. LENGUAJES LIBRES DE CONTEXTO, GRAMTICAS LIBRES DE CONTEXTO, Y AUTMATAS DE PILA5.1 Introduccin5.2 Gramticas libres de contexto5.2.1 Derivacin y rbol de derivacin5.2.2 Gramtica Ambigua5.2.3 Simplificacin (Limpieza) de una gramtica5.2.3.1 Supresin de smbolos intiles e inaccesibles5.2.3.2 Reglas lambda y unitarias

    5.2.4 Formas normales5.2.4.1 Forma Normal de Greibach5.2.4.2 Forma Normal de Chomsky5.3 Autmatas de Pila5.4 Lenguajes Libres de contexto5.4.1 Operaciones5.4.2 Lema de Bombeo5.4.3 Algoritmos5.5 Analizadores sintcticos

    TEMA 6. ANLISIS SINTCTICO6.1 Introduccin

    6.2 Anlisis sintctico Anlisis gramatical - Parser6.3 Rol del analizados sintctico6.3.1 Anlisis sintctico ascendente6.4 Gramticas LR6.5 Anlisis sintctico descendente6.5.1 Gramticas LL6.5.2 Anlisis con y sin retroceso6.6 Generador de analizadores sintcticos

    TEMA 7. ANLISIS SEMNTICO Y GENERACIN DE CDIGO INTERMEDIO7.1 Introduccin. Definiciones7.2 Funciones del anlisis semntico

    7.2.1 Verificacin esttica7.2.2 rbol semntico7.3 Lenguajes intermedios7.4 Representacin de Cdigo Intermedio7.4.1 rbol semntico y grafo acclico dirigido7.4.2 Cdigo de tres direcciones7.5 Sentencias y expresiones7.6 Traduccin dirigida por la sintaxis

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    5/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -5

    TEMA 8. ENTORNOS DE EJECUCIN8.1 Introduccin. Definiciones8.2 Aspectos del lenguaje fuente8.3 Organizacin de la memoria8.4 Estrategias de asignacin de memoria

    8.5 Entornos de ejecucin8.6 Acceso a variables no locales8.7 Paso de parmetros8.8 Tablas de smbolos8.9 Instrumentos de los lenguajes para asignacin dinmica de memoria8.10 Tcnicas para asignacin dinmica de memoria

    TEMA 9. PREPARACIN PARA GENERACIN DE CDIGO Y OPTIMIZACIN9.1 Introduccin9.2 Criterios generales9.3 Principales casos de optimizacin9.4 Generacin de copias

    9.5 Optimizacin de Bucles9.6 Sustitucin de subexpresiones9.6.1 Algebraicas9.6.2 Aritmticas9.7 Bloques bsicos9.8 Transformaciones para mejorar el cdigo

    TEMA 10. GENERACIN DE CDIGO Y TRADUCCIN10.1 Introduccin10.2 Criterios para la transformacin10.3 Generacin de cdigo10.3.1 Sentencias

    10.3.2 Expresiones10.3.3 Condiciones10.4 Generacin de cdigo al vuelo10.4.1 Sentencias10.4.2 Expresiones10.4.3 Condiciones10.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 ritmestilos de aprendizaje y sus tipos de inteligencia, que sirve al docente como punto de partida para, el desarrollo curricpara la mejor organizacin y estructuracin de las secuencias de aprendizaje, de modo que estas tengan en cuenta noel punto de partida del grupo con el que trabajar durante el semestre sino adems las diferencias y especificidadecada estudiante para que los aprendizajes resulten ms efectivos y permitan el ptimo desarrollo integral de cada uno(

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    6/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -6

    Procesual o de desempeo o formativa: en esta forma de evaluacin se valora el avance del o de la estudiante dnivel de desarrollo real (detectado mediante la evaluacin diagnstica) a su nivel de desarrollo potencial (detecmediante diversas actividades o tareas).

    Esta forma de evaluacin, por su naturaleza, es eminentemente cualitativa aunque puede ser valorada cuantitativammediante un sistema de puntaje que permita apreciar los avances del o de la estudiante en su zona de desarrollo prx

    (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, contemprealizacin de actividades formativas a desarrollar (Work Papers, Difs, Participacin, evaluacin diaria, InvestigaCongresos, Jornadas Cientficas y Seminarios) y su calificacin es sobre el 50 % de la calificacin del primer y segparcial, estimando un promedio de todas las actividades.

    La ponderacin de esta evaluacin es el promedio de todas las actividades desarrolladas (Work Papers, DParticipacin, Laboratorio, Investigacin, Congresos, Jornadas Cientficas, Aula Abierta y Seminarios) y su calificacisobre 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 d

    estudiante durante el semestre.

    Esta forma de evaluacin es tanto cualitativa como cuantitativa, por su naturaleza y por la funcin que cumple dentro devaluacin. La evaluacin de resultados en la asignatura especfica se llevar a cabo de forma terica y prctica aplia sistemas reales.

    La ponderacin de esta evaluacin es sobre 50 % de la calificacin del primer y segundo parcial, en el caso del exafinal es de 100%, que por disposiciones actuales esta dividido en 50% como prueba final y 50% procesual. .

    EVALUACION PROCESUAL DE RESULTADO TOTAL

    PARCIAL 1 50% 50% 100%

    PARCIAL 2 50% 50% 100%FINAL 50% 50% 100%

    EVALUACION FINAL PROMEDIO PARCIAL 1, 2 Y FINAL 100%

    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 ReinholdCompany

    MAK, RONALD, JOHN WILEY & SONS, Writing Compilers and Interpreters, And apllied aproach Inc.

    KAREN, LEMONE, Compiladores.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    7/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -7

    VI. PLAN CALENDARIO

    UNIVERSIDAD DE AQUINO-BOLIVIA

    UNIDAD ACADMICA DE ORURO

    CALENDARIO ACADMICO

    GESTIN I/2011

    TURNOS REGULAR-TRABAJO

    ESTUDIANTES NUEVOS-ANTIGUOS

    SEMANA DEL AL ACTIVIDADES OBSERVACIONES

    1ra. 09-Mar 12-Mar Avance de materia TEMA 1. Visin General de Compiladores

    2da. 14-Mar 19-Mar Avance de materiaTEMA 2. Lenguajes y Gramticas Regulares, y

    Autmatas Finitos3ra. 21-Mar 26-Mar Avance de materia

    4ta. 28-Mar 02-Abr Avance de materia TEMA 3. Anlisis Lexicografico y Tabla de Smbolos

    5ta. 04-Abr 09-Abr Avance de materiaTEMA 3. Anlisis Lexicografico y Tabla de Smbolos

    TEMA 4. Manejo de Errores

    6ta. 11-Abr 16-Abr Avance de materia Inicio Primera Evaluacin Parcial Presentacin de Notas

    7ma. 18-Abr 23-Abr Avance de materia Conclusin Primera Evaluacin Parcial Presentacin de Notas

    8va. 25-Abr 30-Abr Avance de materiaTEMA 5. Lenguajes Libres de Contexto, Gramticas

    Libres de Contexto, y Autmatas de Pila9na. 02-May 07-May Avance de materia

    10ma. 09-May 14-May Avance de materiaTEMA 6. Anlisis sintctico

    TEMA 7. Anlisis Semntico y Generacin de CdigoIntermedio

    11ra. 16-May 21-May Avance de materiaTEMA 7. Anlisis Semntico y Generacin de Cdigo

    Intermedio

    12da. 23-May 28-May Avance de materia Inicio Segunda Evaluacin Parcial Presentacin de Notas

    13ra. 30-May 04-Jun Avance de materia Conclusin Segunda Evaluacin Parcial Presentacin de Notas

    14ta. 06-Jun 11-Jun Avance de materia TEMA 8. Entornos de Ejecucin

    15ta. 13-Jun 18-Jun Avance de materiaTEMA 9. Preparacin para Generacin de Cdigo y

    Optimizacin

    16ta. 20-Jun 25-Jun Avance de materiaTEMA 9. Preparacin para generacin de cdigo y

    optimizacin

    17ma. 27-Jun 02-Jul Avance de materia TEMA 10. Generacin de Cdigo y Traduccin

    18va. 04-Jul 09-Jul Inicio Evaluacin Final Presentacin de Notas

    19na. 11-Jul 16-Jul Conclusin Evaluacin Final Transcripcin de Notas

    20va. 18-Jul 23-Jul Evaluacin del segundo turno Transcripcin de Notas21ra. 25-Jul 26-Jul Cierre de Gestin

    FERIADOS

    22 de abril Viernes Santo

    1 de mayo Da del Trabajo

    23 de junioCorpus Christi

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    8/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -8

    VII. CONTROL DE EVALUACIONES

    1 evaluacin parcialFecha:Nota:

    2 evaluacin parcialFecha:Nota:

    Examen finalFecha:Nota:

    APUNTES

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    9/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -9

    WORK PAPER # 1

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 8

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 515

    TTULO DEL WORK PAPER:INTRODUCCIN A LA COMPILACIN

    DPTO.: Facultad de Ingeniera

    DESTINADO A:

    DOCENTES ALUMNOS X ADMINIST. OTROS

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

    FECHA DE DIFUSIN: : Marzo 2011

    FECHA DE ENTREGA: : Marzo 2011

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    10/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 0

    INTRODUCCIN A LA COMPILACIN

    La computadora es el dispositivo ms verstil creado por el hombre. Inicialmente concebida como un mecanismoclculo de prestaciones superiores a los primeros dispositivos mecnicos y electromecnicos, se le incorporacapacidades 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 generacininformacin, teniendo como meta la manipulacin del conocimiento.

    Los actuales computadores son capaces de realizar los ms complejos clculos aritmticos, lgicos y simblicosemular los ms elaborados mecanismos (incluyendo a otros computadores), de similar eventos naturales y de cmundos virtuales. Las crecientes capacidades con que se presentan generacin tras generacin de nuevos computadlos acercan cada vez ms a la realizacin de tareas cada vez ms complejas y que se antojan imposibles, como pueser 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. Sabemosla electrnica del computador se denomina digital y que funciona con base en valores discretos. Sabemos que es a trade cdigos y estrategias de representacin de datos como podemos alimentar al computador con nuestras ideas y

    expresiones con que identificamos a los objetos en nuestro mundo anlogo y tridimensional. Tambin sabemos mediante reglas de operacin perfectamente definidas podemos instruir al computador en la manipulacin de dichos dpara la generacin de otros y la obtencin de informacin en la resolucin de problemas. La forma de expresar dinstruccin 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 dems complejos, ridos y abstractos. Adicionalmente, suele considerarse que estos temas no dejan de ser de un intmeramente acadmico, a menos que se trate de una enorme compaa de software dedicada a la creacinherramientas 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 informtcomputacin, 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 nonecesarios 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 emayora. Es poco probable que los profesionistas en estas reas se enfrenten al reto del desarrollo de un compiladlenguaje 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 catedrticociencias computacionales.

    Los intrpretes no son adecuados para el desarrollo de sistemas de informacin, estos son slo un recurso paprogramacin de computadoras pequeas.

    Brevemente expondremos el porqu las aseveraciones anteriores deben ser consideradas como falsas, imprecisas, resultado de la inadecuada apreciacin tanto sobre la teora de compiladores y lenguajes como en su didcticutilizacin.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    11/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 1

    Existe una gran variedad de lenguajes de programacin. Cada uno retrata una corriente en la conceptualizacin de dainformacin y procesos. Para cada uno de estos lenguajes existen una o diversas implementaciones, as coherramientas de desarrollo adicionales.

    Algunos de estos productos son freeware, otros son shareware y algunos otros ms son productos de marca. Losprimeros resultan, respectivamente, gratis y baratos. Los ltimos son un recurso muy caro, tanto que inclusive pu

    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 programatendremos dos tipos de costos a considerar como resultado de nuestra decisin. El costo directo de estos productos, incluye:

    Licencias: El mayor de todos los costos son las licencias de desarrollo. Es a travs de ste como el fabricante del softwrecupera 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 herramienlenguaje de programacin, se requiere contar con la asesora especializada del fabricante o de un desarrollador 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 nueversiones 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 coindirectos.

    Curvas de aprendizaje: Sobre todo si se trata de algo nuevo, existe un periodo de tiempo que debe pasar antes de qu

    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 cuecon determinados requerimientos mnimos de hardware. Estos sern ms elevados conforme el software de desalibere 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 valoretorno 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 putrabajar. 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 dacoplarse a stas. Como podemos ver la seleccin de una herramienta de desarrollo tiene diversas implicaciones.manera genrica ya se ha presentado lo que esto representa para nuestros recursos econmicos, de equipo y pers

    Ahora habra que preguntarse qu es lo que en un momento dado puede inclinarnos a elegir una herramienta haciecaso omiso de las implicaciones que ya conocemos. La respuesta es esto es simple: publicidad y desconocimiento.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    12/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 2

    La publicidad juega un papel importante en nuestro mundo. Una hbil campaa publicitaria har que se venda cualqproducto, 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 cde la decisin de compra no posee los conocimiento necesarios para saber que es verdad, que es una exageracin yes una mentira, entonces fcilmente ser influenciado por las cifras, colores, propaganda y dems elementos decora

    entorno al producto que est evaluando. Es aqu donde el conocimiento cumple su cometido y permite develar aquello es cierto de lo que es slo parte de un arreglo mercado tcnico para centrar la atencin del comprador en cieelementos del producto.

    Por ejemplo, muchas herramientas de desarrollo o de depuracin (debuggers) son usadas como principal elementventa. Sabiendo que la correccin de un programa en desarrollo o ya hecho es una de las actividades ms demandaen tiempo, el vendedor tratar de hacer ver a su producto como la solucin final o universal. Algunas veces argumenque inclusive es capaz de descompilar.

    La teora atrs del diseo de un compilador permite saber que una herramienta de depuracin completa o universmucho 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 slodescompilable si este es generado con informacin de depuracin y referencia al cdigo fuente. Esta podra parecer deseable y que no traiga consigo mayores complicaciones al producto final. Sin embargo, si esta caracterstica noseleccionable 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 numeralternativas 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 disppara escribir el conjunto de instrucciones necesarias para que una computadora realice aquello que l quiere. Enprincipio no se dispona de lenguajes de programacin o algo que se le pareciera. La programacin del computadollevaba a cabo, literalmente, recablendolo. En un gran panel de contactos que asemejaba a un conmutador telefnic

    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 darquitectura 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 nAunque originalmente inclua elementos de un lenguaje ensamblado permita a los programadores escribir expresialgebraicas en lugar de la codificacin necesaria para el clculo. Un ejemplo de codificacin en este lenguaje se iluscontinuacin.

    C El clsico programa en una de las primeras versiones de Fortran

    Program Hello

    implicit nonelogical DONE

    DO while (.NOT. DONE)write(*,10)

    END DO

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    13/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 3

    10 format('Hello, world.')END

    Lisp (LISt Processing) aparece como un lenguaje en el que todo clculo es expresado como la aplicacin de una funsobre uno o ms objetos. Los objetos en s pueden ser funcione tambin. COBOL (siglas del ingls COmmon BusinOriented Language) apareci un poco despus y fue desarrollado para manejar registros, archivos y datos junto con

    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 trmnodeduccin lgica) y unificacin (a manera de bsqueda y empate de patrones) para llegar a las metas que el programha establecido junto con las reglas y conjuntos de datos sobre los que el programa de be apegarse y restringirse. 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 atendencias y modelos de desarrollo de sistemas. Uno de ellos, el modelo basado en objetos ha dado lugar a la aparde lenguajes de programacin orientados a objetos (en ingls object-oriented languages). Bajo este enfoque datprocedimientos 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 programadgarantizar la integridad de los datos al establecer los procedimientosque sobre estos trabajarn. La programacin se lcreando objetos que envan mensajes entre ellos que al ser tomados son procesados por los mtodos propios de cuno. Uno de los primeros lenguajes de programacin creados a partir de este modelo fue Smalltalk. Forth es un lengextensible de alto nivel que combina caractersticas de lenguajes compilados e interpretados. Sus primeros usos fupara control de radiotelescopios y otros equipos astronmicos. Su nombre originalmente fue Fourth (por FOURgeneration computer language), pero desafortunadamente la computadora IBM 1130 slo aceptaba identificadorescinco letras.

    Niklaus Wirth, del Federal Institute of Technology, Zrich; Suiza; desarrolla Pascal (nombrado asi en honor del filsomatemtico Blaise Pascal) en 1971. El primer compilador est disponible al pblico en 1974 y es utilizado por muuniversidades desde entonces. Wirth haba venido desarrollando al lenguaje desde finales de los 60s, pensado como

    herramienta educacional para la enseanza sistmica de la programacin de computadoras bajo estructuras de contdeclarativas claras y simples.

    B es el precursor de C, el cual fue descendiente de otro lenguaje denominado BCPL (Basic Combined ProgrammLanguage). Fue desarrollado a inicios de los 70s por Dennis Ritchie, en aquel entonces programador de sistemas en ABell Laboratories. Considerado como un lenguage de alto nivel posee muchas caractersticas de bajo nivel commanejar direcciones de memoria y bits.

    Ada (nombrado as en honor de Augusta Ada King, Condesa de Lovelace, hija del poeta Lord Byron y primprogramadora en la historia al trabajar como asistente de Charles Babbage en el desarrollo de su Mquina Analtica) eresultado de un proyecto de estandarizacin del Departamento de Defensa de los USA iniciado a mediados de los Dada la gran diversidad de equipo y lenguajes de programacin con que el Departamento contaba en edificios y equipo

    necesitaba un lenguaje nico que pudiera ser usado en todos los computadores (incluyendo sistemas empotradosequipo mvil) que incorporara caractersticas de abstraccin de datos, multitarea, concurrencia y manejo de excepcionLa necesidad de desarrollo de sistemas y la solucin a problemas cada vez ms complejos ha llevado al desarrollolenguajes enfocados a la solucin y desarrollo de actividades mediante especificaciones de nivel conceptual superioque se busca con estos lenguajes es establecer la manera de como llevar a cabo las operaciones necesarias para reaalguna actividad o de como llegar a una solucin, sin necesariamente indicar el detalle de todos los pasos requeridosindica lo que debe hacerse, mas no como debe hacerse. Esta tendencia es hacia el desarrollo de lenguajes con un

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    14/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 4

    de abstraccin mayor para permitir al programador pensar y comunicarse con la mquina a un nivel mucho ms elevdel cdigo mquina.Ejemplos de este tipo de lenguajes son SQL (Structured Query Language) creado para consultar bases de datos medicomandos y estructuras muy similares al ingls y los Lenguajes de Cuarta Generacin (4GL). Como parte de las nuetendencias del desarrollo de sistemas y resultado de las populares interfaces grficas tenemos los llamados lenguvisuales. Con estos el programador grficamente transfiere su algoritmo auxilindose de iconos y flechas para represe

    acciones, operaciones, procesos, decisiones, flujo de datos y paso de mensajes en una determinada secuencia etiempo.

    Aunque es equivocado, es comn encontrar referencias en documentacin de productos, publicidad y textos (e incluescuchar a la gente del medio informtico) utilizando los trminos traductor, compilador e intrprete de una forma libindistinta. Estas palabras no se utilizan para identificar de manera genrica a un programa que nos permitira poprogramar una computadora. Debemos ser precisos al emplear estas palabras, ya que se refieren a programas de disnaturaleza 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 progra

    destinados a trabajar sobre una entrada que, por la forma como ha sido elaborada, pertenece a un lenguaje partireconocido 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 pertenecia otro lenguaje (el lenguaje objeto), conservando su significado. En trminos computacionales esto significa que tanentrada como la salida sean capaces de producir los mismos resultados. Un intrprete, por otra parte, no lleva a cabtransformacin; en su lugar obtiene los resultados conforme va analizando la entrada. Los traductores son clasificadocompiladores, ensambladores y preprocesadores.

    Un compilador es un programa que recibe como entrada un programa escrito en un lenguaje de nivel medio o superio

    programa fuente) y lo transforma a su equivalente en lenguaje ensamblador (el programa objeto), e inclusive hlenguaje mquina (el programa ejecutable) pero sin ejecutarlo. Un compilador es un traductor. La forma de como llevacabo 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. proceso consiste en que, a partir de un programa escrito en lenguaje ensamblador, se produzca el correspondiprograma en lenguaje mquina (sin ejecutarlo), realizando:

    La integracin de los diversos mdulos que conforman al programa. La resolucin de las direcciones de memdesignadas en el rea de datos para el almacenamiento de variables, constantes y estructuras complejas; as comdeterminacin del tamao de stas. La identificacin de las direcciones de memoria en la seccin de ccorrespondientes a los puntos de entrada en saltos condicionales e incondicionales junto con los puntos de arranqu

    las subrutinas.

    La resolucin de los diversos llamados a los servicios o rutinas del sistema operativo, cdigo dinmico y bibliotecatiempo de ejecucin.

    La especificacin de la cantidad de memoria destinada para las reas de datos, cdigo, pila y montculo necesariotorgados para su ejecucin.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    15/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 5

    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. programa es utilizado cuando el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer (de en adelante denominado lenguaje anfitrin-- en ingls host language), incluye estructuras, instrucciones o declaracioescritas en otro lenguaje (el lenguaje empotrado-- en ingls embeded language). El lenguaje empotrado es siempr

    lenguaje de nivel superior o especializado ( de consulta, de cuarta generacin, simulacin, clculo numrico o estadsetctera). Siendo que el nico lenguaje que el compilador puede trabajar es aquel para el cual ha sido escrito, todasinstrucciones del lenguaje empotrado deben ser traducidas a instrucciones del lenguaje anfitrin para que puedancompiladas. As pues un precompilador tambin es un traductor. Los precompiladores son una solucin rpida y barala necesidad de llevar las instrucciones de nuevos paradigmas de programacin (e.g. los lenguajes de cuarta generacextensiones a lenguajes ya existentes (como el caso de C y C++) y soluciones de nivel conceptual superior (por ejempaquetes de simulacin o clculo numrico) a cdigo mquina utilizando la tecnologa existente, probada, optimizadconfiable (lo que evita el desarrollo de nuevos compiladores). Facilitan la incorporacin de las nuevas herramientadesarrollo en sistemas ya elaborados (por ejemplo, la consulta a bases de datos relacionales substituyendoinstrucciones 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 pu

    resultar demasiado inflexible para su implantacin en los procesos de una empresa, flujos de negocio o interaccin otros elementos de software y hardware, de aqu que se recurra o prefiera la creacin de sistemas hbridos soportadoprogramas elaborados en lenguajes de tercera generacin con instrucciones empotradas de nivel superior o propespecial.

    Un pseudocompilador es un programa que acta como un compilador, salvo que su producto no es ejecutable en ningmquina real sino en una mquina virtual. Un pseudocompilador toma de entrada un programa escrito en un leng4determinado y lo transforma a una codificacin especial llamada cdigo de byte. Este cdigo no tendra nada de espeo diferente al cdigo mquina de cualquier microprocesador salvo por el hecho de ser el cdigo mquina demicroprocesador ficticio. Tal procesador no existe, en su lugar existe un programa que emula a dicho procesador, de el nombre de mquina virtual.

    La ventaja de los pseudocompiladores que permite tener tantos emuladores como microprocesadores reales existan, slo se requiere un compilador para producir cdigo que se ejecutar en todos estos emuladores. Este mtodo es unalas respuestas ms aceptada para el problema del tan ansiado lenguaje universal o cdigo portable independientplataforma.

    Un intrprete es un programa que ejecuta cada una de las instrucciones y declaraciones que encuentra conformanalizando el programa que le ha sido dado de entrada (sin producir un programa objeto o ejecutable). La ejecuconsiste en llamar a rutinas ya escritas en cdigo mquina cuyos resultados u operaciones estn asociados de maunvoca al significado de las instrucciones o declaraciones identificadas.

    Los intrpretes son tiles para el desarrollo de prototipos y pequeos programas para labores no previstas. Presentafacilidad de probar el cdigo casi de manera inmediata, sin tener que recurrir a la declaracin previa de secciones de d

    o cdigo, y poder hallar errores de programacin rpidamente. Resultan inadecuados para el desarrollo de complejograndes sistemas de informacin por ser ms lentos en su ejecucin.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    16/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 6

    CUESTIONARIO:

    1. Cmo ayuda este dispositivo al hombre?2. En que se sustenta esta tecnologa de las computadoras?3. Cmo se aplica la utilizacin de estos conocimientos?

    4. Que tcnicas y herramientas son usadas para el diseo de compiladores?5. En que medida impacta la Ingeniera de Software en el, aspecto comercial y de desarrollo?6. Cuales son los Productos?7. Cuales son sus los costos de esos productos?8. Qu son los Lenguajes en computacin e informtica?9. Cuales fueron los primeros lenguajes?10. Que significado tiene el lenguaje FORTAN y cuando naci?11. Ejemplifique un ejemplo de programa en FORTRAN12. Cite otros lenguajes de programacin13. En los lenguajes modernos como se emplea el encapsulamiento y que es?14. Que son los compiladores?15. Que son los interpretes?

    16. Que es el lenguaje Ensamblador?17. Que es un Preprocesador?18. Qu es un Pseudocomplador?

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    17/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 7

    WORK PAPER # 2

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 3

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 515

    TTULO DEL WORK PAPER:CLASIFICACIN DE GRAMTICAS

    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: : Marzo 2011

    FECHA DE ENTREGA: : Marzo 2011

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    18/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 8

    CLASIFICACIN DE GRAMATICAS

    A partir de la primera clasificacin de Chomsky, se clasifico las gramticas por tipos, pero a partir de esa clasificacinmodificando teniendo en cuenta ciertas refinaciones para tener diferencias entre gramticas similares y no exiconfusiones , 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 pue

    contraerse.

    Con estructura de frase

    --> , (NUT) +

    Tipo 1 : Sensibles al contexto Monotnicas. El segundo miembro de las producciones debe ser de longitud

    mayor o igual al primer miembro.

    y(NUT) *

    Pueden achicarse, extenderse y cambiar smbolos.

    --> , (NUT) +y(NUT) +y || 0}

    S --> aSBC bB --> bb S --> abC bC --> bc

    CB -->BC cC --> cc aB --> ab

    o bien S --> abc | aSC bCc --> bbcc cC --> Cc

    pero no puede haber ms no terminales a izquierda que a derecha

    A-->, AN,y (NUT)* y (NUT)+

    Cambia A por pero solo en el contexto dey

    Son equivalentes a las Monotnicas

    Ej: L = { anbncn

    CB -->BC cC --> cc aB --> ab

    , con n>0}

    S --> aSBC bB --> bb S --> abC bC --> bc

    CB -> CX CX ->BX BX -> BC

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    19/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -1 9

    Tipo 3: Libres o independientes del contexto

    A --> , AN , (NUT)*

    Ej: L= { anbn

    Tipo4 : Regulares :Tanto el primer miembro como en el segundo estarn compuestas por un nico smbolo term

    , 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 miem

    debe ser nulo (b) este tipo de gramticas se denominan de contexto libre.

    A --> aB, o bien A --> a Lineal DerechaA --> Ba , o bien A --> a Lineal IzquierdaA, BN y aT*

    Ej: 0*1 S -->A1 , A -->A0 |

    CUESTIONARIO:

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

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    20/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 0

    WORK PAPER # 3

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 3

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 515

    TTULO DEL WORK PAPER:MANEJO DE ERRORES

    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: : Abril 2011

    FECHA DE ENTREGA: Abril 2011

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    21/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 1

    MANEJO DE ERRORES

    El manejo de errores es una de las misiones ms importantes del compilador. Se utiliza ms en el anlisis pero los errpueden darse en cualquier fase.

    El manejo de errores es una tarea difcil por dos motivos:

    1. A veces algunos errores ocultan otros2. 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 a

    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 cdigbase a las tablas de transicin equivalentes a los diagramas de estado y adems sirven para efectuar el manejoerrores. 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 corresponde al estado inicial, de este modo, es posible seguir el reconocimiento de una cadena mediante el seguimde esta tabla .

    Para propsito de implementacin, se realizaran algunas modificaciones sobre esta tabla de transicin, las misconsisten en:

    Cada casilla de la tabla de transicin tendr un valor que deber corresponder a alguna de las siguiealternativas

    1. Al siguiente estado2. A un smbolo f que significa que el reconocimiento a finalizado.3. A un smbolor que significa que el reconocimiento a fallado.

    Si en una casilla se encuentra el smbolo f como transicin hacia el siguiente estado entonces el reconocimterminara y el token correspondiente podr ser calculado de la siguiente manera: con le numero de escorrespondiente a la fila donde es encontrado el smbolo f , se debe buscar en otra estructura la informa

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    22/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 2

    adicional que puede ser una lista el token asociado a tal numero de estado. Esta estructura de informaadicional, que asocia un nmero de estado construido en forma consecuente con la tabla de transicin.

    Si en la casilla se encuentra el smbolo rcomo transicin hacia el siguiente estado entonces el reconocimiento fEl programa que almacena de alguna manera la tabla de reconocimiento de errores se deber implementar consiguientes tres procedimientos:

    1. Un procedimiento de funcin que devuelva en forma consecutiva un carcter a la vez del programa fuen2. Un procedimiento que elija en base al carcter ledo del programa fuente la entrada correspondiente

    tabla para que el reconocimiento empiece.

    3. Procedimiento para implementar el recorrido a travs de la tabla segn sean los caracteres restantes ledel programa fuente. De manera tal que cuando se llegue a un estado de aceptacin se devuelva el toreconocido o en cambio se llegue a un estado de rechazo que reporte un mensaje de error o que finalmcambie 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 pimprimir el nmero de lnea y posicin del carcter en esa lnea donde se encontr el carcter donde se produjo el lexicogrfico.

    CUESTIONARIO:

    1. Cuales son los motivos para el manejo de errores?2. Cuantas y cuales son las circunstancias de errores que se pueden detectar?3. En base a que tambin es posible detectar los errores de los tokens?4. Cuando y como se reconoce si un estado es final o no?5. Que valores alternativos pueden adoptar cada una de las casillas dentro del reconocimiento de tokens?6. Cuantas y cuales son los procedimientos de implantacin en el programa de reconocimiento?

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    23/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 3

    WORK PAPER # 4

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 3

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 515

    TTULO DEL WORK PAPER:ANALIZADOR SINTACTICO

    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: Abril 2011

    FECHA DE ENTREGA: Abril 2011

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    24/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 4

    ANALIZADOR SINTACTICO

    El anlisis sintctico constituye el corazn del compilador. A travs de la buena eleccin del anlisis sintctico es poconstruir 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 reconlenguajes libres de contexto, se pueden utilizar laso autmatas de pila. Un autmata de pila provee la base para el disde algunos mtodos de anlisis sintctico. El autmata de pila ser usado como base para derivar la construccin danalizador sintctico descendente llamado tambin Productivo Recursivodesafortunadamente, los autmatas depara el reconocimiento de varios lenguajes libres de contexto son altamente no deterministicos por lo tanto los mtderivados 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 analizadsintcticos deterministicos , para ello se han impuesto ciertas restricciones a las gramticas libres de contexto sobrecuales se genera el analizador sintctico y algunos mecanismos sobre los mtodos para que el mismo sea determinist

    As por ejemplo se pueden construir analizadores sintcticos no deterministicos usando BACK TRAKING (paso hatrs) los cuales proveen una forma de implementar el problema del no determinismo, mediante la reeleccin de perrneos 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 LOa HEAD que sobre ciertos tipos de gramticas resultan ser deterministicos y constituyen ser mtodos mas eficienteEn general, los analizadores sintcticos que utilizan el conjunto Look a Head son no deterministicos para la mayoralas gramticas de contexto para los cuales los autmatas de pila y mtodos de anlisis sintctico con Look a Headdeterministicos.

    Definicin del anlisis sintctico

    Anlisis sintctico es el proceso de reconocer si una cadena de tokens de entrada, puede ser generada por la gramlibre 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 especsu estructura sintctica.

    La estructura sintctica de un lenguaje de programacin puede ser descrita por una gramtica libre descrita porgramtica 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

    lenguaje fuente

    En algunos casos el analizador sintctico tiene ciertos mecanismos los mismos que ayudan a la generacin del cobjeto.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    25/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 5

    CUESTIONARIO:

    1. A que se pudiera llamar Anlisis Sintctico y Analizador Sintctico?, Ejemplificar.2. Con que componentes del Compilador de conecta al analizador Sintctico?.3. Que es un analizador sintctico deterministico y no deterministico?

    4. Con un ejemplo identificar los analizadores de la pregunta anterior.5. Con que tipos de lenguajes se relaciona el Anlisis Sintctico?

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    26/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 6

    WORK PAPER # 5

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 3

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 51

    TTULO DEL WORK PAPER:GRAMTICAS CON ATRIBUTOS

    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

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    27/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 7

    GRAMTICAS CON ATRIBUTOS

    Una gramtica con atributoses un sistema formal para modelar la semntica esttica de un lenguaje. Intuitivamepodemos decir que consiste en una gramtica libre del contexto donde se agregan campos a los smbolos (tterminales como no-terminales) para guardar la informacin semntica asociada a ellos. Estos campos reciben el nomde atributos. Adems, para mover esta informacin semntica durante el proceso de anlisis de una cadena, se d

    (para cada regla de la gramtica) un conjunto de elementos llamados reglas semnticas. Los atributos se dividensintetizadosyheredados. Los primeros se utilizan para transferir la informacin de los nodos hijos a los nodos padres erbol correspondiente al anlisis sintctico. Los heredados se utilizan para recibirla en un determinado nodo desdenodo padre o desde los nodos hermanos. Este sistema formal fue definido por Donald Knuth en el ao 1968. Su definmatemtica es la siguiente:

    Definicin.Unagramtica 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 basedel sistema.

    A: Es un conjunto finito de elementos llamados atributos, tal que:A = ASU AHAS AH=

    ASes el conjunto de atributos sintetizadosAHes el conjunto de atributos heredados

    El conjunto de atributos asociado a cada X (V N U VT), lo denotaremos por A(X). Sus atributos sintetizadosdenotaremos 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 semnticasde la forma:

    X.a := f(y1,........,ym)

    donde a es un atributo del smbolo X; y1,......,ym

    a) X es la parte izquierda de la regla en G, aes un atributo sintetizado de X y los y

    son ocurrencias de atributos de smbolos en G y f es una funcualquiera de m argumentos. A cada regla de la GLC G le corresponde un subconjunto (que puede ser vaco) dCada regla semntica debe cumplir alguna de las dos condiciones siguientes:

    1, ......,ym

    b) X es alguno de los smbolos de la parte derecha de la regla en G, aes un atributo heredado de X y cada unlos y

    son ocurrenciaatributos sintetizados de los smbolos de la parte derecha de esta regla o:

    1, ......,ym

    Debe notarse como las dos condiciones anteriores no hacen ms que formalizar la explicacin dada al inicio sobre ediferenciado de los atributos sintetizados y los heredados. La condicin a) nos refleja la primera afirmacin, es decir,los nodos sintetizados se utilizan para transferir informacin desde los nodos hijos hacia su nodo padre, luegosintetizarla mediante la funcin dada; mientras que la condicin b) nos est diciendo que los atributos heredados dnodo reciben informacin de los atributos heredados del padre y de los atributos sintetizados de sus hermanos.

    NotacinSi un smbolo se repite en alguna regla en G, se indican sus ocurrencias en esa regla de forma tal que si es el smbolola parte izquierda el que se repite, sta ocurrencia se indica con cero y las restantes a partir de uno. Si el smbolo qurepite se encuentra en la parte derecha solamente, sus ocurrencias se indican a partir de uno. Por ejemplo, si tenemoregla siguiente:

    es una ocurrencia de un atributo sintetizado de cualquiera de los smbolos de la parte derecha oocurrencia de un atributo heredado de la parte izquierda de esta regla.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    28/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 8

    A ----> AbAX

    Esta se denotar, al expresar sus reglas semnticas, como:

    A0----> A1bA2X

    Luego, escribiramos, por ejemplo:

    A0.t:=f(A1.p , A2

    E ABC

    .q , X.r)

    El uso diferenciado que se establece para cada tipo de atributo, permite escribir una gramtica con atributos sin especexplcitamente la clase de los mismos ya que a partir de las reglas semnticas se deduce esta informacin.

    Ejemplo

    Sea la GA siguiente:

    A aB XX bC d

    E ABCE.d:=f(A.t , B.c)E.p:=B.cC.r:=g(A.p , B.q)

    A a

    A.t:=h(a.q)

    B X

    X.q:=B.r

    Los conjuntos S(X) y H(X) para cada uno de los X (V NU VT

    CUESTIONARIO:

    ) en esta GA son:

    S(E) = {E.d , E.p} H(E) = S(A) = {A.t , A.p} H(A) =S(B) = {B.c , B.q} H(B) = {B.r}S(C) = H(C) = {C.r}S(X) = H(X) = {X.q}S(a) = {a.q} S(b) =S(d) =

    1. Con sus propias palabras defina que entiende por gramticas atributivas o con atributos.2. De donde parte una gramtica atributiva, y porque?.3. Cual es la notacin de las gramticas atributivas?.4. Ejemplifique con una gramtica diferente al del actual W.P.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    29/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -2 9

    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

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    30/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 0

    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 infijanotacin prefija permite al operador influir sobre la manera en que se procesan sus operandos, pero a cambio suele emucha ms memoria. La sufija no permite esa influencia, pero es ptima en proceso de memoria y permite eliminprocesado de los parntesis.

    Los operadores mondicos slo pueden presentarse en notacin prefija o sufija. Adems, un rbol sintctico p

    representarse en forma de tuplas de n elementos, de la forma (operador, operando-1, ..., operando-k, nombre). Las tupueden tener longitud variable o fija (con operandos nulos). Las ms tpicas son las cudruplas, aunque stas puerepresentarse 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 -@aa*(-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.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    31/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 1

    WORK PAPER # 7

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 3

    ELABOR: Ing. Reynaldo Einar Zabaleta Rioja CDIGO: CMP 515

    TTULO DEL WORK PAPER:ENTORNOS DE EJECUCIN RBOLES DE ACTIVACIN

    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: Junio 2011

    FECHA DE ENTREGA: Junio 2011

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    32/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 2

    ENTORNOS DE EJECUCINRBOLES 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 mom

    devuelve el control al punto situado inmediatamente tras el lugar donde fue llamado el procedimiento.

    Duracin se refiere a una secuencia consecut iva de pasos durante la ejecucin de un prog rama.

    Procedimientos recursivos

    Pueden existir procedimientos recursivos, si puede comenzar una nueva activacin antes de que haya terminado unaactivacin 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

    1..............................

    2 n3 n+1

    pasos

    nodo

    a (1,1)

    a (1,2)

    a (1,3)

    a (1,4)b(1,5)

    b (1,4)

    b (1,3)

    b (1,2)

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    33/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 3

    mbito de Declaracin.

    Una declaracin en un lenguaje es una construccin sintctica que asocia informacin a un nombre. Las declaracionepueden ser explcitas como:

    Var i: integer

    Implcitas Como por ejemplo se supone que cualquier nombre de variable que contiene x indica un programa en Fortramenos 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. Que son los rboles de activacin?

    2. Que es un procedimiento recursivo?3. Que es un a pila de control?4. Que es mbito de declaracin?

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    34/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 4

    _____________________________________________________________________________

    WORK PAPER # 8

    PROGRAMA DE CONTROL DE CALIDAD

    No. DE PROCEDIMIENTO: APRO 07 No. DE HOJAS: 4

    ELABOR: Ing. Reynaldo Einar Zabaleta RiojaCDIGO: CMP 515

    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

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    35/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 5

    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 gramque hacia un lenguaje objeto Z puede ser descrito por un esquema de traduccin dirigida por la sintaxis. Bajo

    suposicin, para cada smbolo no termina A de la gramtica G, existe una funcin de traduccin TAcuyo domincodominio es:

    TA: L (A)ZY para cada regla de produccin P

    P = (AOXOZO, X1Z1, X2Z2... XnZn)

    Existe una funcin TPcuyo dominio y codominio es

    P: ZU

    Si x

    Z

    De tal forma que:

    nnOO AXXXAXAXAAL ,...,,)( 332211=

    nnYXYXYXYX ...,,

    332211

    TA0 (X) = p( TA! (Y1); TA2(Y2); TA3 (Y3).......... TAn (Yn

    Generacin de cdigo al vuelo:

    )

    Para este mtodo de generacin de cdigo se debe considerar nuevamente que la traduccin de una lenguaje fugenerado por una gramtica G a algn lenguaje Z1es 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:

    TP : ZUZ

    Asociados a las Reglas de Produccin:

    P = (AoXOAO, X1, A1, XnAn

    Condicin de generacin de cdigo al vuelo:

    )

    Las reglas de produccin P satisfacen la llamada condicin de generacin de cdigo al vuelo.

    Una gramtica cumple la generacin de Cdigo al Vuelo si:

    Una cadena X L (Ao

    XXYXXYXXAXXAXA nnnnnnoo == +11110111111 ......

    ) es generado por las derivaciones

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    36/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 6

    y se tiene:

    nnnnAA YTAvyTT )(...)( 111100

    Donde 0hasta 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 d

    Cdigo : ARCHIVO DE Z

    aparecen sucesivamente para i 1, 2, .... h En un orden determinado. Se debe notar que este es el mismo orden ecual estas cadenas son tratadas por el anlizador sintctico descendente bajo esta situacin es posible generar el cal vuelo.Luego se tiene la siguiente declaracin:

    UAR

    Es decir, cdigo es una variable de tipo archivo que corresponde al archivo de salida que contendr el cdigo ob

    generando, entonces cuando se use a generacin del cdigo al vuelo, cada procedimiento del anlisis PB directamescribir 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 PA0para los procedimientos:

    PA1, PA2... PAu

    Son llamados sucesivamente estos procedimientos describen en forma sucesiva las traducciones.

    TA1(Y1), ..., JAn(yn

    Para crear un programa en un lenguaje objeto eficiente un programador necesita ms que un compilador optimizafunciones que se disponen para que el compilador pueda crear programas objeto eficientes se mencionan los tipo

    )

    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 tapara muchas construcciones de lenguajes interactivos en general ya que la generacin de cdigo para dicconstrucciones 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 espaciomemoria para los atributos que generan el cdigo no es necesario. Sin embargo, la complejidad de las postraducciones de las construcciones de los lenguajes de programacin imperativos hace que el uso de la generaci

    cdigo al vuelo sea restrictivo en la prctica puede usarse la combinacin de ambos mtodos para generar el cdigdecir en algunos casos la tcnica de generacin de cdigo al vuelo para la mayor parte de las traducciones sencillas y de pequeas construcciones ms complejas usar la generacin de cdigo utilizando atributos.

    Optimizacin de cdigo:

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    37/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 7

    transformaciones para mejorar el cdigo que supone que el programador y quien escribe un compilador utilizarn 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 co

    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 camel resultado producido por un programa para una entrada dada o causar un error como una divisin por cero queestuviera presente en la versin original del programa fuente.

    Segundo: Una transformacin, como promedio, acelerar los programas en una cantidad mensurable. En ocasiointeresa reducir el espacio que ocupa el cdigo compilado aunque el tamao del cdigo tenga menos importancia quque tenia antes. Por supuesto no toda transformacin consigue mejorar los programas y ocasionalmente una optimizano 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 esfuintelectual de aplicar una transformacin que mejore el cdigo y que el compilador gaste el tiempo adicional compilandprograma fuente, si este esfuerzo no es recomendado cuando se ejecutan los programas objeto.

    CUESTIONARIO:

    1. Que es la generacin de cdigo utilizando atributos?2. Que es la generacin de cdigo al vuelo?3. Cual es la condicin para la generacin de cdigo al vuelo?4. Cual de estas dos es al mas aconsejable y porque?5. Concluya cada uno de estos dos mtodos.

    6. Que es optimizacin de cdigo?7. Cuantos y cuales son los criterios de transformaciones para generar el cdigo?

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    38/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 8

    PROGRAMA DE CALIDAD UDABOLDIF 001

    PROCESO DE CREACIN DE UN PROGRAMA

    Recuerde: En realidad escribir un programa es formular la solucin de un problema utilizando un lenguaje compren

    por el humano - programador. Esta formulacin escrita, que aqu se llama cdigo fuente, es traducido despuinstrucciones comprensibles por el procesador (el lenguaje mquina); el resultado de esta traduccin es el denomejecutable; 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 Programacy mucha gente se ha dedicado a especular sobre el tema; incluso hay "modas" al respecto es posible confeccionar lista de las caractersticas que "debe" y "no debe" tener un buen programa (incluyendo la del Jefe, que solo tiene puntos: "Que est para ayer; que salga barato"). El propio Stroustrup ( C++PL) compara las condiciones para escribbuen programa con las de escribir buena prosa. Segn l, existen dos respuestas: "Saber que se quiere decir" y "Prc

    Imitar buenos escritores". Ms adelante nos recuerda que aprender a manejar bien un lenguaje puede constar ttiempo 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 puntuaque el verdadero problema est en el segundo punto de la segunda respuesta. Siempre me ha parecido que progra(programar bien) tiene mucho de arte; me parece que debe ocurrir como con la msica; seguramente muchos puedecir que debe tener una buena ejecucin de violn, pero imitar a Paganini debe ser harina de otro costal. Seguramlos profesores de armona saben que debe tener y no tener una buena sinfona, pero otra cosa debe ser imitar a MozaBajando a la tierra; tampoco se trata aqu de hacer "Paganinis de la programacin C++" (ya me gustara para mmensaje que quisiera transmitir es doble: El contenido en un viejo Refrn Espaol: "La Universidad no presta lo qunaturaleza no da". Como suena un poco duro, aadir un consuelo para los que somos menos dotados; un proverbiole 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 delque las anotaciones de los puntos son opinin del que suscribe basados en la propia experiencia, por tanto totalmsubjetivos y opinables.

    Comprender el problema. Esta es la tpica obviedad que a veces se pasa por alto. Hemos dicho que escribir un progres formular la solucin de un problema; parece lo ms natural del mundo enterarse primero de cual es el problema; tuna imagen mental lo ms clara posible del asunto y de lo que se pretende conseguir con el programa. A esta fase suele denominar anlisis, y mi consejo particular es que despus de una primera toma de contacto, el segundo pasodefinir de la forma ms detallada posible el principio y el final del problema, es decir: Cual es la informacin de pa(incluyendo su formato y en que soporte se recibe) y cual es la informacin final y en que soporte se proporcionar; nolo mismo mostrar una imagen que componer una factura o disparar un proceso si un sensor analgico - digital

    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 queentre 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 tendiseados los ficheros se tendrn dos terceras partes . Este sistema tiene adems la ventaja de poner inmediatam

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    39/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -3 9

    de manifiesto las indefiniciones de partida; a veces los clientes no saben exactamente que desean y hay que ayudarcentrar el problema.Dentro de esta fase tiene especialsima importancia el tema de los lmites; esto se refiere al orden de magnitudes qumanejarn. De que rango sern las magnitudes numricas? Podrn adoptarse valores negativos? Hay informaalfanumrica? Como son de largas estas cadenas?. Especialmente si el programa implica diseo de archivos (comcasi seguro), Cual podr llegar a ser su tamao dentro de la vida del programa?. Si se manejan ficheros u obj

    binarios, Como son de grandes? Que concepto tiene el cliente de los que sera "rpido" o "lento"? (milisegunminutos, horas?). En esta fase sea especialmente precavido y no se crea a pi juntillas todo lo que le digan (intente hde abogado del diablo).

    Como postre, disee las lneas maestras de una estrategia de recuperacin de errores de ejecucin, incluyendo que con los no recuperables (errores fatales). Piense por ejemplo que si algn da lo llaman para ver "que ha pasado", qule interese disponer de un vocablo de texto ASCII en el disco con una descripcin del status del programa como partelas funciones de salida Hoy da, cuando se empieza a hablar de frigorficos que avisarn de que faltan provisiones olavadoras que avisarn al tcnico si se estropean, no estara de ms que sus programas estuviesen a la altura decircunstancias.

    Disear los ficheros

    Si el programa debe utilizar ficheros que no vengan impuestos (ya existentes), y suponiendo que todo lo anterior suficientemente claro, este es el momento de hacerlo. Ponga por escrito la especificacin de tales ficheros, incluyennombre que dar a las variables y, en su caso, el que tendrn en el disco o almacenamiento externo. Esto pconcretarse quizs a la definicin de algunas estructuras. En esta fase es posible que tenga que re preguntar algcosa que se pas por alto.

    Escribir el cdigo

    Suponiendo cumplimentados los pasos anteriores y una imagen mental clara de cmo ser esa conexin entrinformacin de entrada y la salida (que es justamente el programa que se pretende), puede empezarse a escribir el cNota: Para escribir el cdigo solo hace falta un editor de texto plano, aunque las modernas "suites" de programa

    incluyen editores especficos que estn conectados con el depurador, el compilador el enlazador (ver ms adelantincluso el sistema de ayudas, de forma que, por ejemplo, pueden mostrarnos automticamente la sentencia en la quha producido un error de compilacin, o la pgina correspondiente del manual si pulsamos en una palabra reservapedimos ayuda (F1 generalmente). Tambin muestran en diversos colores las palabras clave, los comentarios, etc. ms avanzados disponen incluso de opciones que podramos calificar de "inteligentes", en el sentido que pueden prcual ser nuestro prximo movimiento en funcin de la sentencia que estamos escribiendo (por ejemplo, ofrecernos 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 rascuales sern los mdulos del programa; mdulos que se correspondern aproximadamente con la distribucin del cen 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 vaprogramadores 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), asignacin de estas como tareas a los programadores, lo habr realizado el jefe de programacin y desarrollo o un eqde analistas de sistemas.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    40/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 0

    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 uaos, quizs entonces le parezca "Chino" y agradecer haber dejado la mayor cantidad de documentacin y aclaracioal respecto. Incluso si es seguro que no volver a verlo, piense en el sufrido programador que le seguir si tienehabrselas con su cdigo.

    En este sentido C++ no es precisamente COBOL, aunque afortunadamente permite incluir en el fuente comentarios todextensos que se desee .No caiga tampoco en el error de pensar que esa informacin ya est en la documentacin esque 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 e

    "manazas" o que los datos pueden venir con alguna corrupcin, error de transmisin, etc. Verifique constantementelas condiciones son las esperadas.

    Una vez que se tiene el cdigo fuente (en uno o varios mdulos), el proceso de traducirlo a instrucciones comprenspor 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 program(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 incorrectaque la compilacin propiamente dicha es solo una de las etapas intermedias. Sera ms correcto decir "construccinejecutable, aunque por la extensin y generalizacin de su uso seguiremos utilizando el trmino genrico "compilac

    para referirnos a l. Los procesos de construccin del ejecutable se esquematizan en la figura que comentamcontinuacin:

    Preprocesado

    En la primera fase de la compilacin; un programa especial, denominado make, es encargado de iniciar el prollamando a los diversos mdulos que se encargan de la construccin del ejecutable El primero de estos mdulos preprocesador.

    El preprocesador estudia el texto buscando directivas de preprocesado por ejemplo sentencias que puedensuprimidas, incluye los ficheros correspondientes a las directivas #include, sustituye los #define, elimina los comenty expande las macros encontradas en el fuente y en los propios ficheros incluidos. El resultado obtenido es lo qu

    denomina unidad de compilacin.

    Anlisis

    El segundo paso consiste en un anlisis lxico (scaning) y sintctico (parsing) del fichero resultante para identificatokens finalmente el fuente es tokenizado, esto es, reducido a tokens y separadores.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    41/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 1

    El fuente es escaneado, el analizador sintctico (parser) extrae los tokens de forma que selecciona el que coincida cosecuencia de caracteres ms larga posible dentro de la secuencia analizada. Por ejemplo, la palabra clave externareconocida como un solo token (identificador de clase de almacenamiento) en vez de seleccionar externamente palabra reservada) y al (que sera un identificador).En esta fase tambin se realizan tambin algunas comprobaciones; bsicamente la comprobacin esttica de tiposdecir, que las variables y las operaciones entre ellas se usan correctamente. Esto supone verificar que las llamad

    funciones, los valores devueltos por estas y los operandos de las expresiones corresponden con el tipo que se suponcada caso; tambin se realizan comprobaciones sintcticas, como que los parntesis estn cerrados, que no apareexpresiones incompletas, etc.

    Los separadores (whitespaces) es el nombre genrico dado a los espacios tabulaciones verticales VT, horizontales nueva linea NL) y retorno de carro CR . Los separadores sirven para indicar donde empiezan y terminan las palabpero 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:inti;floatf;

    El carcter ASCII espacio puede formar parte de cadenas literales (alfanumricas), en cuyo caso es protegido del procde anlisis, permaneciendo como parte de la cadena. Por ejemplo:char name = "Playa Victoria";Es reducido a siete tokens, incluyendo una cadena literal "Playa Victoria"

    charname[]="Playa Victoria";

    Generador de cdigo

    Todos estos tokens identificados por el analizador sintctico, son organizados en una estructura como las hojas derbol. A continuacin, el generador de cdigo recorre este rbol traduciendo sus hojas directamente en cdigo dmquina para la que se compila.

    Si se solicita, el compilador tambin puede en esta fase generar un fichero en lenguaje macro ensamblador paraposible inspeccin por el programador (este cdigo es tambin dependiente de la mquina para la que se compfcilmente entendible por el humano; puede contener incluso comentarios para facilitar su lectura).

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    42/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 2

    El compilador Borland C++ dispone de opciones que permiten generar cdigo optimizado para procesadores Intemodelos especficos.

    A veces, despus del generador de cdigo puede ejecutarse un optimizador (peephole optmizer). Este generadocdigo sera propiamente el compilador, es decir, el encargado de traducir algo entendible por el humano en cmquina.

    En cualquier caso, el resultado es un fichero "objeto", generalmente con la terminacin obj. Tambin puede ordenarcompilador que incluya en el "objeto", determinada informacin adicional que ser utilizada ms tarde por el depurapor ejemplo los nmeros de lnea de las sentencias. Cuando se hace as, se habla de una compilacin "provisional" "depuracin"; distinta de la que se realiza para la versin definitiva (de campo) del programa en la que no se incluyen etipo de informacin que ya no es necesaria.

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

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    43/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 3

    PROGRAMA DE CALIDAD UDABOLDIF 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 dela 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 sisteexpertos, las trayectorias de un planeta, el movimiento de la mano, la trayectoria que sigue una pieza de ajedremoverse, una huella digital, la seal de un electrocardiograma, etc., con lo que se amplia el concepto de lenguajenormalmente se restringa a los lenguajes naturales (como el Espaol, Ingles, Chino o rabe) y artificiales (como ForPascal o C), para incluir cualquier cosa.

    Como primer punto se comenta que el Enfoque Lingstico surgi en varios pases como ser Mxico a mediados d70's y que tiene como antecedentes los trabajos desarrollados por Noam Chomsky a mediados de los 50's representar la estructura de los lenguajes naturales, la aplicacin de estos trabajos a la construccin de compiladores,lo que se generalizo el concepto de lenguaje para incluir a los lenguajes artificiales de programacin y el surgimientoReconocimiento Sintctico de Formas donde se plantea que la forma de cualquier objeto o el patrn de comportamientcualquier proceso se puede ver como una oracin de algn lenguaje, con lo que se generaliz an ms el conceptlenguaje 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 perciconceptualizar.

    La presentacin de ejemplos de mltiples tipos de lenguajes, como: lenguajes naturales restringidos, lenguajes

    trayectoria, lenguajes para representar sistemas de diagnostico y toma de decisiones y una ecuacin lingstica cocual se tiene la estructura de cualquier elemento de la naturaleza , tiene mucho uso es la actualidad y esta orientadomuchas aplicaciones.

    Recuerde: Una Gramtica (o conjunto de reglas que representan a un lenguaje) es equivalente a un sistemainformacin, por lo que si se tienen un conjunto de oraciones de un lenguaje se puede encontrar su gramtica y deobtener 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 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.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    44/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 4

    PROGRAMA DE CALIDAD UDABOLDIF 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 dcompilacin de un programa fuente.

    El rol del analizador lexicogrfico en la construccin de un compilador, su finalidad y su caracterstica paulatinamente sira sentando las bases para el diseo del analizador lexicogrfico utilizando expresiones regulares y autmatas de estafinito como herramientas para su implementacin.

    Rol del analizador lexicogrfico en el modelo de un compilador

    ANALIZADOR

    LEXICOGRAFICO PARSERS

    INFORMACION ADICICONAL DE LOS

    TOKENS

    PROGRAMA

    FUENTE

    TOKENS

    OBTENER EL

    SIGUIENTE

    TOKEN

    La razn o existencia de la entidad de la informacin adicional de los tokens es por que el analizador lexicogrficoalmacena 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 informacorresponde al atributo del Token de esta manera por ejemplo es posible conocer si un identificador es una pareservada 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 olenguaje fuente, en tal archivo existen varios grupos de caracteres que representen un solo objeto, los cuales son llama TOKENS, un token es una pieza constituyente del programa fuente como ejemplos de tokens puede mencionarse asiguientes: identificador, numero, etc.

    La principal tarea del analizador lexicogrfico consiste en la particin del archivo de entrada en tokens , en forma

    precisa la respuesta del analizador lexicogrfico deber ser : proporcionar el siguiente token del archivo fuente en fosucesiva, cada vez que el modulo encargado del anlisis sintctico lo reuniera si se considera que durante la compiladel programa fuente el analizador lexicogrfico tomara un cierto tiempo para encontrar el siguiente token , es importpor eso que la construccin de un analizador lexicogrfico debe ser eficiente en cuanto a tiempo y espacio. Por supuque la eficiencia y complejidad del analizador lexicogrfico esta relacionada con las cadenas a ser reconocidas, 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.

  • 5/27/2018 s7- diseno_y_desarrollo_de_compiladores.pdf

    45/55

    FACULTAD DE CIENCIAS Y TECNOLOGIA

    U N I V E R S I D A D D E A Q U I N O B O L I V I A -4 5

    PROGRAMA ANALIZADOR ANALIZADOR RESTO DEL

    FRENTE DELCOMPILADOR

    INFORMACINADICIONAL DE LOSTOKENS

    TOKEN

    SIGUIENTE

    TOKENDERIVACIN

    RBOL

    DE

    REPRESENTACI

    INTERMEDIA

    PR