Sunteți pe pagina 1din 3

Fases del compilador

Un compilador está formado por dos procesos análisis y síntesis.

1. Análisis: El cual se trata de la escritura correcta del código fuente. Esta a su vez
comprende varias fases:

· Análisis léxico: Es la primera de un compilador esta fase es la encargada de leer el


código fuente y separarlo en lotes para poder ser leído por el análisis sintáctico, Lee la
secuencia de caracteres de izquierda a derecha del programa fuente y agrupa las
secuencias de caracteres en unidades con significado propio. Tiene las palabras
claves, identificadores, operadores, constantes numéricas, signos de puntuación como
separadores de sentencias, llaves, paréntesis, entre otros. Son clasificaciones de
componentes léxicos

Objetivo principal de Análisis léxico: Es leer el flujo de caracteres de entrada y


transformarlo en una secuencia de componentes léxicos que utilizara el analizador
sintáctico, es decir, leer el programa fuente, remueve espacios en blanco, tabulaciones,
saltos en línea.

Proceso que lleva acabo el analizador léxico: Toma el programa fuente de los pre-
procesadores que está escrito en forma de declaraciones. Este proceso entonces desglosa
en una serie de tokens, deshaciéndose de todos los comentarios en el código y los
espacios en blanco. Si el analizador léxico encuentra un token que no es válido entonces
se genera un error. El analizador léxico trabaja muy de cerca con el analizador
sintáctico, donde se leen caracteres de entrada a través de código fuente, revisamos que
los tokens sean todos validos y pasamos los lexemas (elementos relacionales) al
analizador sintáctico cuando este lo requiera.

· Análisis sintáctico: Segunda fase del compilador, esta fase evalúa los lotes de código
con el fin de que este cumpla con los requerimientos definidos por el compilador,
Determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje y
obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las
construcciones de alto nivel del lenguaje.

Objetivo principal de Análisis Sintáctico: Es chequear el texto de entrada en base a


una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el
árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador
sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de
tokens suministrada por el analizador léxico.

Proceso que lleva acabo el analizador Sintáctico: Toma el token de análisis léxico
como entrada y genera un árbol analizar (o árbol de sintaxis). En esta fase, token
arreglos se contrastan con el código fuente gramática, es decir, el analizador comprueba
si la expresión de los tokens es sintácticamente correcta.
· Análisis semántico: En esta fase se busca establecer que el código fuente cumpla con
la semántica solicitada por el compilador, que el código este correctamente escrito para
poder ser interpretado. Utiliza el árbol sintáctico y la información en la tabla de
símbolos para comprobar la consistencia semántica del programa fuente con la
definición del lenguaje. También recopila información sobre el tipo y la guarda, ya sea
en el árbol sintáctico o en la tabla de símbolos, para usarla más tarde durante la
generación de código intermedio.

Objetivo principal de Análisis Semántico: Su objetivo Principal es la descomposición


y transformación de las entradas en un formato utilizable para su posterior
procesamiento. Se analiza una cadena de instrucciones en un lenguaje de programación
y luego se descompone en sus componentes individuales.

Proceso que lleva acabo el analizador Semántico: Determina que acciones pueden
realizar los operadores aritméticos (+,*) sobre las variables A, B, C y D. Así cuando el
analizador sintáctico reconoce un operador, tal como " + " o " * ", llama a una rutina
semántica que especifica la acción que puede llevar a cabo. Esta rutina puede
comprobar que los dos operandos han sido declarados, y que tienen el mismo tipo.
También puede comprobar si a los operandos se les ha asignado previamente algún
valor y tiene su proceso de verificación, consultar la tabla de símbolos para encontrar
información de un identificador y la información ligada a este.

Generación de código intermedio:

Optimización de código independiente: Es el conjunto de fases de un compilador que


transforman un fragmento de código en otro fragmento con un comportamiento
equivalente y que se ejecuta de forma más eficiente, es decir, usando menos recursos
de cálculo como memoria o tiempo de ejecución. Es fundamental garantizar que el
código no será menos eficiente que antes de optimizarlo. También puede realizarse
durante la propia generación, ya sea intercalado entre el análisis semántico y la
generación de código (se optimizan las cuádruplas) o situado después de ésta (se
optimiza a posterior el código generado).

Objetivo principal de la optimización de código independiente: Su objetivo es


mejorar el código intermedio, de manera que se produzca un mejor código destino. Por
lo general, mejor significa más rápido, pero pueden lograrse otros objetivos, como un
código más corto, o un código de destino que consuma menos poder.
Proceso que lleva acabo la optimización del código intermedio: En esta
optimización, el compilador toma en el código intermedio y transforma una parte del
código que no implique un registros de la CPU y/o ubicaciones de memoria absoluta

S-ar putea să vă placă și