Lexer (Analizador Léxico)

Archivo: src/lexer.rs

El Lexer (Analizador Léxico) es la primera fase del compilador. Convierte una cadena plana de caracteres del código fuente .fa en un vector estructurado de Tokens. Su diseño maneja comentarios de documentación de tres barras, interpolación de strings compleja con balanceo de delimitadores y detección educativa de errores ortográficos en el código.

Estructura del Lexer

Definición de Lexer
pub struct Lexer {
    source: Vec<char>,
    pos: usize,
    linea: usize,
    columna: usize,
    tokens_pendientes: Vec<Token>,
}

Breakdown de Funciones y Métodos

pub fn new(source: &str) -> Self

pub fn tokenize(&mut self) -> Result<Vec<Token>, Vec<ErrorForja>>

pub fn peek(&self) -> Option<char>

fn advance(&mut self) -> Option<char>

fn current(&self) -> Option<char>

fn skip_whitespace(&mut self)

fn skip_comentarios(&mut self)

fn identificar_keyword(&self, palabra: &str) -> TokenKind

fn leer_identificador_o_keyword(&mut self) -> TokenKind

fn leer_numero(&mut self) -> TokenKind

fn leer_caracter(&mut self, linea: usize, columna: usize) -> Result<Option<Token>, ErrorForja>

fn leer_texto(&mut self) -> Result<TokenKind, ErrorForja>

fn escanear_expresion_interpolada(&mut self) -> Result<(), ErrorForja>