La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Procesadores de Lenguajes I

Presentaciones similares


Presentación del tema: "Procesadores de Lenguajes I"— Transcripción de la presentación:

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

2 Í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

3 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.

4 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.

5 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.

6 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.

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

8 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.

9 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

10 Á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.

11 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.

12 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.

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

14 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.


Descargar ppt "Procesadores de Lenguajes I"

Presentaciones similares


Anuncios Google