+/* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=0 fo+=t:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Ejercicio Número 2:
+ * Programa calculadora.
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: mar sep 16 02:24:44 ART 2003
+ *
+ * $Id$
+ */
+
+/**
+ * \file
+ * Hace varios chequeos para probar si anda bien la función
+ * parser_expression().
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "memdebug_debugger.h"
+#include "parser_expression.h"
+#include "variable.h"
+#include "variable_list.h"
+#include "strutil.h"
+
+/**
+ * Programa para probar parser_expression().
+ *
+ * \return EXIT_SUCCESS si se realizó bien, EXIT_FAILURE si no.
+ */
+int main(int argc, char* argv[]) {
+ /* Declaración de variables. */
+ int i;
+ float result;
+ DLList* lista;
+ Variable* var;
+ char* arg;
+ ParseError* error;
+
+ if (argc < 2) {
+ fprintf(stderr, "Debe pasar expresiones a evaluar como parámetros.\n");
+ fprintf(stderr, "Ejemplo: %s ' (50 + 10 ) *2/(-1)'\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ lista = DLList_new();
+ if (!lista) {
+ fprintf(stderr, "No se pudo crear la lista.\n");
+ return EXIT_FAILURE;
+ }
+
+ var = Variable_new("a", 0, 3);
+ if (!var) {
+ fprintf(stderr, "No se pudo crear la variable.\n");
+ return EXIT_FAILURE;
+ }
+ Variable_set_value(var, "5", 0, 1);
+
+ if (!DLList_push(lista, var)) {
+ fprintf(stderr, "No se pudo agregar variable a la lista.\n");
+ return EXIT_FAILURE;
+ }
+
+ DLList_variable_print(lista, stdout);
+
+ error = ParseError_new();
+ if (!error) {
+ fprintf(stderr, "No se pudo crear el error.\n");
+ return EXIT_FAILURE;
+ }
+
+ for (i = 1; i < argc; i++) {
+ arg = strutil_copy_stripspaces(argv[i], strlen(argv[i]));
+ if (!arg) {
+ fprintf(stderr, "No se pudo crear copia de argv[%u].\n", i);
+ return EXIT_FAILURE;
+ }
+ if (!parser_expression(arg, strlen(arg), &result, lista,
+ error)) {
+ error->line = i;
+ ParseError_print(error, stderr);
+ } else {
+ printf("Resultado %u: %f\n", i, result);
+ }
+ free(arg);
+ }
+
+ DLList_variable_delete(lista);
+
+ ParseError_delete(error);
+
+ /* Veo si pierdo memoria. */
+ memdebug_end();
+
+ return EXIT_SUCCESS;
+}
+