Programación de Sistemas

Slides:



Advertisements
Presentaciones similares
Ejemplo Práctico de un Compilador Pequeño
Advertisements

Análisis Sintáctico Capítulo 4.
Filminas Segunda semana
Clasificación de los compiladores
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes
Compiladores e intérpretes Generación de código intermedio II
Compiladores e intérpretes
Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
¿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
UNIX COMP 240.
Procesadores de Lenguaje
Facultad de Ciencias de la Computación
Fundamentos de programación
Lenguajes de programación
Analizadores Sintácticos Descendentes Predictivos
Unidad 1. Introducción al proceso de compilación.
Teoría de lenguajes y compiladores
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Traducción dirigida por la Sintaxis
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.
Teoría de lenguajes y compiladores
Analizador Sintáctico Descendente
TRADUCTOR DE UN PROGRAMA
Fundamentos de Programación
CONDICIONES DE LA MATERIA
M.C. Meliza Contreras González
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Teoría de lenguajes y compiladores
FUNDAMENTOS DE PROGRAMACION
INGENIERIA EN SISTEMAS COMPUTACIONALES
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.
Clasificación de Gramáticas y Manejo de Errores
FORMA INTERNA DE REPRESENTAR
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.
Introducción al Análisis Sintáctico
Programación de Sistemas
Tema 1. Introducción y Conceptos Básicos
Análisis Léxico Área Software de Base.
COMPILADORES DIANA ROCIO OLAYA MESA.
INFORMATICA VII (Programación e implementación de sistemas)
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
LÓGICA DE PROGRAMACIÓN LSC. Susana Alejandra López Jiménez.
Teoría de lenguajes y 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
Teoría de lenguajes y compiladores
Preposición: suma= var1 + var2 + 10; Análisis Léxico El analizador léxico lee los caracteres del programa fuente, y verifica que correspondan a una secuencia.
El proceso de compilación
Traductores Gilberto G. Romero H..
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN
Autómatas y Compiladores. Primera Semana. Ricardo Vargas Del Valle A35469.
Sintaxis y Semántica. S.Takahashi Fases en el proceso de análisis de lenguajes Lexer Parser caracteres tokensrespuesta.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
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:

Programación de Sistemas Unidad 3 Compiladores

Contenido Estructura de un compilador Análisis léxico Análisis sintáctico Análisis semántico Generación de código intermedio Optimización de código Generación de código Administración de la tabla de símbolos Manejador de errores Un compilador sencillo de una pasada Definición de la sintaxis Traducción dirigida por la sintaxis Incorporación de una tabla de símbolos

Estructura de un compilador Conceptualmente un compilador opera en fases (análisis y síntesis), cada una de las cuales transforma al programa fuente de una representación a otra. Programa fuente con directivas Preprocesador Programa fuente Compilador Analizador léxico Analizador sintáctico Fase de análisis Analizador semántico Administrador de la Tabla de símbolos Manejador de errores Generador de código intermedio Optimizador de código Fase de síntesis Generador de código Programa objeto

Estructura de un compilador (2) Análisis léxico También conocido como: análisis lineal o exploración (scanner). La secuencia de caracteres que forma el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado colectivo. Ejemplo, en la proposición de asignación: posicion = inicial + velocidad * 60 Se identifican los siguientes componentes léxicos Identificador (posicion) Símbolo de asignación (=) Identificador (inicial) Signo de suma (+) Identificador (velocidad) Signo de multiplicación (*) Número (60)

Estructura de un compilador (3) Análisis sintáctico También llamado análisis jerárquico. Implica agrupar los componentes léxicos en frases gramaticales que el compilador utiliza para sintetizar la salida. Por lo general, las frases gramaticales se representan mediante un árbol de análisis sintáctico. Ejemplo: Proposición de asignación Identificador = expresión posicion expresión + expresión identificador expresión * expresión inicial identificador Número velocidad 60

Estructura de un compilador (4) La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Para el ejemplo anterior de la proposición de asignación se tiene: Cualquier identificador es una expresión Cualquier número es una expresión Si expresión1 y expresión2 son expresiones, entonces también lo son: expresión1 + expresión2 expresión1 * expresión2 (expresión1) Proposición de asignación Identificador = expresión posicion expresión + expresión identificador expresión * expresión inicial identificador Número velocidad 60

Estructura de un compilador (5) Muchos lenguajes definen recursivamente las proposiciones mediante reglas como: Si expresión1 es una expresión y proposición2 es una proposición, entonces: while ( expresión1 ) do proposición2 if ( expresión1 ) then proposición2 El análisis léxico no es suficientemente poderoso para analizar proposiciones o expresiones recursivas. Cuándo una construcción del lenguaje fuente es recursiva, entonces es factible emplear una gramática libre de contexto para formalizar la recursión.

Estructura de un compilador (6) Análisis semántico Se realizan ciertas revisiones para asegurar que los componentes de un programa se ajustan de un modo significativo. Revisa el programa e intenta encontrar errores semánticos. Reúne la información sobre los tipos para la fase posterior de generación de código. Un componente importante es la verificación de tipos. Se verifica si cada operador tiene los operandos permitidos. Un real no debe utilizarse como índice de un arreglo. Convertir un número entero a real para algunos operadores. El análisis semántico inserta una conversión de entero a real en el árbol de análisis sintáctico = = posicion + posicion + inicial * inicial * velocidad 60 velocidad ent a real 60

Estructura de un compilador (7) posicion = inicial + velocidad * 60 Analizador léxico id1 = id2 + id3 * 60 Analizador sintáctico = id1 + id2 * id3 60 Administración de la tabla de símbolos Registra los identificadores e información referente a ellos. Se tiene un registro por cada identificador. Todas las fases hacen uso de esta tabla. Detección e información de errores En cada fase se pueden encontrar errores. Se debe definir como se deben tratar los errores en cada una de las fases. Las fases de análisis Cambian la representación interna del programa fuente conforme avanza cada una de ellas. Generación de código intermedio Se puede considerar como código para una máquina abstracta. Dicha representación debe ser fácil de producir y fácil de traducir al código objeto. Optimización de código Trata de mejorar el código intermedio de modo que resulte un código máquina más rápido de ejecutar. Generación de código Por lo general se trata de código máquina relocalizable o código ensamblador. Se deben seleccionar posiciones de memoria para cada una de las variables. Analizador semántico = id1 + id2 * id3 ent a real TABLA DE SIMBOLOS 60 1 2 3 4 posicion … Generador de código intermedio inicial … velocidad … temp1 = entreal(60) temp2 = id3 * temp1 temp3 = id2 +temp2 Id1 = temp3 Optimizador de código temp1 = id3 * 60.0 temp2 = id2 +temp1 Id1 = temp2 Generador de código MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOV R1, id1

Estructura de un compilador (8) En la etapa de síntesis se ha encontrado que el programa es correcto. Por lo tanto, el compilador ya es capaz de generar el código máquina correspondiente al programa fuente. En la etapa de generación de código intermedio es común encontrar una representación intermedia llamada “código de tres direcciones” el cuál tiene las siguientes características: Es similar a un lenguaje ensamblador, con la peculiaridad de que sería para un procesador que carece de registros. Solo es capaz de trabajar con variables (direcciones de memoria) y constantes. Cada instrucción tiene un máximo de tres operandos Además del operador de asignación solo se cuenta a lo más con un operador. Se hace necesario el uso de variables temporales No todas las instrucciones requieren tres operandos (obvio). En la etapa de generación de código se depende una máquina destino en particular, el código intermedio optimizado debe ser fácil de llevar a su representación final

Un compilador Sencillo de una pasada Definición de la sintaxis Gramática independiente del contexto Conjunto de componentes léxicos Conjunto de no terminales Conjunto de producciones Un no terminal del lado izquierdo, una flecha y una secuencia de componentes léxicos y no terminales del lado derecho. Traducción dirigida por la sintaxis Atributos asociados con las construcciones. Esquema de traducción en base a las producciones. Análisis léxico Lee y convierte el flujo de entrada en una secuencia de componentes léxicos Análisis sintáctico A partir de las producciones trata de empatar la secuencia de componentes léxicos. Análisis sintáctico descendente predictivo Incorporación de una tabla de símbolos Para almacenar información adicional sobre el código fuente