In this work, the problem of syntax and semantic analysis of program sourceswritten in different languages is considered. The programming language is considered tobe specified by describing the lexis as a set of regular expressions and the syntax as acontext-free grammar with a set of controlling structures matching grammar rules. Thesecontrolling structures manage abstract syntax tree building and other analysis tasks. Allthese allow performing some sort of semantic analysis against the source written in thespecified language.
Analysis of some program sources semantic aspects based on formal syntax and semantics specifications.pdf Целью работы является создание инструментального средства, позволяющего осу-ществлять семантический анализ исходных текстов программ, написанных на раз-личных языках программирования, на основе формальных спецификаций лексики,синтаксиса и семантики целевого языка программирования. Рассматривается задачаанализа некоторых семантических аспектов исходных текстов однопоточных программна императивных языках программирования, таких, как объявление и использованиеидентификаторов, а также выявления областей их использования на основе анализапотоков исполнения программы. Целью такого анализа является извлечение семанти-чески значимых конструкций и алгоритмов работы из текста программы и представ-ление их в независимом от конкретного языка виде.Анализ проводится в несколько этапов. Сначала производится лексический и син-таксический анализ, сопровождающийся построением абстрактного синтаксическогодерева по исходному тексту программы. В зависимости от конкретного языка постро-ение таблицы идентификаторов и дерева пространств имён происходит либо в одинэтап - сразу при построении синтаксического дерева, либо в два этапа, первый изкоторых осуществляется при построении дерева, а второй - при вторичном обходе по-строенного дерева.В качестве отправной точки для решения задачи построения синтаксического дере-ва используется система генераторов компиляторов Lex и Yacc. Генераторы модифици-рованы так, что вместо исходного кода анализирующих конечных автоматов, которыйнеобходимо сначала скомпилировать, сразу создаются готовые к работе структурыанализатора. В качестве формата файлов спецификаций используются оригинальныеформаты файлов спецификаций лексики и синтаксиса Lex и Yacc, модифицирован-ные в части описания действий, исполняемых при свёртке по синтаксическим прави-лам. Лексические правила описываются в виде набора регулярных выражений, кото-рым сопоставлены управляющие конструкции, регулирующие возврат обнаруженныхлексем в синтаксический анализатор. Синтаксические правила представляют собойописания структур языка, которым сопоставленыуправляющие конструкции, регули-рующие построение абстрактного синтаксического дерева, таблиц идентификаторов,дерева пространств имён и других элементов (такой подход описан в [1]). Синтаксиче-ским анализатором поддерживаются контекстно-свободные грамматики, разбираемыепо алгоритму LALR.Семантический анализ производится на основе нескольких обходов абстрактногосинтаксического дерева с построением конструкций, описывающих объявление и ис-пользование идентификаторов (типов, переменных, функций, классов, методов и т. д.),организацию пространств имён и ограниченно описывающих потоки исполнения ко-манд, что позволяет анализировать использование тех или иных участков кода.Результатом данной работы является инструмент, способный анализировать исход-ные тексты программ на языках программирования, описанных с помощью формаль-ных спецификаций лексики, синтаксиса и семантики, и создавать абстрактное пред-ставление разбираемой программы, доступное для семантического анализа. В даль-нейшем предполагается расширить список формально описанных в терминах системыязыков (на данный момент рассматривается только язык C#), а также, возможно,добавить функцию генерации исходных текстов из абстрактного представления.
Саух Антон Михайлович | Института динамики систем и теории управления, г. Иркутск | аспирант | saukham@gmail.com |