/**
* Copia un fragmento de una cadena devolviendo el puntero a la copia.
+ *
+ * \param str Cadena de caracteres original.
+ * \param start Comienzo del fragmento a copiar.
+ * \param len Longitud del fragmento a copiar.
+ *
+ * \return Fragmento copiado.
*/
char* Equation_copy_fragment(const char* str, size_t start, size_t len) {
/* Reservo el espacio (incluyendo el caracter nulo). */
#include <stdlib.h>
#include <stdio.h>
+/**
+ * Ecuación.
+ */
typedef struct {
+ /** Nombre de la variable. */
char* variable;
+ /** Expresión. */
char* expression;
} Equation;
+/**
+ * Crea una nueva Equation.
+ *
+ * \param line Cadena de caracteres de donde extraer la Equation.
+ * \param var_start Comienzo del nombre de la variable.
+ * \param var_len Longitud de la variable.
+ * \param exp_start Comienzo de la expresión.
+ * \param exp_len Longitud de la expresión.
+ *
+ * \return Nueva Equation.
+ */
Equation* Equation_new(const char* line, size_t var_start, size_t var_len,
size_t exp_start, size_t exp_len);
+/**
+ * Elimina una Equation.
+ *
+ * \param eq Equation a eliminar.
+ */
void Equation_delete(Equation* eq);
+/**
+ * Imprime una Equation.
+ *
+ * \param eq Equation a imprimir.
+ * \param fp Archivo donde imprimirla.
+ *
+ * \return Cantidad de caracteres impresos.
+ */
size_t Equation_print(Equation* eq, FILE* fp);
#endif /* EQUATION_H */
#include <stdlib.h>
#include <stdio.h>
+/**
+ * Error de interpretación.
+ */
typedef struct {
+ /** Línea en la que se produjo el error. */
size_t line;
+ /** Posición en la que se produjo el error. */
size_t pos;
+ /** Mensaje de error. */
char* message;
} ParseError;
+/**
+ * Crea un nuevo ParseError.
+ *
+ * \return Nuevo ParseError.
+ */
ParseError* ParseError_new(void);
+/**
+ * Elimina un ParseError.
+ *
+ * \param pe ParseError a eliminar.
+ */
void ParseError_delete(ParseError* pe);
/**
+ * Cambia el mensaje al ParseError.
+ *
+ * \param pe ParseError al cual cambiar el mensaje de error.
+ * \param msg Nuevo mensaje.
+ *
* \return TRUE si se pudo alocar la memoria necesaria, FALSE si no.
*/
bool ParseError_set_message(ParseError* pe, const char* msg);
/**
+ * Cambia el mensaje especificando posición del error.
+ * Se epecifica la posición, el caracter incorrecto y que tipo de caracteres se
+ * esperaban.
+ *
+ * \param pe ParseError al cual cambiar el mensaje de error.
+ * \param msg Mensaje con los caracteres que se esperaban.
+ * \param pos Posición en la que se produjo el error.
+ * \param wrong_char Caracter incorrecto.
+ *
* \return TRUE si se pudo alocar la memoria necesaria, FALSE si no.
*/
bool ParseError_set_pos_message(ParseError* pe, const char* msg, size_t pos,
char wrong_char);
+/**
+ * Imprime un ParseError.
+ *
+ * \param pe ParseError a imprimir.
+ * \param fp Archivo en el cual imprimirlo.
+ *
+ * \return cantidad de caracteres impresos.
+ */
size_t ParseError_print(ParseError* pe, FILE* fp);
#endif /* PARSEERROR_H */
size_t DLList_equation_print(DLList* l, FILE* fp);
+void DLList_equation_delete(DLList* l);
+
/* TODO:
*
* opcion1:
bool parser_equation(const char* line, size_t len, DLList* equation_list,
ParseError* error);
-void DLList_equation_delete(DLList* l);
-
#endif /* PARSER_EQUATION_H */