You are on page 1of 18

Intérpretes y compiladores

Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel: Compilador
e intérprete.

Diferencias

Compiladores Interpretes
 Analiza el programa fuente y "lo  Analiza el programa fuente y "lo ejecuta
traduce" a otro equivalente escrito en directamente", sin generar ningún
otro lenguaje (por ejemplo, en el código equivalente. Su acción equivale
lenguaje de la máquina). Su acción a la de un intérprete humano, que
equivale a la de un traductor humano, traduce las frases que oye sobre la
que toma un libro y produce otro marcha, sin producir ningún escrito
equivalente escrito en otra lengua. permanente.

 Suele generar programas más rápidos  Un intérprete se ve obligado


y eficientes, ya que el análisis del generalmente a analizar cada
lenguaje fuente se hace una sola vez, instrucción tantas veces como se
durante la generación del programa ejecute (incluso miles o millones de
equivalente. veces).

 Facilita la búsqueda de errores, pues la


 El compilador “sólo traduce” ejecución de un programa puede
interrumpirse en cualquier momento
para estudiar el entorno (valores de las
variables, etc.). Además, el programa
 Es aquel que traduce nuestro lenguaje puede modificarse sobre la marcha, sin
y lo traduce a idioma de la maquina necesidad de volver a comenzar la
ejecución.

 El intérprete “decodifica y ejecuta”.


 Es el que de alguna manera traduce un
lenguaje de programación a un código de  Es aquel que analiza el lenguaje y lo
maquina generando un programa. ejecuta.

 El intérprete analiza y ejecuta el programa


sin generar como salida un código maquina
Introducción
El lenguaje de programación Pascal es un lenguaje de alto nivel y propósito general (aplicable
a una gran cantidad de aplicaciones diversas) desarrollado por el profesor suizo Niklaus
Wirth (Instituto tecnológico de Zurich, Suiza). El propósito de Wirth era crear un lenguaje
para la enseñanza de técnicas de programación a estudiantes universitarios. Pero a medida
que pasaban los años, Pascal se iba convirtiendo en un estándar en el mundo de la
programación.

Una versión preliminar del lenguaje apareció en 1968 y el primer compilador totalmente
completo apareció a finales de 1970. Desde entonces, muchos compiladores han sido
construídos y están disponibles para diferentes máquinas. Durante muchos años, el
libro Pascal User Manual and Report , publicado por Wirth y Kathleen Jensen en 1974, ha
servido de facto como estándar de todas las versiones.

Las diferentes versiones ofrecían iterpretaciones ligeramente diferentes que impedían la


compatibilidad entre ellas. Por estas razones, diferentes proyectos se iniciaron para
producir una definición estándar del lenguaje y culminaron en dos estándar: uno de
la Internacional Standard Organization (ISO) en 1982 y otro por un comité conjunto
del American National Standards Institute (ANSI) y del Institute of Electrical and Electronics
Engineers (IEEE). Estas dos versiones o definiciones se conocen
como ISO Pascal y ANSI/IEEE Pascal, y difieren en algunos aspectos no especialmente
significativos. Sin embargo, una versión no estándar se ha popularizado
considerablemente: Turbo Pascal (marca registrada por Borland International, Inc.). Esta
versión ha contribuido en gran medida a la popularización del lenguaje Pascal.
Traductores de programas
Los traductores son un tipo de programas cuya función es convertir el código de un lenguaje
en otro. Por ejemplo un compilador, que traduce código fuente en código objeto. Existen
distintos tipos de traductores, entre ellos destacan:

 Ensambladores
 Preprocesadores
 Intérpretes
 Compiladores

Ensambladores

Es un tipo de traductor que convierte programas escritos en lenguaje ensamblador en


programas escritos en código máquina.

Se refiere a un tipo de programa informático que se encarga de traducir unfichero


fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina,
ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se
crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir
directamente en código binario, que es el único código entendible por la computadora, es en
la práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje
ensamblador originó también la evolución de este programa ensamblador hacia lo que se
conoce como programa compilador.

Funcionamiento
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los
códigos mnemotécnicos que aparecen por su código de operación correspondiente en sistema
binario.
Preprocesadores

Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a lenguaje
máquina directamente.

Es un programa que forma parte del compilador y que “prepara” o modifica el código fuente
antes de ser traducido a código binario. Los cambios los hace interpretando aquellas líneas del
código que comienzan por el símbolo “#”. El uso de estas directivas es tan común en los
programas en C que parece que forman parte del lenguaje, pero en realidad son parte de un
lenguaje que sólo entiende el procesador.

El preprocesador puede ser utilizado de forma independiente del compilador mediante el


comando cpp. Abre un terminal de comandos y consulta la página de manual de este
comando. Como puedes comprobar, es un programa que puede procesar un amplio catálogo
de directivas. De todas ellas, en este documento se describen las más utilizadas.
Intérpretes

Se trata de traductores-ejecutores ya que con cada instrucción realizan un proceso triple de


lectura-traducción-ejecución. Son relativamente lentos, pero muy buenos para la depuración
de programas.

Es un programa informático capaz de analizar y ejecutar otros programas. Los intérpretes se


diferencian de los compiladores o de los ensambladores 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.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad
de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos
de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para
reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten
ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta
el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina
virtual).
Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de
programación pueden interpretar o compilar el código fuente original en una más compacta
forma intermedia y después traducir eso al código de máquina (ej. Perl, Python, MATLAB,
y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej.
Python, UCSD Pascal y Java).
En la actualidad, uno de los entornos más comunes de uso de los intérpretes es en
los navegadores web, debido a la posibilidad que estos tienen de ejecutarse
independientemente de la plataforma.
Compiladores

Es el tipo de traductor más conocido. Se trata de un programa que traduce código fuente
escrito en un lenguaje de alto nivel (Pascal) en código máquina (no siempre). Son más rápidos
que los intérpretes pero presentan mayor dificultad a la hora de detectar errores.

Un compilador es un programa que lee el código escrito en un lenguaje (lenguaje origen), y lo


traduce en un programa equivalente escrito en otro lenguaje (lenguaje objetivo). Como una
parte fundamental de este proceso de traducción, el compilador le hace notar al usuario la
presencia de errores en el código fuente del programa.

Los lenguajes C y C++ son lenguajes que utiliza un compilador. El trabajo del compilador y su
función es llevar el código fuente escrito en C/C++ a un programa escrito en lenguaje
máquina. Entrando en más detalle, un programa en código fuente es compilado obteniendo
un archivo parcial (un objeto) que tiene extensión obj. Luego el compilador invoca al “linker”
que convierte al archivo objeto en un ejecutable con extensión exe; este último archivo es un
archivo en formato binario (ceros y unos) y puede funcionar por sí sólo.

Además, el compilador al realizar su tarea realiza también una comprobación de errores en el


programa; es decir, revisa que todo esté en orden. Por ejemplo, variables y funciones bien
definidas, todo lo referente a cuestiones sintácticas, etc. Está fuera del alcance del compilador
que, por ejemplo, el algoritmo utilizado en el problema funcione bien.
¿Cómo se da el proceso de compilación?
Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado directamente por un
ordenador, sino que debe ser traducido a lenguaje máquina.

Las etapas por las que debe pasar un programa escrito en un lenguaje de programación, hasta
poder ser ejecutable son:

Programa fuente: Programa escrito en un lenguaje de alto nivel (texto ordinario que contiene
las sentencias del programa en un lenguaje de programación). Necesita ser traducido a código
máquina para poder ser ejecutado.

Compilador: Programa encargado de traducir los programas fuentes escritos en un lenguaje


de alto nivel a lenguaje máquina y de comprobar que las llamadas a las funciones de librería se
realizan correctamente.

Programa (o código) objeto: Es el programa fuente traducido (por el compilador) a código


máquina. Aún no es directamente ejecutable.

Programa Ejecutable: Traducción completa a código máquina, realizada por el enlazador, del
programa fuente y que ya es directamente ejecutable.

Linker (montador o enlazador): Es el programa encargado de insertar al programa objeto el


código máquina de las funciones de las librerías (archivos de biblioteca) usadas en el programa
y realizar el proceso de montaje, que producirá un programa ejecutable .exe. Las librerias son
una colección de código (funciones) ya programado y traducido a código máquina, listo para
utilizar en un programa y que facilita la labor del programador.

Si el programa fuente es sintácticamente correcto, el compilador generará el código objeto, en


caso contrario mostrará una lista con los errores encontrados, no generándose ningún
programa objeto, para que procedamos a su depuración
Los compiladores emiten mensajes de error o de advertencia durante las fases de compilación, de
enlace o de ejecución de un programa:

• Los errores en tiempo de compilación son los que se producen antes de la ejecución del programa,
durante el proceso de compilación del programa.

• Los errores en tiempo de ejecución son los que se producen durante la ejecución del programa. Son
los más difíciles de encontrar, no son detectados por el compilador, ya que son errores de lógica, no de
sintaxis.

Aunque al compilar un programa no de errores, el programa puede funcionar incorrectamente y/o a


dar errores durante su ejecución. Por ejemplo:

• Un programa puede producir resultados erróneos, al equivocarnos (errores lógicos) al programar el


algoritmo (sumar en vez de restar, etc.).

• Un programa puede interrumpirse bruscamente, por ejemplo si tenemos que hacer una división y el
divisor es cero, etc.

Los errores que se pueden producir en la fase de compilación son:

− Errores fatales: Son raros. Indican errores internos del compilador. Cuando ocurren la compilación
se detiene inmediatamente.

− Errores de sintaxis: Son los errores típicos de sintaxis. No detienen la compilación sino que al
finalizar ésta se mostrará la lista con todos los errores encontrados. Algunos errores suelen ser
consecuencia de otros cometidos con anterioridad. Con este tipo de errores no se puede obtener un
programa objeto y por lo tanto tampoco el ejecutable.

− Advertencias o avisos (warnings): Indican que hay líneas de código sospechosas que a pesar de
no infringir ninguna regla sintáctica, el compilador las encuentra susceptibles de provocar un error.
Cuando se detecta un warning la compilación no se detiene. Si en un programa fuente sólo se
detectan warnings sí que se podrá obtener un programa objeto, que tras el linkado dará lugar a un
programa ejecutable.
Lenguajes de programación
Un lenguaje de programación permite al usuario crear programas que serán entendidos por el
ordenador (directa o indirectamente) con el objetivo de realizar alguna tarea.

A grandes rasgos podemos clasificar los lenguajes de programación en tres


categorías: máquina, bajo nivel (ensamblador) y alto nivel.

Lenguaje máquina

Los lenguajes máquina son aquellos cuyas instrucciones son directamente entendibles por el
ordenador sin la necesidad de traducción alguna. Sus instrucciones no son más que ristras
de ceros y unos (bits). Estas especifican la operación a realizar, los registros del procesador y
celdas de memoria implicados, etc.

Obviamente, este tipo de lenguajes serán fáciles de comprender para un ordenador pero muy
difíciles para el hombre. Esta razón nos lleva a buscar otro lenguaje para comunicarnos con el
ordenador.

Fue el primer lenguaje utilizado en la programación para las primeras computadoras, pero
dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más
fáciles de aprender y utilizar, y que además reducen la posibilidad de cometer errores.

La información que hace que el hardware de la computadora realice una determinada


actividad de llama instrucción, por consiguiente una instrucción es un conjunto de unos y
ceros, las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo
que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se
denomina lenguaje máquina.

El lenguaje máquina es el único lenguaje que puede ejecutar una computadora, es específico
en cada arquitectura, es un código que es interpretado directamente por el microprocesador,
está compuesto por un conjunto de instrucciones ejecutadas en secuencia que representan
acciones que la máquina podrá tomar.

El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto


binario que consta de los dos únicos símbolos 0 y 1, denominados bits; físicamente, se
materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios,
respectivamente.

Para representar datos que contengan una información se utilizan una serie de unos y ceros
cuyo conjunto indica dicha información.

Todo código fuente en última instancia debe llevarse a un lenguaje máquina mediante el
proceso de compilación o interpretación para que la computadora pueda ejecutarlo.

Las instrucciones preparadas en cualquier lenguaje de máquina tienen por lo menos dos
partes, el comando u operación, que dice a la computadora cuál es la función que va a realizar
y la instrucción es el operando, que indica a la computadora donde hallar o almacenar los
datos y otras instrucciones que se van a manipular; el número de operandos de una
instrucción varía en las distintas computadoras, una instrucción en lenguaje máquina puede,
por ejemplo, representarse de la siguiente forma:

011011001010010011110110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación,


siendo aun más difícil la interpretación de un programa escrito de esta forma, esta dificultad
hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no
imposible, al igual que la verificación y modificación de los programas.

Como se puede observar, estas instrucciones serán fáciles de leer por la computadora y difíciles
por un programador, y viceversa, esta razón hace difícil escribir programas en código o
lenguaje a máquina y requiere buscar otro lenguaje para comunicarse con la computadora,
pero que sea más fácil de escribir y leer por el programador. Para evitar la tediosa tarea de
escribir programas en lenguaje máquina, se han diseñado otros lenguajes de programación que
facilitan la escritura y posterior ejecución de los programas.
Lenguajes de bajo nivel (ensamblador)

La programación en lenguaje máquina es difícil, por ello se necesitan lenguajes que permitan simplificar este
proceso. Los lenguajes de bajo nivel han sido diseñados para este fin.

Estos lenguajes son generalmente dependientes de la máquina, es decir, dependen de un conjunto de instrucciones
específicas del ordenador. Un ejemplo de este tipo de lenguajes es el ensamblador. En él, las instrucciones se
escriben en códigos alfabéticos conocidos como mnemotécnicos (generalmente, abreviaturas de palabras inglesas).
Las palabras mnemotécnicas son mucho más fáciles de recordar que las secuencias de ceros y unos. Una instrucción
típica de ensamblador puede ser: ADD x,y,z .Esta instrucción significaría que se deben sumar los números
almacenados en las direcciones de memoria x e y, y almacenar el resultado en la dirección z. Pero aun así, a medida
que los programas crezcan en tamaño y complejidad, el ensamblador sigue sin ser una buena solución.

Los lenguajes de bajo nivel son más 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:

ADD M, N, P

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”.

0110 1001 1010 1011


Lenguajes de alto nivel (Pascal)

Los lenguajes de alto nivel son aquellos en los que las instrucciones o sentencias son escritas
con palabras similares a las de los lenguajes humanos (en la mayoría de los casos, el Inglés).
Esto facilita la escritura y comprensión del código al programador.

Existen muchos lenguajes de alto nivel, por citar algunos:

 ADA
 BASIC
 COBOL
 FORTRAN
 C
 Modula-2
 Pascal
 Java

Los programas escritos en lenguaje de alto nivel no son entendibles directamente por la
máquina. Necesitan ser traducidos a instrucciones en lenguaje máquina que entiendan los
ordenadores. Los programas que realizan esta traducción se llaman compiladores, y los
programas escritos en lenguajes de alto nivel se denominan programas fuente.

En los primeros lenguajes, 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 o lenguajes de bajo nivel. Otra limitación de estos 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.
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación
que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se
llaman de tercera generación o de nivel alto, en contraposición a los de bajo nivel o de nivel
próximo a la máquina.
Bibliografía

 Introducción a la informática, Michael Miller, Edición 2008

 Mi libro de informática, Jane Collins, 2004

 Análisis y diseño de sistemas, Kendall y Kendall, 2001

 https://www.uclm.es/area/egi/OFITEC/Descarga/HISTORIA%20COMPUT
ACION.PDF

 http://leonelmartinez.udem.edu.ni/wp-content/uploads/2015/01/1-2-
generaciones-de-las-computadoras.pdf

 https://niyi17.files.wordpress.com/2011/06/lenguaje-de-bajo-nivel.jpg

 http://compiladorandrea.blogspot.com/p/proceso-de-compilacion.html

 http://teleformacion.edu.aytolacoruna.es/PASCAL/document/intro.htm
Nombre: Juan Antonio

Apellido: Verastegui Inga

Código: 141601010

Tema: Lenguajes de programación y tipos de


compiladores

Curso: Informática

Profesora: María Rosa Damaso Ríos

You might also like