feat(charka): SET ... TO TRUE — escribir nombres de condición (88)

La cara de escritura de los nombres de condición de COBOL: si
IF ES-VALIDO los lee, SET ES-VALIDO TO TRUE los escribe.

- IR: Stmt::SetTrue { conditions }.
- Parser: SET cond-1 cond-2 ... TO TRUE. Otras formas de SET
  (índices, TO FALSE) caen a Stmt::Unknown.
- Codegen y shadow: SET cond TO TRUE asigna a su dato padre el valor
  del 88 (un MOVE del valor a la variable).
- Corpus: programa nuevo 16-bandera (cambia banderas de texto y de
  número con SET). Verificado: el intérprete sombra y el crate
  compilado por scaffold dan la misma salida.

Tests: charka-ir 29, charka-codegen 23, charka-shadow 21. fmt +
clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 22:32:08 +00:00
parent fa65f20206
commit 82ba0b7a1a
12 changed files with 115 additions and 4 deletions
+6 -4
View File
@@ -86,8 +86,8 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
- `Procedure { name, body: Vec<Stmt> }`. `Stmt` cubre `Move`,
`Display`, `Accept`, `Compute`, `Add`/`Subtract`/`Multiply`/`Divide`,
`If`, `Evaluate`, `StringConcat`, `Unstring`, `Inspect`,
`Initialize`, `Perform`, `GoTo`, `StopRun`, `Goback`, `Exit`,
`Continue`.
`Initialize`, `SetTrue`, `Perform`, `GoTo`, `StopRun`, `Goback`,
`Exit`, `Continue`.
- `Expr` — expresiones aritméticas con precedencia y paréntesis (Pratt:
`+ -` < `* /` < `**` der.). `Cond` — comparaciones (símbolo o forma
palabra) unidas por `AND`/`OR`/`NOT`, más nombres de condición
@@ -108,6 +108,8 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
- `INITIALIZE` — resetea un dato (o todos los elementales de un grupo)
a su valor por defecto. El `model` registra los grupos y sus
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.
## charka-runtime
@@ -179,8 +181,8 @@ que corre el `Ir` directamente sobre `charka-runtime`, sin compilar.
## El corpus
`crates/modules/charka/corpus/` — 15 programas COBOL graduados
(`01-hola` … `15-resetear`), cada uno con su `.expected`. Ejercita el
`crates/modules/charka/corpus/` — 16 programas COBOL graduados
(`01-hola` … `16-bandera`), cada uno con su `.expected`. Ejercita el
pipeline completo de punta a punta. Ver su `README.md`.
## La CLI