Marcado de sintaxis

marzo 18, 2008

Mi primera aportación a dotBF … y rotundo éxito, creo y espero que opinen mis compañeros igual 🙂

Esta mañana he tenido una primera aprox al tema del marcado de sintaxis en los “gtksourceviews”. Estos elementos GTK son hijos de los “TextView” de toda la vida, pero marcando con colorines las palabras reservadas de los lenguajes.

Como ya sabréis BrainFuck no tiene palabras reservadas, solo símbolos… por lo que la mayor parte de los archivos de ejemplo de otro lenguajes como Java o Python han sido de poca ayuda.

Cuando empecé esta mañana ya había implementada una primera versión: usaba la versión 1 de los “gtksourceview”. Tras ver ejemplos de “gtksourceviews” de ambas versiones he tirado para adelante con el cambio y he creado el archivo de expresiones regulares del lenguaje. Un pequeño repaso al howto de Python para expresiones regulares y la cosa ha sido bastante fácil.

Más difícil ha sido adecuar el Gui existente, ya que muchas de las funciones que usa la versión 1 no existen en la 2 y viceversa. Además, muchas clases han acortado el nombre y, aunque funcionan prácticamente igual, no es 100% lo mismo.

Una vez terminados esos cambios dotBF ya goza de marcado de sintaxis (hasta los comentarios). ¿Pegas? Pues que no podemos obtener marca de “brackets” emparejados, ya que los símbolos < y > que, normalmente, van emparejados, en Brainfuck no tiene porque y el marcado automático los colorea, cosa que no debería pasar… se buscarán soluciones, aunque ahora no le veo ninguna.

P.S. El marcado de sintaxis también funciona en el resto del entorno, por ejemplo, en Gedit ya tenemos “BrainFuck mode” 😉

Anuncios

¡¡Logo!!

marzo 17, 2008

Logo

Gracias a Carlos González Morcillo, tenemos este magnífico logo. ¿Alguna interpretación al respecto?


Gtk y Threads de python

marzo 16, 2008

La interfaz de dotBF está construída con python-gtk y utiliza hilos para ejecutar el interprete de Brainfuck con el código dado. De esta forma, la interfaz no se queda “colgada” esperando a que acabe el intérprete y, así, poder parar la ejecución del programa o realizar cualquier otra tarea.

Existe una clase en el paquete threading llamada Thread, de la cual el intérprete hereda. A todos los efectos, el intérprete es un hilo de Python que se ejecuta cuando la interfaz lo decida. El interprete está obligado a implementar el método run(self), que será el que se invoque cuando en la interfaz se haga la llamada interpreter.start(). Si el hilo es lo suficientemente pesado como para tardar más de 3 segundos en ejecutarse, entonces toma el control de la ejecución y deja a la interfaz parada debido a que, en ese momento, tiene una mayor prioridad.

Para solucionar este problema hay que forzar el cambio de contexto con time.sleep(0). Cada vez que se ejecute la instrucción anterior se forzará a que la interfaz tome de nuevo el control y realice las tareas que tenga pendientes (repintar, atender a un evento…). Para dotBF, concretamente, time.sleep(0) se realiza en cada paso del intérprete y funciona razonablemente bien.


¡¡Intérprete e interfaz gráfica!!

marzo 3, 2008

dotBF va para adelante. El intérprete de BF ya está escrito en python y funcional. Lamentablemente nos hemos dado cuenta que es BASTANTE más lento que beef (escrito en C). Era de esperar, pero… ¡no tanto!.

Por otro lado, Javi se ha puesto a hacer una interfaz bastante currada donde están contemplados los requisitos básicos que se plantearon inicialmente. Escrita también en Python, la interfaz utiliza librerías gráficas de GTK.

En cuanto decidamos dónde metemos todo publicaremos la dirección del repositorio donde os podreis descargar el código fuente y participar en el desarrollo (si quereis, claro).


Comienza el desarrollo de .BF

enero 28, 2008

Para la primera versión, está pensado que el entorno de desarrollo contenga lo siguiente:

  • Una ventana de edición
  • Un log de salida del programa
  • Una ventana que muestre el estado de la memoría.

Estará hecho en Python, utilizando las librarías gráficas de GTK. Por ello, está pensado para sistemas GNU/Linux, aunque podrá ser utilizado en otros sistemas (a los que NO se proporcionará soporte desde este proyecto).