Anda di halaman 1dari 6

1.

7 Fases de un compilador
Conceptualmente, un compilador opera en fases, cada una de las cuales
transforma al programa fuente de una presentacin en otra. En la figura se
muestra una descomposicin tpica de un compilador. En la prctica, se pueden
agrupar algunas fases, y las representaciones intermedias entre las fases
agrupadas no necesitan ser construdas explcitamente.






















Analizador semantico
Analizador lxico
Generador de cdigo
intermedio
Analizador sintetico
Generador de cdigo
Optimador de cdigo
Manejador de errores Administrador de la
tabla de simbolos
Programa fuente
Programa objeto
Administracin de la tabla de simbolos.
Una funcin especial de un compilador es registrar los identificadores utilizados en el
programa fuente y reunir informacion sobre los distintos atributos de cada indentificador.
Estos atributos pueden proporcionar informacin sobre la memoria asignada a un
identificador, su tipo, su ambito (la parte del programa donde tiene validez) y, en el caso
de nombres de procedimientos, cosas como el numero y tipos de sus argumento.
Deteccin e informacin de errores.
Cada fase puede encontrar errores. Sin embargo, despues de detectar un error, cada fase
debe de tratar de alguna forma ese error, para poder continuar la compilacin,
permitiendo la deteccin de ms errores en el programa fuente. Un compilador que se
detiene cuando encuentra el primer error, no resulta til como debiera.
Generacin de codigo intermedio.
Despus de los anlisis sintctico y semntico , algunos compiladores generan una
representacin intermedia explcita del programa fuente. Se puede considerar esta
representacin intermedia como un programa para una mquina abstracta. Esta
represenatacin intermedia debe de tener dos propiedades importantes; debe ser fcil de
producir y fcil de traducir al programa objeto.
Optimizacin de cdigo.
La fase de optimizacin de cdigo trata de mejorar el cdigo intermedio, de modo que
resulte un cdigo de mquina ms rapido de ejecutar.
Hay mucha variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos
compiladores. En los que hacen mucha optimizacin, llamados compiladores
optimizadores, una parte significativa del tiempo del compilador se ocupa en esta fase.
Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de
ejecucin del programa objeto sin retardar demasiado la compilacin.
Generacin de cdigo.
La fase final de un compilador es la generacin de cdigo objeto, que por lo general
consiste en cdigo de mquina relocalizable o cdigo emsamblador. Las posiciones de
memoria se seleccionan para cada una de las variables usadas por el programa. Despus
cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de
mquina que ejecuta la misma tarea. Un aspecto decisivo es la asignacin de variables a
registros.


Sacar copias de la pgina de la 10 a la 15
1.1 Alfabeto.
Un alfabeto es un conjunto de smbolos finito y no vaco. Convencionalmente,
utilizamos el smbolo para designar un alfabeto. Entre los alfabetos ms
comunes se incluyen los siguientes:

= {0,1}, el alfabeto binario.
= {a,b, . . . , z}, el conjunto de todas las letras minsculas.
El conjunto de todos los caracteres ASCII o el conjunto de todos los
caracteres ASCII imprimibles.

1.2 Cadenas.

Una cadena de caracteres (que tambin se denomina en ocasiones palabra) es
una secuencia finita de smbolos
seleccionados de algn alfabeto. Por ejemplo, 01101 es una cadena del alfabeto
{0,1}. La cadena 111 es otra cadena de dicho alfabeto.

La cadena vaca
La cadena vaca es aquella cadena que presenta cero apariciones de smbolos.
Esta cadena, designada por , es una cadena que puede construirse en cualquier
alfabeto

Longitud de una cadena

Suele ser til clasificar las cadenas por su longitud, es decir, el nmero de
posiciones ocupadas por smbolos
dentro de la cadena. Por ejemplo, 01101 tiene una longitud de 5. Es habitual decir
que la longitud de una cadena es igual al nmero de smbolos que contiene; esta
proposicin est aceptada coloquialmente, sin embargo, no es estrictamente
correcta. As, en la cadena 01101 slo hay dos smbolos, 0 y 1, aunque tiene cinco
posiciones para los mismos y su longitus es igual a 5. Sin embargo, generalmente
podremos utilizar la expresin nmero de smbolos cuando realmente a lo que se
est haciendo referencia es al nmero de posiciones. La notacin estndar para
indicar la longitud de una cadena w es |w|. Por ejemplo, |011| = 3 y | | = 0.


1.3 Lenguajes.

Un conjunto de cadenas, todas ellas seleccionadas de un , donde es un
determinado alfabeto se denomina lenguaje. La eleccin del trmino lenguaje
puede parecer extraa. Sin embargo, los lenguajes habituales pueden
interpretarse como conjuntos de cadenas.Un ejemplo sera el ingls, donde la
coleccin de las palabras correctas inglesas es un conjunto de cadenas del
alfabeto que consta de todas las letras. Otro ejemplo es el lenguaje C, o cualquier
otro lenguaje de programacin, donde los programas correctos son un
subconjunto de las posibles cadenas que pueden formarse a partir del alfabeto del
lenguaje. Este alfabeto es un subconjunto de los caracteres ASCII. El alfabeto en
concreto puede diferir ligeramente entre diferentes lenguajes de programacin,
aunque generalmente incluye las letras maysculas y minsculas, los dgitos, los
caracteres de puntuacin y los smbolos matemticos.

1.4 Tipos de lenguajes.

Expresiones regulares

Ahora vamos a desviar nuestra atencin de las descripciones tipo mquina de los
lenguajes, autmatas finitos deterministas y no deterministas, a un tipo de
expresin algebraica: la expresin regular. Comprobaremos que las expresiones
regulares pueden definir de forma exacta los mismos lenguajes que describen los
distintos tipos de autmatas: los lenguajes regulares. Sin embargo, las
expresiones regulares ofrecen algo que los autmatas no proporcionan: una forma
declarativa para expresar las cadenas que deseamos aceptar.
Aunque las expresiones regulares describen los lenguajes de manera
completamente diferente a como lo hacen los autmatas finitos, ambas notaciones
representan exactamente el mismo conjunto de lenguajes, que hemos
denominado lenguajes regulares.
Para demostrar que las expresiones regulares definen la misma clase, tenemos
que probar que:
1. Todo lenguaje definido mediante uno de estos autmatas tambin se define
mediante una expresin regular.
Para demostrar esto, podemos suponer que el lenguaje es aceptado por algn
AFD.
2. Todo lenguaje definido por una expresin regular puede definirse mediante uno
de estos autmatas. Para esta parte de la demostracin, lo ms sencillo es probar
que existe un AFN con transiciones- que acepta el mismo lenguaje.



1.5 Herramientas computacionales ligadas con lenguajes




























1.6 Estructura del traductor.

Un traductor divide su labor en dos etapas: una que analiza la entrada y genera
estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras.
Por tanto, el esquema de un traductor pasa de ser el de la figura 1.1, a ser el de la
figura 1.7. Bsicamente los objetivos de la etapa de anlisis son: a) controlar la
correccin del programa fuente, y b) generar las estructuras necesarias para
comenzar la etapa de sntesis.
Para llevar esto a cabo, la etapa de anlisis consta de las siguientes fases: O
Anlisis lexicogrfico. Divide el programa fuente en los componentes bsicos del
lenguaje a compilar. Cada componente bsico es una subsecuencia de caracteres
del programa fuente, y pertenece a una categora gramatical: nmeros,
identificadores de usuario (variables, constantes, tipos, nombres de
procedimientos, ...), palabras reservadas, signos de puntuacin, etc.

Anda mungkin juga menyukai