Guia Lab8-AutomataPila
Guia Lab8-AutomataPila
GUÍA DE LABORATORIO
TEORÍA DE LA COMPUTACIÓN
2021 A
COMPETENCIAS
Al finalizar la asignatura el estudiante podrá aplicar de forma transformadora conocimientos de teoría de la
computación como herramienta para evaluar, sintetizar y mostrar información como fundamento de sus ideas y
perspectivas para la resolución de problemas.
Curso: Teoría de la Computación Página: 1
Laboratorio
Autómata de Pila
8
I
OBJETIVOS
Comprender las diferencias de un autómata de pila con respecto a un autómata finito.
Practicar mediante ejercicios el desarrollo de un autómata de pila.
II
TEMAS A TRATAR
Pila
Gramáticas independientes o libres de contexto
Autómatas a pila
III
MARCO TEÓRICO
1 Pila
En una pila el último elemento que se coloca es el siguiente elemento que se retira
LIFO (Last In First Out). La posición del último elemento empujado sobre la pila se
llama la parte superior o tope y la posición del primer elemento empujado hacia la
pila se llama la parte inferior. Generalmente las pilas se suelen ilustrar verticalmente.
Por ejemplo, si ponemos los elementos A, B y C (en ese orden) en una pila, el
siguiente elemento que se quitará es C. Con las pilas, poner un elemento se llama
apilar un elemento en la pila mientras que quitar un elemento es llamado desapilar un
elemento de la pila.
Esta aplicación constituye uno de los usos más tempranos de las GIC;
de hecho, es una de las primeras formas en las que las ideas teóricas de las
Ciencias de la Computación pudieron llevarse a la práctica.
3 Autómatas a Pila
Existe un tipo de autómata que define los lenguajes independientes del contexto. Dicho
autómata, conocido como “autómata a pila”, es una extensión del autómata finito no
determinista con transiciones-ε , el cual constituye una forma de definir los lenguajes
regulares. El autómata a pila es fundamentalmente un AFN-ε con la adición de una pila.
La pila se puede leer, se pueden introducir elementos en ella y extraer sólo el elemento
que está en la parte superior de la misma, exactamente igual que la estructura de datos de
una “pila”.
La presencia de una pila significa que, a diferencia del autómata finito, el autómata a pila
puede “recordar” una cantidad infinita de información. Sin embargo, a diferencia de las
computadoras de propósito general, que también tienen la capacidad de recordar una
cantidad arbitrariamente grande de información, el autómata a pila sólo puede acceder a
la información disponible en su pila de acuerdo con la forma de manipular una pila.
1. q es un estado de Q.
2. a es cualquier símbolo de entrada de o a=, la cadena vacía, que se
supone que no es un símbolo de entrada.
3. X es un símbolo de la pila, es decir, pertenece a .
La salida de es un conjunto finito de pares (p,), donde p es el nuevo estado y es la
cadena de símbolos de la pila que reemplaza X en la parte superior de la pila. Por ejemplo,
si , entonces se extrae un elemento de la pila, si = X, entonces la pila no cambia y si
YZ, entonces X se reemplaza por Z e Y se introduce en la pila.
q0: El estado inicial. El autómata a pila se encuentra en este estado antes de realizar
ninguna transición.
Z0: El símbolo inicial. Inicialmente, la pila del autómata a pila consta de una instancia de
este símbolo y de nada más.
F: El conjunto de estados de aceptación o estados finales
IV
ACTIVIDADES
Lenguaje: (a|b)(a|b)*
Lenguaje: (a|b)+
V
EJERCICIOS RESUELTOS
1. Ejercicio 1:
En base al autómata anterior. Realizar su definición formal respectiva.
Q: {q0, q1, q2}
: {a, b}
: {Z, 1}
:
(q0,a, ) = (q0, 1)
(q0, b, 1) = (q1, )
(q1, b, 1) = (q1, )
(q1,, Z) = (q2, )
q0: q0
Z0: Z
F: {q2}
2. Ejercicio 2:
En base al autómata antes presentado, ¿Cuál es la gramática independiente de
contexto que lo define?
S-> a S b
S->
3. Ejercicio 3:
Realizar su implementación en Bison.
a) Archivo prog1.l
%{
#include "prog1.tab.h"
int yyparse();
%}
%%
a {return A;}
b {return B;}
\n {return NL;}
. return *yytext;
%%
int yywrap(void){
yyparse();
return 0;
}
b) Archivo prog1.y
%{
#include <stdio.h>
int yylex();
int yyerror (char *s);
#define YYERROR_VERBOSE
%}
%token A
%token B
%token NL
%%
cadena: S NL {printf("Se imprimio una cadena \n");};
S: A S B
|
;
%%
int yyerror (char *s){
printf("%s \n",s);
return 1;
}
int main(int argc ,char ** argv) {
yyparse();
return 0;
}
4. Ejercicio 4:
En base al autómata a pila, indicar cuál es el lenguaje que acepta.
5. Ejercicio 5:
En base al autómata a pila, indicar cuál es el lenguaje que acepta.
VI
EJERCICIOS PROPUESTOS
b
aba
bba
(a)
(b)
(abb)
(((bab)))
I → a | b | Ia | Ib | I0 | I1
E → I | E ∗ E | E + E | (E)
Definir:
VIII
BIBLIOGRAFÍA
[1] J. E.Hopcroft, R. Motwani and J. D. Ullman, Teoría de autómatas, lenguajes y
computación, Addison Wesley, 2007.