PASC toma un archivo .psc, comprueba su sintaxis y sus tipos, lo traduce a Go y genera un binario nativo. Está pensado como una base moderna para ejecutar pseudocódigo de estilo PSeInt con mejores diagnósticos y aprovechando el compilador de Go como backend.
Important
El proyecto está en una etapa temprana (Indev). Ya puede ejecutar programas útiles, pero todavía no implementa todo el lenguaje de PSeInt ni debe considerarse compatible al 100 %.
- Compilación real: el pseudocódigo se transforma en Go y después en un ejecutable nativo.
- Análisis por etapas: incluye lexer, parser, árbol sintáctico tipado, análisis semántico y generación de código.
- Errores fáciles de ubicar: muestra el archivo, la línea, la columna, el fragmento afectado y un resumen de errores y advertencias.
- Tipado y conversiones: valida operaciones y asignaciones antes de generar el programa, con soporte para conversiones numéricas seguras.
- Sintaxis familiar: reconoce palabras clave sin distinguir mayúsculas y minúsculas.
- Entrada y salida interactiva: permite leer y escribir varios valores, además de limpiar la terminal.
- Modo de depuración: expone tokens, árboles y código generado para facilitar el desarrollo del compilador.
Actualmente se soportan:
- Programas delimitados por
AlgoritmoyFinAlgoritmo. - Tipos
Entero,Real,CadenayLogico. - Declaraciones explícitas y asignaciones.
- Literales numéricos, cadenas y valores lógicos.
Escribir,LeeryBorrar Pantalla.- Condicionales
Si,SiNoyFinSi. - Ciclos
Mientras ... HaceryFinMientras. - Selección con
Segun, casos,De Otro ModoyFinSegun. - Operadores aritméticos, relacionales y lógicos, incluyendo módulo.
- Paréntesis y precedencia de operadores.
- Go 1.25 o posterior.
- Git, únicamente si vas a clonar el repositorio.
El compilador invoca a Go internamente para construir el programa generado, por lo que go debe estar disponible en el PATH incluso después de compilar esta herramienta. (Mejora que se debe hacer)
Clona el repositorio y compila la herramienta:
git clone https://github.com/sea2horses/pseint-compiler.git
cd pseint-compiler
go build -o pseintc .También puedes usarla directamente desde el código fuente con go run ..
Ejecuta el compilador indicando un archivo .psc con -file:
./pseintc -file demos/hello_world.pscO, sin construir primero el compilador:
go run . -file demos/hello_world.pscPor el momento, cada ejecución realiza todo el proceso:
- Lee y valida el pseudocódigo.
- Genera
build/out.go. - Compila el ejecutable
build/out(build/out.exeen Windows). - Ejecuta el binario automáticamente.
Crea un archivo llamado mayoria_edad.psc:
Algoritmo MayoriaDeEdad
Definir edad Como Entero
Escribir "¿Cuántos años tienes?"
Leer edad
Si edad >= 18 Entonces
Escribir "Eres mayor de edad"
SiNo
Escribir "Eres menor de edad"
FinSi
FinAlgoritmo
Compílalo y ejecútalo:
./pseintc -file mayoria_edad.pscUsa -debug para ver las etapas internas, como los tokens, el AST, el árbol tipado y el código Go generado:
./pseintc -debug -file demos/operations.pscLa base del compilador ya funciona de extremo a extremo, pero aún faltan piezas importantes para alcanzar una experiencia completa y una compatibilidad amplia con PSeInt:
- Añadir ciclos
ParayRepetir ... Hasta Que. - Implementar subprocesos, funciones y retorno de valores.
- Incorporar arreglos/dimensiones y acceso por índices.
- Agregar caracteres y más variantes de la sintaxis de PSeInt.
- Completar el operador de potencia, que el lexer reconoce pero el análisis semántico todavía no admite.
- Permitir compilar sin ejecutar, elegir el nombre y la ubicación del binario, y mostrar una opción de versión o ayuda más completa.
- Manejar de forma explícita errores y entradas largas durante
Leer. - Ampliar y estabilizar las reglas de alcance, asignación implícita y conversiones numéricas.
- Crear una suite automatizada de pruebas unitarias, de integración y de programas
.psc. - Publicar versiones etiquetadas, binarios precompilados y una licencia para el proyecto.
El directorio demos contiene programas para probar entrada/salida, operaciones, condicionales, ciclos y Segun. Por ejemplo:
go run . -file demos/operations.psc
go run . -file demos/ages.psc
go run . -file demos/switch.pscPara comprobar que todos los paquetes compilan:
go test ./...Actualmente no hay casos de prueba automatizados; este comando funciona como comprobación de compilación hasta que se incorpore la suite de pruebas.
Las contribuciones son bienvenidas, especialmente para ampliar la sintaxis compatible, mejorar los diagnósticos y añadir pruebas. Antes de hacer un cambio grande, conviene abrir un issue para acordar el alcance y evitar implementaciones duplicadas.