refal-5-lambda
refal-5-lambda copied to clipboard
Генератор лексических анализаторов на основе регулярных выражений
На текущий момент система программирования «Простой Рефал» содержит примитивный генератор лексических анализаторов, который на входе принимает таблицу переходов для конечного автомата с семантическими действиями (выдать прочитанную лексему, отбросить прочитанную лексему). Недостаток очевиден: слишком многословное описание, которое довольно сложно составлять.
Цель работы: написать для системы программирования на Простом Рефале генератор лексических анализаторов, принимающий на входе описания лексических доменов в виде регулярных выражений. Входной язык: предстоит разработать, регулярные выражения — синтаксис flex. Целевой язык: Рефал. Сгенерированный код должен быть совместим с Простым Рефалом и РЕФАЛом-5. Язык реализации: Простой Рефал, лексика описана на себе (на последней итерации).
Данная задача будет закрыта только после того, как лексический анализатор Простого Рефала будет переписан с использованием нового генератора.
Дабы не плодить сущности, новый генератор лексических анализаторов предполагается сделать, расширив имеющийся. Генератор должен обнаруживать метку начала описания, если старая (GEN:TOKENS
) — используется старый алгоритм, если новая (например, GEN:FLEX
), то новый алгоритм.
В рамках курсового проекта Елена Бурлова (@KazuriCode) разработала входной язык (его синтаксис и семантику) и реализовала фазу анализа лексического анализатора.
Её коммиты влиты в master (см. выше). Поскольку я ветку пересаживал на свежий master и приписал в сообщения (#50)
, я отображаюсь «соавтором» коммитов.
Остаётся реализовать фазу синтеза лексического анализа, а также переписать на этот генератор лексические анализаторы LexGen режимов GEN:TOKENS
и GEN:FLEX
, а также лексический анализатор самого Простого Рефала (Рефала-5λ).
Задачу переношу на следующий семестр.
Забираю задачу себе, поскольку в качестве курсового её никто не взял.
Возвращаю задачу на курсовой проект.
Никто не взял как тему курсового.
Задача снова вывешивается на курсовую работу.
Есть следующая безумная мысль. Благодаря оптимизациям #91 компилятор может осуществлять первую проекцию Футамуры. Т.е. если программа содержит интерпретатор (размеченный при помощи $DRIVE
, $SPEC
и $INLINE
), то вызовы функции интерпретатора с константной интерпретируемой программой будут специализироваться (в широком смысле). Для таких вызовов компилятор построит специализированные функции на Рефале, семантически эквивалентные интерпретируемой программе, интерпретатор вообще не будет вызываться.
Соответственно, можно написать интерпретатор описания лексического анализатора в виде регулярных выражений и его специализировать под конкретные грамматики.
В настоящую задачу это не входит, зафиксировал просто, чтобы не потерялась мысль.
Задача не была выбрана в качестве курсовой.