
//
// Przykładowy kod z rozdziału 6.3.4 "Używanie tokenów" książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

class Token {
public:
    char kind;        // rodzaj tokenu
    double value;     // Dla liczb: wartość. 
    Token(char ch)    // Tworzy Token ze znaku.
        :kind(ch), value(0) { }    
    Token(char ch, double val)     // Tworzy Token ze znaku i wartości typu double.
        :kind(ch), value(val) { }
};

//------------------------------------------------------------------------------

Token get_token();    // Wczytuje token ze strumienia cin.

//------------------------------------------------------------------------------

vector<Token> tok;    // Tutaj będziemy zapisywać tokeny.

//------------------------------------------------------------------------------

int main()
{
    while (cin) {
        Token t = get_token();
        tok.push_back(t);
    }
    // ...
    // Teraz możemy znaleźć operację mnożenia za pomocą prostej pętli:

    for (int i = 0; i<tok.size(); ++i) {
        if (tok[i].kind=='*') {    // Znaleźliśmy operator mnożenia!
            double d = tok[i-1].value*tok[i+1].value;
            // Co teraz?
        }
    }
}

//------------------------------------------------------------------------------
