Аннотация:
Для выполнения статического анализа предложено использовать универсальные многоуровневые промежуточные представления. Были формализованы модели следующих представлений: для анализа архитектуры проекта – модель представления уровня классов, для анализа функциональных модулей – потока управления. Необходимо формализовать метод получения таких представлений для соответствия предложенной модели. Это позволяет единообразно добавлять новые языки путем создания стандартного генератора универсального промежуточного представления. Предлагается использовать абстрактный цифровой автомат с магазинной памятью. В качестве базового способа преобразования текста в машинные данные используется синтаксический анализ. Такой конечный автомат обрабатывает последовательность сигналов, описывающих входное дерево разбора, и формирует последовательность сигналов, описывающих дерево промежуточного представления. Хранение в памяти предыдущих состояний автомата дает возможность анализировать произвольную вложенность входного дерева. Введение специального свойства для входных и выходных сигналов позволяет описать дерево в виде последовательности узлов в соответствии с его обходом в глубину. Для программной реализации такого подхода был выбран язык Java, промежуточное представление строилось также для Java. Каждое состояние автомата реализовано в виде активного объекта, обрабатывающего входной поток сигналов. Реализуя такие шаблоны проектирования, как «цепочка ответственности», «состояние» и «стратегия», состояния образовывали таблицу переходов автомата Мили и магазинную память. Для хранения входных и выходных данных был выбран формат XML. Тестирование путем проверки преобразования синтаксических конструкций языка в текст универсального промежуточного представления на собственном коде и проектах с открытым исходным кодом показало полное соответствие реализации предложенным моделям.