# 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`  |
| `10-condicion`      | 5     | nombres de condición (nivel 88) en `IF`            |
| `11-tabla`          | 6     | tablas (`OCCURS`) y referencias con subíndice      |
| `12-cadenas`        | 6     | `STRING` (concatenar) y `UNSTRING` (partir)        |
| `13-inspeccion`     | 6     | `INSPECT` — contar (`TALLYING`) y reemplazar       |
| `14-clasifica`      | 6     | `EVALUATE TRUE` y rangos `WHEN ... THRU`           |
| `15-resetear`       | 6     | `INITIALIZE` — resetear datos y grupos             |
| `16-bandera`        | 5     | `SET` de nombres de condición (nivel 88) a `TRUE`  |
| `17-rangopar`       | 5     | `PERFORM ... THRU` — un rango de párrafos          |
| `18-fichero`        | 7     | E/S de ficheros: `SELECT`/`FD`/`OPEN`/`READ`/`WRITE`|
| `19-reporte`        | 6     | PICTURE de edición (`Z,ZZ9.99`) — formato de informe|

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