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
@@ -0,0 +1,29 @@
* corpus charka nivel 6: EVALUATE TRUE y rangos WHEN ... THRU
IDENTIFICATION DIVISION.
PROGRAM-ID. CLASIFICA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NOTA PIC 9(3) VALUE 0.
01 WS-I PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
MAIN.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
COMPUTE WS-NOTA = WS-I * 18
EVALUATE WS-NOTA
WHEN 0 THRU 59
DISPLAY 'REPROBADO'
WHEN 60 THRU 89
DISPLAY 'APROBADO'
WHEN OTHER
DISPLAY 'EXCELENTE'
END-EVALUATE
END-PERFORM.
PERFORM EVAL-TRUE.
STOP RUN.
EVAL-TRUE.
EVALUATE TRUE
WHEN WS-NOTA > 100
DISPLAY 'ULTIMA NOTA ALTA'
WHEN OTHER
DISPLAY 'ULTIMA NOTA NO ALTA'
END-EVALUATE.