Compiladores
Los compiladores traducen programas escritos en lenguajes de alto nivel a código de
máquina que una computadora entiende. Y los ensambladores traducen programas escritos
en lenguaje ensamblador o de bajo nivel a código de máquina. En el proceso de
compilación, hay varias etapas.
Un Intérprete es un programa que ejecuta directamente las instrucciones escritas en un
lenguaje de programación dado
Un compilador es un programa que transforma el código fuente de un programa a su
equivalente en otro lenguaje de programación de más bajo
La implementación de lenguajes de programación permite que la CPU ejecute código de
cualquier lenguaje dependiendo de la arquitectura de bits.
Los intérpretes van traduciendo el código dinámicamente lo que lo vuelve más lento que en
lenguajes compilados, como ventaja tiene la portabilidad de plataformas solo se cambia el
intérprete, ejemplo PYTHON.
Los compiladores traducen el código fuente a código maquina antes de ejecutarse, son
eficientes y rápidos, ejemplo C++. Sus etapas son:
● 1- análisis léxico: se procesan como entrada los símbolos uno por uno y como salida
se los agrupa en elementos sintácticos como palabras reservadas, operadores,
comentarios, etc., ejemplo I+N+T=INT.
● 2-análisis sintáctico: se satisfacen las reglas sintácticas que especifica la gramática,
por ejemplo, que alguna palabra reservada esté rodeada de los demás campos que
especifique la gramática.
● 3-análisis semántico: se evalúa la estructura semántica en base a sus reglas y se
realiza el chequeo, la salida va a ser código ejecutable.
● 4- Optimización: entra el código objeto anterior y se intenta optimizar en base a la
arquitectura, da como salida código ejecutable optimizado.
● 5- vinculación y carga: tiene que ver con el sistema operativo a través de sus Apis,
como entradas tenemos los códigos anteriores se van a vincular en un único código
ejecutable.
Un compilador, ademas de traducir realiza otra serie de operaciones que en su mayoria
estan enfocadas a la deteccion de errores en la escritura del programa fuente. Esta
constituido por:
● Analizador lexicografico(scanner).
● Analizador sintáctico(parser).
● Generador de codigo intermedio.
● Optimizador de codigo.
● Generador de codigo final.
● Tabla de simbolos.
● Modulo de tratamiento de errores.
El compilador utiliza internamente una tabla de simbolos para introducir determinados datos
que necesita, y esta relacionada con todos sus elementos: asimismo, posee un modulo de
tratamiento de errores tambien relacionado con sus elementos.
5- Analizador lexicográfico o scanner. Detecta en el programa fuente unidades básicas de
información que pertenecen al lenguaje. Estas se denominan tokens o unidades léxicas. En
el caso de no existir errores realiza una primera traducción a un código propio del
compilador (generalmente numérico), eliminando a su vez toda información superflua como
pueden ser los comentarios y blancos no significativos del programa fuente.
Un token es un elemento del programa fuente que tienen significado propio como las
palabras reservadas del lenguaje, identificados, operadores, etc.
El analizador sintáctico o parser. Toma la tira de tokens que recibe del scanner e investiga
en ella los posibles errores sintácticos que aparecen, estos errores suelen ser de formato de
instrucciones, duplicidad de identificadores de distintas variables, etc.
Tanto en un analizador como en otro, todo error detectado es comunicado al programa por
medio de un listado de errores, en el que se indican donde están situados y qué tipo de
error es.
En ocasiones , se indican al programador determinados posibles errores que pueda haber
sin que perjudiquen el resto del proceso de compilación. Estos mensajes se denominan
warming o advertencias.
Un lenguaje portable es un lenguaje de programación que tiene la facultad de portar su
propio intérprete o compilador, así por ejemplo se dice que java es un lenguaje robusto y
portable, ya que implementa su propia JVM que le hace independiente de la máquina.
Resulta muy interesante entender cómo se ejecutan los programas y que ocurre en cada
momento en el. Para ellos algunos sistemas poseen unos programas depuradores cuya
misión es permitir la ejecución paso a paso por tramos del programa manteniendo el
entorno que se va produciendo (valores de variables). El programador en cada parada de la
ejecución de su programa puede comprobar e incluso modificar valores de las variables,
con lo cual resulta muy interesante este tipo de ejecución para la detección de errores y
comprobación del buen o mal funcionamiento del programa. Los puntos de parada en la
ejecución son determinados por el propio programador mediante sentencias destinadas a tal
fin.
Editores de enlace o montadores(linkers)
En general el producto de la compilación suele ser un conjunto de módulos independientes
denominados segmentos en lenguaje máquina que necesitan ser montados para formar el
programa completo para el que han sido creados . La misión del editor de enlace es unir los
distintos módulos que configuran el programa asignando la memoria al conjunto e
incorporando aquellas rutinas del propio lenguaje a las que se hacen referencia.
Algunos editores de enlace permiten el montaje de modulos escritos en distintos lenguajes y
compilados con los correspondientes compiladores.