miércoles, 13 de octubre de 2010

miniSL parte 1

Hace algún tiempo escribí una serie de entradas sobre cómo hacer un intérprete LISP. El LISP es un lenguaje perfecto para iniciarse en la escritura de lenguajes de script propios, pero no es excesivamente amistoso a la hora de programar. De hecho, jocosamente se le llama "Lots of Insipid, Stupid Parentheses" que traducido es "montones de insípidos y estúpidos paréntesis" y muchas cosas más. La verdad es que, salvo para los fanáticos, el que sólo haya un tipo de parentización en LISP no ayuda visualmente a comprender la estructura del programa.
  • En LISP se escribe:  (+ (* 5 2) x)
  • Lo que usualmente se escribe como: 5*2+x
El uso de operadores infijos y precedencias despeja la expresión y facilita su lectura. Esto no es gratis. El reconocedor sintáctico (parser) de un lenguaje con operadores infijos y precedencias es algo más complejo. Por eso creo que es muy interesante ver de la manera más simplificada posible cómo funciona un lenguaje script con estas características.

De estas ideas surge miniSL ("mini scripting language" o  "mini lenguaje de script") que, en poco más de mil líneas de código C++, implementa un lenguaje con las siguientes características destacables:
  • Sintaxis no trivial con operadores prefijos, infijos y postfijos.
  • Sentencias de control de selección (if) y bucle (while).
  • Recolección de basura.
  • Manejo explícito de entornos (let).
  • Funciones anónimas (funciones lambda).
  • Bucle REPL.
  • Varios tipos de datos básicos: booleano, entero y cadena.
  • Distinción entre declaración y modificación de variables.
  • Posibilidad de definición de funciones nativas adicionales. 
En la siguiente entrada del blog dedicada a este lenguaje empezaremos con las estructuras de datos que vamos a utilizar.

0 comentarios:

Publicar un comentario