flex-bison-in-action/analyzers/polynomials/stack/stack_test.c

63 lines
2.4 KiB
C

// калькулятор на основе обратной польской записи
// gcc stack_test.c stack.c -o stack_test.exe
#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Тестирование сценария:
// Токен: 2 -> Стек: [2]
// Токен: 2 -> Стек: [2, 2]
// Токен: 10 -> Стек: [2, 2, 10]
// Токен: 3 -> Стек: [2, 2, 10, 3]
// Токен: - -> Берем 3 и 10: 10-3=7 -> Стек: [2, 2, 7]
// Токен: * -> Берем 7 и 2: 2*7=14 -> Стек: [2, 14]
// Токен: x -> Стек: [2, 14, x]
// Токен: 8 -> Стек: [2, 14, x, 8]
// Токен: - -> Берем 8 и x: x-8 -> Стек: [2, 14, (x-8)]
// Токен: * -> Берем (x-8) и 14: 14*(x-8) -> Стек: [2, (14*(x-8))]
// Токен: + -> Берем (14*(x-8)) и 2: 2+(14*(x-8)) -> Стек: [(2+(14*(x-8)))]
// Ответ: (2+(14*(x-8)))
// P.S. и еще нескольких
int main() {
char* res;
Element tokens[100];
tokens[0].str_ptr = "2"; tokens[0].type = 'n'; // number
tokens[1].str_ptr = "2"; tokens[1].type = 'n'; // number
tokens[2].str_ptr = "10"; tokens[2].type = 'n'; // number
tokens[3].str_ptr = "3"; tokens[3].type = 'n'; // number
tokens[4].str_ptr = "-"; tokens[4].type = 'o'; // operator
tokens[5].str_ptr = "*"; tokens[5].type = 'o'; // operator
tokens[6].str_ptr = "x"; tokens[6].type = 'v'; // variable
tokens[7].str_ptr = "8"; tokens[7].type = 'n'; // number
tokens[8].str_ptr = "-"; tokens[8].type = 'o'; // operator
tokens[9].str_ptr = "*"; tokens[9].type = 'o'; // operator
tokens[10].str_ptr = "+"; tokens[10].type = 'o'; // operator
res = calulate(tokens, 11);
printf("Result: %s\n", res);
free(res);
tokens[0].str_ptr = "2"; tokens[0].type = 'n';
tokens[1].str_ptr = "2"; tokens[1].type = 'n';
tokens[2].str_ptr = "+"; tokens[2].type = 'o';
res = calulate(tokens, 3);
printf("Result: %s\n", res);
free(res);
tokens[0].str_ptr = "2"; tokens[0].type = 'n';
tokens[1].str_ptr = "2"; tokens[1].type = 'n';
tokens[2].str_ptr = "+"; tokens[2].type = 'o';
tokens[3].str_ptr = "x"; tokens[3].type = 'v';
tokens[4].str_ptr = "*"; tokens[4].type = 'o';
res = calulate(tokens, 5);
printf("Result: %s\n", res);
free(res);
return 0;
}