Программирование. Принципы и практика использования C++ Исправленное издание, стр. 90
// на новую строку, символы табуляции и т.д.) switch (ch) { case ';': // для печати case 'q': // для выхода case '(': case ')': case '+': case '–': case '*': case '/': return Token(ch); // пусть каждый символ // представляет себя сам case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { cin.putback(ch); // возвращаем цифру обратно в поток ввода double val; cin >> val; // считываем число с плавающей точкой return Token('8',val); // пусть символ '8' означает "число" } default: error("Неправильная лексема"); }}Детально рассмотрим функцию
get()Tokenif (full) { // если в буфере есть лексема, // удаляем ее оттуда full=false; return buffer;}Только если переменная
fullfalseerror()default: error("Неправильная лексема");Функция
error()std_lib_facilities.hНеобходимо решить, как представлять разные виды лексем, т.е. выбрать значения, идентифицирующие вид члена. Для простоты отладки мы решили обозначать скобки и операторы соответствующими им символами.
Это позволяет чрезвычайно просто обрабатывать скобки и операторы.
case '(': case ')': case '+': case '–': case '*': case '/': return Token(ch); // пусть каждый символ представляет себя сам Честно говоря, мы “забыли” точку с запятой,
';'q6.8.3. Считывание чисел
Осталось обработать числа. На самом деле это не просто. Действительно, как узнать значения числа
123100+20+312.3412.34е5doublecinget()case '.':case '0': case '1': case '2': case '3': case '4': case '5':case '6': case '7':case '8': case '9': { cin.putback(ch); // возвращаем цифру в поток ввода double val; cin >> val; // считываем число с плавающей точкой return Token('8',val); // пусть символ '8' обозначает "число" }Мы в некотором смысле произвольно решили, что символ
'8'Token'.'cin1231cin2310023К счастью (и не случайно), поток
cinToken_streamcin
6.9. Структура программы
Как утверждает пословица, за деревьями трудно увидеть лес. Аналогично, легко потерять смысл программы, просматривая все ее функции, классы и т.д. Давайте рассмотрим программу, пропуская ее детали.