
//
// To jest przykładowy kod z podrozdziału 6.8 "Strumienie tokenów" książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

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

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 zeznaku i liczby typu double.
        :kind(ch), value(val) { }
};

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

class Token_stream {
public: 
    // Interfejs użytkownika.
    Token_stream();   // Tworzy Token_stream wczytujący ze strumienia cin.
    Token get();      // Pobiera token.
    void putback(Token t); // Wstawia token z powrotem.
private:
    // Szczegóły implementacyjne
    // (niedostępne bezpośrednio użytkownikom typu Token_stream).
};

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

int main()
{
    Token_stream ts;    // Strumień tokenów o nazwie ts.
    Token t = ts.get(); // Pobiera następny token ze strumienia ts.
    // ...
    ts.putback(t);      // Wstawia token t z powrotem do ts.
}

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