Está en la página 1de 13

UNIVERSIDAD TÉCNICA “LUIS VARGAS TORRES”

Temas: SEDE SANTO DOMINGO


Integrantes:
● Análisis semántico ● Castillo Jamileth
● Verificación de tipos ● Granja Carolina
● Generación de código intermedio ● Guerrero Alanis
● Generacion de codigo final (objeto) ● Mero Genesis

GRUPO
#8
Análisis
Semántico
Utiliza la estructura jerárquica determinada
por la fase de análisis sintáctico

La fase de análisis semántico


revisa el programa fuente para
tratar de encontrar errores
semánticos y reúne la
información
Un componente importante del análisis
semántico es la verificación de tipos
Errores Funciones
semánticos Principales
● Identificar cada tipo de instrucción y sus
componentes
● No coinciden los tipos
● Completar la Tabla de Símbolos
● Variable no declarada
● Realizar distintas comprobaciones y
● Identificador reservado uso indebido.
validaciones:
● Declaración de variables múltiples en
un ámbito.
● Acceder a una variable fuera de
alcance.
Verificación de
Tipos
● Es el proceso mediante el cual se verifican y
aplican las restricciones de cada tipo
El compilador verifica si cada operador tiene Tomando el lenguaje C como ejemplo, el
operandos permitidos por la especificación del segmento de código al que está asociada la
lenguaje fuente. expresión de tipos integer es aquella en que
aparece la palabra reservada

Expresiones de tipos ● Constructores de tipos: Permiten formar


tipos complejos a partir de otros más
Tipos simples simples.
● TipoInteger
● Real
● Matrices
● Char
● Productos
● Boolean
● Registros
● Void
● Punteros
● Error
● Funciones
Generación de Código Intermedio
EL código fuente puede ser traducido en su código de la máquina destino, entonces, ¿por
qué hemos de traducir el código fuente en un código intermedio que luego se traduce en su
código de destino? Vamos a ver las razones por las que necesitamos un código intermedio.
1. Si un compilador traduce el idioma de origen a su ordenador de destino sin tener la
opción de generar código intermedio, a continuación, en cada nueva máquina, una
nativa del compilador completo es necesario.
2. Código Intermedio elimina la necesidad de un nuevo compilador completo para cada
máquina de la sección de análisis mismo de todos los compiladores.
3. La segunda parte del compilador, síntesis, se modifica de acuerdo a la máquina de
destino.
4. Es más fácil de aplicar las modificaciones del código fuente para mejorar rendimiento
del código mediante la aplicación de técnicas de optimización código el código
intermedio.
Introduction
¡Representación intermedia
¡Códigos intermedios puede ser
representado en una variedad
de formas y tienen sus propios
beneficios.
¡Alto nivel IR - Alto nivel de representación de código intermedio está
muy cerca de la lengua de origen. Pueden ser fácilmente generados
desde el código fuente y podemos aplicar fácilmente modificaciones
de código para mejorar el rendimiento. Pero para optimización de la
máquina destino, es menos preferido.
¡Bajo Nivel IR - Este es cerca de la máquina de destino, lo que lo
hace adecuado para registro y asignación de memoria, un conjunto
de instrucciones selección, etc. es bueno para optimizaciones
dependientes de la máquina.
—Someone Famous
¡
Generación de código
final (objeto)

La fase final de un compilador es la


generación de código objeto, que
por lo general consiste en código de
máquina relocalizable o código
ensamblador
Aspectos
generales

la correspondencia entre los nombres del


programa fuente con direcciones de
objetos de datos en la memoria durante la
ejecución la realiza la etapa inicial en
cooperación con el generador de código.

Administración de
memoria:
Selección de instrucciones:
es importante que el conjunto de instrucciones sea uniforme y completo. Las velocidades de las instrucciones es un factor importante

Ejemplo:

código de tres direcciones de:

x := y + z

MOV y, R0 /* cargar y en el registro R0 */

ADD z, R0 /* suma z a R0 */

MOV R0, x /* almacenar R0 en x */


Asignación ● Durante la asignación de los registros: se
selecciona el conjunto de variables que
de registros: residirá en los registros en un momento del
programa.

● Durante la fase posterior de asignación a los


registros, se escoge el registro específico en
Las instrucciones que implican operandos en el que residirá una variable.
registros son generalmente más rápidas que
las de los operandos en memoria.
Elección del orden de
evaluación:

el orden en que se realizan los cálculos puede variar la eficiencia del código objeto

También podría gustarte