Статьи Королевства Дельфи

       

Структура сценария


Как уже было сказано, формула переводится в цифровой вид - сценарий. Существуют два вида сценариев - математический и логический. Математический сценарий может содержать внутри себя только математические сценарии, в то время как логический сценарий может содержать внутри себя как логические, так и математическии сценарии. Они по своей структуре очень близки друг к другу. У каждого сценария есть заголовок, который содерит некоторую начальную информацию:

Сценарий начинается с результата. Это нужно для расчета вложенных сценариев. Тип помещаемого туда результата - тип Double.
Кстати, в логическом сценарии результат занимает 4 байта и содержит логическое выражение. Это, конечно, очень нерационально тратить целых 4 байта на хранение логической переменной, но так проще. А основное внимание при создании этого модуля я уделял на достижении максимальной скорости вычисления формулы. Работа внутри модуля производится с вещественными числами, что, например, позволяет без проблем использовать тригонометрические функции. При расчете сценария сначала происходит расчет всех вложенных сценариев, в которых, в свою очередь, также происходит расчет вложенных сценариев и так далее. После расчета вложенного сценария в его начало записывается результат. Адреса вложенных сценариев задаются в байтах относительно начала содержащего их сценария. Сама формула при переводе в сценарий делится на части (единицы), которые определяются наличием положительго или отрицательного знака (в случае с логическим сценарием деление на единицы происходит несколько иначе, формула разбивается по логическим операндам xor, or, and).
Единицы содержат в себе 3 составляющие: функции, числа и вложенные сценарии. Это также справедливо и для логического сценария. Функции классифицируются между собой. Они отличаются тем, что некоторые требуют до себя параметр (например факториал: "10!"), некоторые требуют после себя параметр (например косинус: "cos 0"), некоторые требуют и до и после себя параметры (например умножение: "2 * 2"), некоторые не требуют вообще никаких параметров (например число пи: "pi"). У них также есть общее свойство - они все возвращают какой-то результат. Это также касается и логических функций. Каждая единица начинается с заголовка:
Заголовки логических и математических единиц идентичны, и те и другие имеют знак и тип. Если знак отрицательный ("not" в логических или "-" в математических единицах), то значение единицы инвертируется. В логических выражениях допускается использование операнда "not" любое количество раз. Тип единицы соответствует одному из типов в Delphi. Более подробно - чуть ниже. Вычисления будут производится соотвественно описанному типу. В логических единицах тип тоже присутствует, так как хоть они и не могут содержать математические выражения, но могут содержать числа, тип которых можно уточнить. В общей части находятся функции, числа, вложенные сценарии. Чтобы из можно было отличать друг от друга, перед каждым составляющим общей части единицы ставится идентификатор. Еще одно отличие логического сценария от математического состоит в том, что в логическом сценарии перед вложенным сценарием ставится идентификатор, уточняющий его тип. Это необходимо, так как логическая формула может содержать в себе как логические формулы, так и математические и при вычисленни их нужно отличать друг от друга.



Содержание раздела