tawasuyu

tawasuyu/brahman

Rust 572TOML 217Markdown 68JSON 198326 Definitions

⎇ d3cdbb2d2d5bb34442417328aabb9235fcff5c05 docs/changelog/charka.md Markdown · 61 lines · 3.0 KB History raw

feat(charka): charka-parser — COBOL'85 (subconjunto) a AST d3cdbb2d2 · sergio ·

1# Changelog — charka
2
3Transpilador COBOL → Rust. El módulo más grande del ecosistema (Fase D
4del plan macro) — el parser COBOL completo es un esfuerzo multi-mes.
5
6### feat(charka-parser): parser COBOL'85 → AST
7
8Crate nuevo `crates/modules/charka/charka-parser` — la segunda etapa del
9pipeline: `Vec<Token>` → `Program` (AST). Alcance v1: el esqueleto del
10programa.
11
12- `parse(&[Token]) -> Result<Program, ParseError>`. El AST: `Program`
13  (`program_id`, `data`, `paragraphs`), `DataItem`, `Paragraph`,
14  `Sentence`.
15- Particiona el flujo de tokens en las cuatro divisiones por sus
16  encabezados (`X DIVISION`); de la IDENTIFICATION extrae el
17  `PROGRAM-ID`.
18- **DATA division** → árbol de `DataItem`: número de nivel, nombre,
19  cláusula `PICTURE` reensamblada (`S9` `(` `5` `)` `V99` →
20  `S9(5)V99`) y `VALUE`. Anida por número de nivel — 01 y 77 son
21  raíces, 88 cuelga del ítem precedente.
22- **PROCEDURE division** → `Vec<Paragraph>`, cada párrafo con sus
23  `Sentence` (tokens crudos; sin parseo a nivel de statement, eso es
24  `charka-ir`). Las sentencias previas al primer encabezado van a un
25  párrafo implícito de nombre "".
26- Parser tolerante: salta encabezados de `SECTION`, entradas `FD`/`SD`
27  y cláusulas de datos que no sean `PICTURE`/`VALUE`. `ParseError` sólo
28  ante un número de nivel inválido o un dato sin nombre.
29- 15 tests: PROGRAM-ID (forma larga y `ID` corta), ítems planos y
30  anidados, reensamblado de PICTURE, variantes de VALUE, niveles 88,
31  `FILLER`, párrafos y párrafo implícito, encabezado de sección,
32  programa completo de punta a punta, nivel inválido.
33
34### feat(charka-lexer): tokenizador de COBOL
35
36Crate nuevo `crates/modules/charka/charka-lexer` — la primera etapa del
37pipeline del transpilador: texto COBOL → secuencia de `Token`.
38
39- **Lexer deliberadamente tonto**: no conoce keywords ni la cláusula
40  `PICTURE`; emite `Word` para todo identificador y deja la
41  clasificación al parser.
42- Tokens: `Word` (palabras COBOL con guiones internos), `Number`
43  (literal sin signo), `String` (comillas dobladas colapsadas),
44  `Period` (el `.` terminador), `Symbol` (paréntesis, separadores y
45  operadores `+ - * / ** = < > <= >= <>`).
46- Dos formatos de fuente: **fijo** (la tarjeta de 80 columnas — cols
47  1-6 secuencia, 7 indicadora, 8-72 código, 73-80 identificación) y
48  **libre**. Comentarios por la columna indicadora (`*`/`/`) o por `*`
49  inicial en formato libre.
50- Cada `Token` lleva línea y columna 1-based; `LexError` tipado
51  (literal sin cerrar, carácter inesperado).
52- Limitación v1 documentada: no soporta continuación de literales entre
53  líneas (indicador `-`). Subconjunto COBOL'85, el hito intermedio.
54- 17 tests: sentencias, palabras con guiones, literales y comillas
55  dobladas, números vs terminador, operadores, ambos formatos,
56  tracking de posición, errores.
57
58### feat(charka-bcd): aritmética decimal con semántica COBOL
59
60(Pre-existente.) `Picture` + `Decimal` de punto fijo exacto — ver el
61SDD del módulo. 22 tests.

charka.md

Changelog — charka

Transpilador COBOL → Rust. El módulo más grande del ecosistema (Fase D del plan macro) — el parser COBOL completo es un esfuerzo multi-mes.

feat(charka-parser): parser COBOL'85 → AST

Crate nuevo crates/modules/charka/charka-parser — la segunda etapa del pipeline: Vec<Token> → Program (AST). Alcance v1: el esqueleto del programa.

feat(charka-lexer): tokenizador de COBOL

Crate nuevo crates/modules/charka/charka-lexer — la primera etapa del pipeline del transpilador: texto COBOL → secuencia de Token.

feat(charka-bcd): aritmética decimal con semántica COBOL

(Pre-existente.) Picture + Decimal de punto fijo exacto — ver el SDD del módulo. 22 tests.