Está en la página 1de 18

Compilador.

Un compilador es un programa informático que traduce el código


escrito (computadoras) de lenguaje de programación a otro idioma.

El nombre de compilador se usa principalmente para programas que


traducen el código fuente de un lenguaje de alto nivel a un lenguaje
inferior un ejemplo el código maquinado , lenguaje ensamblado
Hay muchos tipos diferentes de compiladores que
producen resultados en diferentes formas útiles.

Cruzados.
De arranque.
Descompilador.
Escritor
Compilador de compilador
Un compilador cruzado produce código para una CPU o sistema operativo diferente al que se
ejecuta en el compilador cruzado.

Un compilador de arranque es a menudo un compilador temporal, que se usa para compilar


un compilador más permanente o mejor optimizado para un idioma.

uno de nivel superior es un descompilador ; un programa que traduce entre lenguajes de alto
nivel, generalmente llamado compilador o transpilador de fuente a fuente .
Un reescritor de idiomas suele ser un programa que traduce la forma de las expresiones sin
cambiar de idioma.
Un compilador-compilador es un compilador que produce un compilador (o parte de uno), a
menudo de forma genérica y reutilizable para poder producir muchos compiladores diferentes.
Conclusión
Es probable que un compilador realice algunas o todas las siguientes operaciones, a
menudo denominadas fases:
 preprocesamiento , análisis léxico , análisis sintáctico , análisis semántico ( 
traducción dirigida por la sintaxis ), conversión de programas de entrada a una 
representación intermedia , optimización de código y generación de código .

Fin.
un lenguaje de programación puede tener tanto un compilador como un intérprete.
 En la práctica, los lenguajes de programación tienden a asociarse con uno solo (un
compilador o un intérprete).
Ventajas y desventajas ante los
interpretes
Diferencias
Sin embargo, una vez que se ejecuta el programa, los servicios del compilador ya no son
necesarios, mientras que el intérprete continúa utilizando los recursos informáticos.

Compilador
•Ada.
•ALGOL. Algol 60. Algol 68. SMALL.
•BASIC.
•C. C++ Objective-C. C# (a bytecode)
•D.
•CLEO.
•COBOL.
•Cobra.
Estructura del compilador de tres etapas 
 
El front-end escanea la entrada y verifica la sintaxis y la semántica de acuerdo con un idioma de origen
específico.
 
El extremo medio realiza optimizaciones en el IR que son independientes de la arquitectura de la CPU a
la que se dirige.
 
 
El back-end  realiza la programación de instrucciones  , que reordena las instrucciones para mantener
ocupadas las unidades de ejecución paralelas llenando los intervalos de retraso
Gramatica libre de contexto
https://en.wikipedia.org/wiki/Context-free_grammar
Análisis sintáctico
Un analizador sintáctico es una de las partes de un compilador que transforma su entrada en un
árbol de derivación.

El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles),


que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un
analizador crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son
procesados por el analizador sintáctico para construir la estructura de datos, por ejemplo un
árbol de análisis o árboles de sintaxis abstracta.
el análisis sintáctico recibe unos tokens enviados por el léxico, esos token los convierte en un
árbol de análisis de derivación y los evalúa con las reglas de producción, que esta compuesta:
:Un conjunto de no terminales(V).
:Un conjunto de tokens que son símbolos termales
:P un conjunto de producción (la producción de una gramática especifica la forma en la cual los
no terminales pueden ser combinados , cada producción consiste en no terminales, A LOS
LLAMADOS LADOS IZQUIERDOS, y los Terminales van al lado derecho).
El símbolo S esta designado desde el comienzo de la producción...
Derivación
derivación está compuesta por unas
reglas de producción:
tenemos derivación por izquierda. y derecha.  
ejemplo: Hay que notar que el no terminal mas a la
E -> E + E izquierda siempre es procesado de primero.
E -> E * E La derivación mas a la derecha sería:
E -> id E -> E + E
La derivación más a la izquierda es: E -> E + E * E
E -> E * E E -> E + E * id
E -> E + E * E E -> E + id * id
E -> id + E * E E -> id + id * id
E -> id + id * E
E -> id + id * id
Cadena de entrada: “1 + 2 * 3”

•Todas las hojas son símbolos terminales


Tomaremos la derivación •Todos los nodos interiores son no terminales
mas a la izquierda de:  a +
b*c
Ambigüedad

Una gramática G  es ambigua cuando  tiene mas de un arbol de parseo (ya sea por la izquierda o
por la derecha) para al menos una cadena de entrada.
jemplo
E -> E * E
E -> E – E
E -> id
Para la cadena id + id – id, la gramática anterior tiene dos árboles de parseo diferentes.
Errores sintácticos al programar

Sintácticos . Los errores de sintaxis, o sintácticos, ocurren cuando el programador escribe código
que no va de acuerdo a las reglas de escritura del lenguaje de programación.
Como errores tipográficos, como por ejemplo la falta de puntos y comas, nombres de variables
incorrectas, falta de paréntesis, palabras claves mal escritas, etc.
Ejemplo:

Como podemos observar aparece subrayado la línea donde disponemos System con minúsculas como en
la línea que imprimimos la variable superficie con mayúsculas. Si modificamos y corregimos los dos errores
sintácticos podremos ejecutar nuestro programa.
Errores Semánticos
Los errores que puede detectar el analizador sintáctico son aquellos que violan las reglas de una
gramática independiente del contexto. Ya hemos mencionado que algunas de las características de
un lenguaje de programación no pueden enunciarse con reglas independientes del contexto, ya que
dependen de él; por ejemplo, la restricción de que los identificadores deben declararse
previamente. Por lo tanto, los principales errores semánticos son:

Conversiones de tipos no permitidas


int x;

x = 4.32;

También podría gustarte