Índice de entradas del conversor
📘 Tabla de Contenidos
Transpilador ZX BASIC → SuperBasic
Dos versiones en paralelo: Moderno y QL
En las últimas entradas hemos avanzado en el diseño interno del transpilador ZX BASIC → SuperBasic, definiendo estructuras de datos, el sistema de tokens y un Lexer optimizado para ejecutarse en un Sinclair QL real. Durante ese proceso me ha surgido una idea interesante para quienes quieran usar este proyecto no solo como herramienta, sino también para aprender sobre compiladores.
Vamos a generar dos versiones del transpilador en paralelo
El objetivo es disponer de dos rutas de ejecución simultáneas, una preparada para migrar a SuperBASIC, y la otra usando elementos actuales. Ambas conviven dentro del mismo proyecto. La mayoría de procesos son comunes, por lo que es sencillo ver cómo pasar de una a otra. Además incluyo una pantalla donde puedes seleccionar cuál quieres lanzar.
1) Versión Moderna
Diseñada para:
- Usar estructuras avanzadas de .NET (List, Dictionary, etc.).
- Desarrollo más rápido, depuración más cómoda y diagnósticos completos.
- Actuar como referencia clara del algoritmo general.
2) Versión compatible con SuperBasic
Implementa las estructuras reales que usará la versión final del QL:
- TokenBuffer como arreglo dinámico de registros empaquetados.
- Formato big‑endian de 16 bits, igual que el Motorola 68008.
- Procesos simples y lineales, estilo SuperBasic.
Esta versión sirve como puente entre .NET moderno y la implementación final en un QL real.
¿Por qué dos versiones?
✔ Didáctica
Muestra cómo implementar un compilador moderno y cómo trasladarlo a una plataforma retro con limitaciones reales.
✔ Validación de algoritmos
Al ejecutar ambos motores en paralelo es fácil encontrar divergencias antes de portar código al QL real.
✔ Documentación y mantenimiento
Permite explicar y probar Lexer, Parser, Semántico y Emitter tanto desde un enfoque moderno como desde un enfoque retro.
Pantalla lanzadora
Incluyo una interfaz WinForms que permite seleccionar:
- Modo: Moderno o QL‑Prep
- Ruta y nombre del fichero BASIC
- Modo Verbose
El lanzador invoca automáticamente el director correspondiente con las opciones necesarias.
Arquitectura del proyecto
El proyecto utiliza .NET Framework 4.8 para asegurar compatibilidad con Windows 7/8/10/11 y aprovechar WinForms clásico. Para quienes pidan Windows XP, 95 o 3.11… lo siento, ¡aún no he retrocedido tanto! (Aunque con lo voluble que soy, cualquiera sabe si un día aparece una versión en Turbo‑C o Turbo Pascal 😄).
Estructura general del proyecto:
ZX2SB/
Lanzador/ -> Pantalla lanzadora + consola
LauncherForm.vb
ConsoleLauncher.vb
Director/ -> Directores del proyecto
Moderno/
ModernDirector.vb
QL/
QLDirector.vb
ITranspilerDirector.vb -> Contrato común
Motor/
Moderno/ -> Lexer / Parser / Semantic / Emitter modernos
ModernLexer.vb
ModernParser.vb
ModernSemantic.vb
ModernEmitter.vb
QL/ -> Lexer / Parser / Semantic / Emitter QL‑Prep
QLLexer.vb
QLParser.vb
QLSemantic.vb
QLEmitter.vb
Comunes/ -> Elementos compartidos
TokenKind.vb
Keywords.vb
AppOptions.vb
Diagnostics.vb
Endian.vb
TextUtils.vb
Paths.vb
Ejemplos/ -> Archivos .bas de prueba
demo1.bas
Documentación/ -> README y documentación
README.md
ZX2SB.vbproj -> Proyecto .NET Framework 4.8 (WinForms)
Program.vb -> Sub Main (arranque del lanzador)
Conclusión
A partir de ahora el desarrollo continúa en dos líneas paralelas:
- Moderno: claridad, pruebas y comodidad.
- QL‑Prep: compatibilidad y preparación para SuperBasic.
Ambas serán documentadas paso a paso en el blog. Por ahora ya está la estructura base en el repositorio GIT del proyecto, y los directores están preparados para llamar a los procesos (que de momento solo muestran un mensaje en pantalla).
No hay comentarios:
Publicar un comentario