Compiladores unidad1

  • View
    434

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Text of Compiladores unidad1

  • 1. Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (cdigo fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (cdigo objeto). Un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. El segundo lenguaje es lenguaje de mquina, pero tambin puede ser simplemente texto. Este proceso de traduccin se conoce como compilacin. Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel

2. Compiladores cruzados : generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores : realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada : generan el cdigo mquina a partir de una nica lectura del cdigo fuente. Compiladores de varias pasadas : necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina. Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes del cdigo segn se necesitan. 3. Generalmente un compilador se divide en dos partes: * Front End: parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionar. * Back End: parte en donde se genera el cdigo mquina exclusivo para una plataforma a partir de lo analizado en el front end. Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker). 4. El lenguaje de programacin Java , fue diseado por la compaa Sun Microsystems Inc, con el propsito de crear un lenguaje que pudiera funcionar en redes computacionales heterogneas ( redes de computadoras formadas por ms de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo , etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier mquina o plataforma. 5. Evitar errores de memoria Imposibilitar acceso al SO Evitar que caiga la mquina sobre la que corre Ausencia de punteros: Protege frente a imitacin de objetos, violacin de encapsulacin, acceso a reas protegidas de memoria, ya que el programador no podr referenciar posiciones de memoria especficas no reservadas, a diferencia de lo que se puede hacer en C y C++. 6. Es un lenguaje de programacin orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET . Esta es una interfaz de programacin de aplicaciones ( API ), mientras que C es un lenguaje de programacin independiente diseado para generar programas sobre dicha plataforma 7. Microsoft.NET framework SDK (siglas en ingls de software development kit) es generalmente un conjunto de herramientas de desarrollo de software que le permite al programador crear aplicaciones para un sistema concreto, por ejemplo ciertos paquetes de software, frameworks, plataformas de hardware, computadoras, videoconsolas, sistemas operativos, etc. incluye un compilador de C Microsoft Visual Studio versin 2002, 2003, 2005, 2008 y 2010 Mono .NET desarrollado por Novell . Como parte de esta implementacin se incluye un compilador de C . Delphi 2006, de Borland Software Corporation. dotGNU Portable.NET , de la Free Software Foundation . 8. Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones matemticas y de manejo de archivos, proporcionadas por bibliotecas . Es un lenguaje muy flexible que permite programar con mltiples estilos. Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de pre procesado , el preprocesador de C , para tareas como definir macros e incluir mltiples archivos de cdigo fuente . Acceso a memoria de bajo nivel mediante el uso de punteros . Interrupciones al procesador con uniones . Un conjunto reducido de palabras clave 9. Cualquier lenguaje puede ser ejecutado tanto va intrprete o va compilador, pero algunos lenguajes suelen asociarse ms a una va que a la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente. Tambin existen intrpretes que incluyen cierta "compilacin" en el medio. Son aquellos que compilan a un cdigo intermedio llamado bytecode, que es ms eficiente de ejecutar que hacerlo directamente desde el cdigo fuente. En general, la principal desventaja de los intrpretes, es que cuando un programa es interpretado, suele ejecutarse ms lento que si el mismo programa estuviese compilado. Esto se debe a que el intrprete debe analizar cada sentencia en el programa en cada ejecucin (un anlisis en tiempo real). Tambin el acceso a variables es ms lento en un intrprete, porque mapear los identificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real. 10. Un analizador lxico o analizador lexicogrfico (en ingls scanner) es la primera fase de un compilador consistente en un programa que recibe como entrada el cdigo fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes lxicos) o smbolos. Estos tokens sirven para una posterior etapa del proceso de traduccin, siendo la entrada para el analizador sintctico (en ingls parser). Sin embargo, un analizador lxico tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de manera tan eficiente como sea posible. 11. GRAMTICA LXICA La especificacin de un lenguaje de programacin a menudo incluye un conjunto de reglas que definen el lxico. Estas reglas consisten comnmente en expresiones regulares que indican el conjunto de posibles secuencias de caracteres que definen un Token o lexema. En algunos lenguajes de programacin es necesario establecer patrones para caracteres especiales (como el espacio en blanco) que la gramtica pueda reconocer sin que constituya un Token en s. ANLISIS Esta etapa est basada usualmente en una mquina de estados finitos. Esta mquina contiene la informacin de las posibles secuencias de caracteres que puede conformar cualquier Token que sea parte del lenguaje (las instancias individuales de estas secuencias de caracteres son denominados lexemas). Por ejemplo, un Token de naturaleza entero puede contener cualquier secuencia de caracteres numricos. 12. El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Un analizador lxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintctico para construir la estructura de datos, por ejemplo un rbol de anlisis o rboles de sintaxis abstracta. El anlisis sintctico tambin es un estado inicial del anlisis de frases de lenguaje natural. Los lenguajes habitualmente reconocidos por los analizadores sintcticos son los lenguajes libres de contexto. 13. Tipos generales de analizadores sintcticos para gramticas: a) Anlisis sintctico descendente. Construye rboles de anlisis sintctico desde arriba (raz) hacia abajo (hojas). El anlisis se realiza de lo general a lo particular. b) Anlisis sintctico ascendente. Construyen rboles de anlisis sintctico comenzando en las hojas y suben hacia la raz. El anlisis se realiza de lo particular a lo general. En ambos casos, se examina la entrada al analizador lxico de izquierda a derecha, un smbolo a la vez. 14. ANALISIS SINTACTICO DESCENDENTE Se considera un intento de encontrar una derivacin por la izquierda para una cadena de entrada. Tambin se puede considerar como un intento de construir un rbol de anlisis sintctico para la entrada comenzando desde la raz y creando nodos del rbol en orden previo. ANALISIS SINTACTICO ASCENDENTE El anlisis sintctico ascendente intenta construir un rbol para la cadena de entrada que comienza por las hojas (el fondo) y avanza hacia la raz (la cima). ANLISIS SINTCTICO POR PRECEDENCIA DE OPERADORES Para una pequea clase de gramticas se puede construir con facilidad a mano eficientes analizadores sintcticos ascendentes. Ests gramticas, por precedencia de operadores, tienen la propiedad de que ningn lado derecho de la produccin es ni tiene 2 terminales adyacentes. Una gramtica con esta ltima propiedad de denomina gramtica de operadores. 15. ANALIZADORES SINTCTICOS IZQUIERDA-DERECHA Es una tcnica eficiente de anlisis sintctico ascendente que se puede utilizar para analizar una amplia clase de gramticas independientes de contexto, denominada Anlisis sintctico LR(k) L es por el examen de la entrada de izquierda a derecha (left to right) R por construir una derivacin por la derecha (right most derivation) en orden inverso. K por el nmero de smbolos de entrada de examen por anticipado utilizados para tomar decisiones del anlisis sintctico. Cuando se omite, se asume que k es 1. Este anlisis es atractivo por varias razones: Reconocen prcticamente todas las construcciones de los lenguajes de programacin para los que se pueden escribir gramticas independientes del contexto. Puede detectar un error sintctico tan pronto como sea posible hacerlo en un examen de izquierda a derecha de la entrada. 16. Que es la semntica? Se refiere a los aspectos del significado, sentido o interpretacin del significado de un determinado elemento, smbolo, palabra, expresin o representacin formal. Anlisis semntico Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre s, etc. En definitiva, comprobar que el significado de lo que