Parser (Analizador Sintáctico)

Archivo: src/parser.rs

El Parser convierte la secuencia lineal de tokens producida por el Lexer en un Árbol de Sintaxis Abstracta (AST) estructurado. Utiliza una combinación de Análisis Sintáctico Recursivo Descendente para sentencias y declaraciones, y un Analizador Pratt (Pratt Parser) de precedencia para expresiones de operadores.

Estructura del Parser

Definición de Parser
pub struct Parser {
    tokens: Vec<Token>,
    pos: usize,
    errores: Vec<ErrorForja>,
}

El Algoritmo de Precedencia Pratt (Pratt Parsing)

Para parsear expresiones compuestas por operadores infijos y prefijos (ej: -5 + x * 2) sin caer en recursiones infinitas, Forja utiliza un Pratt Parser. Cada operador y símbolo del lenguaje tiene asignada una precedencia numérica:

Precedencia (Enum)Nivel de UniónAsociados
Ninguna0Literales, Identificadores
Asignacion1=
O_Logico2||
Y_Logico3&&
Igualdad4==, !=
Comparacion5>, <, >=, <=
Suma6+, -
Producto7*, /, %
Prefijo8!, - unario, & préstamo
Llamada9Llamada a función (), indexación [], acceso a miembros .

Breakdown de Funciones del Parser

1. Control y Navegación de Tokens

2. Análisis de Declaraciones

3. Análisis de Expresiones (Parser Pratt)