следующим образом. Сначала актуализируются правая и левая части
символьного значения. Если результатом бинарной операции является
константа, то эта константа становится результирующим символьным
значением. В противном случае результат актуализации — новое сим-
вольное значение в виде бинарной операции. Фактически бинарные
символы актуализируются рекурсивно с возможными упрощениями в
виде свертывания отдельных элементов или всего выражения в кон-
станту. Это свертывание объясняется уменьшением диапазонов вход-
ных значений каждого символьного значения, входящего в бинарное
символьное значение, при уточнении контекста вызова.
Актуализация метасимволов представляет собой отдельную под-
задачу. Под метасимволами понимают символические значения, отно-
сящиеся к объекту анализа, но не являющиеся его непосредственной
характеристикой. Выделение метасимволов связано с тем, что источ-
ником метаданных является не ядро анализатора, а сами проверяющие
модули, которые связывают необходимую информацию в виде мета-
символов с интересующими их регионами памяти и выражениями. Со-
ответственно, регионы памяти и выражения могут иметь более одного
связанного с ними метасимвола. Поскольку каждый проверяющий мо-
дуль может реализовывать свой подход к использованию метаинфор-
мации и обозначениям интересующих его объектов, для актуализации
метасимволов применяется отдельное событие, на которое должны
подписываться проверяющие модули, использующие метаданные. В
результате проверяющие модули самостоятельно обновляют предста-
вление связанных с ними символьных значений и нарушение принци-
па инкапсуляции данных не происходит. В качестве примера можно
привести проверку длины строки. Длина строки не входит в число
данных, о которых известно анализатору — за ее моделирование от-
вечает проверяющий модуль, связывающий символьное значение (ме-
тасимвол) с регионом памяти этой подстроки. Таким образом, задача
проверяющего модуля при актуализации метазначения, связанного с
регионом, — поиск существующего метазначения для этого региона и
его возврат.
Построение и актуализация сложных структур данных в резюме
проводится с помощью сохранения цепочки родительских регионов.
Для каждого региона памяти, имеющего связанное с ним символь-
ное значение (как явно, так и неявно), строится упорядоченный спи-
сок родительских регионов, начиная от региона верхнего уровня —
M
0
. . . M
n
. При этом регионы
M
1
. . . M
n
могут быть только регионами
элемента массива, регионами поля структуры или регионами данных
базового класса. Этот список сохраняется в резюме и используется
для актуализации значений по следующему алгоритму.
1. Актуализация региона
M
0
.
2. Для всех регионов
M
1
. . . M
n
согласно их положению в списке:
86 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5