feat(charka): charka-runtime — soporte de ejecución (campos Num y Text)
El soporte que los programas COBOL transpilados enlazan. charka-codegen emitirá Rust que llama a esta biblioteca, no Rust autónomo. - Num: campo numérico (PIC 9(5)V99) — un Decimal conformado a su Picture. store trunca a la escala declarada, store_rounded redondea; al desbordar la parte entera conserva los dígitos de bajo orden (el ON SIZE ERROR de COBOL sin cláusula). display da los dígitos con relleno de ceros y signo. - Text: campo alfanumérico (PIC X(n)) de longitud fija — store justifica a la izquierda y rellena/trunca; fill mueve figurativas. - cobol_text_cmp: comparación alfanumérica con relleno de espacios. - Reexporta Decimal/Picture/Rounding de charka-bcd. Construido antes que charka-codegen (la nota de orden del plan los listaba al revés): el codegen emite contra esta API. 17 tests; fmt + clippy limpios. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -12,8 +12,9 @@ embebido, dialectos IBM Enterprise) es un esfuerzo multi-mes.
|
||||
| -------------- | ---- | ------------------------------------------------------------ |
|
||||
| `charka-bcd` | lib | Aritmética decimal de punto fijo con semántica COBOL: `Picture`, `Decimal`, redondeo, `ON SIZE ERROR` |
|
||||
| `charka-lexer` | lib | Tokenizador COBOL: formato fijo (tarjeta de 80 columnas) y libre |
|
||||
| `charka-parser` | lib | Parser COBOL'85 (subconjunto): tokens → AST (`Program`) |
|
||||
| `charka-ir` | lib | Representación intermedia: el AST con los statements del PROCEDURE ya tipados |
|
||||
| `charka-parser` | lib | Parser COBOL'85 (subconjunto): tokens → AST (`Program`) |
|
||||
| `charka-ir` | lib | Representación intermedia: el AST con los statements del PROCEDURE ya tipados |
|
||||
| `charka-runtime` | lib | Soporte de ejecución de los programas transpilados: campos `Num` y `Text` |
|
||||
|
||||
## charka-bcd
|
||||
|
||||
@@ -89,16 +90,39 @@ Tercera etapa: `Program` → `Ir`. Aquí se parsea cada `Sentence` cruda
|
||||
- Fuera de alcance v1: `EVALUATE`, `STRING`/`UNSTRING`, E/S de
|
||||
ficheros, `PERFORM VARYING`, CICS, SQL embebido.
|
||||
|
||||
## charka-runtime
|
||||
|
||||
El soporte de ejecución: lo que `charka-codegen` emite es Rust que
|
||||
enlaza contra este crate. Da a un programa transpilado la semántica de
|
||||
COBOL en tiempo de ejecución.
|
||||
|
||||
- `Num` — campo numérico (`PIC 9(5)V99`): un `Decimal` conformado a su
|
||||
`Picture`. `store`/`store_rounded` truncan o redondean a la escala
|
||||
declarada; al desbordar conservan los dígitos de bajo orden (el
|
||||
`ON SIZE ERROR` sin cláusula). `display` da los dígitos con relleno
|
||||
de ceros.
|
||||
- `Text` — campo alfanumérico (`PIC X(20)`) de longitud fija: `store`
|
||||
justifica a la izquierda y rellena/trunca; `fill` mueve figurativas
|
||||
(`SPACES`, `ZEROS`).
|
||||
- `cobol_text_cmp` — comparación alfanumérica con relleno de espacios.
|
||||
- Reexporta `Decimal`/`Picture`/`Rounding` de `charka-bcd` para que el
|
||||
código generado sólo necesite `use charka_runtime::*;`.
|
||||
|
||||
Construido **antes** que `charka-codegen` (la nota de orden del plan
|
||||
los listaba al revés): el codegen emite llamadas contra esta API, así
|
||||
que el runtime debe existir primero — y es un crate autocontenido,
|
||||
verificable sin depender del código emitido.
|
||||
|
||||
## Estado
|
||||
|
||||
`charka-bcd` (22 tests), `charka-lexer` (17 tests), `charka-parser`
|
||||
(15 tests) y `charka-ir` (17 tests) implementados y verdes.
|
||||
**Pendiente** — el resto del transpilador (Fase D del plan macro):
|
||||
(15 tests), `charka-ir` (17 tests) y `charka-runtime` (17 tests)
|
||||
implementados y verdes. **Pendiente** — el resto del transpilador
|
||||
(Fase D del plan macro):
|
||||
|
||||
| crate pendiente | rol |
|
||||
| ----------------- | ---------------------------------------------------- |
|
||||
| `charka-codegen` | emisión de Rust |
|
||||
| `charka-codegen` | emisión de Rust (IR → fuente Rust sobre el runtime) |
|
||||
| `charka-shadow` | validador en sombra (original vs transpilado) |
|
||||
| `charka-runtime` | runtime determinista (sobre `charka-bcd`) |
|
||||
|
||||
Hito intermedio sugerido: subconjunto COBOL'85 puro antes de CICS/SQL.
|
||||
|
||||
Reference in New Issue
Block a user