Случайный афоризм
Книга - друг одинокого, а библиотека - убежище бездомного. (Стефан Витвицкий)
 
новости
поиск по автору
поиск по тематике
поиск по ключевому слову
проба пера
энциклопедия авторов
словарь терминов
программы
начинающим авторам
ваша помощь
о проекте
Книжный магазин
Главная витрина
Книги компьютерные
Книги по психологии
Книги серии "Для чайников"
Книги по лингвистике
ЧАВо
Разные Статьи
Статьи по литературе

Форма пользователя
Логин:
Пароль:
регистрация
 детектив



 драмма



 животные



 история



 компьютерная документация



 медицина



 научно-популярная



 очередная история



 очерк



 повесть



 политика



 поэзия и лирика



 приключения



 психология



 религия



 студенту



 технические руководства



 фантастика



 философия и мистика



 художественная литература



 энциклопедии, словари



 эротика, любовные романы



в избранноеконтакты

Параметры текста
Шрифт:
Размер шрифта: Высота строки:
Цвет шрифта:
Цвет фона:

операция  !  (НЕ),  поскольку  get()  возвращает  в  случае  успеха
ненулевое значение.
  Функция (inline)  isspace() из  обеспечивает стандартную
проверку на  то, является  ли символ пропуском (#8.4.1); isspace(c)
возвращает ненулевое значение, если c является символом пропуска, и
ноль в  противном случае.  Проверка реализуется  в  виде  поиска  в
таблице,  поэтому  использование  isspace()  намного  быстрее,  чем
проверка на  отдельные символы  пропуска;  это  же  относится  и  к
функциям isalpha(),  isdigit() и  isalnum(), которые используются в
get_token().
  После  того,   как  пустое   место  пропущено,   следущий  символ
используется для  определения того, какого вида какого вида лексема
приходит. Давайте  сначала рассмотрим  некоторые  случаи  отдельно,
прежде чем  приводить всю  функцию. Ограничители  лексем '\n' и ';'
обрабатываются так:

  switch (ch) {
  case ';':
  case '\n':
      cin >> WS;    // пропустить пропуск
      return curr_tok=PRINT;

Пропуск  пустого   места  делать  необязательно,  но  он  позволяет
избежать повторных  обращений к  get_token(). WS  - это стандартный
пропусковый объект,  описанный в ; он используется только
для сброса  пропуска. Ошибка  во вводе  или конец  ввода  не  будут
обнаружены до следующего обращения к get_token(). Обратите внимание
на то,  как можно  использовать несколько  меток case (случаев) для
одной и  той же  последовательности операторов,  обрабатывающих эти
случаи. В  обоих случаях  возвращается лексема PRINT и помещается в
curr_tok.
  Числа обрабатыватся так:

  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
  case '.':
      cin.putback(ch);
      cin >> number_value;
      return curr_tok=NUMBER;

  Располагать метки  случаев case  горизонтально, а не вертикально,
не очень  хорошая мысль,  поскольку читать  это гораздо труднее, но
отводить по одной строке на каждую цифру нудно.
  Поскольку операция  >> определена  также и  для чтения констант с
плавающей точкой  в double,  программирование этого  не  составляет
труда: сперва начальный символ (цифра или точка) помещается обратно
в cin, а затем можно считывать константу в number_value.
  Имя, то  есть лексема  NAME, определяется  как буква,  за которой
возможно следует несколько букв или цифр:

                             - стр 84 -

  if (isalpha(ch)) {
      char* p = name_string;
      *p++ = ch;
      while (cin.get(ch) && isalnum(ch)) *p++ = ch;
      cin.putback(ch);
      *p = 0;
      return curr_tok=NAME;
  }

1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 97 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : 163 : 164 : 165 : 166 : 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 : 194 : 195 : 196 : 197 : 198 : 199 : 200 : 201 : 202 : 203 : 204 : 205 : 206 : 207 : 208 : 209 : 210 : 211 : 212 : 213 : 214 : 215 : 216 : 217 : 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : 226 : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : 240 : 241 : 242 : 243 : 244 : 245 : 246 : 247 : 248 : 249 :
главная наверх

(c) 2008 Большая Одесская Библиотека.