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


Mostrando las entradas con la etiqueta Modelos de Programación. Mostrar todas las entradas

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.

Lenguaje de programación
Notación formal para expresar algoritmos.

Compilador
Herramienta que permite construir programas.
Facilidades:
Edit (digitar programas)
Compile (traducir)
Interprete
Debuging (depurar)

Código máquina
Instrucciones en formato de 1 y 0.

Lenguaje ensamblador
Notación para representar programas en lenguaje máquina.

Lenguaje de bajo nivel
Instrucciones en lenguaje máquina (1/ 0)

Lenguaje de alto nivel
Instrucciones similares para expresar algoritmos.
Soporta expresiones, tipos de datos, declaraciones, abstracciones, etc.

Ver todo el resumen >>>

Syntax
Reglas para construir programas, define los símbolos.
Contextual constraints: Lo que se puede o no hacer.
: Reglas que indican si las frases están bien construidas.
Scope rules: Si la variable puede ser usada en un lugar determinado.
Binding ocurrence: momento en que se declara una variable.
Static binding: tipo debe ser declarado antes de usarse.
Dynamic binding: usa la variable en cualquier momento.
Aplied ocurrence: momento en que se utiliza una variable.
Typed rules: Si una expresión esta utilizando los tipos correctos.
Static typed: variable puede definirse sin ejecutar el programa.
Dynamic typed: variable se define al ejecutar el programa.

Semantics
Significado de las instrucciones, programas.

Context- free grammar
Especifica formalmente la sintaxis de un programa
Terminal symbols (reservados)
Símbolos usados para construir el programa (“<”, “while”, “(”, “void”) Non terminal symbols Clase particular de frases en un lenguaje Programa, comandos, expresiones, declaraciones. Start symbol Non terminal symbol que representa la clase principal en un lenguaje. Production rules Define cómo las frases se componen utilizando terminal symbols y subfrases.

Notación BNF (Backus- Naur Form)

Se utiliza para expresar production rules (N:=a)

Syntax trees
Muestran cómo se construyen las frases en un lenguaje.
Concrete Syntax tree
Especifica la sintaxis de una frase sin preocuparse por la semántica.
Termina en: 1- Terminal nodes, 2- Identificador, 3- Integer literal.
Abstract Syntax tree
Para entender más fácilmente la semántica, simplifica el árbol.

Compilación
Proceso de traducir un lenguaje de alto nivel a uno de bajo nivel.
1- Análisis sintáctico
Código fuente se analiza para determinar si se ajusta a la sintaxis del lenguaje.
Resultado= AST.
Scanning: El programa se transforma en tokens.
Parsing: El programa se analiza para determinar la estructura de las frases.
Representación: Montaje del árbol.
2- Análisis contextual
Revisa las restricciones de contexto.
Resultado= Decorated AST.
3- Generación de código
La parte más complicada es la declaración y uso de los identificadores

Compilador de 1 fase
Las tres fases anteriores se realizan al mismo tiempo.
Son rápidos pero más complejos.

Compilador multifase
Las tres fases anteriores se realizan por aparte.
Son más lentos pero de fácil mantenimiento.


Mini triángulo
Clase Compilador
Lleva a cabo todo el proceso, internamente usa una clase diferente para cada fase.

Clase Program
Representa el AST del programa, el resultado de cada fase se almacena en este objeto.

Clase Parser
Realiza el análisis sintáctico, internamente produce el AST.

Clase Checker
Toma el AST y revisa los contextual constraints.
Modifica el AST para agregar datos adicionales.
Produce el Decorated AST.

Clase Encoder
Genera el código una vez que ha sido verificado.

Tokens
Cada uno de los símbolos del código fuente.
Kind: Tipo (int type, left paren, op-less than, etc)
Spelling: “<”, “(”. Expresiones regulares
Reglas de cómo generar ciertas reglas de caracteres.
Se usa para simplificar la gramática de un lenguaje.

Suscribirse a: Entradas (Atom)