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>
This commit is contained in:
sergio
2026-05-21 19:54:54 +00:00
parent c56ef25546
commit ab56b35e9f
6 changed files with 538 additions and 6 deletions
+23 -6
View File
@@ -8,9 +8,10 @@ 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` |
| 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
@@ -26,14 +27,30 @@ reproducir esa aritmética dígito a dígito.
- 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` implementado y verde (22 tests). **Pendiente** — el grueso
del transpilador (esfuerzo multi-mes, Fase D del plan macro):
`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-lexer` | tokenizador COBOL (formato fijo de columnas) |
| `charka-parser` | parser COBOL'85 → AST (luego CICS + SQL embebido) |
| `charka-ir` | representación intermedia |
| `charka-codegen` | emisión de Rust |