feat(charka): charka-ir — representación intermedia con statements tipados
Tercera etapa del transpilador: Program -> Ir. El PROCEDURE division pasa de sentencias con tokens crudos a un árbol de instrucciones tipadas. - lower(&Program) -> Ir: total y tolerante, nunca falla. La DATA division pasa tal cual y sirve de tabla de símbolos. - Stmt cubre MOVE, DISPLAY, ACCEPT, COMPUTE, ADD, SUBTRACT, MULTIPLY, DIVIDE, IF/ELSE/END-IF, PERFORM (fuera de línea, en línea, TIMES, UNTIL), GO TO, STOP RUN, GOBACK, EXIT, CONTINUE. - Expresiones de COMPUTE con precedencia y paréntesis (Pratt). Condiciones con comparadores símbolo/palabra, AND/OR/NOT y nombres de condición (nivel 88). - Delimita statements por palabras frontera (COBOL no los separa con un símbolo). Verbo no soportado -> Stmt::Unknown con tokens crudos. - Módulos: ast / kw / cursor / expr / stmt. 17 tests; fmt + clippy limpios. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,37 @@
|
||||
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-ir): representación intermedia — statements tipados
|
||||
|
||||
Crate nuevo `crates/modules/charka/charka-ir` — la tercera etapa del
|
||||
pipeline: `Program` → `Ir`. El PROCEDURE division pasa de sentencias
|
||||
con tokens crudos a un árbol de instrucciones tipadas.
|
||||
|
||||
- `lower(&Program) -> Ir` — total y tolerante: nunca falla.
|
||||
- `Ir { program_id, data, procedures }`. El modelo de datos (la DATA
|
||||
division) pasa tal cual — sirve de tabla de símbolos.
|
||||
- `Stmt` cubre `MOVE`, `DISPLAY`, `ACCEPT`, `COMPUTE`, `ADD`,
|
||||
`SUBTRACT`, `MULTIPLY`, `DIVIDE`, `IF`/`ELSE`/`END-IF`, `PERFORM`
|
||||
(fuera de línea, en línea, `TIMES`, `UNTIL`), `GO TO`, `STOP RUN`,
|
||||
`GOBACK`, `EXIT`, `CONTINUE`.
|
||||
- Expresiones de `COMPUTE` con precedencia y paréntesis (`+ -` <
|
||||
`* /` < `**` asociativo a derecha). Condiciones de `IF`/`UNTIL` con
|
||||
comparadores en forma símbolo (`= < > <= >= <>`) o palabra
|
||||
(`EQUAL TO`, `GREATER THAN`...), `AND`/`OR`/`NOT` y nombres de
|
||||
condición (datos de nivel 88).
|
||||
- COBOL no termina los statements con un símbolo: el parser delimita
|
||||
las listas de operandos con palabras "frontera" (verbos,
|
||||
terminadores `END-*`/`ELSE`, conectores `TO`/`GIVING`/`BY`...).
|
||||
- Un verbo no soportado se conserva como `Stmt::Unknown { verb,
|
||||
tokens }` — el lowering nunca aborta.
|
||||
- Fuera de alcance v1: `EVALUATE`, `STRING`/`UNSTRING`, E/S de
|
||||
ficheros, `PERFORM VARYING`, CICS, SQL embebido.
|
||||
- 17 tests: MOVE simple y multi-destino, DISPLAY con figurativas,
|
||||
precedencia de COMPUTE, flag ROUNDED, ADD in-place vs GIVING,
|
||||
SUBTRACT, DIVIDE BY/INTO, IF/ELSE, condiciones con AND, nombre de
|
||||
condición, PERFORM párrafo/TIMES/UNTIL en línea, varios statements
|
||||
en una sentencia, verbo desconocido, programa completo.
|
||||
|
||||
### feat(charka-parser): parser COBOL'85 → AST
|
||||
|
||||
Crate nuevo `crates/modules/charka/charka-parser` — la segunda etapa del
|
||||
|
||||
Reference in New Issue
Block a user