5.7 Другой подкласс — Константы |
Предыдущая Содержание Следующая |
Кто любит набирать значение π или другие математические константы? Позаимствуем информацию из hoc Кернигана и Пайка [K&P84] и определим некоторые константы для нашего калькулятора. Во время инициализации распознавателя должна вызываться следующая функция:
void initConst (void) { static const struct Var constants [] = { /* like hoc */ { &_Var, "PI", CONST, 3.14159265358979323846 }, ... 0 };
const struct Var * vp;
for (vp = constants; vp -> _.name; ++ vp) install(vp); }
Переменные и константы по большей части одинаковы: имеют имена и значения и живут в таблице символов; возвращают свои значения для использования в арифметическом выражении; и не должны быть удаляться при удалении арифметического выражения. Тем не менее, константам нельзя делать присвоение, так что следует договориться о новом значении CONST для маркера, которое распознаватель принимает в factor() так же как VAR, но не разрешает находиться на левой стороне присвоения в stmt().
|
Предыдущая Содержание Следующая |