Intérpretes vs. Compiladores (A3C34A2D05)

Introducción

VÍDEO

LENGUAJES DE PROGRAMACIÓN: ¿EN QUÉ CONSISTEN?

Se presenta la diferencia entre los lenguajes de programación y los lenguajes naturales, empleando los elementos definidos anteriormente: léxico, sintaxis y semántica

e.digitall.org.es/A3C34A2V04

Cuando dos personas se comunican suelen emplear el mismo idioma o lenguaje. En caso de no hablarlo, deberían emplear a alguien o algo que tradujera lo que uno dice en su idioma al idioma que el otro pueda entender. Por ejemplo, imagina que te tienes que comunicar con un alemán, y no conoces su idioma, sin duda alguna en ese acto de comunicación necesitarás de un traductor de español a alemán y al contrario.

¿Para qué sirven los intérpretes y los compiladores?

En el mundo de la programación existe una necesidad de comunicación similar: un programador informático tiene que decirle a un ordenador lo que tiene que hacer. Para ello debe usar el lenguaje máquina que es complejo (formado por ceros y uno) o usar un lenguaje de programación más cercano al humano, sin embargo, este último no lo entiende la máquina.

Es un caso de comunicación en el que cada uno habla o entiende su propio lenguaje, el ordenador solo comprende instrucciones escritas en el lenguaje máquina y el programador solo es capaz de comunicar las instrucciones que debe ejecutar el ordenador por medio de cadenas de un lenguaje de programación de alto nivel.

El problema está en hacer que el ordenador entienda las instrucciones dadas en el lenguaje de programación. Por tanto, es necesario usar un “traductor” que transforme las instrucciones expresadas con un lenguaje de programación, a instrucciones en lenguaje máquina que pueda entender el ordenador. Hay dos posibles tipos de “traductores” de este tipo: los compiladores y los intérpretes.

Ambas herramientas deben comprobar primero que las cadenas escritas en el lenguaje de programación son correctas: a nivel léxico, es decir estén formadas por palabras del vocabulario del lenguaje; a nivel sintáctico, es decir tengan una estructura correcta; y a nivel semántico, esto es tengan un significado. Esto es lo que se denomina fase de análisis del traductor o procesador del lenguaje.

Una vez comprobado que todas las instrucciones están formadas por términos correctos del vocabulario del lenguaje, así como que la estructura de las instrucciones es correcta según las reglas gramaticales que determinan las cadenas válidas del lenguaje, entonces se analiza a nivel semántico. Este análisis semántico implica dos cosas: por un lado, acaba de hacer comprobaciones de más alto nivel, por ejemplo, comprobar que una variable se ha declarado antes de ser usada o que no se asigna a una variable un valor diferente al que puede almacenar (i.e. asignar a una variable un valor numérico cuando se ha declarado como una variable para almacenar cadenas de texto). Por otro lado, lo que hace es entender lo que se está comunicando  con la cadena escrita en el lenguaje de alto nivel con el objetivo de comunicárselo a la máquina.

Con lo que se ha entendido que se está ordenando con la instrucción escrita en lenguaje de alto nivel, se genera la instrucción para la máquina en su propio lenguaje. Esto es lo que se denomina fase de síntesis del traductor o procesador del lenguaje. La traducción generalmente no es uno a uno, es decir que una instrucción del lenguaje de alto nivel por lo general implicará varias instrucciones del lenguaje máquina. A estos tipos de traductores también se les denomina procesadores de lenguajes, ya que implican analizar y sintetizar.

Diferencias entre intérpretes y compiladores

La principal diferencia entre un intérprete y un compilador está en su objetivo. Un compilador tiene como objetivo analizar y traducir completamente el programa escrito por un programador en lenguaje de programación de alto nivel a sentencias del lenguaje máquina. Como consecuencia el texto traducido a lenguaje máquina podrá ser almacenado en un fichero o archivo, pudiéndose referir a él como el programa compilado. Por el contrario, un intérprete tiene como objetivo analizar sentencia a sentencia el programa escrito por el programador y ejecutar cada sentencia una vez analizada. No se genera un resultado que se pueda almacenar en un fichero.

Cada enfoque tiene sus propias ventajas e inconvenientes: un programa que ha sido compilado se podrá ejecutar en la máquina cuando se quiera, siendo esto una de las ventajas del compilador. Por el contrario, el programa interpretado debe analizarse y ejecutarse cada vez que se dese ejecutar en la maquina destino. Esto además implica mayor rapidez en la ejecución de los programas compilados frente a los interpretados, ya que estos últimos siempre van a tener que ser analizados en su ejecución, los compiladores solo realizan el análisis una vez.

Por el contrario, el intérprete, al analizar y ejecutar una a una cada instrucción, facilita la depuración, ya que permite comprobar el resultado de cada instrucción, y si hay algún error, saber en qué punto exacto del programa se ha cometido. Este proceso es más complejo con un compilador y requiere de entornos de desarrollo. Además, los intérpretes al no generar un programa compilado favorecen la portabilidad de los programas. Cada máquina tendrá su propio intérprete del lenguaje de alto nivel, de manera que en cada ejecución hay una ejecución en la máquina en la que se ejecuta el intérprete.

Saber más

Keepcoding. Qué es un intérprete y qué es un compilador. e.digitall.org.es/interprete-compilador

ResearchGate. Lovello, J. M. C. Conceptos básicos de procesadores de lenguaje. Servitec. e.digitall.org.es/conceptos-basicos