Tema: Maquina de Turing

Anuncio
Compiladores. Guía 4
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Compiladores
Tema: Maquina de Turing
Contenido
En esta guía recordaremos algunos conceptos acerca de la
máquina de Turing, se implementará en C++ una simulación de
este autómata reconocedor de palabras y después se analizará
su aplicación hacia los compiladores.
Objetivos Específicos
Estudiar las máquinas de Turing y sus propiedades básicas.
Simular la máquina de Turing y reconocer su capacidad en la
aceptación de lenguajes.
Material y Equipo
Guía de Laboratorio Nº 4.
Computadora con programa Dev-C++.
Introducción Teórica
Guía 3 de Turing
Máquina
Son
máquinas
teóricas capaces de aceptar lenguajes generados por
Guía
4
gramáticas estructuradas por frases. Una
máquina
de
turing
tiene
una
cabeza
de
lectura/escritura
que
avanza
fía
bidireccionalmente
por una cinta infinita por la derecha.
Entrada: Contenido inicial de la cinta.
Salida: Contenido final de la cinta.
Símbolos de cinta:
Símbolo de entrada: Σ
Símbolo de cinta: Γ ⊇ Σ
Transiciones: δ(p,x) = (q,y) donde:
p,q: estados
x ∈ Σ : símbolo de entrada
y ∈ Γ ∪ {L,R} : símbolo de cinta o desplazamiento
2Compiladores. Guía 4
En una transición, la máquina de Turing lee un símbolo de la
cinta, cambia de estado y escribe un símbolo o efectúa un
desplazamiento a izquierda o derecha.
Ejemplo de diagrama de transiciones:
-
Proceso de reconocimiento de una cadena
Se parte de un estado inicial, y la cinta contiene símbolos de
entrada.
Se efectúan las transiciones pertinentes según la función de
transición.
Si la cabeza lectora rebaza el extremo izquierdo de la cinta,
la cadena es rechazada y el proceso termina (terminación
anormal).
Si la máquina alcanza el estado de parada, la cadena es
aceptada.
-
En general, las máquinas de Turing son deterministas.
LENGUAJES ACEPTADOS POR MÁQUINAS DE TURING
- Gramáticas estructuradas por frases:
• Parte izquierda de las reglas: combinación de símbolos
terminales y no terminales, con al menos un no terminal.
• Parte derecha de las reglas: combinación de símbolos terminales
y no terminales de cualquier longitud (incluso 0).
- Las máquinas de Turing aceptan lenguajes estructurados por
frases.
Compiladores. Guía 4
3
Procedimiento
El siguiente programa muestra el funcionamiento de una máquina de
Guía 3que acepta una palabra bajo el lenguaje: L = {a* b} y la
Turing
máquina de Turing quedaría definida de esta forma:
Guía 4
MT=({A,B},{0,1},{0,1,X},A,@,{B})
fía
Donde
las funciones de transición F serán:
f
A
B
A
BbD
AbP
b
AaP
AbP
@
A@P
A@P
P: Parar movimiento
D: Movimiento del cabezal hacia la derecha
Digite el siguiente código:
#include
#include
#include
#include
<stdio.h>
<conio.h>
<malloc.h>
<string.h>
typedef struct nodo {
char letra;
char est;
struct nodo *siguiente;
}estado;
estado *inicial, *final;
int bandera=0;
//*******PALABRA********
void palabra(char letra, char est){
estado *nuevo;
nuevo=(estado*)malloc(sizeof(estado));
nuevo->letra=letra;
nuevo->est=est;
nuevo->siguiente=NULL;
if(inicial==NULL)
inicial=nuevo;
else final->siguiente=nuevo;
final=nuevo;
}
4Compiladores. Guía 4
//**********BORRAR **********
void borrar(void){
nodo *temporal;
while(inicial!=NULL)
{
temporal=inicial;
inicial=inicial->siguiente;
free(temporal);
}
}
//*********** VERIFICAR ***********
int verificar(void){
estado *temporal;
int contadora,contadorb,contador;
temporal=inicial;
contadora=contadorb=contador=0;
while(temporal!=NULL){
if(temporal->letra=='a')contadora++;
if(temporal->letra=='b')contadorb++;
if(temporal->letra=='@')contador++;
temporal=temporal->siguiente;
}
if(contadorb==1 || contador==1) return 1;
else return 0;
}
//************* MOSTRARGRAFO *******
void mostrargrafo(){
estado *temporal, *anterior;
temporal=inicial;
if (temporal->letra=='a' || temporal->letra=='b') {
printf("\n\n");
while(temporal->siguiente!=NULL) {
anterior=temporal;
printf("\t\t(%c)
------------->
(%c)
con
>est,temporal->est,temporal->letra);
temporal=temporal->siguiente;
if(temporal->siguiente==NULL)
printf("\t\t(%c)
------------->
(%c)
con
>est,anterior->siguiente->est,final->letra);
}
}
else{ printf("(A) -------------> (A) con @\n");
printf("(A) -------------> (B) con b"); } }
int main()
{
char vector[30],opc;
int op,i;
%c\n",temporal-
%c\n",anterior-
Compiladores. Guía 4
5
system("cls");
borrar();
printf("Ingrese una palabra a ser analizada: ");
scanf("%s",vector);
fflush(stdin);
for(i=0;i<strlen(vector);i++)
{
if(vector[i]=='a') palabra(vector[i],'A');
if(vector[i]=='b'|| vector[i]=='@') palabra(vector[i],'B');
}
bandera=1;
printf("\nPALABRA CARGADA¯");
getch();
if(verificar()==1)
{
printf("\nLa Palabra Ingresada fue: %s\n",vector);
mostrargrafo();
printf("\nPALABRA ACEPTADA\n");
}
else{
printf("\n La Palabra Ingresada fue: %s\n",vector);
printf("\nPALABRA NO ACEPTADA\n");
printf("\nRecuerde que el Lenguaje de este Aut¢mata es L={a*
b} en minusculas\n");
}
getch();
system("PAUSE");
return 0;
}
Análisis de resultados
Coloque comentarios y analice el código mostrado.
Ejecute el programa y escriba:
Tres palabras que no acepte la máquina: ________________
_________________________________________________________________
_________________________________________________________________
Tres
palabras
correctas
para
el
autómata:
______________
_________________________________________________________________
_________________________________________________________________
6Compiladores. Guía 4
Investigación complementaria
Responda las siguientes cuestiones:
¿Qué es una traza de Compilación?
¿Qué es un árbol sintáctico y cómo se construye? De un
ejemplo.
¿Cómo puede relacionarse la máquina de Turing con el
analizador sintáctico de un compilador?
¿Qué es el analizador léxico y mencione sus componentes?
En base a la introducción teórica de la máquina
desarrolle los siguientes ejercicios en Jflap:
de
Turing
2.
Diseñe una máquina de Turing con símbolos de cinta x, y y
que busque en la cinta el patrón xyxy y se detenga si y sólo si
encuentra ese patrón.
¿Con qué configuración de cinta se detendrá la máquina
de
Turing
mostrada
a continuación si comienza con la cinta
configurada
como xxx
.. ?
Bibliografía
http://dac.escet.urjc.es/~lrincon/uned/ta1/ta1-tema3.pdf
Recuperado el 4 de junio del 2012
7
Compiladores. Guía 4
Hoja de cotejo:
Guía 4: Máquina de Turing
Docente:
Tema: Presentación del programa
4
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
Conocimie
nto
deficient
e de los
fundament
os
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