Jose Luis Montañes Ojados e2896fac5b Add lexer, parser and AST debug printer
Implements tokenizer for basic tokens (INT, ID, ASSIGN, PLUS, MINUS, NEWLINE, PRINT),
recursive descent parser for assignments and binary expressions, and
tree-formatted AST visualization with ast_debug().
2026-02-16 01:36:41 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 22:12:19 +01:00

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
Description
No description provided
Readme 166 KiB
Languages
C 98.9%
Objective-J 1%