Creación de un REPL en Python para Lenguaje de Programación

Clase 11 de 58Curso de Creación de Lenguajes de Programación: Intérpretes

Resumen

¿Cómo interactuar directamente con un Lexer utilizando un REPL?

El funcionamiento de un Lexer es fascinante, pero, llegó el momento de avanzar y poder trabajar con él de manera directa a través de los comandos. Imagina generar o inventar cualquier tipo de expresión y ver cómo el Lexer las procesa correctamente. Para esto, contamos con los REPL (Read, Evaluate, Print, Loop). Aunque aún no evaluaremos expresiones, podemos generar una versión inicial para interactuar con nuestro lenguaje de programación Platzi. Exploremos cómo construir este entorno de ejecución interactiva.

¿Cómo configuramos un REPL en Python?

Para crear un REPL en Python, comenzamos con algunos pasos esenciales:

  1. Crear Archivos Principales:

    • REPL.py: Contendrá la lógica para recibir strings, convertirlos en tokens y eventualmente en un AST para evaluación futura.
    • main.py: Actuará como el punto de entrada para ejecutar el REPL.
  2. Importar Componentes Necesarios:

    • Importar el lexer de nuestro lenguaje y otros componentes esenciales como definiciones de token.
  3. Implementar Funcionalidades del REPL:

    • Crear constantes como endoffile_token para definir los límites de procesamiento.
    • Utilizar el operador 🦭 (walrus operator en Python 3.8) para asignar y validar variables dentro del bucle, permitiendo una interacción fluida al ingresar comandos.
# Implementación básica del REPL
def start_repl():
    while (source := input('>> ')) != 'salir':
        lexer = Lexer(source)
        while (next_token := lexer.next_token()) != endoffile_token:
            print(next_token)

¿Cómo integrar REPL en el archivo principal y ejecutarlo?

En este paso culminaremos enlazando nuestra implementación inicial del REPL con el archivo principal (main.py).

  • Punto de Entrada: Usar if __name__ == '__main__' para establecer main.py como el punto de inicio.
  • Función principal: Definir una función principal (main) que dará la bienvenida e instrucciones al usuario, y luego iniciará el REPL.
# Archivo main.py
import repl

def main():
    print("Bienvenido al lenguaje de programación Platzi.")
    print("Escribe una oración para comenzar")
    repl.start_repl()

if __name__ == '__main__':
    main()

¿Qué más puedes explorar y cómo resolver desafíos?

Hasta aquí, tu REPL debería estar funcionando para recibir comandos y lexeando correctamente las expresiones. Sin embargo, podemos enfrentarnos a bugs, como con los identificadores que contienen guiones bajos, lo cual es un reto común.

  • Resolver Errores: Encontrar y solucionar esos errores mejora tus habilidades técnicas. Considera probar diferentes tipos de entradas y ajustar el Lexer según se requiera.
  • Comparar Soluciones: Consulta soluciones en GitHub para ampliar tu perspectiva y ver cómo otros han resuelto problemas similares.

El camino hacia el aprendizaje de los lenguajes de programación está lleno de logros y retos, pero cada paso que das te acerca más a entender y desarrollar plataformas complejas. Desde aquí, anima a continuar con el parser y transformar tokens en AST, profundizando en la mecánica de los intérpretes. ¡Sigue avanzando en este emocionante aprendizaje!