Simulador de Máquinas de Turing para el lenguaje GOLD

26
Simulador de Máquinas de Turing para el lenguaje GOLD Autor Juan Manuel González Garzón [email protected] Agosto 2015 Asesora Silvia Takahashi Rodríguez PhD Tesis de Pregrado en Ingeniería de sistemas y Computación Departamento de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad de los Andes Bogotá D.C., Colombia Agosto 6 de 2015 1

Transcript of Simulador de Máquinas de Turing para el lenguaje GOLD

Page 1: Simulador de Máquinas de Turing para el lenguaje GOLD

Simulador de Máquinas de Turing para el lenguaje GOLD

Autor Juan Manuel González Garzón

[email protected] Agosto 2015

Asesora

Silvia Takahashi Rodríguez PhD

Tesis de Pregrado en Ingeniería de sistemas y Computación Departamento de Ingeniería de Sistemas y Computación

Facultad de Ingeniería

Universidad de los Andes Bogotá D.C., Colombia

Agosto 6 de 2015

1

Page 2: Simulador de Máquinas de Turing para el lenguaje GOLD

Resumen Introducción Descripción general y marco teórico

Objetivo General Objetivos Específicos Marco teórico

Máquinas de Turing Transductores Máquinas de Mealy Java GOLD

Identificación del problema y de su importancia Diseño y especificaciones

Definición del problema Especificaciones Restricciones

Desarrollo del diseño Recolección de Información Alternativas de diseño

Implementación Descripción de la implementación

Clase de prueba [gold.test.automaton.testTur.java] Estructura de datos [gold.structures.automaton.GStatesTuringMachine.java] Visualizador de máquinas de Turing [gold.visualization.automaton] Exportar una máquina a JFlap [gold.util.GAutomata.java] Firmar como colaborador del proyecto

Ejemplo de Uso Validación

Máquina sin condición de parada. Máquina que se desborda de la cinta, por la izquierda Máquina con lectura de caracteres no especificado en alfabeto de entrada. Máquina bien definida.

Conclusiones Discusión Trabajo futuro

Apéndice A: Manual de usuario Instalacion Creacion de Máquinas

Referencias

2

Page 3: Simulador de Máquinas de Turing para el lenguaje GOLD

Resumen Este proyecto busca aumentar la funcionalidad del lenguaje de programación GOLD (Graph Oriented Language Domain) para realizar implementaciones de máquinas de Turing usando lenguaje formal junto con sus simulaciones. GOLD es un lenguaje de programación imperativo de propósito específico, desarrollado en la Universidad de los Andes cuyo objetivo es facilitar el desarrollo de algoritmos en estructuras de datos avanzadas como los grafos, árboles y autómatas. El componente software montado permite la implementación usando lenguaje formal de una máquina, visualizar el grafo generado por dicha máquina y ejecutar paso a paso el comportamiento de ella dada una cadena de caracteres ingresadas por el usuario. Basa su implementación en la implementación de un transductor de máquinas de Mealy dentro del proyecto y sigue los lineamientos gráficos de la plataforma ya existente. Es una alternativa al simulador ya existente dentro de GOLD, donde se cambio la representación de máquina de Turing, de un modelo con acción en los estados a uno de acción en las transiciones. Se presentan diferentes casos de uso en donde se verifica la detección de errores en términos de declaración de las máquinas y finalmente se presentan las lecciones aprendidas y el trabajo futuro. This project seeks to increase the functionality of GOLD (Graph Oriented Language Domain) for Turing machine implementations using formal language along with their simulations. GOLD is an imperative programming specific purpose language, developed at the University of the Andes which aims to facilitate the development of algorithms for advanced data structures like graphs, trees and automata. The software component allows the implementation of a machine using formal language, display the graph generated by the machine and step through her behavior given a string of characters entered by the user. Its implementation is based on the implementation of a transducer of Mealy machines within the project and follows the guidelines of the graphics existing platform. It is an alternative to the existing simulator in GOLD, where the representation of Turing machine was changed from a model with action on the states to a model with action on the transitions. Different use cases are presented where error detection in terms of machines statement is verified. Finally the learned lessons and future work are presented.

Introducción La motivación principal de este proyecto es dar continuidad al proyecto GOLD, creando una nueva forma en la que el lenguaje pueda describir máquinas de Turing, con salida en las transiciones. Como propuesta de solución se planteó extender el paquete de autómatas. Esta solución se basa en las similitudes que existen entre una máquina de Mealy y la máquina de Turing. Este documento estara dividido en 5 partes. En la primera parte se establecen y exponen los conceptos la teoría de autómatas usados para el desarrollo del proyecto, así como sus proyectos antecedentes. En la segunda parte se explica de forma teórica la estrategia de solución propuesta para problema presentado junto con su diseño conceptual, junto con la selección de paquetes software en GOLD que serán modificados durante el desarrollo. Posteriormente se explica la arquitectura implementada para la

3

Page 4: Simulador de Máquinas de Turing para el lenguaje GOLD

solución, seguido de las pruebas que validan su funcionamiento. Finalmente se presentan las conclusiones del trabajo, las lecciones aprendidas y el trabajo futuro.

Descripción general y marco teórico

Objetivo General ­ Crear una simulador de máquinas de Turing dentro del lenguaje GOLD.

Objetivos Específicos ­ Definir una nueva estructura para la implementación de las máquinas de Turing. ­ Entender la implementación y funcionamiento del ambiente GOLD 3. ­ Realizar pruebas de validación de la estructura implementada.

Marco teórico

Máquinas de Turing Una máquina de Turing es una máquina de estados finitos que cuenta con una cinta de entrada y una cabeza de lectura y escritura que puede moverse hacia la izquierda o la derecha. Se modela como una tupla (Q,S,q1,t) donde:

Q: Conjunto de estados S: Conjunto de símbolos ­ alfabeto q1: Estado inicial t: Función de transición. (Q x S) ­> (Q Stop x (S x (<­, ­>))) siendo <­ , ­> movimientos de la⋃

cabeza de lectura. Las máquinas de Turing suelen especializarse en máquinas con respuestas en las transiciones y en máquinas con respuesta en los estados, dependiendo del momento en que realizan el movimiento y escritura de la cabeza. Adicionalmente, se puede hablar de máquinas de Turing con cinta de escritura infinita en uno o ambos extremos. En cuanto al alfabeto, se pueden separar los símbolos que pertenecen a la cinta y pueden ser leídos por la cabeza de los símbolos que son escritos por la cabeza en la cinta. [NotasLyM][Turing]

Transductores Los transductores son máquinas de estados finitos que tienen dos cintas, de lectura y escritura donde su cabeza sólo puede ir hacia la derecha, sin poder retroceder. Estas máquinas pueden realizar la acción de escritura como respuesta a un caracter de entrada leído (escritura en transición) o como respuesta a un estado actual del sistema.[GOLDMTeorico]

Máquinas de Mealy La máquina de Mealy es una estructura que especializa una máquina de turing en la medida que modela una cinta de lectura distinta a la cinta de escritura, la cabeza de escritura y escrituras siempre se avanzan hacia la derecha y las cabezas no retroceden. Ésta máquina realiza escritura cada vez que lee un caracter nuevo de la cinta de lectura [Mealy1950].

4

Page 5: Simulador de Máquinas de Turing para el lenguaje GOLD

Java Java es un lenguaje de programación de propósito general, tipado, concurrente, basado en clases y orientado a objetos, compilado usualmente para ejecución sobre máquinas virtuales Java (JVM por sus siglas en inglés)[JavaOracle]. Es usado como plataforma para la creación del lenguaje GOLD y su implementación permite la representación del simulador que éste lenguaje conlleva.

GOLD GOLD (Graph Oriented Language Domain) es un lenguaje de propósito específico imperativo que disminuye el esfuerzo en la programación de algoritmos sobre grafos y otras estructuras de datos avanzadas que mezcla virtudes del pseudocódigo con las de lenguaje de alto nivel como Java para que pueda ser entendido fácilmente por un matemático. GOLD está implementado en Java, usando Xtext como framework para el desarrollo de lenguajes de programación de dominio específico [GOLDMTeorico]

Identificación del problema y de su importancia En el marco del curso Lenguajes y Máquinas del Departamento de Ingeniería de la Universidad de los Andes, donde se imparten clases sobre la teoría lenguajes y automatización desde el punto de vista formal, se construye el proyecto GOLD, como lenguaje de programación de propósito específico para permitir la simulación intuitiva de los diferentes autómatas vistos en clase. En el estado actual del proyecto, se pueden realizar simulaciones de autómatas determinísticos de estados finitos, autómatas no determinísticos de estados finitos, autómatas con respuesta y autómatas de pila. El problema a solucionar surge de la necesidad de crear un simulador para máquinas de Turing, usando una extensión al lenguaje GOLD, como apoyo a las clases dictadas en el curso en torno a este tema que generaliza la modelación de autómatas computacionales. La importancia de este problema se identifica en la motivación social por mejorar el aprendizaje de los estudiantes, al utilizar herramientas que les permitan comprobar el funcionamiento de las máquinas que éstos diseñan en los ejercicios en clase y adquieran experiencia en su implementación.

Diseño y especificaciones

Definición del problema El problema a solucionar surge de la necesidad de crear un simulador para máquinas de Turing usando una extensión al lenguaje GOLD 3. Este simulador debe permitir la definición de dichas máquinas usando lenguaje formal de propósito específico y las palabras reservadas del lenguaje ya existente. Adicionalmente debe crear la representación gráfica del autómata definido formalmente, usando elementos gráficos consistentes con el resto de la aplicación. Finalmente, debe permitir la ejecución de los autómatas construidos para depuración, realizando dicha ejecución para cada caracter de entrada en la cinta de lectura, mostrando estado actual, estado futuro, caracter escrito y dirección del movimiento del cabezal.

Especificaciones

5

Page 6: Simulador de Máquinas de Turing para el lenguaje GOLD

Nombre: RF1: Crear una máquina de Turing a partir de una especificación formal, escrita en lenguaje GOLD

Autor: Juan Manuel González Garzón

Descripción: Se le permite al usuario crear una máquina de Turing a partir de una descripción de los conjuntos que la conforman.

Actores: Usuario, Sistema

Precondiciones: ­ La máquina que se desea crear es determinística. ­ La regla de salida en las transiciones solo imprime caracteres que pertenecen al alfabeto de

salida y la acción de la cabeza pertenece al conjunto de acciones L(Left), S(Stay), R(Right)

Flujo Normal de eventos: ­ El usuario define un conjunto de estados para la máquina. ­ El usuario define un alfabeto de entrada y salida para la máquina. ­ El usuario define un estado inicial. ­ El usuario define una función de transición entre estados. ­ El usuario define una función de salida en las transiciones. ­ El sistema realiza compilación de la máquina definida.

Flujos alternativos: ­ Al finalizar la compilación se le informa si hay un error al usuario si la definición no cumple

con la sintaxis GOLD o se encuentran variables no definidas dentro del modelo.

Post­condiciones: Se crea una máquina de Turing determinística con respuesta en las transiciones.

Nombre: RF2: Visualizar una máquina de Turing

Autor: Juan Manuel González Garzón

Descripción: Se le muestra al usuario una representación gráfica de una máquina de Turing.

Actores: Sistema

Precondiciones: ­ Existe un objeto del tipo GStatesTuringMachine.

Flujo Normal de eventos: ­ El usuario define formalmente una máquina de Turing. ­ El sistema compila la definición realizada

6

Page 7: Simulador de Máquinas de Turing para el lenguaje GOLD

­ El sistema toma la máquina dada por parámetro y crea una representación visual a través de un grafo.

Flujos alternativos: Ninguno

Post­condiciones: Se crea una representación visual de la máquina de Turing, se le presenta al usuario haciendo uso de la clase GAutomataFrame

Nombre: RF3: Simular gráficamente el comportamiento de una máquina de Turing

Autor: Juan Manuel González Garzón

Descripción: Se le muestra al usuario un menú que le permite ver paso por paso el comportamiento de su máquina de Turing,

Actores: Usuario, Sistema

Precondiciones: ­ Se ha compilado una definición formal de una máquina de Turing ­ Se ha creado creado la vista GAutomataFrame

Flujo Normal de eventos: ­ El sistema presenta un diálogo que permite ingresar el conjunto de caracteres escritos en la

cinta, simular el paso siguiente, el anterior, el primero y el último. ­ El usuario ingresa una cadena de caracteres ­ El usuario selecciona una de las cuatro opciones de simulación:

­ Si selecciona paso siguiente: El sistema toma el siguiente caracter dentro de la cinta, lo somete al autómata definido e imprime respuesta

­ Si selecciona paso anterior: el sistema toma el anterior caracter dentro de la cinta, lo somete al autómata (con la transiciones en reversa) e imprime respuesta.

­ Si selecciona paso primero: El sistema restaura el estado inicial de la cinta ­ Si selecciona paso último: El sistema toma todos los caracteres de la cinta, los somete

al autómata e imprime la respuesta para toda la cadena de entrada.

Flujos alternativos: Si uno de los caracteres ingresados no pertenece al alfabeto, se muestra mensaje de error. Si el usuario intenta mover el cabezal de lectura por fuera de la cinta, se muestra mensaje de error Si el usuario especifica una máquina de turing que excede el límite de caracteres soportados por el sistema, se muestra mensaje de error.

Post­condiciones:

7

Page 8: Simulador de Máquinas de Turing para el lenguaje GOLD

Para cada paso, el entorno gráfico de la máquina simulada cambia dependiendo del estado y el caracter leído.

Nombre: RF4: Exportar la máquina creada para usarla con el simulador JFlap

Autor: Juan Manuel González Garzón

Descripción: Se le permite al usuario exportar la máquina creada, en formato .jff para su posterior lectura en la herramiento JFlap

Actores: Sistema

Precondiciones: ­ Existe una máquina de Turing compilada y visualizable

Flujo Normal de eventos: ­ El sistema presenta un menú al usuario para exportar. ­ El usuario selecciona la opción exportar. ­ El usuario indica nombre del archivo a generar. ­ Se genera el archivo con la máquina en formato .jff.

Flujos alternativos Ninguno

Post­condiciones: Se ha creado un archivo de extensión .jff consistente con estándar de lectura de la herramienta JFlap

Restricciones 1. Tecnologías de desarrollo:

Lenguaje de Programación: Java Development Kit 1.7 Ambiente de desarrollo: Eclipse GOLD ­ Basado en Eclipse Indigo Librerías de GOLD para eclipse estándar: GOLD 3.13 Estándar de representación para exportación: JFlap 2012 o posterior.

1. El código fuente del proyecto es de acceso limitado. No se deben usar repositorios de código abierto

2. El lenguaje generado debe ser consistente con la sintaxis del lenguaje GOLD. 3. Los elementos gráficos usados deben ser consistentes con la plataforma gráfica ya existente 4. El lenguaje generado debe ser intuitivo y seguir los lineamientos de la definición formal expuesta

en el curso Lenguajes y Máquinas de la Universidad de Los Andes 5. La definición formal de las máquinas de Turing debe poder realizarse en el entorno de desarrollo

de GOLD. 6. El tiempo para el desarrollo del proyecto es un semestre académico: 16 semanas.

8

Page 9: Simulador de Máquinas de Turing para el lenguaje GOLD

Desarrollo del diseño

Recolección de Información Tras haber visto las especificaciones que cumplen las máquinas de Turing y las de Mealy, es visible que existen bastantes similitudes entre ambas. De estas similitudes partió la propuesta del diseño de la solución, se podía aprovechar el desarrollo ya existente en GOLD para crear el simulador. GOLD cuenta con un paquete de autómatas y dentro de este paquete cuenta con una implementación de un transductor ­ Transducer. Lo que se propuso fue crear una copia modificada del Transducer, donde no existiera una función de impresión en las transiciones para así tener una máquina de Mealy. A esta máquina se le dotaría de una cinta con la capacidad de mover la cabeza en ambas direcciones. La función de impresión en las transiciones fue enriquecida de tal forma que se pudiera establecer las acciones que realiza la cabeza. Se estableció que esta implementación de la máquina se llamaría StatesTuring, su contrato se definió en IStatesTuring y la implementación se encuentra en GStatesTuring.

Una vez se estableció que la máquina se haría en base al Transducer, se siguió el rastro de paquetes que hacen parte de su implementación. Estos paquetes se señalan en color verde, más adelante se muestra en detalle cada uno de los paquetes y se colorea de verde las clases que requieren cambios o adiciones.

9

Page 10: Simulador de Máquinas de Turing para el lenguaje GOLD

El paquete gold.visualization, es el responsable de la representación gráfica de los autómatas. Se estableció que se requería cambiar o adicionar código en todas las clases pertenecientes a gold.visualization.automaton.Como nota adjunta a un siguiente programador, la simulación de una máquina puede o no puede tener representación gráfica. Para el caso de la simulación con representación gráfica, encontrará el código dentro de este paquete. En el otro caso lo encontrará en la estructura GStatesTuring

10

Page 11: Simulador de Máquinas de Turing para el lenguaje GOLD

Una visualización de un autómata puede ser guardada como imagen, como un archivo de texto (extensión .txt) o puede ser exportada a JFLAP (extensión .jff). Con el objetivo de que se pudiera hacer lo mismo con las máquinas de Turing fue necesario editar la clase gold.util.GAutomata.java.

11

Page 12: Simulador de Máquinas de Turing para el lenguaje GOLD

Finalmente se decidió crear una clase de prueba en el paquetegold.test.automatoncuya función seria apoyar el desarrollo de la solución, proveyendo de un escenario de prototipado rápido. La clase no prueba el correcto funcionamiento del simulador, su importancia radica en que permite ver errores desde fases muy tempranas del desarrollo.

Alternativas de diseño

Implementación

Descripción de la implementación

Clase de prueba [gold.test.automaton.testTur.java] Como primer paso de la implementación se creó el escenario de prototipado, la clase gold.test.automaton.testTUR.java. Con el objetivo de ir transformando una máquina de Mealy en una de Turing. Para probar el funcionamiento delGDeterministicTransducer.javase utiliza una máquina de Mealy que divide un número entre 4. Se especifica a través de sus alfabetos, conjunto de estados, estado inicial, subconjunto de estados finales y finalmente 3 reglas de transición. Hacer la transformación de esta máquina del GDeterministicTransducer al GStatesTuringMachine requirió varios cambios. Inicialmente se elimina la capacidad de realizar impresión en las transiciones, con el objetivo de convertir el transductor en una máquina de Mealy. Por tanto la máquina de Turing implementada no recibe como parámetro la función de impresión en los estados, en su método constructor. Esta decisión se toma priorizando el proceso de lectura y apropiación de código.

12

Page 13: Simulador de Máquinas de Turing para el lenguaje GOLD

Como una máquina de Turing, a la par del proceso de escritura sobre la cinta, realiza un movimiento del cabezal de lectura, el siguiente cambio se realiza sobre la función de impresión en las transiciones. Para agregar dicha funcionalidad se modifica el método que se encarga de devolver el caracter de impresión, haciendo que devuelva una dupla de caracteres. El primer carácter es el signo que se va a escribir, el segundo es la acción deseada para la cabeza. En caso de no querer escribir nada se escribe el carácter lambda('\u03BB'), que se le facilita al usuario a través del ‘GOLDCharacterMap’en la interfaz gráfica, y no realizar mover la cabeza se especifica con una ‘S’. Con respecto a las operaciones de simulación se agregan a 3 métodos adicionales. El método initTape(char[]param), que se encarga de establecer la configuración inicial de la máquina. El método execute() encargado de la simulación. Finalmente el método getTape() que permite visualizar el estado de la cinta.

Estructura de datos [gold.structures.automaton.GStatesTuringMachine.java] En la siguiente fase desarrollada se implementa la estructura que representa una máquina de Turing. Para esto se tomó como base la estructura de la máquina de Mealy GDeterministicTransducer.java. en donde se eliminaron elementos del transductor que son propios de la máquinas de Moore (funciones de impresión en los estados), con el objetivo de clarificar más el código.

13

Page 14: Simulador de Máquinas de Turing para el lenguaje GOLD

Adicionalmente, se agregó una cinta para la máquina, del mismo tipo que la implementación ya existente gold.structures.turingMachine.GTuringMachine.Tape. Finalmente se agregan los métodos de chequeo pertinentes, checkInstruction(IPair<Character> instruccion), para verificar si se está especificando correctamente la función de salida de la máquina. Para facilitar la escritura de los automatas GOLD cuenta con un mapa de caracteres que se define dentro del siguiente archivo org.gold.dsl.ui/src/org/dsl/ui/charmap/GoldCharacterMap.txt a este archivo se agrego el caracter ‘’ que se utiliza para señalar un espacio en blanco en la cinta.

Visualizador de máquinas de Turing [gold.visualization.automaton] La implementación del componente gráfico para las máquinas de Turing es la tarea donde más esfuerzo se requirió, principalmente por el nuevo concepto de movimiento hacia izquierda y derecha propio de éstas.

14

Page 15: Simulador de Máquinas de Turing para el lenguaje GOLD

Fue necesario montar un componente gráfico desde blanco, respetando el paradigma de interacción de los otros simuladores. El componente gráfico ahora presenta para cada una de las transiciones tres símbolos en el siguiente orden: <caracterleido>/[<caracterescrito>,<movimientodecabeza>].El simulador resalta el estado de actual de la ejecución.

En cuanto al componente gráfico del simulador se agregan botones para realizar los pasos de la simulación ­ hacia atrás, adelante, principio y fin; el campo de texto para ingreso de caracteres por parte del usuario, la cinta de ejecución con un indicador de la cabeza. y el progreso de la simulación. El simulador resalta el último caracter escrito.

Exportar una máquina a JFlap [gold.util.GAutomata.java] Dentro de esta clase se escribio el codigo que permite exportar las máquinas a JFlap, el proceso consiste en un doble recorrido. Para cada estado se recorren todas sus transiciones y se imprimen siguiendo el formato xml propio de JFlap. Es necesario cambiar el caracter que representa vacío () por un tag <read/> o <write/> segun sea el caso.

Firmar como colaborador del proyecto Finalmente se agrega el nombre del desarrollador de este componente como colaborador del proyecto dentro de la clase gold.swing.util.GAboutDialog.java, que representa la ventana de información de la aplicación (About GOLD).

15

Page 16: Simulador de Máquinas de Turing para el lenguaje GOLD

Ejemplo de Uso A continuación se presenta un ejemplo de uso de la plataforma, permitiendo verificar el lenguaje creado y las funcionalidades del nuevo componente software. La máquina presentada a continuación toma cadenas de la forma [[a]*[b*][c*]]*X y las duplica en la cinta de escritura. La definición formal se presenta en la siguiente figura:

16

Page 17: Simulador de Máquinas de Turing para el lenguaje GOLD

17

Page 18: Simulador de Máquinas de Turing para el lenguaje GOLD

Al realizar la compilación y visualización del autómata definido se obtiene la siguiente respuesta.

18

Page 19: Simulador de Máquinas de Turing para el lenguaje GOLD

Cómo se puede verificar los estados generados son consistentes con la definición realizada, la información de las transiciones cumplen con el alfabeto usado y las representaciones gráficas siguen los lineamientos planteados en la plataforma. Finalmente se realiza la exportación del autómata generado al formato .jff, propio de JFlap y el resultado es la misma máquina de estados.

Validación El método de validación pretende probar que el algoritmo es correcto respecto a su especificación formal, pues presenta una solución para todos los elementos del conjunto de entradas y además esa solución es la solución correcta del problema [Cormen]. Así los siguientes casos prueba usados para la validación del sistema son:

Máquina sin condición de parada. En este caso de prueba se usa una máquina de Turing que no tenga un caracter de finalización, por lo que el cabezal de escritura siempre escribe constantemente a lo largo de la cinta, con el objetivo de comprobar que la máquina de Turing no detiene su ejecución. La máquina que se usa para este fin es una máquina que se encarga de imprimir constantemente en el cinta las palabra ‘abc’.

19

Page 20: Simulador de Máquinas de Turing para el lenguaje GOLD

En ejecución, la máquina eventualmente se detiene. Al comprobar el motivo de parada se detecta que la Máquina Virtual de Java lanza una excepción de memoria indicando que se la ejecución la ha saturado.

El caso de prueba permite identificar la necesidad de crear un mensaje de advertencia cuando la ejecución realiza cierto número de transiciones, para manejar el caso de excepción. Por otro lado se comprueba el buen funcionamiento del simulador para simulaciones extensas.

Máquina que se desborda de la cinta, por la izquierda En este caso se pretende verificar que el sistema detecta un error en la ejecución de la máquina, al notar que el usuario pretende realizar un movimiento que lo ubica afuera de los límites de la cinta. La máquina usada planteada realiza una división del número escrito por el usuario entre 4, realizando cada vez un movimiento hacia la izquierda. Cuando la operación termina, el cabezal de escritura se mueve hacia la izquierda infinitamente.

20

Page 21: Simulador de Máquinas de Turing para el lenguaje GOLD

Cómo se puede comprobar en la imagen, el sistema efectivamente lanza un mensaje cuando la simulación detecta que se ha alcanzado el límite izquierdo de la cinta, y por tanto se ha llegado a su fin. El sistema detiene la simulación y representa gráficamente (en color azul) el último estado de ejecución válido.

Máquina con lectura de caracteres no especificado en alfabeto de entrada. Para este caso se pretende verificar que el sistema detecta cuando un caracter ingresado por el usuario no pertenece al alfabeto definido en el modelamiento formal de la máquina. La máquina diseñada realiza la división de un número entre cuatro, con una entrada de usuario que no tiene caracter de terminación ni permite caracteres en la cinta distintos a números.

21

Page 22: Simulador de Máquinas de Turing para el lenguaje GOLD

Como se puede comprobar en las imágenes, el simulador trata de realizar la lectura del símbolo ‘_’. Siguiendo los lineamientos del sistema, en este caso no se lanza un mensaje de error, sino que se arroja una excepción en la consola de ejecución de Java.

22

Page 23: Simulador de Máquinas de Turing para el lenguaje GOLD

Máquina bien definida. En este caso de prueba se quiere comprobar que al tener una máquina bien definida y diseñada, se cumple con la tarea de simulación sin casos de excepción o lanzamiento de mensajes de error. La máquina usada en este caso es la máquina que realiza división entre 4, con caracter de fin de cadena.

Como se puede comprobar en la imagen, el sistema escribe en la cinta la respuesta correcta y al finalizar escribe un caracter que finaliza la ejecución. Cuando el sistema mueve nuevamente el cabezal, no llega a caso de error, porque el sistema ya ha parado su ejecución.

Conclusiones

Discusión Durante la implementación y el diseño el mayor obstáculo estuvo asociado a la dificultad para contextualizarse dentro de un proyecto tan grande como GOLD. No siempre era claro el flujo que seguiría

23

Page 24: Simulador de Máquinas de Turing para el lenguaje GOLD

un requerimiento a lo largo de los paquetes. El código no estaba comentando, pero los nombres de la variables eran lo suficientemente dicientes y daban una idea de lo que iba sucediendo. Es también un código altamente modular que permite reutilizar código con facilidad pero dificulta su lectura. Todos estos problemas se minimizaron usando las herramientas del entorno de desarrollo, que permiten hacer búsquedas de palabras en todos los archivos del proyecto. Se propone en el futuro realizar una verificación minuciosa de la funcionalidad existente antes de iniciar este proyecto de grado. Durante el desarrollo se es cuidadoso en la implementación y se contrastó con pruebas de ejecución, pero se recomienda realizar más verificaciones sobre cada caso de uso posible. El sistema implementado no cuenta actualmente con capacidades para realizar operaciones sobre autómatas.

Trabajo futuro Se sugiere como trabajo futuro:

­ Actualizar el ambiente de desarrollo de GOLD con las nuevas versiones de java y eclipse. Para el momento de desarrollo de este proyecto, las versiones actuales son Java 1.8 y Eclipse Mars.

­ Crear un conversor que permita cambiar el cambio de representación de la máquina de Turing entre máquinas escritura en transiciones a máquinas con escritura en los estados.

­ Agregar componente gráfico que informe al usuario que la ejecución de la máquina ha tomado muchas transiciones y que existe el riesgo de que la memoria de la máquina detenga del programa.

­ Agregar componente lógico que realiza comprobación de cadenas y escriba en la cinta los caracteres Y y N en caso de acierto y fallo respectivamente, similar a la herramienta que realiza dicha tarea en otros autómatas.

Apéndice A: Manual de usuario

Instalacion GOLD se distribuye como un plugin de Eclipse, para poder usarlo se requiere incluir los 3 .jar que lo componente en la carpeta plugins de nuestra distribucion de eclipse. El plugin fue desarrollado para Eclipse Indigo y se recomienda utilizar los que se disponen en la página del curso ‘Lenguajes y Máquinas ISIS­1106’de la Universidad de los Andes. http://sistemas.virtual.uniandes.edu.co/~isis1106/dokuwiki/doku.php?id=tutoriales:tutorial7

24

Page 25: Simulador de Máquinas de Turing para el lenguaje GOLD

Una vez incluidos los plugin se debe crear un nuevo Wokspace para poder ver las actualizaciones.

Creacion de Máquinas Para crear una máquina de Turing, se requieren importar las siguientes estructuras y librerías

Este tipo de autómata funciona similar a los otros tipos de autómatas, la diferencia que hay entre este y un “Transducer” radica en que la función de salida de los estados no se requiere y que la función de salida de las transiciones es una pareja de caracteres. El primero es lo que se escribe en la cinta y el segundo la acción que realiza la cabeza. Si se quiere marcar que la transición no realiza una acción de impresion, se imprime el caracter lambda. Las acciones que puede realizar la cabeza son L,S,R, que significan movimiento hacia la izquierda, cabeza estática y movimiento a la derecha respectivamente.

Referencias [Turing] Alan Turing, "On computable numbers, with an application to the Entscheidungsproblem", Proceedings of the London Mathematical Society, Series 2, 42 (1936­7), pp 230–265. Online versions: from journal website, from Turing Digital Archive, from abelard.org. Errata appeared in Series 2, 43 (1937), pp 544–546. [Mealy1950] Mealy, George H., "A method for synthesizing sequential circuits," Bell System Technical Journal, The , vol.34, no.5, pp.1045,1079, Sept. 1955 doi: 10.1002/j.1538­7305.1955.tb03788.x

25

Page 26: Simulador de Máquinas de Turing para el lenguaje GOLD

URL: http://ieeexplore.ieee.org.ezproxy.uniandes.edu.co:8080/stamp/stamp.jsp?tp=&arnumber=6771467&isnumber=6771466 [NotasLyM] Takahashi, S. Curso de Lenguajes y Máquinas: Notas de Clase. Departamento de Sistemas y Computación . Universidad de Los Andes. [En línea] Consultado 2 de Agosto del 2015. Disponible en: http://sistemas.virtual.uniandes.edu.co/~isis1106/dokuwiki/lib/exe/fetch.php?media=bibliografia:mts.pdf [GOLDMTeorico] Sotelo, A. GOLD 3: Un lenguaje de programación imperativo para la manipulación de grafos y otras estructuras de datos. Tesis de Maestría en Ingeniería Departamento de ingeniería de Sistemas y Computación Universidad de los Andes. Bogotá Enero 27 del 2012. [En línea] consultado 2 de Agosto del 2015. Disponible en: http://sistemas.virtual.uniandes.edu.co/~isis1106/dokuwiki/lib/exe/fetch.php?media=tutoriales:gold3_documento.pdf [JavaOracle] Oracle. Java Platform [En Línea] Consultado el 5 de Agosto del 2015 Disponible en: http://docs.oracle.com/javase/7/docs/technotes/guides/language/ [Cormen] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms. Cambridge, MA, U.S.A. : The MIT Press, 2009. Third edition.

26