Tema: Autómata de Pila

Anuncio
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
Descargar