Métodos computacionales

Proyecto: Resaltador de léxico de JSON

Objetivo

Durante esta actividad, los alumnos serán capaces de:


Introducción

Un resaltador de léxico, usualmente llamado (de manera técnicamente incorrecta) resaltador de sintaxis, es una herramienta que resalta diferentes componentes léxicos 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 el lenguaje JSON (JavaScript Object Notation). JSON es un formato ligero y fácil de leer utilizado para el intercambio de datos estructurados entre diferentes sistemas. Se ha convertido en un estándar ampliamente utilizado en el desarrollo web y en la comunicación entre aplicaciones. Para fines prácticos, JSON es un subconjunto del lenguaje JavaScript.

Un documento de JSON está compuesto por valores que pueden ser booleanos, números, cadenas de caracteres, arreglos y objetos. Los objetos son similares a los mapas o diccionarios de otros lenguajes: son una colección de pares de clave-valor, donde las claves son cadenas de caracteres y los valores pueden ser de cualquiera de los tipos de datos ya mencionados.

Descripción

En los equipos ya conformados, escribir un programa en Clojure llamado resaltador.clj que produzca un documento de HTML+CSS en el que se resalte el léxico de un archivo JSON proporcionado.

Los tipos de tokens que debe ser resaltados son los que están documentados en el sitio oficial de JSON.org, los cuales se enumeran a continuación para evitar alguna confusión:

* NOTA: Por simplicidad se considera que una cadena de caracteres es una secuencia de cero o más caracteres delimitados entre comillas dobles ("). Dicha secuencia no puede incluir un enter (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 a no ser que venga como parte de una secuencia de escape (\").

Cualquier otra serie de caracteres 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.

Consideraciones adicionales

Ejemplo

Suponiendo que se tiene el siguiente archivo de texto en formato JSON llamado mi_ejemplo.json:

[
  {"movie": "King Kong",
   "year": 1933,
   "director": "Merian C. Cooper",
   "oscarWinner": null,
   "imdb": 790.0E-2},
  {
    "movie"       : "Jaws",
    "year"        : 1975,
    "director"    : "Steven Spielberg",
    "oscarWinner" : true,
    "imdb"        : 0.80E+1
  },
  {"movie":"Avengers: \"Endgame\"","year":2019,"imdb":8.4},
  { badToken : "bad string (no closing quotes) }
]

Para crear el documento HTML que resalte su léxico se tendría que ejecutar la siguiente expresión en Clojure:

(json->html "mi_ejemplo.json")

El documento HTML recién creado debe llamarse mi_ejemplo.html y debe estar situado en el mismo directorio que el archivo original (mi_ejemplo.json). 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).

¿Qué se debe entregar?

El archivo fuente del programa 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 JSON
; Fecha: 14 de junio, 2023.
; Autores:
;          A01770771 Sylvie Laufeydottir
;          A01777771 Loki Laufeyson
;----------------------------------------------------------

Instrucciones para subir archivo

Para entregar el archivo resaltador.clj, ingresa los siguientes datos:

Solicitar NIP

Solo es necesario que lo entregue un miembro del equipo.

La fecha límite es el miércoles 14 de junio.

Referencias