refal-5-lambda icon indicating copy to clipboard operation
refal-5-lambda copied to clipboard

Генератор лексических анализаторов на основе регулярных выражений

Open Mazdaywik opened this issue 8 years ago • 7 comments

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

Цель работы: написать для системы программирования на Простом Рефале генератор лексических анализаторов, принимающий на входе описания лексических доменов в виде регулярных выражений. Входной язык: предстоит разработать, регулярные выражения — синтаксис flex. Целевой язык: Рефал. Сгенерированный код должен быть совместим с Простым Рефалом и РЕФАЛом-5. Язык реализации: Простой Рефал, лексика описана на себе (на последней итерации).

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

Дабы не плодить сущности, новый генератор лексических анализаторов предполагается сделать, расширив имеющийся. Генератор должен обнаруживать метку начала описания, если старая (GEN:TOKENS) — используется старый алгоритм, если новая (например, GEN:FLEX), то новый алгоритм.

Mazdaywik avatar Jul 29 '16 21:07 Mazdaywik

В рамках курсового проекта Елена Бурлова (@KazuriCode) разработала входной язык (его синтаксис и семантику) и реализовала фазу анализа лексического анализатора.

Её коммиты влиты в master (см. выше). Поскольку я ветку пересаживал на свежий master и приписал в сообщения (#50), я отображаюсь «соавтором» коммитов.

Остаётся реализовать фазу синтеза лексического анализа, а также переписать на этот генератор лексические анализаторы LexGen режимов GEN:TOKENS и GEN:FLEX, а также лексический анализатор самого Простого Рефала (Рефала-5λ).

Задачу переношу на следующий семестр.

Mazdaywik avatar Apr 05 '17 10:04 Mazdaywik

Забираю задачу себе, поскольку в качестве курсового её никто не взял.

Mazdaywik avatar Jul 03 '17 09:07 Mazdaywik

Возвращаю задачу на курсовой проект.

Mazdaywik avatar Aug 06 '18 16:08 Mazdaywik

Никто не взял как тему курсового.

Mazdaywik avatar Dec 07 '18 12:12 Mazdaywik

Задача снова вывешивается на курсовую работу.

Mazdaywik avatar Aug 26 '19 12:08 Mazdaywik

Есть следующая безумная мысль. Благодаря оптимизациям #91 компилятор может осуществлять первую проекцию Футамуры. Т.е. если программа содержит интерпретатор (размеченный при помощи $DRIVE, $SPEC и $INLINE), то вызовы функции интерпретатора с константной интерпретируемой программой будут специализироваться (в широком смысле). Для таких вызовов компилятор построит специализированные функции на Рефале, семантически эквивалентные интерпретируемой программе, интерпретатор вообще не будет вызываться.

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

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

Mazdaywik avatar Sep 04 '19 12:09 Mazdaywik

Задача не была выбрана в качестве курсовой.

Mazdaywik avatar Nov 06 '19 16:11 Mazdaywik