1# Corpus COBOL de charka
2
3Programas COBOL de prueba, de complejidad **graduada**, para ejercitar
4el pipeline completo del transpilador (lexer → parser → IR → codegen) y
5el validador en sombra `charka-shadow`.
6
7Cada programa `NN-nombre.cob` viene con su `NN-nombre.expected`: la
8salida correcta, una línea por `DISPLAY`.
9
10| programa | nivel | qué ejercita |
11| ------------------- | ----- | -------------------------------------------------- |
12| `01-hola` | 1 | el programa mínimo — un `DISPLAY` de literal |
13| `02-aritmetica` | 2 | datos, `ADD`/`SUBTRACT`/`MULTIPLY` con `GIVING` |
14| `03-condicional` | 3 | `IF` / `ELSE` / `END-IF` |
15| `04-bucle` | 4 | `PERFORM n TIMES`, un párrafo aparte, `ADD` in situ|
16| `05-factorial` | 4 | `PERFORM UNTIL` en línea, `MULTIPLY` in situ |
17| `06-nomina` | 5 | grupos, `COMPUTE` con paréntesis, `ROUNDED`, V99 |
18| `07-clasificar` | 5 | `IF` anidado, condiciones con `AND` |
19| `08-varying` | 4 | `PERFORM VARYING` — el bucle con variable de control|
20| `09-evaluar` | 5 | `EVALUATE` — el `case` de COBOL, `WHEN` / `OTHER` |
21| `10-condicion` | 5 | nombres de condición (nivel 88) en `IF` |
22| `11-tabla` | 6 | tablas (`OCCURS`) y referencias con subíndice |
23| `12-cadenas` | 6 | `STRING` (concatenar) y `UNSTRING` (partir) |
24| `13-inspeccion` | 6 | `INSPECT` — contar (`TALLYING`) y reemplazar |
25| `14-clasifica` | 6 | `EVALUATE TRUE` y rangos `WHEN ... THRU` |
26| `15-resetear` | 6 | `INITIALIZE` — resetear datos y grupos |
27| `16-bandera` | 5 | `SET` de nombres de condición (nivel 88) a `TRUE` |
28| `17-rangopar` | 5 | `PERFORM ... THRU` — un rango de párrafos |
29
30## Formato
31
32Los fuentes están en **formato libre** de COBOL (la línea entera es
33código; `*` al inicio es comentario). El comparador del validador
34**ignora los espacios finales** de cada línea — un campo `PIC X(n)` se
35muestra con su relleno de espacios, que aquí se omite por legibilidad.
36
37## La salida esperada
38
39Las `.expected` se derivaron a mano de la semántica de COBOL'85. Cuando
40GnuCOBOL esté disponible, `charka-shadow` podrá regenerarlas desde el
41compilador de referencia y diferenciar contra él — el modo «sombra»
42pleno (original vs transpilado).
README.md
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 |
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).