#include <stdio.h>
#include <list>

std::list<unsigned long> theStack;

int main(int argc, char **argv) {
    FILE *in = fopen("data.txt", "r");
    unsigned long l1, l2;
    while(1) {
        int ch = fgetc(in);
        if (ch == -1)
            break;
        if ((ch >= '0') && (ch <= '9')) {
            theStack.push_back(ch - '0');
        } else if (ch == '+') {
            l1 = theStack.back(); theStack.pop_back();
            l2 = theStack.back(); theStack.pop_back();
            theStack.push_back(l1 + l2);
        } else if (ch == '*') {
            l1 = theStack.back(); theStack.pop_back();
            l2 = theStack.back(); theStack.pop_back();
            theStack.push_back(l1 * l2);
        } else if (ch <= ' ') {
            // Do nothing
        } else {
            printf("UNKNOWN SYMBOL: %c\n", ch);
        }
    }
    printf("Stack content:\n");
    for (std::list<unsigned long>::iterator i = theStack.begin(); i != theStack.end(); i++)
        printf("%d ", *i);
    printf("\n");
}
