Files
brahman/crates/modules/charka/corpus
sergio 321e6f8e27 feat(charka): PERFORM VARYING — el bucle con variable de control
El bucle más usado de COBOL, que antes el parser degradaba a un
PERFORM vacío (un hueco de corrección real). Ahora atraviesa el
pipeline entero como una rebanada vertical.

- IR: PerformControl::Varying { var, from, by, until }.
- Parser: reconoce PERFORM VARYING var FROM x BY y UNTIL cond en
  línea (END-PERFORM) y fuera de línea (PERFORM párrafo VARYING ...).
- Codegen: emite var = from; while !(until) { cuerpo; var += by; }.
- Shadow: el intérprete inicializa la variable, evalúa la condición
  antes de cada vuelta e incrementa al final.
- Corpus: programa nuevo 08-varying (suma 1..10). Verificado: el
  intérprete sombra y el crate compilado por scaffold dan ambos
  SUMA 1 A 10 = 00055 — las dos rutas concuerdan.

Tests: charka-ir 18, charka-codegen 15, charka-shadow 13. fmt +
clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 21:33:14 +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

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