feat(charka): EVALUATE TRUE y rangos WHEN ... THRU

Completa el EVALUATE con sus dos formas que faltaban.

- IR: la rama WhenBranch pasa de values: Vec<Operand> a
  tests: Vec<WhenTest>, donde WhenTest es Value (igualdad), Range
  (WHEN lo THRU hi) o Cond (EVALUATE TRUE WHEN cond).
- Parser: detecta EVALUATE TRUE y entonces cada WHEN parsea una
  condición; en modo valor reconoce WHEN lo THRU hi.
- Codegen y shadow: una prueba Range se traduce a lo <= s <= hi; una
  Cond, a la condición directa.
- Corpus: programa nuevo 14-clasifica (clasifica notas con rangos THRU
  y un EVALUATE TRUE). Verificado: intérprete sombra y crate compilado
  dan la misma salida.

Tests: charka-ir 27, charka-codegen 21, charka-shadow 19. fmt +
clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 22:22:43 +00:00
parent 2728698f5e
commit 7867d6830e
12 changed files with 176 additions and 36 deletions
+14
View File
@@ -3,6 +3,20 @@
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): EVALUATE TRUE y rangos WHEN ... THRU
Completa el `EVALUATE` con sus dos formas que faltaban.
- IR: la rama `WhenBranch` pasa de `values: Vec<Operand>` a
`tests: Vec<WhenTest>`, donde `WhenTest` es `Value` (igualdad),
`Range` (`WHEN lo THRU hi`) o `Cond` (`EVALUATE TRUE WHEN cond`).
- Parser: detecta `EVALUATE TRUE` y entonces cada `WHEN` parsea una
condición; en modo valor reconoce `WHEN lo THRU hi`.
- Codegen y shadow: una prueba `Range` se traduce a `lo <= s <= hi`;
una `Cond`, a la condición directa.
- Corpus: programa nuevo `14-clasifica` (clasifica notas con rangos
`THRU` y un `EVALUATE TRUE`). Verificado en ambas rutas.
### feat(charka): INSPECT — contar y reemplazar caracteres
El verbo de COBOL para analizar y limpiar campos de texto.