Files
brahman/crates/modules/charka/corpus
sergio 4d9ce11b1e feat(charka): charka-shadow — validador en sombra + corpus COBOL
El pipeline COBOL->Rust queda completo (7 crates) y validado de punta
a punta.

charka-shadow certifica que el transpilador preserva la semántica del
COBOL original con una ejecución sombra: un intérprete que corre el Ir
directamente sobre charka-runtime, sin compilar nada. Es una segunda
ruta de ejecución, independiente del código que emite charka-codegen
— si la sombra y el transpilado divergieran, sería un bug.

- interpret(&Ir) -> Outcome ejecuta el IR y captura las líneas de
  DISPLAY; run_source(&str) corre el pipeline completo.
- Tope de pasos (Halt::StepLimit): un bucle que no termina se corta
  en vez de colgarse.
- Módulos: field (datos -> campos vivos) / interp (el motor).

Corpus nuevo crates/modules/charka/corpus/ — 7 programas COBOL de
complejidad graduada (01-hola .. 07-clasificar) con sus salidas
esperadas verificadas a mano: DISPLAY, aritmética con GIVING,
IF/ELSE, PERFORM TIMES/UNTIL, grupos, COMPUTE con paréntesis,
ROUNDED, IF anidado con AND. Material de prueba del pipeline entero.

11 tests (los 7 del corpus + fuente vacío, STOP RUN, tope de pasos,
error de léxico); fmt + clippy limpios.

No hay GnuCOBOL en la máquina: la referencia v1 es el corpus; un modo
futuro diferenciará contra el compilador real.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 21:23:07 +00:00
..

Corpus COBOL de charka

Programas COBOL de prueba, de complejidad graduada, para ejercitar el pipeline completo del transpilador (lexer → parser → IR → codegen) y el validador en sombra charka-shadow.

Cada programa NN-nombre.cob viene con su NN-nombre.expected: la salida correcta, una línea por DISPLAY.

programa nivel qué ejercita
01-hola 1 el programa mínimo — un DISPLAY de literal
02-aritmetica 2 datos, ADD/SUBTRACT/MULTIPLY con GIVING
03-condicional 3 IF / ELSE / END-IF
04-bucle 4 PERFORM n TIMES, un párrafo aparte, ADD in situ
05-factorial 4 PERFORM UNTIL en línea, MULTIPLY in situ
06-nomina 5 grupos, COMPUTE con paréntesis, ROUNDED, V99
07-clasificar 5 IF anidado, condiciones con AND

Formato

Los fuentes están en formato libre de COBOL (la línea entera es código; * al inicio es comentario). El comparador del validador ignora los espacios finales de cada línea — un campo PIC X(n) se muestra con su relleno de espacios, que aquí se omite por legibilidad.

La salida esperada

Las .expected se derivaron a mano de la semántica de COBOL'85. Cuando GnuCOBOL esté disponible, charka-shadow podrá regenerarlas desde el compilador de referencia y diferenciar contra él — el modo «sombra» pleno (original vs transpilado).