// Análisis sintáctico de Mini: de texto a árbol.
#ifndef PARSER_H
#define PARSER_H

#include "stmt.h"

// line y column dicen dónde está el token con el que falló.
typedef struct {
    int line;
    int column;
    char message[128];
} ParseError;

// Lee una sola expresión. Devuelve el árbol, y quien llama es su owner.
// Devuelve NULL si hay un error de sintaxis, con error lleno y sin fugas.
Expr *parse_expression(const char *source, ParseError *error);

// Lee un programa completo. Devuelve la lista de instrucciones, y quien llama la libera con stmt_free.
// Si hay un error de sintaxis, devuelve NULL con error->message lleno y sin fugas. Un programa sin
// instrucciones es la lista vacía: también es NULL, pero con error->message vacío ("").
Stmt *parse_program(const char *source, ParseError *error);

#endif
