feat(charka): STRING y UNSTRING — manejo de cadenas
Dos verbos comunes de COBOL para construir y partir cadenas.
- IR: Stmt::StringConcat { sources, into } y
Stmt::Unstring { source, delimiter, into }.
- Parser: STRING a b DELIMITED BY SIZE INTO t END-STRING y
UNSTRING s DELIMITED BY d INTO a b c END-UNSTRING.
- Codegen: STRING -> format! concatenado; UNSTRING -> un bloque que
parte con str::split y reparte los trozos a los destinos.
- Shadow: el intérprete concatena / parte el texto y lo reparte.
- Corpus: programa nuevo 12-cadenas. Verificado: el intérprete sombra
y el crate compilado por scaffold dan la misma salida.
Alcance v1: STRING con DELIMITED BY SIZE (otros delimitadores se
ignoran); sin WITH POINTER ni ON OVERFLOW.
Tests: charka-ir 25, charka-codegen 19, charka-shadow 17. fmt +
clippy limpios.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -85,8 +85,8 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
|
||||
reimplementar la clasificación.
|
||||
- `Procedure { name, body: Vec<Stmt> }`. `Stmt` cubre `Move`,
|
||||
`Display`, `Accept`, `Compute`, `Add`/`Subtract`/`Multiply`/`Divide`,
|
||||
`If`, `Evaluate`, `Perform`, `GoTo`, `StopRun`, `Goback`, `Exit`,
|
||||
`Continue`.
|
||||
`If`, `Evaluate`, `StringConcat`, `Unstring`, `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
|
||||
@@ -101,8 +101,9 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
|
||||
`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).
|
||||
- Fuera de alcance v1: `STRING`/`UNSTRING`, E/S de ficheros, CICS,
|
||||
SQL embebido.
|
||||
- `STRING` (concatenación) y `UNSTRING` (partición por delimitador) —
|
||||
el manejo de cadenas.
|
||||
- Fuera de alcance v1: E/S de ficheros, CICS, SQL embebido.
|
||||
|
||||
## charka-runtime
|
||||
|
||||
@@ -173,8 +174,8 @@ que corre el `Ir` directamente sobre `charka-runtime`, sin compilar.
|
||||
|
||||
## El corpus
|
||||
|
||||
`crates/modules/charka/corpus/` — 11 programas COBOL graduados
|
||||
(`01-hola` … `11-tabla`), cada uno con su `.expected`. Ejercita el
|
||||
`crates/modules/charka/corpus/` — 12 programas COBOL graduados
|
||||
(`01-hola` … `12-cadenas`), 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