El punto es que por motivos realmente académicos, me he puesto a investigar en cómo escribir un intérprete, que resulta siempre más fácil que escribir un compilador. Digamos que en muchos sentidos, un intérprete solamente tiene que hacer la labor lexicográfica, la de entender que la instrucción es correcta sintácticamente y entonces ejecutarla, mientras que si pensamos en un compilador, hay que hacer todo esto y además, generar código de máquina que traduzca cada instrucción. La realidad es que no es nada fácil hacer un compilador. Recuerdo que me dijeron que el primer compilador de Fortran llevó un par de años horas/hombre. No sé si sea cierto, pero es claro que la historia atrás de este tipo de programas es muy interesante.
Regresando al tema, ¿qué tan difícil será escribir un intérprete? Se me ocurrió que debería empezar por ver los más elementales y hallé que Adam Dunkels escribió un pequeño intérprete de BASIC para su primera computadora (una ABC80). Dice el autor que en un par de horas tuvo una primera versión, mientras estaba en las sesiones de ACM/Usenix MobiSys del 2006. Su BASIC se denomina uBASIC y no es interactivo, es decir, se escribe el programa y se ejecuta. Puede manejar las siguientes instrucciones: if/then/else, for/next, let, goto, gosub, print, y desde luego, analizar las expresiones matemáticas. Soporta solamente variables del tipo entero y solamente éstas pueden tener un solo caracter para identificarlas, así, en principio solamente hay 26 variables (las letra del alfabeto). El autor ha hecho un API de su uBASIC con la intención de servir para quizás un pequeño lenguaje de scripts. La idea puede ser además útil para aplicaciones en donde hay severas limitaciones de memoria.
El autor ha puesto a disposición de la comunidad su código, y puede verse aquí . Sin duda que un lenguaje interpretado tan simple puede ser muy útil para entender qué pasos seguir para escribir intérpretes. Evidentemente BASIC está literalmente muerto, pero no por ello es totalmente inútil. Puede servir para enseñarnos aún algunas cosas.
Referencias: