feat(charka): PICTURE de edición — Z, coma de millares y punto decimal

El formateo de informes de COBOL: supresión de ceros a la izquierda,
coma de millares e inserción del punto decimal. Rebanada vertical.

- charka-lexer: el punto separador exige un espacio detrás; un punto
  pegado a un carácter (ZZ9.99) ya no es terminador, sino símbolo —
  el parser lo reensambla dentro de la cláusula PICTURE.
- charka-runtime: format_edited(valor, pic) — 9, Z, coma, punto, B.
- charka-ir: Field::edit guarda la PICTURE; el campo es texto.
- charka-codegen / charka-shadow: MOVE a un campo de edición pasa por
  format_edited antes de almacenar.
- Corpus: 19-reporte. Sombra y crate compilado dan la misma salida.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 23:00:15 +00:00
parent b3278bdb0c
commit 634a43006a
15 changed files with 264 additions and 23 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): PICTURE de edición — `Z`, coma de millares y punto decimal
Las PICTURE de edición (`Z,ZZ9.99`) — el formateo de informes de
COBOL: supresión de ceros a la izquierda, coma de millares e inserción
del punto decimal. Una rebanada vertical por el pipeline.
- `charka-lexer`: el punto separador de COBOL siempre lleva un espacio
detrás. Un punto pegado a un carácter —`ZZ9.99`— ya no se toma como
terminador de sentencia: se emite como símbolo, para que el parser
lo reensamble dentro de la cláusula PICTURE.
- `charka-runtime`: `format_edited(valor, pic)` — formatea un decimal
según una PICTURE de edición: `9` (dígito), `Z` (dígito con
supresión de ceros), `,` (coma, en blanco en la zona suprimida),
`.` (punto decimal) y `B` (espacio).
- `charka-ir`: el modelo de datos distingue una PICTURE de edición —
`Field::edit` guarda la PICTURE; el campo se materializa como texto
de presentación.
- `charka-codegen` y `charka-shadow`: un `MOVE` a un campo de edición
pasa el valor por `format_edited` antes de almacenarlo.
- Corpus: programa nuevo `19-reporte` — formatea importes y contadores
con `Z,ZZZ,ZZ9.99` y `ZZZ,ZZ9`. Verificado: el intérprete sombra y
el crate compilado dan la misma salida.
### feat(charka): E/S de ficheros — SELECT / FD / OPEN / READ / WRITE / CLOSE
El gran hueco que faltaba para el COBOL real: el procesamiento de