ЯЗЫКИ ПРОГРАММИРОВАНИЯ С РАСШИРЯЕМЫМ СИНТАКСИСОМ П.В. Егоров Екатеринбург, Июнь 2006
Расширение языков Классические способы расширения: Библиотеки функций (Pascal, С, …) Расширение типов (ООП) В данной работе: Расширение синтаксиса
syntax Sql; string personName = Иван; SqlQuery q = sql(select count(*) from Persons where name = $personName); int IvansCount = connection.Execute(q); Пример
Удобство синтаксиса Проверки на этапе компиляции Возможность гибкой поддержки многих технологий и парадигм Что это даёт?
S Q L S Q L Трансляция исходные коды лексический анализатор поток лексем синтаксический анализатор внутреннее представление … исполняемый файл расширяемый лексический анализатор S Q L расширяемый синтаксический анализатор … syntax Sql; B E G I N E N D «BEGIN» «END»
Лексический анализатор Классические способы построения: На базе регулярных выражений и конечных автоматов (LEX) «Подглядывающий» ЛА
Гибкая динамическая настройка лексического анализатора Добавлении нового типа лексем конфликт с добавленными ранее лексемами Пример:
Синтаксический анализатор СА управляется формальной грамматикой Суть расширения – модификация формальной грамматики Как же её модифицировать?
Синтаксический анализатор Совместимость расширения исходный синтаксический анализатор расширенный синтаксический анализатор исходные коды программ ы (лексемы) исходные коды программ ы (лексемы) внутреннее представлени е внутреннее представлени е
Синтаксический анализатор Расширение Расширение – последовательность преобразований грамматики G1 T 1 G2 … T n Gn Каждое преобразование сохраняет совместимость Система безопасных преобразований
Практические результаты Реализованы (на языке Java): Расширяемый «подглядывающий» ЛА Расширяемый предсказывающий LL(1) синтаксический анализатор Для модельного языка Pascal-S разработана грамматика ядра и ряд его независимых расширений
ВЫВОДЫ Языки программирования с расширяемым синтаксисом являются практически реализуемыми! За этим подходом будущее!?..
Вопросы?