feat(charka): OCCURS — tablas y referencias con subíndice
Los arrays de COBOL, que antes el transpilador descartaba en silencio.
Una rebanada vertical amplia que atraviesa el pipeline entero.
- Parser: la cláusula OCCURS n [TIMES] se captura en DataItem.
- IR: Operand::Indexed { name, index } — una referencia ELEM(I), con
subíndice 1-based. Los destinos de los statements pasan de
Vec<String> a Vec<Operand>, así que se puede escribir a un elemento
de tabla (MOVE x TO ELEM(I), COMPUTE ELEM(I) = ...). model::Field
gana occurs: Option<u32>.
- Codegen: un campo OCCURS se emite como Vec<Num>/Vec<Text>,
inicializado con vec![..; n]; una referencia con subíndice indexa el
vector (1-based -> 0-based).
- Shadow: en el intérprete todo campo es un vector — un escalar es de
longitud 1, una tabla de n; las referencias se resuelven a
(nombre, índice).
- Corpus: programa nuevo 11-tabla (llena una tabla con cuadrados y los
suma). Verificado: el intérprete sombra y el crate compilado por
scaffold dan ambos SUMA DE CUADRADOS = 000055.
Alcance v1: OCCURS elemental, una dimensión, subíndice de un operando.
Fuera: OCCURS de grupo, multidimensional, DEPENDING ON.
Tests: charka-parser 16, charka-ir 24, charka-codegen 18,
charka-shadow 16. fmt + clippy limpios.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,30 @@
|
||||
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): OCCURS — tablas y referencias con subíndice
|
||||
|
||||
Los arrays de COBOL, que antes el transpilador descartaba en silencio.
|
||||
Atraviesa el pipeline entero.
|
||||
|
||||
- Parser: la cláusula `OCCURS n [TIMES]` se captura en `DataItem`.
|
||||
- IR: `Operand::Indexed { name, index }` — una referencia `ELEM(I)`.
|
||||
El subíndice es 1-based, como COBOL. Los destinos de los statements
|
||||
pasan de `Vec<String>` a `Vec<Operand>`, así que se puede escribir a
|
||||
un elemento de tabla (`MOVE x TO ELEM(I)`, `COMPUTE ELEM(I) = ...`).
|
||||
`Field` del modelo gana `occurs: Option<u32>`.
|
||||
- Codegen: un campo `OCCURS` se emite como `Vec<Num>`/`Vec<Text>`,
|
||||
inicializado con `vec![..; n]`; una referencia con subíndice indexa
|
||||
el vector (1-based → 0-based).
|
||||
- Shadow: en el intérprete todo campo es un vector — un escalar es de
|
||||
longitud 1, una tabla de `n`; las referencias se resuelven a
|
||||
`(nombre, índice)`.
|
||||
- Corpus: programa nuevo `11-tabla` (llena una tabla con cuadrados y
|
||||
los suma). Verificado: el intérprete sombra y el crate compilado por
|
||||
`scaffold` dan ambos `SUMA DE CUADRADOS = 000055`.
|
||||
- Alcance v1: `OCCURS` en datos elementales, una dimensión, subíndice
|
||||
de un solo operando. Fuera: `OCCURS` de grupo, multidimensional,
|
||||
`OCCURS DEPENDING ON`.
|
||||
|
||||
### feat(charka): nombres de condición (nivel 88) + modelo de datos compartido
|
||||
|
||||
`IF ES-VALIDO` — los nombres de condición de COBOL, que antes el
|
||||
|
||||
Reference in New Issue
Block a user