C++   ::   Хилл Мюррей

Страница: 97 из 357

3; здесь надо знать только, что она состоит из элементов вида:

srtuct name (* char* string; char* next; double value; *)

где next используется только функциями, которые поддерживают работу с таблицей:

name* look(char*); name* insert(char*);

Обе возвращают указатель на name, соответствующее парметру – символьной строке; look() выражает недовольство, если имя не было определено. Это значит, что в калькуляторе можно использовать имя без предварительного описания, но первый раз оно должно использоваться в левой части присваивания.



3.1.2 Функция ввода

Чтение ввода – часто самая запутанная часть программы. Причина в том, что если программа должна общаться с человком, то она должна справляться с его причудами, условностями и внешне случайными ошибками. Попытки заставить человека вети себя более удобным для машины образом часто (и справедлво) рассматриваются как оскорбительные. Задача низкоуровневой программы ввода состоит в том, чтобы читать символы по одному и составлять из них лексические символы более высокого уроня. Далее эти лексемы служат вводом для программ более выского уровня. У нас ввод низкого уровня осуществляется get_token(). Обнадеживает то, что написание программ ввода низкого уровня не является ежедневной работой; в хорошей ситеме для этого будут стандартные функции.

Для калькулятора правила сознательно были выбраны такми, чтобы функциям по работе с потоками было неудобно эти правила обрабатывать; незначительные изменения в определении лексем сделали бы get_token() обманчиво простой. Первая сложность состоит в том, что символ новой строки

'\n' является для калькулятора существенным, а функции работы с потоками считают его символом пропуска. То есть, для этих функций '\n' значим только как ограничитель лексемы.

|< Пред. 95 96 97 98 99 След. >|

Java книги

Контакты: [email protected]