feat(charka): charka-codegen — emisión de Rust desde el IR
La etapa final del transpilador. generate(&Ir) -> String produce un fuente Rust (un main.rs) que, compilado contra charka-runtime, ejecuta la lógica del programa COBOL. - struct Program con un campo Num/Text por dato elemental; new() lo inicializa desde las cláusulas VALUE. - Un método p_<párrafo> por párrafo del PROCEDURE; run() los encadena en orden (el «caer» de COBOL); main() construye y corre. - Cada Stmt -> código Rust: MOVE->.store/.fill, DISPLAY->println!, COMPUTE y aritmética -> expresiones Decimal, IF->if/else, PERFORM-> llamada / for / while, STOP RUN->process::exit. - Tolerante: lo no transpilable (Stmt::Unknown, dato sin resolver, **) se emite como comentario // charka: — el código generado compila. - Saneado de identificadores COBOL->Rust (choques con keywords). - Verificado de punta a punta: un programa COBOL demo transpila a Rust que compila contra charka-runtime y produce la salida esperada. - Módulos: emit / sym / expr / stmt. 14 tests; fmt + clippy limpios. El pipeline COBOL->Rust corre de punta a punta. Falta sólo charka-shadow (validador en sombra). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,33 @@
|
||||
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-codegen): emisión de Rust desde el IR
|
||||
|
||||
Crate nuevo `crates/modules/charka/charka-codegen` — la etapa final del
|
||||
pipeline. `generate(&Ir) -> String` produce un fuente Rust (un
|
||||
`main.rs`) que, compilado contra `charka-runtime`, ejecuta la lógica
|
||||
del programa COBOL.
|
||||
|
||||
- Un `struct Program` con un campo por cada dato elemental — `Num`
|
||||
para los numéricos, `Text` para los alfanuméricos; `Program::new()`
|
||||
los inicializa desde sus cláusulas `VALUE`.
|
||||
- Un método `p_<párrafo>(&mut self)` por cada párrafo del PROCEDURE;
|
||||
`run()` los encadena en orden (el «caer» de COBOL); `main()`
|
||||
construye el `Program` y lo corre.
|
||||
- Cada `Stmt` → código Rust: `MOVE`→`.store`/`.fill`,
|
||||
`DISPLAY`→`println!`, `COMPUTE` y la aritmética → expresiones
|
||||
`Decimal`, `IF`→`if`/`else`, `PERFORM`→ llamada de método / `for` /
|
||||
`while`, `GO TO`→ llamada + `return`, `STOP RUN`→`process::exit`.
|
||||
- Tolerante: lo no transpilable (`Stmt::Unknown`, un dato sin resolver,
|
||||
el operador `**`) se emite como comentario `// charka:`; el código
|
||||
generado siempre compila.
|
||||
- Saneado de identificadores COBOL→Rust (incl. choques con keywords).
|
||||
- Verificado de punta a punta: un programa COBOL de demostración
|
||||
transpila a Rust que compila contra `charka-runtime` y produce la
|
||||
salida esperada (`COMPUTE`, `IF`, `PERFORM`, `DISPLAY`).
|
||||
- 14 tests del fuente emitido; fuera de alcance v1: grupos como campo,
|
||||
`REDEFINES`, `OCCURS`, `PERFORM ... THRU` como rango, E/S.
|
||||
|
||||
### feat(charka-runtime): soporte de ejecución — campos Num y Text
|
||||
|
||||
Crate nuevo `crates/modules/charka/charka-runtime` — el soporte que los
|
||||
|
||||
Reference in New Issue
Block a user