The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

3.4 Процессор

3.4 Процессор

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

Как обработать выражение? Если мы хотим выполнять лишь простые арифметические действия над числовыми значениями, то можно расширить функции распознавания и вычислять результат как только распознаны операторы и операнды: sum() ожидала бы результат типа double от каждого вызова product(), выполняла сложение или вычитание так быстро, как возможно, и возвращала результат работы функции также в виде значения типа double.

Если мы хотим создать систему, которая может обрабатывать более сложные выражения, надо сохранять выражения, чтобы выполнять обработку позже. В этом случае можно не только выполнять арифметические действия, но и позволить определения и условную обработку только части выражения, и можно использовать запомненные выражения в качестве пользовательских функций внутри других выражений. Всё, что нам нужно, это достаточно универсальный способ представления выражения. Традиционный метод заключается в использовании бинарного дерева и сохранения token в каждом узле:

 

struct Node {

    enum tokens token;

    struct Node * left, * right;

};

 

Тем не менее, это не очень гибко. Надо ввести в использование union, чтобы создать узел, в котором можно хранить численное значение и впустую тратится память в узлах, представляющих унарные операторы. Кроме того, process() и delete() будут содержать операторы switch, которые будут множиться с каждым новым символом, который мы придумаем.

 

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