Procesadores de Lenguajes I

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

Curso de java básico (scjp)
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
PROGRAMACIÓN EN C.
Compiladores e intérpretes
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Arquitectura de Computadores I
Prototipo de compilador didáctico del lenguaje LC99
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Repaso para la construcción del intérprete 2012
Estructuras de control
Fundamentos de la Programación Estructurada
Funciones. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
Unidad 1. Introducción al proceso de compilación.
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
FUNCIONES EN C.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Tema 1. Introducción a la programación (Lenguaje java).
Introducción al Lenguaje C (ANSI)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Traducción dirigida por la Sintaxis
Teoría de lenguajes y compiladores
Unidad 3 Punteros.

Compiladores II ( /04/ :03) Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4.
Asignatura: Computadores
Tema 9 Estructuras.
Lenguaje C.
Semana 5 Subprogramas..
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Introducción a los punteros
FUNCIONES EN C.
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
INGENIERIA EN SISTEMAS COMPUTACIONALES
Página Web del Lenguaje Pascal.
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Descomposición Modular. Funciones
Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Introducción a la Programación “El lenguaje C” Manuel Crisosto M., Claudio Gutiérrez S., Christian Vidal C.
Programación de Sistemas
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Programación en C para electrónicos
PUNTEROS Y REFERENCIAS
INFORMATICA VII (Programación e implementación de sistemas)
PROGRAMACIÓN MULTIMEDIA
Los punteros Programación modular.
Unidad 1. Introducción a los Compiladores.
Términos algoritmo diseñar algoritmo implementar algoritmo
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Autómatas y Compiladores Novena Semana. Ricardo Vargas Del Valle A35469.
Procesadores de Lenguajes
Teoría de lenguajes y compiladores

LENGUAJE “C” Programación.
Fundamentos de Programación
CONJUNTO DE INSTRUCCIONES Maquinas Digitales
Programación de Sistemas
Autómatas y Compiladores. Segunda Semana. Ricardo Vargas Del Valle A35469.
Conceptos y Lenguaje Imperativo
MEMORIA DINÁMICA.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Procesadores de Lenguajes I Traductor ascendente con bison y flex Roberto García Carvajal José Manuel Llerena Carmona

Índice Introducción Analizador léxico Analizador sintáctico Tipo de almacenamiento Tabla de símbolos Árbol de sintaxis abstracta Chequeo y conversión de tipos Problemas encontrados Herramientas utilizadas Bibliografía

Introducción ¿Objetivo del proyecto? Construir un traductor ascendente en bison de un subconjunto del lenguaje C. Mediante el uso de un árbol de sintaxis abstracta genere el código ensamblador del programa.

Introducción ¿Qué admite nuestro compilador? Nuestro compilador admite todos los requisitos exigidos para compilar el programa sobresaliente. Además: Estructuras for. Estructuras do while. Acceso a posiciones de un vector usando expresiones. Soporte para flotantes en notación científica. Ámbitos anidados.

Analizador léxico El analizador léxico es capaz de admitir: Filtrado de comentarios , espacios en blanco y tabulaciones. Estructuras de control: if, if else, while, do while y for. Tipos de datos: int, float , char y void. Operadores: aritméticos, relacionales, desplazamiento, lógicos, lógicos binarios, punteros, monarios. Operaciones printf y scanf. Sentencia return.

Analizador sintáctico La gramática que implementa el traductor acepta: Tipos de datos int, char y float. Manejo de variables locales, globales y parámetros. Manejo de funciones con un número variable de parámetros. Manejo de arrays y punteros. Operaciones aritméticas, lógicas, lógicas binarias, desplazamiento.

Tipo de almacenamiento El traductor contempla tres tipos de almacenamiento: Global. Local. Parámetros.

Tabla de símbolos Implementación de tabla de símbolos con soporte de ámbitos anidados. Cada tabla contiene un diccionario que contiene como clave el nombre del símbolo y como valor la información referente al símbolo. La tabla padre de símbolos contiene únicamente variables globales y funciones. Las tablas hijas contienen variables locales y parámetros.

Tabla de símbolos Para almacenar la información de los símbolos, se utiliza la clase Entrada. Esta clase contiene la siguiente información: tipo alm nombre dirección longitud funcion offset

Árbol de sintaxis abstracta Para implementar el árbol usamos una clase Nodo abstracta, de la que heredan los demás nodos. Cada nodo implementa su propia versión del método de generar de los nodos, que se encarga de generar el código ensamblador correspondiente.

Chequeo y conversión de tipos El chequeo y la conversión de tipos se realiza durante la fase de generación del nodo. Esto es debido a que hemos implementado ámbitos anidados y utilizamos un traductor ascendente. La conversión de tipos se realiza mediante dos funciones que generan el código ensamblador.

Problemas encontrados Imposible realizar el chequeo de tipos en la construcción de los nodos. Problema al acceder a las posiciones de un vector de datos. Conflicto shift/reduce para sentencias if-else. Declaración de variables globales.

Herramientas utilizadas Bison Flex subversion Gedit Herramienta de gestión de tickets de assembla.

Bibliografía Apuntes de la asignatura. Autores: Miguel Ángel Bolívar Pérez y Jose Antonio Jiménez Millán. Manual de Intel, arquitectura x86. Compiladores: principios, técnicas y herramientas. Alfred V. Aho, Mónica S. Lam, Ravi Sethi y Jeffrey D. Ullman. Lenguaje ensamblador para PC. Paul A. Carter.