Обновить

Компилятор за выходные: синтаксический анализатор Уорли

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели11K
Всего голосов 12: ↑12 и ↓0+16
Комментарии19

Комментарии 19

Так а вы загляните в репозиторий, там тестовых программ уж десятка три точно есть, компилятор уже год как рабочий. Те самые выходные, за которые он был написан, были в январе 2024го :)

https://github.com/ssloy/tinycompiler/blob/main/test-programs/simple/eight-queens.wend

Самый обычный си-образный. Объявление переменных в начале функции, потом идёт объявление вложенных функций. Сам язык меня мало интересует, на самом деле, я ничего в нём не хочу изобретать, уж точно не убийца C :)

Моя задача - научить моих студентов программировать. В данном случае на примере проекта игрушечного компилятора, который я сейчас пытаюсь расширить в оптимизирующий компилятор.

Ну вы заметили, что я начал с чужого парсера, да? :)

А вот насчёт дедушки Вирта я, собственно, и не уверен.

так можно свой написать, надо только токены ловить, там скрипт может быть даже на подобии ну паскаля только без двоеточий, заглавными можно задать это самый простейший, можно вообще в императивные скрипты уйти примитивные кирпичики, там синтаксис почти как в бд будет (strtok)

Скрытый текст
MAINTITLE
  A:=Path1
  B:=Path2
ENDMAINTITLE

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

https://ssloy.github.io/tinycompiler/lexer/

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

да токены не сложно, я тоже хотел его использовать в параметризации шаблона под задание шаблона 3 екранов(2д игрушки) от 1 скрипта в менеджер ресурсов, но на тот момент итак был буст от менеджера и это было бы награмождение, как лабу проделал для себя закрепил, пока оставил до лучших времен когда действительно надо будет, спасибо гляну

НЛО прилетело и опубликовало эту надпись здесь

Астрологи объявили весёлые выходные отладки грамматики. Количество переписываний парсера увеличено вдвое.

Представьте, что приходит поток лексем TYPE(int) ID(sqrt) ... - это объявление переменной или объявление функции?

вселенная намекает вам, что это одно и тоже :)

спасибо за статью, а почему для построения ast не воспользовались алгоритмом сортировочной станции

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

в учебных целях (в рамках алгоритма Уорли) для разбора выражений shunting yard algorithm можно использовать?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации