El blog de los Ingenieros en TI

Código Fuente, links, tareas, proyectos, exámenes....qué mas le vas a pedir a la vida?

Acerca de:

El espacio para compartir material que necesitas en la carrera de Ingeniería de Sistemas y en tu vida profesional.

El objetivo del blog es ayudarte como estudiante a prepararte mejor para los exámenes, proyectos y demás situaciones que enfrentes durante la carrera. Asi mismo es una herramienta de consulta para los profesionales en TI.

Material y sugerencias: ingenierosTI@gmail.com


Compilación: Proceso de traducir un programa en un lenguaje de alto nivel a otro de bajo nivel.

Fases del Compilador

Análisis Sintático: Scanning Parsing AST

Análisis Contextual: Identificación Verificación de tipos Generación del DAST

Identificación Es la primera tarea del contextual analyzer.
* Asocia applied ocurrence con la declaración correspondiente.

println (c);
a= a + 3

* Debe verificar en que parte del programa se puede utilizar una variable de acuerdo a las reglas de alcance o reglas de tipo.

Ver todo el resumen >>>
Reglas de alcance

* Cada declaración tiene un alcance que indica el área donde un identificador puede ser usado.
* Un bloque es cualquier área de un programa que delimita el alcance de una declaración. (llaves, paréntesis, corchetes, etc.).

Estructura de bloques
Indican si los bloques pueden ser:

* Monolíticos todas las declaraciones son globales.
* Plano no pueden haber bloques dentro de otros.
* Anidados pueden haber bloques dentro de otros.
* Ningún identificador puede ser declarado más de una vez en el mismo bloque. Puede ser declarado en diferentes bloques.
* Se utiliza el scope o el nivel de mayor.
* Nivel 0, Nivel 1 y Nivel 2

Tabla de identificación:
Estructura de datos (en memoria) que contiene los identificadores del programa con su respectivo número de alcance.

* Operaciones básicas:
* Crea tabla vacía
* Agrega un identificador nuevo
* Asocia cada identificador con el número de alcance.
* Es parte del AST decorado.
* Método enter agrega nuevo identificador
* Método retrieve la declaración de un identificar.
* Método openScope inicializa el bloque.
* Método closeScope finaliza un bloque

Implementación

Key = índice >Tiene un índice
Value = valor >Comienza en el nivel 0
La llave es el nombre del identificador

Verificación de tipos (Hash – vector)

o Type checking: verifica que no hayan errores de tipo.
o Statically typed: propiedad básica de un lenguaje, detecta errores de tipo sin ejecutar el programa (estática).
o Sólo aplica a expresiones y operaciones que involucran expresiones.

Clase type
o Se utiliza para representar los tipos de una expresión.
o Implementa el método para determinar si dos instancias son equivalentes (boolean o int).

Algoritmo

o Id entifica mediante una liga o puntero en cada applied ocurrence y hace la declaración de las variables.
o Verifica el tipo que representa un objeto de la clase type.
o Modifica el AST Decorado.

Generación del AST Decorado

o Genera la tabla de identificadores.
o Verifica los tipos de expresiones.
o Valida las expresiones y subexpresiones

Análisis Contextual

Implementación
* La clase Checker será el encargada de realizar el análisis contextual
* Debe recibir el árbol AST generado por el parser.
* El árbol debe ser recorrido para validar identificadores.
* Interactúan el scanner y parser.

Cambios requeridos en los nodos del árbol
* Los nodos representan expresiones.
* El nodo VNames contiene el tipo de la variable y indicador para saber si es variable o constante.
* El nodo del AST que representa identificadores (puntero).

Recorrido del árbol para decorarlo
1. El checker (visitante) pasa primero por el nodo Program.
2. El nodo Program llama un método y se pasa a si mismo como parámetro.
3. Dentro el método visitProgram, el visitante puede realizar operaciones.
4. La Operación que realiza el método visitProgram es pasar el visitante a sus nodos hijos.
5. LetCommand llama el método y se pasa a si mismo como parámetro.
6. Dentro el método VisitLetCommand, el visitante puede realizar operaciones.
7. La Operación que realiza el método VisitLetCommand, es pasar el visitante a sus nodos hijos.

Patrón es un diseño utilizado para separar los algoritmos de la estructura que se utiliza.

0 comentarios

Publicar un comentario

Suscribirse a: Comentarios de la entrada (Atom)