zabika.ru   1 2 3 ... 8 9

Введение

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

Каждый генератор анализаторов имеет свой язык описания грамматики, алгоритм генерации, и порождает транслятор, работающий по строго предопределённому алгоритму на некотором классе языков. Помимо этого, инструменты отличаются и другими характеристиками, включающими скорость работы сгенерированного анализатора, возможность восстановления после ошибок и другие. Более подробный обзор можно найти в работе [1].

Часто одна характеристика генератора анализаторов зависит от другой. В частности, многие из них привязаны к классу алгоритма построения анализатора. Кроме класса принимаемых грамматик, от него зависит скорость работы сгенерированного анализатора: как правило, парсеры на основе рекурсивного спуска медленнее, чем табличные. Но разрабатывать грамматику проще с использованием рекурсивного спуска, так как наглядно видно, как пытался парсер разобрать строку.

Соответственно, не может быть универсального средства, подходящего для большинства задач. Поэтому на начальном этапе проекта стоит нелегкая задача выбора инструмента, максимально подходящего в данный момент. Такая широта требований объясняет большое число1 существующих на данный момент генераторов синтаксических анализаторов. Многие из них уже не поддерживаются, но могут представлять ценность для некоторых проектов. В процессе развития грамматики работа с выбранным изначально генератором может быть неудобна или даже невозможна.

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


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


  • У каждого из них свой формат входных файлов. Это еще осложняется тем, что поддерживаются разные конструкции языка спецификации трансляции.

  • Транслятор, сгенерированный по грамматике одного класса алгоритмом для грамматик другого класса, не всегда корректен.

  • Возможно, используются разные лексеры, разные целевые языки, разный порядок вычисления атрибутов.

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

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

В рамках данной работы были поставлены следующие задачи.

  1. Обосновать выбор технологии, на основе которой строится решение.

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

  3. Снабдить разработчика функциональностью для более удобной разработки грамматики.

  4. Провести апробацию разработанного инструмента.



<< предыдущая страница   следующая страница >>