Durante esta actividad, los alumnos serán capaces de:
Un resaltador de léxico, usualmente llamado (de manera técnicamente incorrecta) resaltador de sintaxis, es una herramienta que resalta diferentes unidades léxicas de un código fuente, como palabras clave, operadores y comentarios, utilizando colores distintivos para mejorar la legibilidad y comprensión del código.
En las décadas de 1960 y 1970, cuando los lenguajes de programación comenzaron a surgir, los programadores se enfrentaron al desafío de escribir código en terminales de texto que carecían de capacidades visuales avanzadas. Con el advenimiento de los editores de texto y los entornos de desarrollo integrados (IDE, por sus siglas en inglés) en las décadas de 1980 y 1990, los resaltadores de léxico se convirtieron en características estándar. Los IDE modernos utilizan técnicas avanzadas de análisis léxico y sintáctico para proporcionar un resaltado preciso para una amplia variedad de lenguajes de programación.
Las expresiones regulares, que estudiamos como parte del tema de la teoría de autómatas, son fundamentales para el desarrollo de los resaltadores de léxico debido a su capacidad para analizar la estructura de lenguajes formales.
Este proyecto consiste en desarrollar un resaltador de léxico para BASIC (Beginners’ All-purpose Symbolic Instruction Code). BASIC es un lenguaje de programación de alto nivel que se distingue por su sencillez y accesibilidad, diseñado principalmente para principiantes. Fue diseñado en 1964 por John Kemeny y Thomas Kurtz en Dartmouth College, como un medio para facilitar la programación en computadoras a estudiantes que no fueran de áreas científicas.
El siguiente programa en BASIC imprime repetidamente "Hello, World!"
en la pantalla en un ciclo infinito.
10 PRINT "Hello, World!" 20 GOTO 10
Un programa en BASIC está conformado por una serie de instrucciones que pueden incluir comandos para imprimir en la pantalla, tomar entrada del usuario, realizar cálculos matemáticos y controlar la ejecución del programa mediante saltos, condiciones y ciclos. Cada línea del programa comienza con un número que indica su posición en el programa. Estos números de línea son utilizados para facilitar la edición del código y controlar el flujo del programa.
En los equipos ya conformados, escribir un programa en Clojure llamado resaltador.clj
que produzca un documento de HTML en el que se resalte el léxico de un programa en BASIC contenido en un archivo dado.
La versión de BASIC que debe reconocer su programa es la descrita informalmente en las páginas X, XI y XII del libro BASIC Computer Games: Microcomputer Edition y que es utilizada por los más de cien programas contenidos ahí.
Las categorías de tokens que debe ser resaltados son:
"
). Dicha secuencia no puede incluir saltos de línea (en otras palabras, una cadena de caracteres debe iniciar y terminar en la misma línea) ni tampoco puede incluir el carácter de comillas dobles.
REM
seguido de cero o más caracteres hasta el final de la línea.
(
y )
), dos puntos (:
), coma (,
), punto y coma (;
), suma (+
), resta (-
), multiplicación (*
), división (/
), potencia (^
), igual (=
), diferente (<>
), menor (<
), menor o igual (<=
), mayor (>
), mayor o igual (>=
).
Cualquier otro carácter que no sea parte de los tokens arriba listados debe ser resaltado como un token erróneo tal como se muestra en el ejemplo que se muestra más adelante.
El programa debe definir una función llamada basic->html
que reciba como argumento una cadena de caracteres con el nombre de un archivo de texto en lenguaje BASIC y debe generar otro archivo con el mismo nombre pero con extensión .html
con el contenido esperado.
El reconocimento de los tokens debe hacerse a través de expresiones regulares.
El código fuente de la entrada debe convertirse a HTML y colocarse completamente dentro de un elemento <pre>
...</pre>
en el cuerpo del documento de salida. A su vez, cada token que deba ser resaltado debe quedar dentro de un elemento <span>
...</span>
. El coloreado de los tokens se debe llevar a cabo usando CSS.
Los colores utilizados para resaltar cada tipo de token quedan al gusto y criterio de cada equipo. Sin embargo, es importante que se pueda distinguir fácilmente una categoría léxica de cualquier otra. Así mismo, debe existir un buen contraste entre los colores del texto y su fondo.
Todo el whitespace (espacios, tabuladores, saltos de línea) del archivo de entrada debe quedar exactamente igual en el documento de salida.
Para evitar conflictos con ciertos caracteres especiales de HTML es indispensable que ciertos caracteres en el archivo de entrada sean reemplazados en el documento de salida por sus correspondientes secuencias de escape:
<
(menor que) ➔ <
>
(mayor que) ➔ >
&
(ampersand) ➔ &
Cada función de Clojure definida en su programa debe contar con una cadena de documentación con un breve enunciado de su intención.
Todo el código debe seguir las convenciones de estilo y codificación de Clojure.
Su programa de Clojure debe poder resaltar correctamente el léxico de cualquiera de los más de cien programas del libro de BASIC Computer Games.
Suponiendo que se tiene el siguiente archivo con un programa en BASIC llamado sinewave.bas
:
10 PRINT TAB(30);"SINE WAVE" 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 30 PRINT: PRINT: PRINT: PRINT: PRINT 40 REMARKABLE PROGRAM BY DAVID AHL 50 B=0 100 REM START LONG LOOP 110 FOR T=0 TO 40 STEP .25 120 A=INT(26+25*SIN(T)) 130 PRINT TAB(A); 140 IF B=1 THEN 180 150 PRINT "CREATIVE" 160 B=1 170 GOTO 200 180 PRINT "COMPUTING" 190 B=0 200 NEXT T 999 END @#%
Para crear el documento HTML que resalte su léxico se tendría que ejecutar la siguiente expresión en Clojure:
(basic->html "sinewave.bas")
El documento HTML recién creado debe llamarse sinewawe.html
y debe estar situado en el mismo directorio que el archivo original (sinewave.bas
). Al abrir el documento HTML en un browser se debe ver algo similar a lo que se muestra a continuación:
Es importante notar que los caracteres que no son parte de un token válido están resaltados claramente con un color distinto a los demás tokens que sí son válidos (rojo en el ejemplo de arriba).
El archivo fuente resaltador.clj
debe incluir en la parte superior y dentro de un comentario la información personal de los autores (matrícula y nombre). Por ejemplo:
;---------------------------------------------------------- ; Proyecto: Resaltador de léxico de BASIC ; Fecha: 12 de junio, 2024. ; Autores: ; A01770771 Sylvie Laufeydottir ; A01777771 Loki Laufeyson ;----------------------------------------------------------
Crear una carpeta llamada resaltador
. Colocar en esta carpeta los siguientes archivos:
resaltador.clj
.bas
) con los que probaron su programa
Crear un archivo llamado resaltador.zip
que contenga la carpeta resaltador
y todo su contenido.
Para entregar el archivo resaltador.zip
, ingresa los siguientes datos:
Solo es necesario que lo entregue un miembro del equipo.
La fecha límite es el miércoles 12 de junio.