Описание VivaVisualCode

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


Аннотация

В данной статье рассмотрена программа 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).

https://import.viva64.com/docx/blog/VivaVisualCode_ru/image1.png

Рисунок 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).
https://import.viva64.com/docx/blog/VivaVisualCode_ru/image3.png

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

Заключение

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

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



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;

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


Найденные ошибки

Проверено проектов
386
Собрано ошибок
13 991

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять