ИНСТРУМЕНТАЛЬНАЯ ПОДДЕРЖКА ВИЗУАЛЬНОГО ПРОТОТИПИРОВАНИЯ СИНТАКСИЧЕСКИ-УПРАВЛЯЕМЫХ ТРАНСЛЯТОРОВ



В работе производится краткий обзор алгоритмического и программного обеспечения процесса разработки транслятора и моделирования его визуального представления. Рассматриваемое программное обеспечение способно редактировать и генерировать синтаксические анализаторы. Указан ряд открытых проблем.

Ключевые слова: синтаксически-управляемые трансляторы, Bison, LLVM, визуальное прототипирование, контекстно-свободная грамматика, формальная грамматика.

Существует ряд разнообразных программных инструментов для автоматизированной разработки компиляторов для языков, определяемых контекстно-свободными грамматиками.

Контекстно-свободная грамматика – частный случай формальной грамматики, у которой левые части всех продукций являются одиночными нетерминалами – объектами, обозначающими какую-либо сущность языка и не имеющими конкретного символьного значения .

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

Bison – это GNU-выпуск известной программы YACC, предназначенной для порождения компиляторов по описанной пользователем КС-грамматике. Для того, чтобы Bison мог разобрать программу на каком-либо языке, этот язык должен быть описан контекстно-свободной грамматикой . Это означает, что определяется одна или более синтаксическая группа и задаются правила их сборки из составных частей.

Возникает необходимость для визуального прототипирования синтаксически-управляемых трансляторов на основе GNU Bison. Bison умеет генерировать исходные тексты синтаксических анализаторов на C/C++/Java по заданной спецификации в формате, похожем на контекстно-свободные грамматики Хомского. На сегодня имеются несколько подобных инструментов, но они, как правило, коммерческие (например, Visual BNF). Возникает необходимость в бесплатном инструменте с GPL- или BSD-подобной лицензией, с открытым исходным кодом.

Для реализации данного приложения был выбран язык С++, т.к. в проекте используется часть кодовой базы Bison, которая целиком написана на языке C. Также выбор обусловлен тем, что C++ является кроссплатформенным высокоуровневым языком, с поддержкой парадигмы объектно-ориентированного программирования, и имеет множество бесплатных реализаций (сред для разработки, компиляторов) .

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

Основными компонентами программы являются: редактор грамматики, лексический анализатор, редактор тестового файла, отладчик и проверка ошибок.

Редактор грамматики выполнен посредством мощного текстового компонента Scintilla . Подсветка синтаксиса достигается разбором текста грамматики на лексемы, и группировкой этих лексем по типам.

Редактор тестового файла работает на том же компоненте, что и редактор грамматики и обрабатывает события шага отладчика.

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

При работе отладчика в конструктор передается набор состояний, выведенных через аргумент --xml из Bison, таблицы конечного автомата через аргумент --xmltables, и контекст отладки.

Проверка ошибок спецификации выполняется путем передачи файла спецификации в Bison, и вывода возвращенных ошибок.