Files
j-lang/readme.md
Jose Luis Montañes Ojados 74b426e12d first commit
2026-02-15 20:48:01 +01:00

52 lines
2.2 KiB
Markdown

# j-lang
La idea de j-lang es crear un "proto-lenguaje" parecido a python pero implementado desde 0 para validar y aprender más sobre la gestión de memoria.
Actualmente en `mem-heap\src\allocator.h` ya hay una implementeción de un Memory Allocator casi funcional.
## 🗺️ Hoja de Ruta: Proyecto Proto-Lenguaje
Esta ruta va desde lo más bajo (la memoria) hasta lo más alto (ejecutar código).
### Fase 1: El Cimiento (Gestión de Memoria) 🏗️
Objetivo: Tener un malloc y free propios que gestionen metadatos compactos.
Estado: ¡Ya estás aquí!
Tareas clave:
- [ ] Terminar CMA_malloc con la cabecera compactada (Size + Marked + InUse).
- [ ] Implementar una función CMA_free que pueda liberar un bloque específico.
### Fase 2: El Modelo de Objetos (Object Model) 📦
Objetivo: Definir cómo se ve un número, una cadena o una lista dentro de tu memoria C.
Conexión: Cada objeto de tu lenguaje será un struct en C que comienza con tu CMA_metadata.
Tareas clave:
- [ ] Crear un enum para los tipos (ENTERO, STRING, LISTA).
- [ ] Definir el struct Object genérico que envuelve tus datos.
### Fase 3: El Front-End (Lexer y Parser) 📖
Objetivo: Convertir el texto del código fuente en algo que C entienda.
Tareas clave:
- [ ] Lexer (Tokenizador): Romper el texto x = 10 en fichas: [ID:x], [OP:=], [NUM:10].
- [ ] Parser: Organizar esas fichas en un Árbol de Sintaxis Abstracta (AST). Por ejemplo, un nodo "Asignación" que tiene un hijo "x" y otro "10".
### Fase 4: El Motor (Evaluador o VM) ⚙️
Objetivo: Recorrer el árbol y "hacer" lo que dice.
Tareas clave:
- [ ] Crear una función recursiva eval(nodo) que ejecute la lógica.
Si es un nodo SUMA, suma los hijos. Si es un nodo IMPRIMIR, muestra en pantalla.
### Fase 5: El Recolector de Basura (Garbage Collector) 🧹
Objetivo: Automatizar la limpieza.
Tareas clave:
- [ ] Implementar Mark (Marcar): Recorrer todos los objetos accesibles desde tus variables y poner el bit Marked a 1.
- [ ] Implementar Sweep (Barrer): Recorrer todo el heap linealmente (usando tu función next_block). Si un bloque tiene Marked == 0 y InUse == 1, llamar a CMA_free.
## Estructura del proyecto
- vm: maquina virtual de j-lang
- projects: carpeta con scripts en j-lang