>
>
Описание VivaVisualCode

Андрей Карпов
Статей: 673

Евгений Рыжков
Статей: 125

Описание VivaVisualCode

В данной статье рассмотрена программа VivaVisualCode, демонстрирующая использование библиотеки VivaCore. Программа VivaVisualCode графически отображает дерево разбора для вводимого исходного кода на языке Си++.

Введение

Большим недостатком многих библиотек для работы с кодом является отсутствие примеров, позволяющих легко и наглядно оценить результаты их работы. Такая ситуация часто наблюдается в сфере анализа и обработки исходного кода программ. Демонстрационные примеры представляются программами, принимающими через командную строку имена файлов, огромное количество ключей и генерирующие на выходе другие файлы. Такой недружественный интерфейс придает негативную эмоциональную окраску первому знакомству с библиотекой, в не зависимости от того, насколько библиотека подходит для решаемой задачи.

Мы постарались применить подход, позволяющий пользователю как можно раньше понять, с чем он имеет дело. Разрабатывая программу, демонстрирующую возможности библиотеки VivaCore мы решили сделать ее графическим приложением, строящим дерево разбора по вводимому Си++ коду. В результате появилась демонстрационная программа VivaVisualCode, которую вы можете скачать. Вы можете скачать как исходные тексты (проект Visual Studio 2005), так и исполняемый модуль.

Что такое VivaCore

VivaCore - это открытая библиотека для работы с Си и Си++ кодом. Библиотека предназначена для реализации на ее основе систем рефакторинга кода, систем статического и динамического анализа, систем трансформации или оптимизации кода, расширений языка, подсистем подсветки синтаксиса, систем построения документации по коду и других аналогичных инструментов.

В качестве отправной точки для создания библиотеки VivaCore была взята другая открытая библиотека OpenC++ http://opencxx.sourceforge.net.

Более подробно с библиотекой VivaCore вы можете познакомиться в статье "Сущность библиотеки анализа кода VivaCore", находящейся по адресу http://www.viva64.com/ru/a/0013/.

Лицензия на библиотеку VivaCore позволяет свободно использовать, копировать, распространять и модифицировать ее в бинарном виде или в виде исходного кода, как для коммерческого, так и для некоммерческого использования без каких-либо отчислений авторам библиотеки. Необходимо лишь указать авторов исходных библиотек (OpenC++ и VivaCore).

Вы можете скачать библиотеку VivaCore.

Что такое VivaVisualCode

VivaVisualCode - это программа наглядно демонстрирующая возможности библиотеки VivaCode в построении деревьев разбора для кода на языке Си++. Программа VivaVisualCode реализует графическое отображение дерева разбора на экране (смотри рисунок 1).

Рисунок 1. Пример построенного программой VivaVisualCode дерева разбора для кода "float Value = 10.0 * 20.0;".

Создаваемое дерево разбора (derivation tree - DT, parse tree - PT) отличается от абстрактного синтаксического дерева (Abstract Syntax Tree - AST) тем, что в нём присутствуют узлы для тех синтаксических правил, которые не влияют на семантику программы. Классическим примером таких узлов являются группирующие скобки, в то время как в AST группировка операндов явно задаётся структурой дерева.

Реализация VivaVisualCode

Демонстрационная программа VivaVisualCode устроена весьма просто. Можно сказать, что она предоставляет пользовательский интерфейс к некоторым функциям библиотеки VivaCore. Например, она позволяет ввести с клавиатуры текст программы для разбора, графически отобразить построенное дерево разбора, вывести дополнительную информацию об узлах дерева.

С деталями реализации вы можете познакомиться непосредственно в исходном коде программы VivaVisualCode. Исходный код открыт, и вы можете его свободно модифицировать и использовать в своих целях.

Интерфейс пользователя

Кратко рассмотрим пункты меню в приложении VivaVisualCode:

  • File -> Open i-file... - позволяет загрузить препроцессированный i-файл. Примечание. Программа служит для демонстрационных целей и не рассчитана на работу с большими файлами.
  • File -> Export Image - позволяет экспортировать построенное дерево разбора в BMP файл.
  • File -> Exit - выход из программы.
  • Code -> Edit Code - редактирование входного Си++ кода.
  • View -> List Mode. В библиотеке VivaCore данные представлены в виде двоичных деревьев. Но логически работа ведется над списками. В результате существуют вспомогательные узлы, реализующие списки на основе дерева. Данный пункт меню позволяет скрывать или отображать эти вспомогательные узлы.
  • View -> Close All - свернуть все узлы.
  • View -> Open All - развернуть все узлы.

После ввода программы через "File->Open i-file..." или "Code->Edit Code" на экране будет отображено дерево разбора. Узлы отображаемого дерева раскрашены в различные цвета в зависимости от его типа. В терминальных узлах (листьях) отображена информация о лексемах, которые они представляют. Терминальные блоки окрашены в розовый цвет для лексем, являющихся ключевыми словами языка Си++. В других случаях они отображаются зеленым цветом, чтобы подчеркнуть, что лексемы - это конечные листья. Узлы верхнего уровня содержат названия и количество ветвей.

Вы можете совершать также ряд действий над деревом:

  • Прокручивать окно, когда дерево не вмещается на экране.
  • Сворачивать и разворачивать узлы (левая кнопка мыши).
  • Масштабировать изображение (Ctrl + колесо мыши).
  • О каждом из узлов можно получить дополнительную информацию, нажав на нем правой кнопкой мыши (смотри рисунок N2).

Рисунок 2. Просмотр закодированного типа для декларации конструктора класса.

Заключение

Предложенная вашему вниманию программа, конечно, не полностью демонстрирует возможности библиотеки VivaCore и не полностью раскрывает области возможного ее применения. Но надеемся, что ее изучение поможет вам проще освоить основные принципы работы библиотеки VivaCore.

Мы всегда открыты к общению. Пишите нам!