Compilador e interpretador

11,240 views

Published on

Trabajo de Introduccion a la computacion.

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
11,240
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
202
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Compilador e interpretador

  1. 1. República Bolivariana de Venezuela<br />Universidad Fermín Toro<br />Escuela de Ciencias e Ingeniería<br />Cabudare – Estado Lara<br />Introducción a la Computación<br />Alumno:<br />Francisco J. Leal A.<br />Ing. En telecomunicaciones<br />
  2. 2. ¿Que es un Compilador?<br /> Un compilador es un programa o una herramienta cuya función es compilar; es decir es aquel que toma un texto o código fuente escrito en un lenguaje de alto nivel y lo traduce a un lenguaje compresible para las computadoras.<br /> Básicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real). en este caso hablamos de los compiladores.<br />
  3. 3. Características de un compilador<br />Generalmente un compilador se divide en dos partes:* Front End: parte que analiza e l código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.* Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el frontend.<br />
  4. 4. Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).<br />De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.<br />
  5. 5. Proceso de Compilación<br />A grandes rasgos el proceso se puede describir en los siguientes pasos:* El compilador recibe el código fuente.* Se analiza lexicográficamente.* Se analiza semántica y sintácticamente.* Se genera el código intermedio no optimizado.* Se optimiza el código intermedio.* Se genera el código objeto para una plataforma específica.<br />
  6. 6. Finalmente ya puede ejecutarse el código máquina.<br />temp1 := entarea1(60) <br />temp2 := id3 * temp1 (2) <br />temp3 := id2 + temp2 <br />id1 := temp3 <br /> Esta representación intermedia tiene varias propiedades. Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicación precede a la adición al programa fuente de. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. Tercera, algunas instrucciones de "tres direcciones" tienen menos de tres operadores, por ejemplo la primera y la última instrucciones de.<br />
  7. 7. ¿Que es un Interpretador?<br /> Un interpretador es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.<br />
  8. 8. Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados son:<br />Perl<br />PHP<br />Javascript<br />Logo<br />ASP (hasta la versión 3)<br />Python<br />Tcl<br />Ruby<br />J#<br />ASP<br />
  9. 9. ¿Qué es Lenguaje de Alto Nivel?<br /> Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.<br /> En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales.<br /> Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida.<br />
  10. 10. Ventajas e inconvenientes<br />Ventajas Genera un código más sencillo y comprensible.<br />Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.<br />Inconvenientes Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.<br />Algunos requieren que la máquina cliente posea una determinada plataforma.<br />Principales lenguajes de alto nivel<br />Ada<br />ALGOL <br />
  11. 11. ¿Qué es lenguaje de Nivel Medio?<br /> Lenguaje de medio nivel es un lenguaje de programación informática como el lenguaje C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel.<br /> Suelen ser clasificados muchas veces de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel.<br /> Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes).<br />
  12. 12. ¿Qué es lenguaje de Bajo Nivel?<br /> Un lenguaje de programación de bajo nivel es el que proporciona un conjunto de instrucciones aritmeticológicas sin la capacidad de encapsular dichas instrucciones en funciones que no estén ya contempladas en la arquitectura del hardware.<br /> Dicho lenguaje es muy simple o nada complicado, pero estructurar programas a ese nivel es muy difícil. Dado que este lenguaje viene dado por las especificaciones técnicas del hardware, no permite una abstracción fuera de lo estipulado para el microprocesador de un ordenador. Consecuentemente, es fácilmente trasladado a lenguaje de máquina.<br />
  13. 13. La estructura de los lenguajes son como sigue:<br />Lenguaje Máquina - Las invocaciones a memoria, como los procesos aritmético lógicos son posiciones literales de conmutadores físicos del hardware en su representación booleana. Estos lenguajes son literales de tareas.<br />Lenguajes de bajo nivel - Son instrucciones que ensamblan los grupos de conmutadores necesarios para expresar una mínima lógica aritmética. Están íntimamente vinculados al hardware. Por norma general están disponibles a nivel firmware, cmos o chip set. Estos lenguajes están orientados a procesos. Los procesos se componen de tareas. Contienen tantas instrucciones como la arquitectura del hardware así haya sido diseñada.<br />Por ejemplo: La arquitectura CISC contiene muchas mas instrucciones a este nivel, que la RISC.<br />Son denominados como ensambladores de un hardware concreto.<br />
  14. 14. Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes máquina, pero, al igual que ellos, dependen de la máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en inglés, ADD, SUB, DIV, etc.; en español, SUM,RES,DIV,etc. Una instrucción típica de suma sería:<br />ADD M, N, P<br /> Esta instrucción podría significar “sumar el número contenido en la posición de memoria M al número almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”. Evidentemente es mucho más sencillo recordar la instrucción anterior con un nemotécnico que su equivalente en código máquina”.<br />0110 1001 1010 1011<br />
  15. 15. Lenguaje C<br /> C es un lenguaje de programación de propósito general que ofrece economía sintáctica, control de flujo y estructuras sencillas y un buen conjunto de operadores. No es un lenguaje de muy alto nivel y más bien un lenguaje pequeño, sencillo y no está especializado en ningún tipo de aplicación. Esto lo hace un lenguaje potente, con un campo de aplicación ilimitado y sobre todo, se aprende rápidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje.<br />C trabaja con tipos de datos que son directamente tratables por el hardware de la mayoría de computadoras actuales, como son los caracteres, números y direcciones. Estos tipos de datos pueden ser manipulados por las operaciones aritméticas que proporcionan las computadoras. <br />
  16. 16. No proporciona mecanismos para tratar tipos de datos que no sean los básicos, debiendo ser el programador el que los desarrolle. Esto permite que el código generado sea muy eficiente y de ahí el éxito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que no sea el estático y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea reducido y los compiladores de fácil implementación en distintos sistemas. Por contra, estas carencias se compensan mediante la inclusión de funciones de librería para realizar todas estas tareas, que normalmente dependen del sistema operativo.<br /> Ces un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.<br />
  17. 17. Propiedades<br />Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.<br />Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).<br />Un sistema de tipos que impide operaciones sin sentido.<br />Usa un lenguaje de preprocesado,preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente<br />Acceso a memoria de bajo nivel mediante el uso de punteros<br />Interrupciones al procesador con uniones.<br />Un conjunto reducido de palabras clave.<br />Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.<br />Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.<br />Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").<br />
  18. 18. Carencias<br />Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por SunMicrosystems, o el Recolector de basura de Boehm.<br />Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.<br />Encapsulación.<br />Funciones anidadas, aunque GCC tiene esta característica como extensión.<br />Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica<br />Soporte nativo para programación multihilo y redes de computadores.<br />
  19. 19. Variantes<br />Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:<br />Objective-C un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS XyGNUstep<br />C++ (pronunciado C Plus Plus) diseñado por BjarneStroustrup fue el segundo intento de proporcionar orientación a objetosaC y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.<br />También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:<br />Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más similar a la de Smalltalk y Objective C.<br />JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript.<br />C#(pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java<br />
  20. 20. Un programa C está formado por un conjunto de funciones que al menos contiene la función main. Una función se declara con el nombre de la función precedido del tipo de valor que retorna y una lista de argumentos encerrados entre paréntesis. El cuerpo de la función está formado por un conjunto de declaraciones y de sentencias comprendidas entre llaves. Veamos un ejemplo de utilización de funciones:<br />#include <stdio.h><br />#define VALOR 5<br />#define FACT 120<br />intfact_i ( int v )<br />{<br />int r = 1, i = 0;<br />while ( i <= v )<br />{<br />r = r * i;<br />i = i + 1;<br />}<br />return r;<br />}<br />intfact_r ( int v )<br />{<br />if ( v == 0 ) return 1;<br />elsereturn v * fact_r(v-1);<br />}<br />main() {<br />int r, valor = VALOR;<br />if ( (r = fact_i(valor)) != fact_r(valor) ) printf("Codificación errónea!!.n");<br />elseif ( r == FACT ) printf("Codificación correcta.n");<br />elseprintf("Algo falla!!.n");<br />}<br />
  21. 21. FIN...<br />

×