Генераторы синтаксических анализаторов




Скачать 353.85 Kb.
НазваниеГенераторы синтаксических анализаторов
страница1/6
Дата26.11.2012
Размер353.85 Kb.
ТипДокументы
  1   2   3   4   5   6

Проектирование DSL


Создание языка предметной области начинается с этапа моделирования данных - той информации, которая будет впоследствии записана в терминах DSL. Для простоты предположим, что нам необходимо разработать DSL, на котором можно описать структуру статьи для журнала "Компьютерра". Предметная область этой задачи включает в себя понятия статья, раздел и подраздел[Понятие "подраздел", конечно же, является избыточным, но кому нужны эти скучные профессиональные детали?]. Для статьи характерны название, автор и некоторая структура, включающая в себя разделы статьи.

Проиллюстрируем вышесказанное диаграммой (см. рис. 1), описывающей модель данных нашего DSL, который условно назовем "Структура статьи в КТ".



Следующий этап проектирования состоит в том, чтобы внести разработанную нами модель данных в языковой инструментарий. При этом для каждого понятия предметной области необходимо создать соответствующую концепцию языка. Например, концепция "статья" выглядит в MPS так, как изображено на рис. 2. На этом проектирование нашего языка можно считать завершенным.



Кто-нибудь может возразить: язык - это в первую очередь знаковая система, а то, что мы только что создали, является скорее некоторой объектной моделью. Действительно, мы разработали только часть языка, традиционно называемую абстрактным синтаксисом. Если так можно выразиться, "знаковой системой" DSL в контексте языковых инструментариев являются редакторы, обеспечивающие визуальное отображение понятий языка.

Создание редактора


Разработка редактора для DSL - занятие еще более увлекательное, нежели проектирование самого DSL, поскольку тут гораздо более широкое поле для творчества.



MPS обладает встроенным дизайнером для создания редакторов DSL, основанном на идее вложенных ячеек. Поясним эту идею на примере редактора для концепции "статья". На рис. 3 ячейка-контейнер верхнего уровня содержит две дочерние ячейки, расположенные вертикально. Верхняя ячейка содержит константное слово "статья", а нижняя является горизонтальным контейнером для других ячеек. И так далее.



После определения "раскладки" составных частей остается связать с редактором атрибуты "название" и "автор", дополнить его возможностью выбора автора из списка, и получится нечто, изображенное на рис. 4. Процесс редактирования документов при помощи такого редактора очень прост и вполне удобен (хотя и слегка непривычен). Например, для добавления подраздела необходимо перейти в ячейку "…добавьте подраздел…" и начать ввод текста. После нажатия клавиши Enter фокус ввода переместится на следующий подраздел.

Генераторы синтаксических анализаторов


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

Генератор синтаксических анализаторов (ГСА) — это утилита, на вход которой поступает файл с описанием правил грамматики некоторого языка, называемого целевым. В результате работы генератор формирует исходные тексты на C++ (или, допустим, Java), содержащие код для обработки конструкций целевого языка и, возможно, для формирования объектной модели. Написание собственного ГСА «с изюминкой» долгое время являлось престижной академической работой в области computer science, поэтому число подобных инструментов сегодня исчисляется десятками. Этот факт даже получил отражение в названиях многих ГСА: «еще один компилятор компиляторов» (yacc), «еще один инструмент для распознавания языков» (ANTLR) и т. п.
В качестве примера приведем фрагмент грамматики ANTLR для языка арифметических выражений, содержащих числа, а также операции ‘+’ и ‘*’. Хотя подобная запись и выглядит страшновато, при наличии определенных навыков она воспринимается достаточно легко.
expr : mexpr (‘+’ mexpr)* ‘;’!;
mexpr : number (‘*’ number)*;
number : (‘0’..’9’)+;
Несмотря на ряд трудностей, связанных с повсеместным применением ГСА, на сегодняшний день они являются распространенным средством автоматизации разбора исходных текстов*. Например, распознаватель SQL для широко известной открытой СУБД PostgreSQL разработан при помощи пары lex и yacc. Интересно отметить, что эта «сладкая парочка» оказала существенное влияние на открытый софт, породив целое направление так называемых «малых языков» (по сути своей являющихся DSL), с которыми пользователи *nix-систем часто имеют дело при редактировании конфигурационных файлов.


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

 
  1   2   3   4   5   6

Похожие:

Генераторы синтаксических анализаторов iconМатематическая логика и теория алгоритмов
Большое внимание уделено практическим аспектам обсуждаемых понятий: автоматизации логического вывода, проверки корректности программ,...
Генераторы синтаксических анализаторов iconРеферат по инженерной психологии на тему: Взаимодействие анализаторов при приеме информации человеком
Прием сигналов различной модальности осуществляется при помощи анализаторов (зрительного, слухового, тактильного и т д.). Повышение...
Генераторы синтаксических анализаторов iconВзаимодействие и взаимозаменяемость анализаторов. Гигиена органов чувств. Обобщение темы
Цель: учащиеся должны осознать роль анализаторов во взаимодействии организма и окружающего мира; расширить знания о свойствах анализаторов,...
Генераторы синтаксических анализаторов iconМного названий суть одна?
Полезно отметить генераторы В. В. Бобыря, принцип действия которых аналогичен генераторам В. М. Юровицкого. Отметим также генераторы...
Генераторы синтаксических анализаторов iconНормы пожарной безопасности пожарная техника. Генераторы огнетушащего аэрозоля оперативного применения. Общие технические требования. Методы испытаний
Нормы пожарной безопасности пожарная техника. Генераторы огнетушащего аэрозоля оперативного применения. Общие
Генераторы синтаксических анализаторов iconАссоциация высших учебных заведений республики казахстан алматы 2004 содержание
Генераторы прямого преобразования тепловой и химической энергий в электрическую
Генераторы синтаксических анализаторов iconП., Обобщенные конечные генераторы и проблема тождества дефиниторной алгебры регулярных событий Алешин С. В., О
Коршунов А. Д., Об одном алгоритме нахождения паросочетаний в конечных графах
Генераторы синтаксических анализаторов icon«Применение анализаторов маэс в промышленности»
Лабусов В. А., Путьмаков А. Н., Зарубин И. А., Гаранин В. Г. Новые оптические
Генераторы синтаксических анализаторов iconПожарная техника. Генераторы огнетушащего аэрозоля
Внесены и подготовлены к утверждению нормативно-техническим отделом Главного управления Государственной противопожарной службы (гугпс)...
Генераторы синтаксических анализаторов icon3 курса специальности «Филология» направления «Бакалавр филологии» Срок летней сессии
Присоединительные отношения: средства оформления в синтаксических конструкциях различного типа
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница