Compiladores. Guía 3 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 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 Guía 3 de Pila Autómata De igual Guía 4 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 fía 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. 2Compiladores. Guía 3 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 transición ((p, u, ε),(q, γ)). Esta operación como: “push”. Si solo queremos sacar caracteres de la pila se transición ((p, u, β),(q, ε)). Esta operación como: “pop”. se haría la es conocida haría con la es conocida 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 autómatas de pila, el cual, analiza su cadena de antes el fondo de la pila, e insertando en la inicial de la gramática. Luego repite los pasos resulte aplicable. del contexto a entrada marcando pila el símbolo siguientes según Compiladores. Guía 3 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 Guía 3 Ejemplo Para Guíala4 gramática (Independiente de contexto). Con las siguientes producciones: fía 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 1 2 3 4 5 Transiciones (p, ε, ε) (q, (q, ε, S) (q, (q, ε, S) (q, (q, a, a) (q, (q, b, b) (q, S) aSb) ε) ε) ε) Implemente el autómata en JFlap 4Compiladores. Guía 3 Marque con una X las cadenas aceptadas utilizando el modo aceptado por estado final por el autómata, por el autómata, aaabbb aaaba abc aab Marque con una X las cadenas aceptadas 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?__________________________ _________________________________________________________________ Compiladores. Guía 3 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) x: extraer(a); leer una a de y: extraer(b); leer una b de endcase endwhile; if(pila vacía) aceptar_palabra o extraer(S); la entrada; la entrada; else error ¿Qué errores produciría el pseudocódigo propuesto?_______________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ Modifique el pseudocódigo de tal forma que elimine los errores _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ 6Compiladores. Guía 3 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 Compiladores. Guía 3 Hoja de cotejo: Guía 3: Autómata de Pila Docente: Tema: Presentación del programa 3 1 Máquina No: Máquina No: Alumno: Máquina No: GL: Alumno: Docente: GL: Docente: GL: Fecha: a EVALUACION % CONOCIMIENTO Del 20 al 30% APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% 1-4 5-7 8-10 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 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. ACTITUD Del 15% al 30% TOTAL 100% Nota