
//
// Przykładowy kod z rozdziału 6.5.4 "Podstawowe elementy wyrażeń" 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.

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

double expression();  // Wczytuje i wartościuje wyrażenie.

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

double primary()
{
    Token t = get_token();
    switch (t.kind) {
    case '(':    // Obsługa '(' expression ')'.
        {    
            double d = expression();
            t = get_token();
            if (t.kind != ')') error("Oczekiwano ')'.");
            return d;
        }
    case '8':           // Za pomocą znaku '8' reprezentujemy liczby.
        return t.value; // Zwraca wartość liczby.
    default:
        error("Oczekwiano czynnika.");
    }
}

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