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:
@@ -99,8 +99,8 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
|
||||
para delimitar listas de operandos.
|
||||
- `PERFORM` cubre las cuatro formas: párrafo / en línea, `n TIMES`,
|
||||
`UNTIL cond` y `VARYING var FROM x BY y UNTIL cond`.
|
||||
- `EVALUATE subject WHEN ... WHEN OTHER` — el `case` de COBOL, por
|
||||
igualdad de valor (no la forma `EVALUATE TRUE` con condiciones).
|
||||
- `EVALUATE` — el `case` de COBOL: `WHEN valor`, `WHEN lo THRU hi`
|
||||
(rango), `WHEN OTHER`, y la forma `EVALUATE TRUE WHEN condición`.
|
||||
- `STRING` (concatenación) y `UNSTRING` (partición por delimitador) —
|
||||
el manejo de cadenas. `INSPECT` — contar (`TALLYING FOR ALL`) y
|
||||
reemplazar (`REPLACING ALL`).
|
||||
@@ -175,8 +175,8 @@ que corre el `Ir` directamente sobre `charka-runtime`, sin compilar.
|
||||
|
||||
## El corpus
|
||||
|
||||
`crates/modules/charka/corpus/` — 13 programas COBOL graduados
|
||||
(`01-hola` … `13-inspeccion`), cada uno con su `.expected`. Ejercita el
|
||||
`crates/modules/charka/corpus/` — 14 programas COBOL graduados
|
||||
(`01-hola` … `14-clasifica`), cada uno con su `.expected`. Ejercita el
|
||||
pipeline completo de punta a punta. Ver su `README.md`.
|
||||
|
||||
## La CLI
|
||||
|
||||
Reference in New Issue
Block a user