]> git.llucax.com Git - z.facultad/75.42/calculadora.git/blob - parser_expression_test.c
Andan (con pruebas moderadas) todos los parsers. Se separan algunas cosas. Se
[z.facultad/75.42/calculadora.git] / parser_expression_test.c
1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=0 fo+=t:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Ejercicio Número 2:
6  * Programa calculadora.
7  *
8  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9  * Puede copiar, modificar y distribuir este programa bajo los términos de
10  * la licencia GPL (http://www.gnu.org/).
11  *
12  * Creado: mar sep 16 02:24:44 ART 2003
13  *
14  * $Id$
15  */
16
17 /**
18  * \file
19  *      Hace varios chequeos para probar si anda bien la función
20  *      parser_expression().
21  */
22
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26
27 #include "memdebug_debugger.h"
28 #include "parser_expression.h"
29 #include "variable.h"
30 #include "variable_list.h"
31 #include "strutil.h"
32
33 /**
34  * Programa para probar parser_expression().
35  *
36  * \return EXIT_SUCCESS si se realizó bien, EXIT_FAILURE si no.
37  */
38 int main(int argc, char* argv[]) {
39     /* Declaración de variables. */
40     int i;
41     float result;
42     DLList* lista;
43     Variable* var;
44     char* arg;
45     ParseError* error;
46
47     if (argc < 2) {
48         fprintf(stderr, "Debe pasar expresiones a evaluar como parámetros.\n");
49         fprintf(stderr, "Ejemplo: %s ' (50 +  10 ) *2/(-1)'\n", argv[0]);
50         return EXIT_FAILURE;
51     }
52
53     lista = DLList_new();
54     if (!lista) {
55         fprintf(stderr, "No se pudo crear la lista.\n");
56         return EXIT_FAILURE;
57     }
58
59     var = Variable_new("a", 0, 3);
60     if (!var) {
61         fprintf(stderr, "No se pudo crear la variable.\n");
62         return EXIT_FAILURE;
63     }
64     Variable_set_value(var, "5", 0, 1);
65
66     if (!DLList_push(lista, var)) {
67         fprintf(stderr, "No se pudo agregar variable a la lista.\n");
68         return EXIT_FAILURE;
69     }
70
71     DLList_variable_print(lista, stdout);
72
73     error = ParseError_new();
74     if (!error) {
75         fprintf(stderr, "No se pudo crear el error.\n");
76         return EXIT_FAILURE;
77     }
78
79     for (i = 1; i < argc; i++) {
80         arg = strutil_copy_stripspaces(argv[i], strlen(argv[i]));
81         if (!arg) {
82             fprintf(stderr, "No se pudo crear copia de argv[%u].\n", i);
83             return EXIT_FAILURE;
84         }
85         if (!parser_expression(arg, strlen(arg), &result, lista,
86                     error)) {
87             error->line = i;
88             ParseError_print(error, stderr);
89         } else {
90             printf("Resultado %u: %f\n", i, result);
91         }
92         free(arg);
93     }
94
95     DLList_variable_delete(lista);
96
97     ParseError_delete(error);
98
99     /* Veo si pierdo memoria. */
100     memdebug_end();
101
102     return EXIT_SUCCESS;
103 }
104