Un compilador es un programa que
lee un programa escrito en un
LENGUAJE FUENTE y lo traduce a un
programa equivalente en un
LENGUAJE OBJETO puediendo ser el
lenguaje máquina de cualquier
computador entre un microprocesador
a un supercomputador.
Está compuesto de dos fases
ANÁLISIS: Divide al programa fuente en
sus elementos componenetes y crea una
respresentación intermedia, también se
determinan las operaciones que implica el
programa fuente y se registran en una
estructura jerárquica llamado árbo
sintáctico
Consta de 3 fases
1) ANÁLISIS LÉXICO, LINEAS O DE
EXPLORACIÓN: Lee un archivo fuente
de izquierda a derecha, caracter por
caracter, agrupándolos en palabras
(componentes léxicos o token).. Es la
única fase que tiene contacto con el
código del programa fuente
Lector de CARACTERES
que
componen LEXEMAS
y empata con un patrón
o COMPONENTE LÉXICO
2) ANÁLISIS SINTÁCTICO O JERÁRQUICO O
PARSER:: implica agrupar los componentes
léxicos del programa fuente en frases
utilizando REGLAS GRAMATICALES que el
compilador utiliza para sintetizar la salida que
se representan mediante un árbol de análisis
sintáctico utilizando REGLAS RECURSIVAS
donde cualquier identificador y número es una
expresión. Lo registro se guardan en una
TABLA DE SÍMBOLOS.
ÁRBOL SINTÁCTICO: Es una
representación compacta del árbol de
análisis sintáctico en el que los
operadores aparecen como lso nodos
interiores y los operandos como un
operador son los hijos dle nodo para
ese operador.
3) ANÁISIS SEMÁNTICO: Revisa el programa
fuente para tratar de encontrar errores
semánticos y reune la información sobre los
tipos para la fase posterior de la generación
de código, utilizando estructura jerárquica
determinada por la fase de análisis
sintáctico para identificar operadores y
operandos, comprobando que el significado de
las sentencia es correcto. Algo importante es
la VERIFICACIÓN DE TIPOS que analiza si
cada operador tienen operandos permitidos
por la especificación del lenguaje fuente.
genera ÁRBOL SINTÁCTICO ANOTADO
SÍNTESIS: Construye el programa objeto
deseado a partir de la representación
intermedia también optimiza el codigo y
genera el ejecutable en lenguaje objeto
Consta de 3 fases
4) GENERADOR DE CÓDIGO
INTERMEDIO: Generación de una
representación intermedia explícita
del programa fuente o como un
programa para una máquina
abstracta. Debe de tener dos
propiedades, 1) debe ser fácil de
producir y 2) fácil de traducir al
programa objeto. como por ejemplo
"código de tres direcciones"
genera CÓDIGO INTERMEDIO
5) OPTIMADOR DE CÓDIGO: Mejora el código
intermedio, de modo que resulte un código de
máquina más rápido de ejecutar, eliminando
código que sea redundante., con el fin de
mejorar el tiempo de ejecución del programa
objeto sin retardar demasiado la compilación.
genera CÓDIGO INTERMEDIO
OPTIMIZADO
6) GENERADOR DE CÓDIGO OBJETO: Generación
de código objeto que por lo general consiste en
código de máquina relocalizable o código
ensamblador., seleccionando las posiciones de
memoria de cada variable usada y después, se
traduce las instrucciones intermedias a una
secuencia de instrucciones de máquina que
ejecuta la misma tarea, donde algo
fundamental es la asignación de variables a
registros.
Presentes en las 6 fases
MANEJADOR DE ERRORES
CADA FASE PUEDE ENCONTRAR ERRORES, por lo
general las fases de análisis sintáctico y semántico por
lo general manejan todos los errores etectables . La
fase léxica puede detectar errores donde los caracteres
restantes de la entra no forman ningun componenete,
en la fase de análisis sintactica los errores de la
cadena de componenetes léxicos violan las reglas de
estructura. y en el semántico regista erroes de
construcciones y que no tengan significado para la
operación implicada.
ADMINISTRADOR DE LA TABLA DE SÍMBOLOS
Es una estructura de datos que contienne un registro
por cada identificador, con los campos para los
atributos del identifiicador, registra los identificadores
utilizados en el programa fuente y reune información
sobre los distintos atributos de cada identificador,
proporcionan información sobre la memoria asignada
a un identificar, su tipo, ámbitoy nombres de
procedimientos.