Ejemplo Práctico de un Compilador Pequeño

Slides:



Advertisements
Presentaciones similares
ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico.
Advertisements

INSTITUTO TECNOLÓGICO DE MINATITLÁN
Filminas Segunda semana
Clasificación de los compiladores
Compiladores e intérpretes
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico VI
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Teoría de Autómatas y Compiladores
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
Procesadores de Lenguaje
Prototipo de compilador didáctico del lenguaje LC99
Analizadores Sintácticos Descendentes Predictivos
Teoría de lenguajes y compiladores
Procesadores de Lenguajes I
Variable Una variable es un nombre que se asocia con una porción de la memoria del ordenador, en la que se guarda el valor asignado a dicha variable. Expresión.
Metodología de la Programación
Programación 1 Introducción
Traducción dirigida por la Sintaxis
3. INTRODUCCIÓN A LA PROGRAMACIÓN
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
Tema 3. Optimización de Código
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Tema 6. Conceptos básicos de programación
Teoría de lenguajes y compiladores
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
M.C. Meliza Contreras González
Instituto Tecnologico de Durango Programacion de Sistemas II
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
FUNDAMENTOS DE PROGRAMACION
LENGUAJES DE PROGRAMACIÓN
ANALISIS SINTACTICO Parte I
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
ESTRUCTURA DE DATOS ESD-243
FORMA INTERNA DE REPRESENTAR
FUNDAMENTOS DE PROGRAMACIÓN ISC. GABRIEL ZEPEDA MARTÍNEZ EST. ABRAHAM F. MACHUCA VAZQUEZ.
Teoría de lenguajes y compiladores
Procesadores de Lenguajes
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Programación de Sistemas
Compiladores e intérpretes
PENSAMIENTO ANALÍTICO SISTÉMICO DAISY KATERINE RODRÍGUEZ DURÁN
Análisis Léxico Área Software de Base.

INFORMATICA VII (Programación e implementación de sistemas)
Ejemplo Práctico de un compilador pequeño Lenguaje Fuente Análisis Léxico Análisis Sintáctico Generador de código objeto Lenguaje Objeto.
TEMA 2: DIAGRAMAS DE FLUJO
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Términos algoritmo diseñar algoritmo implementar algoritmo
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Teoría de lenguajes y compiladores
TEMA1:Introducción 1 1. Programación 2. Lenguajes de Programación 3. Ordenador.
ESCUELA NORMAL “PROF. DARÍO RODRÍGUEZ CRUZ” Licenciatura en educación preescolar Alumnas: *Mayra * Monserrat * Idalia *Cinthia Curso: las TIC en la educación.
Prof. Flor Narciso Departamento de Computación
PRINCIPIOS DE PROGRAMACIÓN
INTRODUCCIÓN LI & MSC OSCAR RAMÍREZ CORTÉS U NIVERSIDAD DE LA H UASTECA V ERACRUZANA L ENGUAJES DE P ROGRAMACIÓN.
El proceso de compilación
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
Lic. Carla Aguirre Montalvo
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación Java y Desarrollo de Aplicaciones Modulo 1 Arquitectura de ordenadores Tema 3 Programas.
Programación de Sistemas
Conceptos y Lenguaje Imperativo
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

Ejemplo Práctico de un Compilador Pequeño Características: Programa Principal Análisis Sintáctico Generador Código Objeto Lenguaje Fuente Análisis Léxico Subrutina: Análisis Léxico Análisis Sintáctico Pascal Asignar Pila Generador de Código Objeto Lenguaje Objeto

Gramática Independiente del Contexto Sintaxis Lenguaje Fuente Instrucciones de Asignación Expresiones Aritméticas: + , - , ( , ) A=3 + B + ( 8 – Z ); Expresada a través de la Gramática Gramática Independiente del Contexto Construcción de Árboles Sintácticos

Gramática del lenguaje Compuesta por reglas Línea formada por Izquierda: Símbolo No Terminal y ::= Derecha: Símbolos Terminales y No Terminales En nuestro caso: ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9

Sentencia = Secuencia de símbolos terminales Árbol Sintáctico Sentencia = Secuencia de símbolos terminales Formado a partir de la Gramática Estructura según el árbol ASG VAR = EXP ; REX TER CTE 2 (Vacío) A

Dada la Sentencia y la Gramática Árbol Sintáctico Dada la Sentencia y la Gramática Análisis Sintáctico describe el árbol correspondiente a dicha sentencia Derivación Método Descendente Parte del símbolo principal hasta llegar a la sentencia 2 Métodos Reducción Método Ascendente Parte de la sentencia hasta llegar al símbolo principal

Implementación Análisis Sintáctico 1 Subrutina para cada símbolo No Terminal Análisis Léxico Lee secuencias de caracteres de los símbolos terminales de la Gramática Todos los símbolos terminales están formados por 1 carácter Cuando no sea un blanco, será el próximo carácter Consideración: Convenio para conocer qué subrutina del análisis sintáctico llama al léxico y en qué punto Solución: Antes de llamar a la subrutina ya habremos leído el nuevo carácter a través del léxico Llamada al léxico antes y después de la subrutina

Coloca en la cima de la pila la dirección de la variable dada Lenguaje Máquina Objeto Lenguaje tipo ensamblador que pertenece a una hipotética máquina de pila PUSHC <cte> Coloca en la cima de la pila la cte dada top:= top+1; pila[top]:=cte PUSHA <dir.var> Coloca en la cima de la pila la dirección de la variable dada top:= top+1; pila[top]:=dir.var. LOAD Asume que el valor de la cima de la pila es una dirección. Se extrae de la pila y se pone el valor ubicado en la dirección pila[top]:=mem[pila[top]] STORE Asume que la cima es un valor y la subcima una dirección. Almacena el valor en la dirección. Disminuye en 2 la pila. mem[pila[top-1]]:=pila[top] top:=top-2

Lenguaje Máquina Objeto NEG Cambia el signo del valor situado en la cima de la pila pila[top]:= - pila[top] ADD Opera en los dos elementos de la cima, extrayéndolos y dejando el resultado de la suma. Disminuye en 1 la pila pila[top-1]:=pila[top]+pila[top-1] top:=top-1 Reservamos una zona de memoria para almacenar todas las variables pila programa variables

Todo programa terminará siempre con la instrucción STORE Esquema de traducción PUSHA A PUSHC 2 STORE A=2; PUSHA dir. Var. ______________ STORE Todo programa terminará siempre con la instrucción STORE Instrucciones que evaluarán la expresión VAR EXP ASG PUSHA dir.var. Bloque STORE

Esquema de traducción Expresión: 2+3 PUSHC 2 PUSHC 3 ADD CTE REX PUSHC ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Esquema de traducción Expresión: 2+3 EXP REX TER CTE 3 vacío 2 + PUSHC 2 PUSHC 3 ADD CTE REX PUSHC ADD

Esquema de traducción Expresión: C+3 PUSHA dir C LOAD PUSHC 3 ADD TER ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Esquema de traducción Expresión: C+3 EXP REX TER CTE 3 vacío VAR C + PUSHA dir C LOAD PUSHC 3 ADD TER LOAD

Esquema de traducción Expresión: C+3+F ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Esquema de traducción Expresión: C+3+F EXP REX TER CTE 3 VAR C + F vacío PUSHA C LOAD PUSHC 3 PUSHA F ADD

Esquema de traducción Expresión: 3-2 PUSHC 3 PUSHC 2 NEG ADD REX ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Esquema de traducción Expresión: 3-2 EXP REX TER CTE 2 vacío 3 - PUSHC 3 PUSHC 2 NEG ADD REX NEG ADD

Hacer el árbol de Análisis para estas dos expresiones. ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Esquema de traducción Expresión: A-(B-5) A-B-5 Hacer el árbol de Análisis para estas dos expresiones. ¿CONCLUSIONES?