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:
@@ -111,7 +111,9 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
|
||||
miembros (`DataModel::groups`).
|
||||
- `SET cond... TO TRUE` — la cara de escritura de los nombres de
|
||||
condición (nivel 88): asigna a su dato padre el valor del 88.
|
||||
- Fuera de alcance v1: E/S de ficheros, CICS, SQL embebido.
|
||||
- E/S de ficheros: `Stmt::Open`/`Close`/`Read`/`Write` y `Ir::files`
|
||||
(de `SELECT` + `FD`). Sólo organización «line sequential».
|
||||
- Fuera de alcance v1: CICS, SQL embebido.
|
||||
|
||||
## charka-runtime
|
||||
|
||||
@@ -128,6 +130,9 @@ COBOL en tiempo de ejecución.
|
||||
justifica a la izquierda y rellena/trunca; `fill` mueve figurativas
|
||||
(`SPACES`, `ZEROS`).
|
||||
- `cobol_text_cmp` — comparación alfanumérica con relleno de espacios.
|
||||
- `CobFile` — un fichero «line sequential»: `open_input` carga las
|
||||
líneas a memoria, `open_output` acumula, `read`/`write` operan línea
|
||||
a línea, `close` vuelca a disco lo escrito.
|
||||
- Reexporta `Decimal`/`Picture`/`Rounding` de `charka-bcd` para que el
|
||||
código generado sólo necesite `use charka_runtime::*;`.
|
||||
|
||||
@@ -158,8 +163,10 @@ del programa COBOL.
|
||||
- Verificado de punta a punta: un programa COBOL de demostración
|
||||
transpila a Rust que compila contra `charka-runtime` y produce la
|
||||
salida correcta.
|
||||
- E/S de ficheros «line sequential»: un campo `CobFile` por fichero;
|
||||
`OPEN`/`CLOSE`/`READ`/`WRITE` emiten llamadas a `charka-runtime`.
|
||||
- Fuera de alcance v1: grupos como campo propio, `REDEFINES`,
|
||||
`OCCURS` de grupo, E/S de ficheros.
|
||||
`OCCURS` de grupo.
|
||||
|
||||
## charka-shadow
|
||||
|
||||
@@ -182,8 +189,8 @@ que corre el `Ir` directamente sobre `charka-runtime`, sin compilar.
|
||||
|
||||
## El corpus
|
||||
|
||||
`crates/modules/charka/corpus/` — 17 programas COBOL graduados
|
||||
(`01-hola` … `17-rangopar`), cada uno con su `.expected`. Ejercita el
|
||||
`crates/modules/charka/corpus/` — 18 programas COBOL graduados
|
||||
(`01-hola` … `18-fichero`), cada uno con su `.expected`. Ejercita el
|
||||
pipeline completo de punta a punta. Ver su `README.md`.
|
||||
|
||||
## La CLI
|
||||
@@ -206,4 +213,5 @@ concuerdan.
|
||||
|
||||
Próximo hito mayor: salir del subconjunto COBOL'85 puro hacia CICS,
|
||||
SQL embebido y los dialectos IBM Enterprise; ampliar el codegen
|
||||
(grupos como campo, `REDEFINES`, `OCCURS` de grupo, E/S de ficheros).
|
||||
(grupos como campo, `REDEFINES`, `OCCURS` de grupo, ficheros
|
||||
indexados, `CALL` a subprogramas).
|
||||
|
||||
Reference in New Issue
Block a user