Параллельная реализация языка програмирования Рефал Плюс

Параллельная реализация языка програмирования Рефал Плюс: компиляция в императивный язык

Выполнена реализация языка Рефал Плюс на основе массивного представления списков и прямой компиляции в императивные языки. Особенности данной реализации:
  1. Использование представления объектных рефал-выражений в виде массивов. Массивное представление рефал-выражений позволяет эффективно в процессе выполнения рефал-программ выполнять операции вычисления длины рефал-выражения и построения подвыражения по длине и позиции расположения подвыражения в рефал-выражении. Эффективная реализация этих двух операций позволила разработать и использовать в системе новый подход к эффективной реализации синтаксического отождествления в языке Рефал.
  2. Прямая компиляция рефал-программ в императивный язык. В системе реализована схема прямой компиляции рефал-программ в некий абстрактный императивный язык, который затем, отдельным проходом (back-end модулем), может быть легко отображен в любую целевую платформу. В настоящее время полностью реализованы back-end модули, отображающие результат компиляции в С++ и Java.
  3. Открытость, гибкость, продуманная модульность. Система построена как набор отдельных модулей, с четко описанными интерфейсами между ними. Модули доступны в исходных текстах. Компилятор системы написан на Рефале Плюс, варианты run-time support library под различные платформы разрабатываются на языках высокого уровня ( C++, Java, T++ ). Среди прочего, такой подход должен обеспечивать высокий уровень переносимости системы.
  4. Поддержка возможных расширений. За счет модульной структуры системы авторы старались поддержать легкость изменения ее функциональности, без необходимости модификации большей части кода и системы в целом. Речь идет о возможностях добавления различных (в том числе оптимизирующих) преобразований рефал-программ в формате абстрактного синтаксиса и добавления различных (в том числе оптимизирующих) преобразований результата компиляции в формате абстрактного императивного языка.

    Архитектура системы

    Предложенная многопроходная схема обеспечивает относительно простое расширение как набора входных языков другими диалектами Рефала (Рефал-5, -6), так и множества выходных императивных языков. Для реализации этого подхода в процессе компиляции Рефал-программ выделены четыре основные этапа:
    1. Выполняемое блоком Lexer/Parser преобразование Рефал-программы в текст на промежуточном Рефал-ориентированном абстрактном языке, называемом Абстрактный синтаксис (AS-code). Абстрактный синтаксис включает элементы, адекватно отображающие особенности всех диалектов Рефала.
    2. Преобразование AS-программы в текст на Абстрактном императивном языке (AIL-code) с помощью модуля Compiler.
    3. Генерация модулем Сonverter выходного текста на императивном языке.
    4. Генерация исполняемого модуля на основе соответствующей библиотеки поддержки периода исполнения.

    Статьи по теме, опубликованные в сборнике трудов международной конференции "Программные системы: теория и приложения":

    1. С.М. Абрамов, А.Ю. Орлов, Л.В. Парменова, С.М. Пономарева, А.Ф. Слепухин. Новый подход к реализации системы программирования Рефал Плюс.
    2. С.М. Абрамов, А.Ю. Орлов. Компиляция в императивные языки синтаксического отождествления языка Рефал.