miércoles, 18 de mayo de 2011

UNIDAD I: CONCEPTOS BASICOS DE COMPILADORES




UNIDAD 1
"CONCEPTOS BASICOS” 

 
1.1Lenguaje de programación
 
Notación formal para describir algoritmos o funciones que serán
ejecutadas por un ordenador.

1.1.1Clasificacion de los lenguajes de programacion
Según su grado de independencia de la máquina (lenguaje máquina, ensamblador, de medio nivel, de alto nivel, orientados a problemas concretos.

Según la forma de sus instrucciones (Lenguajes imperativos o procedimentales, declarativos, concurrentes, orientados a objetos.

Por generaciones (1a generación, 2a generación, 3a generación, 4a generación, 5a generación, generación orientada a objetos, visual, internet).

1.1.2Ventajas de los Lenguajes de Alto Nivel
 
  • No se necesita conocer la forma en que se colocan los datos en memoria.
  •   Gran variedad de estructuras de control.
  •  Más faciles de aprender.
  • Mayor capacidad de la creación de estructura de datos.
  • Los programas se depúran más facilmente que los escritos en lenguaje maquina o ensamblador.
  • Relativamente independientes de la maquina.

 
1.2Procesadores de lenguaje
Para que un ordenador comprenda un lenguaje, necesita procesarse, por medio de un procesador de lenguaje como traductores, compiladores, desensambladores, que realizan ciertas operaciones con los lenguajes. 

 
Traductor
LenguajeFuente--->Lenguaje interprete---->Lenguaje Objeto
Ensamblador 
Lenguaje ensamblador  -Ensamblador->    Lenguaje maquina
Compilador
Lenguajede alto nivel  --Compilador->   Lenguaje maquina




1.3PROCESO DE COMPILACIÓN MONTAJE Y EJECUCIÓN
 
Tiempo de Compilación. Tiempo que se necesita para traducir un lenguaje de alto nivel a lenguaje de bajo nivel.
Tiempo de ejecución. Tiempo que tarda en ejecutarse un programa objeto.

 
Depuradores 
Herrramientas que permiten encontrar y corregir errores de los programas (suelen ir ligados a los compiladores)

Analizadores de rendimiento
Herramientas que permiten examinar el comportamiento de los programas en tiempo de ejecución, permitiendo comprobar qué zonas de código trabajan eficientemente y cuáles deberían ser revisadas por su bajo rendimiento.
Optimizadores de código


Herramientas independientes o están incluidas en los compiladores  que optimizan la velocidad de ejecución, tamaño de código ejecutable, eliminación de código muerto o no utilizado, funciones no utilizadas, etc.
Compresores 
Herramienta habitual para reducir el tamaño de archivos, (ficheros ejecutables). WIN ZIP

Preprocesadores  

Caso especial de traductor.  Traduce un lenguaje de alto nivel a “otro”, cuando el primero no puede pasar a lenguaje máquina directamente.  Procesan un texto fuente modificándolo en cierta forma previamente a la compilación.

Formateadores

Establen cierto “formato”. De muchos tipos y diferentes fines: formatear texto, formatear ecuaciones, formatear programas  (resaltan la sintaxis a su estructura para lo cual es necesario conocer la sintaxis del programa a formatear).  Conversores de formato. 
Editores 
Los editores de lenguajes de programación con sintaxis resaltada por medio de colores o tipos de letra permiten llamar la atención del programador en el momento mismo que está escribiendo el programa, sin necesidad de compilar, dado que llevan incorporada la sintaxis del lenguaje.

1.4Fases de un compilador
 
  Para cada lenguaje de programación se requiere un compilador separado.
 El compilador traduce todo el programa antes de ejecutarlo.
 Los programas compilados se ejecutan más rápido que los interpretados, debido a que han sido completamente traducidos a lenguaje máquina.
 Informa al usuario de la presencia de errores en el programa fuente.
 Poseen un editor integrado con un sistema de coloreado para los comandos, funciones, variables y demás partes de un programa.
 
1.4.1Etapa  Inicial Compilación
  1.4.1.1Análisis lineal o léxico
En esta etapa la cadena de caracteres que constituye el programa fuente se lee
de izquierda a derecha (de arriba hacia abajo) y se agrupa en componentes léxicos que son secuencias de caracteres que tienen un significado colectivo.

NOTA: Los espacios en blanco y comentarios se eliminan durante el análisis léxico.

1.4.1.2Análisis jerárquico 
 
En esta etapa los caracteres o componentes léxicos se agrupan jerárquicamente en colecciones anidadas con un significado colectivo. La representación gráfica del programa fuente se hace mediante un árbol de análisis sintáctico (jerarquías).

1.4.1.3Análisis semántico

 En esta etapa se revisa el programa fuente para tratar de encontrar errores semánticos y se reúne la información de los tipos para la fase posterior de generación de código. Utiliza la estructura jerárquica.

Verificador de tipos.- El compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.


1.4.1.4 Generación de código intermedio. 
 
Algunos compiladores generan una representación intermedia explícita del programa fuente. El código intermedio debe cumplir con dos propiedades importantes: ser fácil de producir y fácil de traducir al programa objeto.

 
1.4.2 Etapa  Final Compilación 
1.4.2.1 Optimización de código
 
Trata de mejorar el código intermedio de modo que resulte un código máquina más fácil de ejecutar.

1.4.2.2 Generación de código Fase final de un compilador.

 Por lo general, consiste en código máquina o ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Después, cada una de las instrucciones intermedias se traducen a una secuencia de instrucciones de máquina que ejecutan la misma tarea.
1.4.3Herramientas de  Compilación 
1.4.3.1 Administrador de la Tabla de Símbolos

Una función esencial del compilador es registrar los identificadores utilizados en el programa fuente y reunir la información sobre los atributos de cada identificador. Información que proporcionan los atributos: memoria asignada, tipo, ámbito (locales, globales). 
 
1.4.3.2Manejador de Errores 

Cada fase del compilador puede encontrar errores. Después de detectar un error, cada fase debe tratar de alguna forma ese error para poder continuar la compilación, permitiendo la detección de más errores en el programa fuente.
1.5Jerarquías de Chomsky
 

1.6Formas de Backus Naur (Notación BNF) 
La notación BNF o gramática independiente de contexto permite describir la sintaxis de las construcciones de los lenguajes de programación, utilizando los siguientes meta símbolos:
< > Encierra conceptos definidos o por definir (se utiliza para los no terminales en una gramática).

 : : = Para definir o indicar equivalencia

 | Separa las distintas alternativas “ “ Indica que el símbolo entre comillas es un carácter que forma parte de la sintaxis del lenguaje.

 ( ) Para agrupaciones
Por ejemplo, para definir un identificador (nombre que se utiliza para identificar una variable) en BNF:
<identificador> ::= <letra> | <letra> <letra> | <letra> <digito>
 <letra> ::= a | b | c | d | e | . . . | z
 <digito> ::= 0 | 1 | 2 | 3 | 4 | . . . | 9
En este caso, a,b,c,d,e,...,z y 0,1,2,3,...,9 son terminales y el resto no terminales.

No hay comentarios.:

Publicar un comentario

Vistas a la página totales