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>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
* corpus charka — nivel 5: grupos, COMPUTE con paréntesis, ROUNDED
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. NOMINA.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-EMPLEADO.
|
||||
05 WS-NOMBRE PIC X(10) VALUE 'ANA'.
|
||||
05 WS-HORAS PIC 9(3) VALUE 45.
|
||||
05 WS-TARIFA PIC 9(3)V99 VALUE 8.50.
|
||||
01 WS-BRUTO PIC 9(6)V99 VALUE 0.
|
||||
01 WS-EXTRA PIC 9(6)V99 VALUE 0.
|
||||
01 WS-IMPUESTO PIC 9(6)V99 VALUE 0.
|
||||
01 WS-NETO PIC 9(6)V99 VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN-PARA.
|
||||
PERFORM CALCULAR-BRUTO.
|
||||
PERFORM CALCULAR-IMPUESTO.
|
||||
COMPUTE WS-NETO = WS-BRUTO - WS-IMPUESTO.
|
||||
DISPLAY 'EMPLEADO: ' WS-NOMBRE.
|
||||
DISPLAY 'BRUTO: ' WS-BRUTO.
|
||||
DISPLAY 'IMPUESTO: ' WS-IMPUESTO.
|
||||
DISPLAY 'NETO: ' WS-NETO.
|
||||
STOP RUN.
|
||||
CALCULAR-BRUTO.
|
||||
IF WS-HORAS > 40
|
||||
COMPUTE WS-EXTRA = (WS-HORAS - 40) * WS-TARIFA
|
||||
COMPUTE WS-BRUTO = 40 * WS-TARIFA + WS-EXTRA
|
||||
ELSE
|
||||
COMPUTE WS-BRUTO = WS-HORAS * WS-TARIFA
|
||||
END-IF.
|
||||
CALCULAR-IMPUESTO.
|
||||
COMPUTE WS-IMPUESTO ROUNDED = WS-BRUTO * 0.15.
|
||||
Reference in New Issue
Block a user