Back to flin
flin

Construyendo un analizador léxico desde cero en Rust

Cómo construimos el analizador léxico de FLIN en Rust: del flujo de caracteres a tokens, reconocimiento de palabras clave y escaneo en modo vista.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 2 min flin
EN/ FR/ ES
flinrust

Un analizador léxico es lo primero que encuentra tu código. Convierte caracteres en significado. Antes de que un parser pueda entender la estructura de tu programa, antes de que un verificador de tipos pueda validar su corrección, antes de que un generador de código pueda emitir bytecode -- el analizador léxico debe leer tu archivo fuente un carácter a la vez y producir un flujo de tokens. Es la fase más humilde de un compilador, y posiblemente la más importante.

El analizador léxico de FLIN tiene un desafío inusual: debe manejar dos modos sintácticos fundamentalmente diferentes en el mismo archivo fuente. Los programas FLIN contienen código imperativo -- declaraciones de variables, flujo de control, llamadas a funciones -- intercalado con declaraciones de vista similares a HTML. El lexer debe cambiar entre estos modos sin perder su posición, sin identificar erróneamente tokens ni confundir un operador menor-que con una etiqueta HTML de apertura.

El escáner trimodal

rustpub struct Lexer<'a> {
    source: &'a str,
    chars: Peekable<CharIndices<'a>>,
    line: u32,
    column: u32,
    start: u32,
    mode: LexerMode,
}

#[derive(Debug, Clone, Copy, PartialEq)]
enum LexerMode {
    Code,           // Código normal
    View,           // Dentro de etiquetas HTML
    ViewExpression, // Dentro de {expresión} en vista
}

El modo Code es el predeterminado. Los tokens son operadores, palabras clave, identificadores y literales.

El modo View se activa cuando el lexer encuentra un < seguido de un carácter alfabético. En modo vista, el lexer emite tokens TagOpen, TagName, AttrName, TagClose, TagSelfClose y TagEnd.

El modo ViewExpression se activa cuando el lexer encuentra { mientras está en modo vista. Dentro de las llaves, el lexer revierte a tokenización en modo código.

Al final de la sesión 4, el lexer tenía 97 pruebas unitarias. Cuando empezamos a construir el parser en la sesión 5, el flujo de tokens era confiable. Nunca tuvimos que depurar un error del parser que resultara ser un error del lexer. Ese es el retorno de inversión de las pruebas exhaustivas del lexer.


Esta es la Parte 12 de la serie "Cómo construimos FLIN".

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

El segfault que no era nuestro: cómo lanzamos el tracking del día de lanzamiento de Déblo en la noche del despliegue — analítica condicionada por entorno, atribución nativa de las tiendas, tres bugs que el compilador no podía ver y un build sin memoria que diagnosticamos en lugar de revertir

El 1 de julio de 2026 — el día del lanzamiento — el riesgo nunca fue el texto. Era que las campañas de pago salieran a ciegas. Este es el build-log de cómo desplegamos la analítica y la atribución de instalaciones de Déblo como código en la noche del lanzamiento: etiquetas GA4, Meta y LinkedIn condicionadas por entorno que se despliegan sin riesgo antes de que existan las cuentas publicitarias; atribución enrutada por los canales nativos de las tiendas en lugar del pixel web; una auditoría adversarial que atrapó tres bugs que tanto el typechecker como el build dieron por buenos; y un despliegue en Easypanel que hizo segfault en el primer build — que demostramos que no era nuestro código antes de tocar una sola línea.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26
Thales & Claude thales

Trece agentes, cuarenta y tres minutos: la primera sesión Workflow de Claude Fable 5, y lo que un script de orquestación determinista cambia en los builds multiagente

Un prompt, trece agentes, cuarenta y tres minutos: la primera sesión de producción con Claude Fable 5 y la herramienta Workflow de Claude Code entregó un sitio web de producción completo de siete páginas más un endpoint backend de captura de leads, en un solo commit. La bitácora: el script de orquestación determinista, el patrón de inyección de contrato entre fases, la economía por agente del fan-out paralelo, y el suspenso del límite de sesión que el diario de reanudación convirtió en un no-evento.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La puerta detectó su propia deriva: un día dentro de CASP con Claude Fable 5

Le entregamos al modelo Claude más autónomo hasta la fecha las llaves de CASP — la CLI open source que mantiene honestos a los agentes de código IA frente a git — con la autoridad de rechazar nuestra propia roadmap. Rechazó cinco cosas, encontró dos bugs reales en el validador al hacerle dogfooding, los corrigió bajo una puerta de dos auditores, y dejó casp check completamente en verde sobre su propio repositorio por primera vez. CASP 0.3.0 es el resultado.

15 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9