Описано решение задачи преобразования исходного кода на объектно-ориентированном языке в формат RDF средствами семантического анализа. Рассмотрены основные принципы семантического анализа объектноориентированного кода и предложен архитектурный прототип программного продукта, осуществляющего преобразование кода в RDF.
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...Alexey Neznanov
Лекция на школе учителей 2018-11-05. Название слишком забористое, но в целом это более-менее системное и актуальное рассмотрение того, что происходит с языками программирования. Лекция прочитана перед изучением языка Питон (Python). Много ссылок
Некоторые трудности при обучении программированию:что нельзя обойти и умолч...Alexey Neznanov
Презентация к обсуждению с учителями информатики на школе учителей основных трудностей при обучении программированию и алгоритмизации в старших классах.
Тема не устаревает уже много лет. Систематизация в красивой форме давно напрашивалась.
Как обычно, есть красивые картинки и полезные ссылки.
Диаграмма вариантов использования как концептуальное представление поведения разрабатываемой системы. Основные элементы и отношения в модели вариантов использования. Формализация функциональных требований к системе с помощью диаграммы вариантов использования. Анализ типичных ошибок при построении диаграмм. Примеры построения диаграмм вариантов использования.
Применение статического анализа при разработке программTatyanazaxarova
Статический анализ - это способ проверки исходного кода программы на корректность. Процесс статического анализа состоит из трех этапов. Сначала анализируемый код разбивается на лексемы - константы, идентификаторы, и т. д. Эта операция выполняется лексером. Затем лексемы передаются синтаксическому анализатору, который выстраивает по этим лексемам дерево кода. Наконец, проводится статический анализ построенного дерева. В данной обзорной статье приведено описание трех методов статического анализа: анализ с обходом дерева кода, анализ потока данных и анализ потока данных с выбором путей.
Понятия технологии разработки объектно-ориентированных информационных систем ...Aimurat Adilbekov
ПЛАН:
1. Причины неудачных проектов
2. Отсутствие моделей при разработке ПО
3. Лучшие практики разработки ПО
4. Что такое визуальное моделирование?
5. Основные понятия визуального моделирования
6. Классификация проектов по сложности
7. Основные понятия ООП
МЕТОД НАВИГАЦИИ ПО ТЕКСТУ ДОКУМЕНТА С ПОМОЩЬЮ АВТОМАТИЧЕСКОЙ ОБРАБОТКИ ЕГО СО...ITMO University
Описывается подход, который может быть использован в качестве альтернативы автоматическому реферированию текста. Суть подхода заключается в формировании представлений исходного текста и возможности перемещаться по его содержанию с помощью этих представлений – от общего представления к более конкретному представлению и обратно. Представления формируются на основании методов автоматической обработки текста – статистических методов и поверхностного лингвистического анализа. В работе дано формализованное описание подхода, а также рассмотрена реализация на основе реляционной базы данных.
Неотрефлексированный сдвиг парадигмы: от поколений языков программирования вы...Alexey Neznanov
Лекция на школе учителей 2018-11-05. Название слишком забористое, но в целом это более-менее системное и актуальное рассмотрение того, что происходит с языками программирования. Лекция прочитана перед изучением языка Питон (Python). Много ссылок
Некоторые трудности при обучении программированию:что нельзя обойти и умолч...Alexey Neznanov
Презентация к обсуждению с учителями информатики на школе учителей основных трудностей при обучении программированию и алгоритмизации в старших классах.
Тема не устаревает уже много лет. Систематизация в красивой форме давно напрашивалась.
Как обычно, есть красивые картинки и полезные ссылки.
Диаграмма вариантов использования как концептуальное представление поведения разрабатываемой системы. Основные элементы и отношения в модели вариантов использования. Формализация функциональных требований к системе с помощью диаграммы вариантов использования. Анализ типичных ошибок при построении диаграмм. Примеры построения диаграмм вариантов использования.
Применение статического анализа при разработке программTatyanazaxarova
Статический анализ - это способ проверки исходного кода программы на корректность. Процесс статического анализа состоит из трех этапов. Сначала анализируемый код разбивается на лексемы - константы, идентификаторы, и т. д. Эта операция выполняется лексером. Затем лексемы передаются синтаксическому анализатору, который выстраивает по этим лексемам дерево кода. Наконец, проводится статический анализ построенного дерева. В данной обзорной статье приведено описание трех методов статического анализа: анализ с обходом дерева кода, анализ потока данных и анализ потока данных с выбором путей.
Понятия технологии разработки объектно-ориентированных информационных систем ...Aimurat Adilbekov
ПЛАН:
1. Причины неудачных проектов
2. Отсутствие моделей при разработке ПО
3. Лучшие практики разработки ПО
4. Что такое визуальное моделирование?
5. Основные понятия визуального моделирования
6. Классификация проектов по сложности
7. Основные понятия ООП
МЕТОД НАВИГАЦИИ ПО ТЕКСТУ ДОКУМЕНТА С ПОМОЩЬЮ АВТОМАТИЧЕСКОЙ ОБРАБОТКИ ЕГО СО...ITMO University
Описывается подход, который может быть использован в качестве альтернативы автоматическому реферированию текста. Суть подхода заключается в формировании представлений исходного текста и возможности перемещаться по его содержанию с помощью этих представлений – от общего представления к более конкретному представлению и обратно. Представления формируются на основании методов автоматической обработки текста – статистических методов и поверхностного лингвистического анализа. В работе дано формализованное описание подхода, а также рассмотрена реализация на основе реляционной базы данных.
Презентация с бесплатного вебинара от Netpeak "Принципы работы поисковой системы".
Докладчик Алексей Данилин — SEO-специалист компании Netpeak.
Netpeak — интернет-маркетинг для вашего бизнеса.
• • • • • • •
Читайте про интернет-маркетинг в Блоге Netpeak: http://blog.netpeak.ru/
Узнайте больше о Netpeak: http://netpeak.net/
ПРИМЕНЕНИЕ ОНТОЛОГИЙ В СИСТЕМЕ УПРАВЛЕНИЯ ИНТЕЛЛЕКТУАЛЬНЫМИ РЕСУРСАМИITMO University
Рассмотрена возможность применения онтологий при построении системы управления интеллектуальными ресурсами (СУИР) и преимущества от внедрения семантических сервисов.
МЕТОД ПОВЫШЕНИЯ ЧУВСТВИТЕЛЬНОСТИ ВОЛОКОННО-ОПТИЧЕСКОГО ГИДРОФОНАITMO University
Рассмотрен один из методов повышения чувствительности волоконно-оптического гидрофона путем формирования покрытий на чувствительной части волокна. Представлены результаты измерений чувствительности для некоторых типов покрытий. Экспериментальные результаты показали, что с помощью специальных покрытий можно достичь увеличения чувствительности на 25–30 дБ по сравнению с волокном в стандартном полиакрилатном покрытии.
МЕТОДЫ ПОЛУЧЕНИЯ И СВОЙСТВА СЛОЕВ НА ОСНОВЕ АМОРФНОГО УГЛЕРОДА, ОРИЕНТИРУЮЩИ...ITMO University
Представлен обзор работ, посвященных исследованиям слоев на основе аморфного углерода, ориентирующих жидкие кристаллы. Рассматриваются бесконтактные способы создания анизотропии поверхности алмазоподобных и полимероподобных слоев аморфного углерода с помощью пучков ионов и плазмы, а также ультрафиолетового излучения. Анализируется влияние условий обработки поверхности таких слоев на характер ориентации и начальный угол наклона директора нематического жидкого кристалла, а также оптические и динамические свойства устройств на их основе.
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...ITMO University
Показаны возможность применения и преимущества дискретного косинусного преобразования для встраивания и восстановления скрытых водяных знаков. Установлено, что метод построения голограммы на основе дискретного косинусного преобразования обеспечивает расширение динамического диапазона и сокращает избыточность при восстановлении изображения водяного знака по сравнению с изображением, восстанавливаемым по методике, основанной на преобразовании Фурье.
ПОГРЕШНОСТИ ИЗГОТОВЛЕНИЯ И УСТАНОВКИ ОТРАЖАТЕЛЬНЫХ ПРИЗМITMO University
Проведен анализ влияния на положение базовой линии (оптической оси) погрешностей изготовления и базирования при сборке отражательных призм. Получено выражение закона преломления в матричной форме, позволившее в результате простого и наглядного вывода получить инвариант декомпланарности. Применив его последовательно к каждой из поверхностей призмы, после последней поверхности получим отклонение выходящего из призмы луча от плоскости главного сечения в виде функции от отклонений нормалей ко всем поверхностям призмы от ее главного сечения, т. е. от декомпланарности нормалей к поверхностям призмы.
СПЕКТРОСКОПИЧЕСКОЕ И ТЕРМОДИНАМИЧЕСКОЕ ИССЛЕДОВАНИЕ ТЯЖЕЛОЙ ВОДЫITMO University
Проведено спектроскопическое и термодинамическое исследование тяжелой воды с целью организации корректного изотопного анализа. Проанализирована зависимость натурального показателя поглощения тяжелой воды α(ν) от ее концентрации. Показано, что в общем случае эта зависимость имеет квадратичный характер с точностью до 0,1 ат.%, а при содержании в тяжелой воде одного из изотопов водорода H или D менее 1 ат.% эта зависимость становится линейной. На основе проведенного анализа экспериментально получены зависимости α(ν) от концентрации тяжелой воды, которые имеют ожидаемый вид.
Рассматриваются особенности экспериментального определения количественных и статистических характеристик виртуальных социальных сообществ в сети Интернет.
Рассмотрены основные проблемы конструирования и изготовления многослойных систем, предназначенных для формирования энергетических характеристик оптических элементов и волнового фронта прошедшего и отраженного излучения.
ИССЛЕДОВАНИЕ ПРОЦЕССОВ ФОРМИРОВАНИЯ ПОЛИМЕРНОГО МИКРОЭЛЕМЕНТА НА ТОРЦЕ ОПТИЧЕ...ITMO University
Рассмотрен процесс формирования самоорганизованных полимерных микроэлементов на торце оптоволокна в ограниченном объеме фотополимера. Исследуются причины возникновения оптических потерь на стыке оптоволокна с микро- элементом.
МЕТОД ДИАГНОСТИКИ ФУНКЦИОНАЛЬНОЙ АКТИВНОСТИ ТКАНЕЙ И ОРГАНОВ БИООБЪЕКТОВITMO University
Для исследования функциональной активности тканей и органов биообъектов предлагается неинвазивный метод ближнепольного высокочастотного зондирования. Рассмотрены физико-биологические основы метода и представлен изме- рительный комплекс для его реализации в клинических условиях. В качестве иллюстрации возможностей метода приведены результаты определения функциональной активности ростковых зон костей у подростков и детей.
КОЛИЧЕСТВЕННАЯ ОЦЕНКА КАЧЕСТВА ИЗОБРАЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ МЕТОДОВ НЕЧЕТКОЙ ...ITMO University
Рассматриваются пути улучшения и оценки качества изображения методами нечеткой логики, в частности, с помощью известного способа определения границ объекта.
АЛГЕБРАИЧЕСКИЙ МЕТОД ОПРЕДЕЛЕНИЯ ПОЛНОГО МНОЖЕСТВА ПРОСТЫХ РАЗРЕЗОВ В ДВУХПОЛ...ITMO University
Рассматривается задача поиска простых разрезов в двухполюсных структурно-сложных сетях. В основу предлагаемого метода положена алгебраическая модель сети, базирующаяся на алгебре кубических комплексов. Это позволяет предложить эффективную с точки зрения трудоемкости процедуру определения полного множества простых разрезов.
РЕКУРРЕНТНОЕ СИСТЕМАТИЧЕСКОЕ ПОМЕХОЗАЩИТНОЕ ПРЕОБРАЗОВАНИЕ КОДОВ: ВОЗМОЖНОСТИ...ITMO University
Рассматривается проблема формирования матричных компонентов векторноматричного описания двоичных динамических систем помехозащитного преобразования кодов. Показано, что базис представления матричных компонентов зависит от проверочной и образующей матриц помехозащищенного кода, а также от его образующего модулярного многочлена.
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОДА В ФОРМАТ RDF СРЕДСТВАМИ СЕМАНТИЧЕСКОГО АНАЛИЗА
1. А.В. Зараковский, С.В. Клименков, Н.И. Ткаченко, А.Е. Харитонова
Научно-технический вестник Санкт-Петербургского государственного университета
информационных технологий, механики и оптики, 2011, № 2 (72)
123
5
КОМПЬЮТЕРНЫЕ СИСТЕМЫ
И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
УДК 004.423.4
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ
ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОДА В ФОРМАТ RDF СРЕДСТВАМИ
СЕМАНТИЧЕСКОГО АНАЛИЗА
А.В. Зараковский, С.В. Клименков, Н.И. Ткаченко, А.Е. Харитонова
Описано решение задачи преобразования исходного кода на объектно-ориентированном языке в формат RDF сред-
ствами семантического анализа. Рассмотрены основные принципы семантического анализа объектно-
ориентированного кода и предложен архитектурный прототип программного продукта, осуществляющего преобра-
зование кода в RDF.
Ключевые слова: код, RDF, семантический анализ, машинный анализ, триплет, грамматика, синтаксическое дерево,
лексер, парсер, Java, ANTLR.
Введение
Одним из обязательных условий успешной разработки и сопровождения любого программного
продукта является удобочитаемость его исходного кода. Стремясь добиться этого, программисты стара-
ются делать код более логичным и понятным, именуя должным образом переменные и методы, исполь-
зуя правильно подобранные типы и классы, снабжая код комментариями. Все это говорит о том, что код
является отличным источником информации о самом себе.
Программист, читая чужую программу с подробными комментариями, без труда поймет, что дела-
ет каждый метод, для чего предназначена любая переменная или же любой объект. Человек способен
анализировать текст программы, распознавая в нем целостные куски информации. На самом деле в этот
момент он осуществляет разбор кода на информационные блоки и сопоставление получаемых фактов
друг с другом, так что, по сути, он строит зависимости в виде триплетов «объект – предикат – субъект» и
оперирует уже ими. В качестве примеров можно привести обычные мысли вроде «переменная представ-
ляет целое число» или «метод запускается без параметров». В случае машинного анализа все не так про-
сто. Машина не обладает разумом и способностью к анализу, а значит, не сможет самостоятельно про-
вести разбор кода, как это делает человек. Таким образом, для успешной реализации машинного анализа
кода необходимо выбрать формат представления данных и разработать специальную программу, которая
осуществит разбор кода и приведет его к нужному программисту виду.
Язык описания ресурсов
В рамках данной работы в качестве формата, в который осуществляется преобразование про-
граммного кода, выбран Resource Description Framework (RDF). RDF – это разработанная консорциумом
Всемирной паутины модель для представления данных, входящая в концепцию семантической паутины,
а в особенности – метаданных. Метаданные – это информация о данных. Зачастую это структурирован-
ные данные, представляющие собой характеристики описываемых сущностей для целей их идентифика-
ции, поиска, оценки и управления ими. Важной особенностью формата RDF является то, что он описы-
вает ресурсы в виде, пригодном (и достаточно удобном) для машинной обработки.
Ресурсом в RDF может быть любая сущность – информационная (сайт, программа, изображение)
или неинформационная (человек, город, любое абстрактное понятие). Утверждение о ресурсе строится в
виде триплетов и имеет вид «субъект – предикат – объект». Множество RDF-утверждений образует ориен-
тированный граф, в котором вершинами являются субъекты и объекты, а предикаты являются ребрами.
RDF сам по себе представляется не каким-либо форматом файла, а абстрактной моделью. Для ра-
боты с RDF в основном используются несколько форматов, в число которых входят RDF/XML, RDFa,
N3. Все они уже имеют определенные правила записи и структуру [1].
Семантический анализ программного кода
Основные принципы. Определившись с форматом хранения данных, можно перейти к основной
задаче – собственно семантическому анализу программного кода. Для начала рассмотрим основные ас-
пекты семантики любого объектно-ориентированного языка программирования.
Контекстно-свободная грамматика. Любой язык программирования имеет свой алфавит, который
целиком состоит из терминальных и нетерминальных символов. Терминальный символ – это любой
2. ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ...
Научно-технический вестник Санкт-Петербургского государственного университета
информационных технологий, механики и оптики, 2011, № 2 (72)
124
имеющий конкретное известное значение символ, как, например, цифра или буква. Нетерминальный сим-
вол – это элемент конструкции языка, не имеющий заранее известного значения, как, например, формула
или команда. Нетерминальные символы состоят из множества терминальных и в итоге к ним сводятся.
Язык программирования описывается набором правил, выделяющих некоторое подмножество из-
вестных символов из множества слов конечного алфавита языка. Такой набор правил называется грамма-
тикой языка и может как задавать правила определения правильности построения слова языка, так и по-
зволять построить любое новое слово языка. Первые являются распознающими (или аналитическими)
грамматиками, вторые же являются порождающими.
Грамматика, левая часть правил которой состоит целиком из нетерминальных символов, называ-
ется контекстно-свободной [2].
Расширенная форма Бэкуса-Наура. Расширенная форма Бэкуса-Наура (РБНФ) – это формальная
система определения синтаксиса, в которой одни синтаксические зависимости определяются через дру-
гие. Используется для описания контекстно-свободных грамматик.
Правило в РБНФ имеет вид «идентификатор = выражение.», где идентификатор – это имя нетер-
минального символа, а выражение – это соответствующая правилам РБНФ комбинация терминальных и
нетерминальных символов. Точка в конце – это специальный символ, указывающий на завершение пра-
вила.
Набор возможных конструкций РБНФ очень невелик и состоит лишь из конкатенации символов,
выбора, условного вхождения и повторения. Также при записи правила РБНФ можно использовать груп-
пирующие скобки для определения сложных правил [3].
Синтаксическое дерево. Объектно-ориентированный код, будучи правильно оформленным, сам
по себе предоставляет отличные возможности для семантического анализа. При соблюдении правил
именования сущностей в коде и его правильной структуры всегда существует возможность получить
объектную модель, отражающую организацию кода. Каждый объект в программе можно рассматривать
атомарно, не вдаваясь в подробности его реализации. Это называется абстрагированием. В свое же время
каждый объект может включать в себя множество других объектов, которые также можно рассматривать
как конечную атомарную сущность. Элементарные типы, которые помимо других объектов могут вклю-
чаться в объект, всегда являются конечными и не имеют возможности инкапсулировать в себе что-либо.
В данном случае при употреблении термина «объект» под объектом все же понимается не экземпляр
класса, как можно было подумать, а некий атомарный блок информации – метод, класс, объявление пе-
ременной, блок комментариев или даже программа целиком. Каждый объект каким-то образом связан с
другими, например, имеет некую вложенность в другой объект.
Рассмотрим следующий код:
public class Hello {
public static void main(String[] args) {
String str = "Hello, world!";
System.out.println( str );
}
}
Эта программа объявляет переменную str, присваивает ей значение, а затем вызывает метод выво-
да ее содержимого в поток out.
При анализе этого кода можно выделить класс Hello, в котором объявлен метод void main(String[]
args), в котором объявлена переменная String str, которой присваивается значение «Hello, world!», и вы-
зывается метод println() с входным параметром str объекта out класса System. Соответственно, это можно
и нужно отразить не словами, а в виде некой формализованной модели, которая покажет вложенность
кода, значения, типы и сами сущности. Наилучшим образом для этого подходит двоичное дерево, такое,
что каждый его узел может быть законченным, т.е. отражать некое детерминированное значение или по-
ле любого примитивного типа, или расходиться вниз, демонстрируя, что элемент не является заключи-
тельным в иерархии. Примерное такое дерево, построенное по вышеприведенному коду, можно увидеть
на рис. 1.
Таким образом, при семантическом анализе объектно-ориентированного кода можно составить
иерархию объектов и элементарных типов, а также провести зависимости и связи между ними. Такую
иерархию представляет абстрактное синтаксическое дерево (АСД) или Abstract Syntax Tree (AST), листья
которого представляют элементарные типы в коде, а различные ветви – объекты, представленные в коде.
АСД – это конечное, помеченное, ориентированное дерево, в котором вершины сопоставлены с операто-
рами языка программирования, а листья – с соответствующими операндами. Таким образом, листья яв-
ляются лишь пустыми операторами и представляют только переменные и константы. Количество ветвей,
как и количество листьев, не ограничено, однако дерево всегда имеет одну вершину – объект, представ-
ляющий программу целиком.
Применение контекстно-свободной грамматики при разборе кода приводит к получению абст-
рактного синтаксического дерева, в котором элементы не определяются конкретной грамматикой разби-
раемого языка. Классическим примером являются ограничительные скобки в языковых конструкциях –
3. А.В. Зараковский, С.В. Клименков, Н.И. Ткаченко, А.Е. Харитонова
Научно-технический вестник Санкт-Петербургского государственного университета
информационных технологий, механики и оптики, 2011, № 2 (72)
125
группировка операндов в АСД явно задается структурой дерева, а ограничивающие скобки вообще от-
сутствуют в разборе, так как не влияют на АСД. АСД со свободной грамматикой отличается от дерева
разбора, т.е. дерева с конкретной грамматикой, тем, что в нем отсутствуют ребра и узлы для тех синтак-
сических правил, которые никак не влияют на семантику программы. Для языка с контекстно-свободной
грамматикой составление АСД является достаточно тривиальной задачей. Большинство правил грамма-
тики создают вершину, а символы в правиле становятся ребрами. Правила, которые ничего не привносят
в АСД, такие, как, например, группирующие, просто заменяются в вершине одним из своих символов.
Кроме того, анализатор может создать полное дерево разбора и затем пройти по нему, удаляя узлы и
ребра, которые не используются в абстрактном синтаксисе, чтобы получить АСД.
Рис. 1. Двоичное дерево разбора кода
В конечном итоге после разбора кода нас интересует, само собой, не АСД, а структура программы,
откуда удалены все ненужные звенья дерева [4].
Решение задачи разбора кода
Построить семантическую модель кода и дерево разбора должны программа-лексер и программа-
парсер, понимающие грамматику выбранного языка программирования, проходя от вершины к конеч-
ным операндам. Лексер – это программный модуль, осуществляющий разбор текста по заданным грам-
матическим правилам и генерирующий поток токенов, т.е. нетерминальных символов языка программи-
рования. Например, токенами языка Java для полной грамматики языка будут являться класс, метод, блок
комментариев, блок кода. Парсер – это программный модуль, который, основываясь на поступающих из
потока лексера токенах, по заданным правилам строит абстрактное дерево разбора. Лексер должен выде-
лять в коде следующие сущности, которые описываются лексическими правилами или грамматикой:
функции, методы и процедуры, а также их вызовы;
объекты и их вложенность;
поля элементарных типов;
комментарии, условные комментарии и документирующие комментарии;
директивы;
блоки кода и управляющие конструкции;
различные атрибуты любой из перечисленных сущностей.
Дальнейший разбор дерева будет заключаться в выделении необходимых и важных для постав-
ленной задачи узлов и листьев АСД. К примеру, не имеет смысла переводить в вид RDF различные тер-
минальные символы, если они находятся в левой части грамматического правила. Таким образом, не
имеет значения все то, что не укладывается в контекстно-свободную грамматику. В связи с тем, что RDF
является языком описания ресурсов, а терминал вряд ли можно к таковым отнести, то парсер АСД в RDF
должен такие листья дерева исключать из разбора.
На вход парсера в RDF поступают АСД и правила разбора в RDF. Работа парсера заключается в
переводе поступающей информации в вид триплетов «субъект – предикат – объект», если эта информа-
ция имеет ценность для поставленной задачи. Генерируемый парсером RDF поток триплетов поступает
на вход модуля, записывающего триплеты в выбранном формате.
Архитектурная модель создаваемой системы представлена на рис. 2.
4. ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ...
Научно-технический вестник Санкт-Петербургского государственного университета
информационных технологий, механики и оптики, 2011, № 2 (72)
126
Объектно-
ориентированный
код
Lexer
AST Parser
RDF Parser
XML Writer
RDF Storage
Lexing rules
(grammar)
AST parsing
rules
RDF parsing
rules
Token stream
AST
Triplet stream
RDM XML file
Рис. 2. Архитектура системы разбора кода в RDF
Программная реализация разбора кода
Существует два метода разбора кода – нисходящий и восходящий. Нисходящий разбор начинается
с корня дерева, осуществляя рекурсивный проход до листьев. Восходящий же, наоборот, начинает про-
ход с листьев, а заканчивает корнем. Алгоритмы восходящего метода разбора – более сложные, а в сово-
купности с тем фактом, что избыточность RDF не повлечет каких-то серьезных последствий, можно ут-
верждать, что разумнее в задаче перевода кода в RDF использовать более простой и быстрый метод нис-
ходящего разбора.
Существует множество программных библиотек, помогающих разобрать текст программы на кон-
текстно-свободном языке программирования и получить его абстрактное представление в виде двоично-
го дерева. Каждое такое средство разбора оперирует грамматикой выбранного языка, написанной с со-
блюдением единой РБНФ, проводя лексический и синтаксический разборы.
Одно из подобных программных средств – это Another Tool for Language Recognition (ANTLR).
ANTLR – это генератор парсеров на языке Java, который принимает на вход файл грамматики, написан-
ный по единой форме Бэкуса–Наура, и файл с исходным кодом разбираемой программы, а на выходе
создает абстрактное синтаксическое дерево. На самом деле провайдер ANTLR предоставляет утилиту
ANTLRWorks, позволяющую описать грамматику и генерирующую классы лексера и парсера. Помимо
утилиты предоставляется библиотека Java времени выполнения ANTLR, которая как раз и запускает в
работу лексер и парсер, получает от них результат и строит дерево.
Готовых решений для перевода дерева в RDF не существует. Соответственно, встает задача разра-
ботки подобного решения. Поскольку к этому моменту уже имеется формальная форма представления
кода, которая является результатом работы ANTLR, перед парсером RDF ставятся только следующие
задачи:
выборка важных и необходимых узлов АСД;
сопоставление объектов, субъектов и предикатов на основе анализа ветвей АСД;
формирование триплетов RDF;
создание и запись XML-сущностей (или других, что зависит от выбранной формы записи RDF), от-
ражающих суть каждого триплета.
Решение должно состоять из двух модулей – RDF Parser и XML Writer.
RDF Parser должен проходить по всем узлам дерева разбора, проверять каждый на соответствие
правилам разбора в RDF и, если узел необходим для решения задачи, генерировать новый триплет в по-
токе триплетов и запоминать узел как проверенный.
XML Writer, получая триплеты из потока, генерирует XML-код, который описывает триплеты в
нужном формате.
Алгоритмы работы RDF Parser и XML Writer представлены на рис. 3, а, б.
Весь программный комплекс, как «черный ящик», должен выглядеть так: на входе – исходный код
программы, на выходе – требуемая форма записи RDF и, при необходимости, – отчет об ошибках. Отчет
об ошибках служит для дополнительного анализа, если, к примеру, исходный код программы был напи-
сан с нарушениями общепринятых стандартов записи кода (например, соглашение о записи кода на язы-
ке Java).
5. И.С. Рубина
Научно-технический вестник Санкт-Петербургского государственного университета
информационных технологий, механики и оптики, 2011, № 2 (72)
127
а б
Рис. 3. Алгоритм RDF Parser (а); алгоритм XML Writer (б)
Заключение
В работе рассмотрены основные принципы решения задачи преобразования исходного кода на
объектно-ориентированном языке программирования в формат RDF и предложен прототип архитектуры
программного продукта решающего эту задачу. Программный продукт, основанный на предложенном
архитектурном прототипе, может найти достаточно широкое применение при решении задач анализа
кода, в экспертных системах и САПР.
Литература
1. Eric Miller. RDF Primer: W3C Recommendation // W3C [Электронный ресурс]. – Режим доступа:
http://www.w3.org/TR/rdf-primer/ (дата обращения: 20.01.10).
2. Context-free grammar // Wikipedia [Электронный ресурс]. – Режим доступа:
http://en.wikipedia.org/wiki/Context-free_grammar (дата обращения: 04.02.10).
3. Extended Backus-Naur Form // Wikipedia [Электронный ресурс]. – Режим доступа:
http://en.wikipedia.org/wiki/EBNF (дата обращения: 04.02.10).
4. Parr T. The definitive ANTLR reference: Building domain-specific languages / Terence Parr. – San Fran-
cisco; The pragmatic programmers, LLC, 2007. – 384 p.
Зараковский Алексей Владимирович – Санкт-Петербургский государственный университет информацион-
ных технологий, механики и оптики, студент, dbiryukov@list.ru
Клименков Сергей Викторович – Санкт-Петербургский государственный университет информацион-
ных технологий, механики и оптики, ассистент,
Serge.Klimenkov@Servicom.Ru
Ткаченко Никита Иванович – Санкт-Петербургский государственный университет информацион-
ных технологий, механики и оптики, студент,
n.i.tkachenko@gmail.com
Харитонова Анастасия Евгеньевна – Санкт-Петербургский государственный университет информацион-
ных технологий, механики и оптики, ассистент,
Anastassia.Kharitonova@Elcom.SPb.Ru