В данной статье рассмотрена программа VivaVisualCode, демонстрирующая использование библиотеки VivaCore. Программа VivaVisualCode графически отображает дерево разбора для вводимого исходного кода на языке Си++.
Большим недостатком многих библиотек для работы с кодом является отсутствие примеров, позволяющих легко и наглядно оценить результаты их работы. Такая ситуация часто наблюдается в сфере анализа и обработки исходного кода программ. Демонстрационные примеры представляются программами, принимающими через командную строку имена файлов, огромное количество ключей и генерирующие на выходе другие файлы. Такой недружественный интерфейс придает негативную эмоциональную окраску первому знакомству с библиотекой, в не зависимости от того, насколько библиотека подходит для решаемой задачи.
Мы постарались применить подход, позволяющий пользователю как можно раньше понять, с чем он имеет дело. Разрабатывая программу, демонстрирующую возможности библиотеки VivaCore мы решили сделать ее графическим приложением, строящим дерево разбора по вводимому Си++ коду. В результате появилась демонстрационная программа VivaVisualCode, которую вы можете скачать. Вы можете скачать как исходные тексты (проект Visual Studio 2005), так и исполняемый модуль.
VivaCore - это открытая библиотека для работы с Си и Си++ кодом. Библиотека предназначена для реализации на ее основе систем рефакторинга кода, систем статического и динамического анализа, систем трансформации или оптимизации кода, расширений языка, подсистем подсветки синтаксиса, систем построения документации по коду и других аналогичных инструментов.
В качестве отправной точки для создания библиотеки VivaCore была взята другая открытая библиотека OpenC++ http://opencxx.sourceforge.net.
Более подробно с библиотекой VivaCore вы можете познакомиться в статье "Сущность библиотеки анализа кода VivaCore", находящейся по адресу http://www.viva64.com/ru/a/0013/.
Лицензия на библиотеку VivaCore позволяет свободно использовать, копировать, распространять и модифицировать ее в бинарном виде или в виде исходного кода, как для коммерческого, так и для некоммерческого использования без каких-либо отчислений авторам библиотеки. Необходимо лишь указать авторов исходных библиотек (OpenC++ и VivaCore).
Вы можете скачать библиотеку VivaCore.
VivaVisualCode - это программа наглядно демонстрирующая возможности библиотеки VivaCode в построении деревьев разбора для кода на языке Си++. Программа VivaVisualCode реализует графическое отображение дерева разбора на экране (смотри рисунок 1).
Рисунок 1. Пример построенного программой VivaVisualCode дерева разбора для кода "float Value = 10.0 * 20.0;".
Создаваемое дерево разбора (derivation tree - DT, parse tree - PT) отличается от абстрактного синтаксического дерева (Abstract Syntax Tree - AST) тем, что в нём присутствуют узлы для тех синтаксических правил, которые не влияют на семантику программы. Классическим примером таких узлов являются группирующие скобки, в то время как в AST группировка операндов явно задаётся структурой дерева.
Демонстрационная программа VivaVisualCode устроена весьма просто. Можно сказать, что она предоставляет пользовательский интерфейс к некоторым функциям библиотеки VivaCore. Например, она позволяет ввести с клавиатуры текст программы для разбора, графически отобразить построенное дерево разбора, вывести дополнительную информацию об узлах дерева.
С деталями реализации вы можете познакомиться непосредственно в исходном коде программы VivaVisualCode. Исходный код открыт, и вы можете его свободно модифицировать и использовать в своих целях.
Кратко рассмотрим пункты меню в приложении VivaVisualCode:
После ввода программы через "File->Open i-file..." или "Code->Edit Code" на экране будет отображено дерево разбора. Узлы отображаемого дерева раскрашены в различные цвета в зависимости от его типа. В терминальных узлах (листьях) отображена информация о лексемах, которые они представляют. Терминальные блоки окрашены в розовый цвет для лексем, являющихся ключевыми словами языка Си++. В других случаях они отображаются зеленым цветом, чтобы подчеркнуть, что лексемы - это конечные листья. Узлы верхнего уровня содержат названия и количество ветвей.
Вы можете совершать также ряд действий над деревом:
Рисунок 2. Просмотр закодированного типа для декларации конструктора класса.
Предложенная вашему вниманию программа, конечно, не полностью демонстрирует возможности библиотеки VivaCore и не полностью раскрывает области возможного ее применения. Но надеемся, что ее изучение поможет вам проще освоить основные принципы работы библиотеки VivaCore.
Мы всегда открыты к общению. Пишите нам!