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