Files
brahman/crates/modules/charka/corpus
sergio 4df7478b71 feat(charka): EVALUATE — el case de COBOL
EVALUATE atraviesa el pipeline entero — antes el parser lo guardaba
crudo como Stmt::Unknown.

- IR: Stmt::Evaluate { subject, whens, other } con
  WhenBranch { values, body }. Varios WHEN apilados comparten cuerpo;
  WHEN OTHER es el caso por defecto.
- Parser: EVALUATE subject WHEN v1 WHEN v2 ... [WHEN OTHER ...]
  END-EVALUATE.
- Codegen: lo baja a una cadena if / else if / else — una rama se
  elige si el sujeto es igual a alguno de sus valores, sin caída.
- Shadow: el intérprete evalúa el sujeto y ejecuta la primera rama
  cuyos valores casen, o el WHEN OTHER.
- Corpus: programa nuevo 09-evaluar (EVALUATE por valor anidado en un
  PERFORM VARYING, con WHEN apilados y WHEN OTHER). Verificado: el
  intérprete sombra y el crate compilado por scaffold dan la misma
  salida.

Alcance v1: EVALUATE por igualdad de valor; no la forma EVALUATE TRUE
con condiciones ni los rangos THRU.

Tests: charka-ir 19, charka-codegen 16, charka-shadow 14. fmt +
clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 21:37:28 +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
08-varying 4 PERFORM VARYING — el bucle con variable de control
09-evaluar 5 EVALUATE — el case de COBOL, WHEN / OTHER

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).