// Análisis sintáctico de expresiones de Mini. Las instrucciones, if y las llamadas
// llegan la próxima semana.
#ifndef PARSER_H
#define PARSER_H

#include "expr.h"

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

// Devuelve el árbol, y quien llama es su owner. Si hay un error de sintaxis devuelve
// NULL, llena *error con el primer error y no deja nada sin liberar.
// source debe ser una sola expresión completa: si sobra texto, es un error.
Expr *parse_expression(const char *source, ParseError *error);

#endif
