Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 1 Tema: Autómata de Pila Contenido La presente guía aborda los autómatas de pila, y se enfoca en la aplicación que se le puede dar a estas herramientas para el análisis sintáctico en gramáticas libres de contexto Objetivos Específicos Conocer las características básicas de un Autómata de Pila. Crear algunas secuencias de cadenas evaluadas por un Autómata de Pila en JFlap, e implementarlos en C++. Material y Equipo Guía No 3. Computadora con DevC++ y el simulador Jflap. Introducción Teórica Autómata de Pila De igual manera que los lenguajes regulares se pueden representar mediante autómatas finitos, los lenguajes libres de contexto tienen su correspondencia en otro tipo de dispositivo: El Autómata con Pila (AP). Un AP es una máquina de estado que usa una estructura de datos temporal llamada PILA, en la cual el último elemento que entra es el primero que sale de la pila (LIFO). Al iniciar el funcionamiento, la pila está vacía y al finalizar la pila debe quedar vacía.
2 Formalización de los autómatas de pila Un autómata de pila es un séxtuplo (K, Σ, Γ, Δ, s, F), donde: K es un conjunto de estados. Σ es el alfabeto de entrada. Γ es el alfabeto de la pila. s K es el estado inicial. F K es un conjunto de estados finales. Δ (K X Σ* X Γ*) X (K X Γ*) es la relación de transición. Si tenemos una transición de la forma: ((p, u, β), (q, γ)) Δ, el Ap hace lo siguiente: En el estado p, consume u de entrada. Saca β de la pila. Llega a un estado q. Mete γ en la pila. Si solo queremos meter la cadena γ en la pila se haría la transición ((p, u, ε),(q, γ)). Esta operación es conocida como: push. Si solo queremos sacar caracteres de la pila se haría con la transición ((p, u, β),(q, ε)). Esta operación es conocida como: pop. Aplicación de un analizador sintáctico La teoría de los autómatas de pila nos brinda la base para la construcción de rutinas de análisis sintáctico destinadas a una amplia gama de lenguajes independientes de contexto. Analizadores sintácticos En este punto debemos considerar como se pueden desarrollar las rutinas de análisis sintáctico a partir de los autómatas de pila. Este problema surge cuando se describe un lenguaje en función de reglas de escritura gramaticales, luego se desarrollan rutinas de análisis sintáctico para el lenguaje empleando teoría de los autómatas de pila como herramientas de desarrollo. Proceso de análisis sintáctico LL Buscamos traducir gramáticas independientes del contexto a autómatas de pila, el cual, analiza su cadena de entrada marcando antes el fondo de la pila, e insertando en la pila el símbolo inicial de la gramática. Luego repite los pasos siguientes según resulte aplicable.
3 1- Si la cima de la pila tiene un no terminal, reemplace de acuerdo con una de las reglas de reescritura de la gramática. 2- Si la cima de la pila contiene un terminal, elimínelo de la pila a la vez que lee de la entrada del mismo terminal. Si el símbolo de la entrada no equivale al símbolo de la pila, se declara que la entrada es una cadena ilegal. 3- Si aparece en la cima de la pila la marca de fondo de pila, elimínela y declare que la porción de cadena es aceptable. Este proceso analiza la sintaxis de una cadena, produciendo una derivación por la izquierda conforme lee la cadena de izquierda a derecha y produce derivaciones hacia la izquierda. Procedimiento PARTE I: SIMULACION EN JFLAP Ejemplo Para la gramática (Independiente de contexto). Con las siguientes producciones: Obtener un autómata de pila que acepte el LLC generado por la gramática anterior Tabla de transiciones del autómata de pila No Transiciones 1 (p, ε, ε) (q, S) 2 (q, ε, S) (q, asb) 3 (q, ε, S) (q, ε) 4 (q, a, a) (q, ε) 5 (q, b, b) (q, ε) Implemente el autómata en JFlap
4 Marque con una X las cadenas aceptadas por el autómata, utilizando el modo aceptado por estado final aaabbb aaaba abc aab Marque con una X las cadenas aceptadas por el autómata, utilizando el modo aceptado por pila vacía aaabbb aaaba abc aab Análisis de resultados Qué diferencia se da en JFLAP entre aceptar una palabra por estado final y al aceptarlo por la pila vacía? Según la teoría de autómatas de pila, cuál debería ser la condición de aceptación de una palabra?
5 Analice el siguiente pseudocódigo propuesto para la construcción del autómata if (pila vacía) estado := p; insertar(s); estado := q; while pila <> vacía do case cimadelapila of S: extraer(s); insertar(asb) o extraer(s); x: extraer(a); leer una a de la entrada; y: extraer(b); leer una b de la entrada; endcase endwhile; if(pila vacía) aceptar_palabra else error Qué errores produciría el pseudocódigo propuesto? Modifique el pseudocódigo de tal forma que elimine los errores
6 Investigación complementaria Implementar en C++ el pseudocódigo que simule el autómata de pila visto en la práctica. Investigue la definición formal de una maquina de Turing y en que se puede aplicar en el campo de los compiladores. Bibliografía http://www.frt.utn.edu.ar/sistemas/sintaxis/page31.html http://www.uhu.es/francisco.moreno/talf/docs/tema7.pdf
7 Guía 3: Autómata de Pila Hoja de cotejo: 3 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%