Files
brahman/crates/modules/charka/SDD.md
T
sergio ab56b35e9f feat(charka): charka-lexer — tokenizador de COBOL
Primera etapa del transpilador COBOL→Rust (Fase D del plan macro):
texto COBOL → secuencia de Token. Lexer deliberadamente tonto (emite
Word para todo identificador, la clasificación es del parser). Tokens
Word/Number/String/Period/Symbol con línea+columna; soporta formato
fijo (tarjeta de 80 columnas) y libre; comentarios, comillas dobladas,
operadores de 1 y 2 caracteres. LexError tipado. 17 tests; clippy
limpio. Limitación v1: sin continuación de literales entre líneas.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 19:54:54 +00:00

2.9 KiB

modules/charka/ — Transpilador COBOL → Rust

Propósito. Modernizar sistemas COBOL legados transpilándolos a Rust con un runtime determinista y un validador en sombra (shadow validator) que compara la salida del original y la del transpilado. Es el módulo más grande del ecosistema — el parser COBOL completo (CICS, SQL embebido, dialectos IBM Enterprise) es un esfuerzo multi-mes.

Crates

crate tipo rol
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-bcd

COBOL no calcula en binario flotante: opera sobre campos decimales de precisión fija (PIC S9(5)V99). Reproducir un programa COBOL exige reproducir esa aritmética dígito a dígito.

  • Picture — parsea la cláusula PICTURE numérica (9, V, S, 9(n)).
  • Decimal — punto fijo exacto (mantissa: i128 + scale); suma, resta y producto exactos; división con escala de resultado fija; redondeo Truncate/HalfUp; coerce a un Picture con detección de desbordamiento.
  • Determinista, sin dependencias de plataforma — mismo programa, mismos dígitos, en cualquier máquina.

charka-lexer

Primera etapa del pipeline: texto COBOL → secuencia de Token.

  • Lexer tonto: no conoce keywords ni la cláusula PICTURE — emite Word para todo identificador; la clasificación es del parser.
  • Tokens: Word (con guiones internos, WORKING-STORAGE), Number (sin signo), String (comillas dobladas colapsadas), Period, Symbol (( ) , ; : y operadores + - * / ** = < > <= >= <>).
  • Dos formatos: fijo (cols 1-6 secuencia, 7 indicadora, 8-72 código, 73-80 id) y libre. Comentarios por col 7 (*//) o * inicial en formato libre.
  • Cada token lleva línea/columna 1-based. LexError tipado.
  • Limitación v1: sin continuación de literales entre líneas (indicador -).

Estado

charka-bcd (22 tests) y charka-lexer (17 tests) implementados y verdes. Pendiente — el resto del transpilador (Fase D del plan macro):

crate pendiente rol
charka-parser parser COBOL'85 → AST (luego CICS + SQL embebido)
charka-ir representación intermedia
charka-codegen emisión de Rust
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.