
//
// Przykładowy kod z rozdziału 6.5.2.1 "Wyrażenia — druga próba" 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 ze znaku i wartości typu double.
        :kind(ch), value(val) { }
};

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

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

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

double term();        // Wczytuje i wartościuje składnik.

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

double expression()
{
    double left = term();              // Wczytuje i oblicza wartość składnika.
    Token t = get_token();             // następny token
    switch (t.kind) {                  // Sprawdza jaki to jest rodzaj tokenu.
    case '+':
        return left + expression();    // Wczytuje i oblicza wartość wyrażenia,
                                       // następnie wykonuje dodawanie.
    case '-':
        return left - expression();    // Wczytuje i oblicza wartość wyrażenia,
                                       // następnie wykonuje odejmowanie.
    default:
        return left;                   // Zwraca wartość składnika.
    }
}

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