feat(charka): E/S de ficheros — SELECT/FD/OPEN/READ/WRITE/CLOSE

El gran hueco que faltaba para el COBOL real: el procesamiento de
ficheros secuenciales. Una rebanada vertical por los seis crates.

- charka-parser: la ENVIRONMENT division ya no se ignora — se parsea
  FILE-CONTROL (SELECT name ASSIGN TO "ruta"); del FILE SECTION se
  asocia cada FD con su registro 01. Program::files.
- charka-runtime: tipo CobFile — un fichero «line sequential» (cada
  registro una línea). Lectura: carga a memoria. Escritura: acumula y
  vuelca al cerrar.
- charka-ir: Ir::files y los statements Open/Close/Read/Write. READ
  lleva sus bloques AT END / NOT AT END.
- charka-codegen: un campo CobFile por fichero en el struct Program;
  los verbos emiten llamadas al runtime.
- charka-shadow: el intérprete hace E/S de ficheros real.
- Corpus: programa nuevo 18-fichero — escribe tres líneas, las relee
  con READ ... AT END y las muestra. Verificado: el intérprete sombra
  y el crate compilado por scaffold dan la misma salida.

Alcance v1: organización line sequential; sin ficheros indexados ni
relativos, sin FILE STATUS.

Tests: charka-parser 17, charka-runtime 19, charka-ir 30,
charka-codegen 25, charka-shadow 23. fmt + clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 22:47:26 +00:00
parent f250fd0765
commit b3278bdb0c
17 changed files with 663 additions and 22 deletions
+23
View File
@@ -3,6 +3,29 @@
Transpilador COBOL → Rust. El módulo más grande del ecosistema (Fase D
del plan macro) — el parser COBOL completo es un esfuerzo multi-mes.
### feat(charka): E/S de ficheros — SELECT / FD / OPEN / READ / WRITE / CLOSE
El gran hueco que faltaba para el COBOL real: el procesamiento de
ficheros secuenciales. Una rebanada vertical por los seis crates.
- `charka-parser`: la ENVIRONMENT division ya no se ignora — se
parsea `FILE-CONTROL` (`SELECT name ASSIGN TO "ruta"`); del FILE
SECTION se asocia cada `FD` con su registro `01`. `Program::files`.
- `charka-runtime`: tipo `CobFile` — un fichero «line sequential»
(cada registro una línea). Lectura: carga a memoria. Escritura:
acumula y vuelca al cerrar.
- `charka-ir`: `Ir::files` y los statements `Open`/`Close`/`Read`/
`Write`. `READ` lleva sus bloques `AT END` / `NOT AT END`.
- `charka-codegen`: un campo `CobFile` por fichero en el `struct
Program`; los verbos emiten llamadas al runtime.
- `charka-shadow`: el intérprete hace E/S de ficheros real.
- Corpus: programa nuevo `18-fichero` — escribe tres líneas a un
fichero, lo cierra, lo relee con `READ ... AT END` y las muestra.
Verificado: el intérprete sombra y el crate compilado dan la misma
salida.
- Alcance v1: organización «line sequential»; sin ficheros indexados
ni relativos, sin `FILE STATUS`.
### feat(charka): PERFORM ... THRU como rango real de párrafos
`PERFORM A THRU C` ejecuta A, B y C; antes el transpilador sólo