Background Image
Previous Page  12 / 22 Next Page
Information
Show Menu
Previous Page 12 / 22 Next Page
Page Background

следующим образом. Сначала актуализируются правая и левая части

символьного значения. Если результатом бинарной операции является

константа, то эта константа становится результирующим символьным

значением. В противном случае результат актуализации — новое сим-

вольное значение в виде бинарной операции. Фактически бинарные

символы актуализируются рекурсивно с возможными упрощениями в

виде свертывания отдельных элементов или всего выражения в кон-

станту. Это свертывание объясняется уменьшением диапазонов вход-

ных значений каждого символьного значения, входящего в бинарное

символьное значение, при уточнении контекста вызова.

Актуализация метасимволов представляет собой отдельную под-

задачу. Под метасимволами понимают символические значения, отно-

сящиеся к объекту анализа, но не являющиеся его непосредственной

характеристикой. Выделение метасимволов связано с тем, что источ-

ником метаданных является не ядро анализатора, а сами проверяющие

модули, которые связывают необходимую информацию в виде мета-

символов с интересующими их регионами памяти и выражениями. Со-

ответственно, регионы памяти и выражения могут иметь более одного

связанного с ними метасимвола. Поскольку каждый проверяющий мо-

дуль может реализовывать свой подход к использованию метаинфор-

мации и обозначениям интересующих его объектов, для актуализации

метасимволов применяется отдельное событие, на которое должны

подписываться проверяющие модули, использующие метаданные. В

результате проверяющие модули самостоятельно обновляют предста-

вление связанных с ними символьных значений и нарушение принци-

па инкапсуляции данных не происходит. В качестве примера можно

привести проверку длины строки. Длина строки не входит в число

данных, о которых известно анализатору — за ее моделирование от-

вечает проверяющий модуль, связывающий символьное значение (ме-

тасимвол) с регионом памяти этой подстроки. Таким образом, задача

проверяющего модуля при актуализации метазначения, связанного с

регионом, — поиск существующего метазначения для этого региона и

его возврат.

Построение и актуализация сложных структур данных в резюме

проводится с помощью сохранения цепочки родительских регионов.

Для каждого региона памяти, имеющего связанное с ним символь-

ное значение (как явно, так и неявно), строится упорядоченный спи-

сок родительских регионов, начиная от региона верхнего уровня —

M

0

. . . M

n

. При этом регионы

M

1

. . . M

n

могут быть только регионами

элемента массива, регионами поля структуры или регионами данных

базового класса. Этот список сохраняется в резюме и используется

для актуализации значений по следующему алгоритму.

1. Актуализация региона

M

0

.

2. Для всех регионов

M

1

. . . M

n

согласно их положению в списке:

86 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5