5.7 Другой подкласс — Константы

Предыдущая  Содержание  Следующая V*D*V

Кто любит набирать значение π или другие математические константы? Позаимствуем информацию из 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().

 

Предыдущая  Содержание  Следующая