Всё, что вам не рассказали про Shunting Yard

Алгоритм сортировочной станции (Shunting Yard) был предложен Дейкстрой ещё в 1961 году и служит для преобразования математических выражений из привычной всем инфиксной записи (где операторы стоят между операндами, как в 1 + 2 * 3 ) в постфиксную (обратную польскую нотацию, 1 2 3 * + ), удобную для дальнейшего вычисления. Однако есть один важный момент, который почти всегда упускается или замалчивается: алгоритм предполагает, что входное выражение уже синтаксически корректно . Ни в Википедии , ни в большинстве обучающих статей вы не встретите слов о том, что выражения вроде + (1 2, 3 * 4 + ) или sin(+) должны вызывать ошибку. В лучшем случае они просто не вычисляются (что будет понятно лишь на этапе обработки в обратной польской записи), в худшем – дают бессмысленный результат. Алгоритм продолжает работать, даже если выражение изначально некорректно – и мало кто задумывается, почему это плохо. Эта статья – попытка исправить эту несправедливую ситуацию, в которой мы не только реализуем алгоритм сортировочной станции «на максималках» с поддержкой констант, переменных, функций, унарных операторов, приоритетов и ассоциативности, но и добавим полноценную проверку корректности выражения по ходу разбора.

https://habr.com/ru/articles/908062/

#алгоритм_сортировочной_станции #shunting_yard #парсер_математических_выражений #алгоритмы #синтаксический_анализ

Всё, что вам не рассказали про Shunting Yard

Алгоритм сортировочной станции (Shunting Yard) был предложен Дейкстрой ещё в 1961 году и служит для преобразования математических выражений из привычной всем инфиксной записи (где операторы стоят...

Хабр

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

Изначально, когда я решил написать компилятор за выходные , я решил, что нет смысла заморачиваться, и использовал сторонний лексический / синтаксический анализатор. Мой выбор пал на SLY , довольно известную библиотеку. И действительно, пара часов работы, и мой компилятор прекрасно строил синтаксические деревья из исходного кода на wend . Я пытался было заглянуть под капот, утонул в море технических терминов (LL(1), LR, LALR(1) и тому подобное), и решил, что парсинг своими руками - это не для меня, теория формальных языков меня слабо интересует. Однако же в итоге выяснилось, что базовый синтаксический анализатор - это не так сложно, и я закатал рукава.

https://habr.com/ru/articles/883390/

#парсер #синтаксический_анализ #синтаксический_анализатор

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

Изначально, когда я решил написать компилятор за выходные , я решил, что нет смысла заморачиваться, и использовал сторонний лексический / синтаксический анализатор. Мой выбор пал на  SLY ,...

Хабр

Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)

Синтаксический анализатор на стеках и lambda-выражениях (Axolotl) В этой статье рассматривается практическая реализация синтаксического анализатора, основанного на стеке состояний и lambda-выражениях. Такой подход упрощает обработку синтаксиса, делая его гибким и легко масштабируемым. В статье описана архитектура анализатора, от лексического анализа до правил обработки состояний и обработки ошибок. Обсудим, как использовать состояния для синтаксического анализа ключевых конструкций и продемонстрируем простые, но эффективные методы для управления состояниями. Эта реализация — отличный выбор для быстрого прототипирования и собственных учебных языков.

https://habr.com/ru/articles/856616/

#Аксолотль #Axolotl #язык_программирования #анализатор #синтаксический_анализ #синтаксис #shunting_yard #стек #парсер #парсеркомбинаторы

Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)

В сентябре я опубликовал статью, описывающую теорию синтаксического анализатора на основе Shunting Yard . Эта статья является практическим продолжением, в которой описывается реализация...

Хабр