#shunting_yard — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #shunting_yard, aggregated by home.social.
-
Всё, что вам не рассказали про 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 году и служит для преобразования математических выражений из привычной всем инфиксной записи (где операторы стоят между операндами, как в 1 + 2 * 3 ) в постфиксную (обратную польскую нотацию, 1 2 3 * + ), удобную для дальнейшего вычисления. Однако есть один важный момент, который почти всегда упускается или замалчивается: алгоритм предполагает, что входное выражение уже синтаксически корректно . Ни в Википедии , ни в большинстве обучающих статей вы не встретите слов о том, что выражения вроде + (1 2, 3 * 4 + ) или sin(+) должны вызывать ошибку. В лучшем случае они просто не вычисляются (что будет понятно лишь на этапе обработки в обратной польской записи), в худшем – дают бессмысленный результат. Алгоритм продолжает работать, даже если выражение изначально некорректно – и мало кто задумывается, почему это плохо. Эта статья – попытка исправить эту несправедливую ситуацию, в которой мы не только реализуем алгоритм сортировочной станции «на максималках» с поддержкой констант, переменных, функций, унарных операторов, приоритетов и ассоциативности, но и добавим полноценную проверку корректности выражения по ходу разбора.
https://habr.com/ru/articles/908062/
#алгоритм_сортировочной_станции #shunting_yard #парсер_математических_выражений #алгоритмы #синтаксический_анализ
-
Всё, что вам не рассказали про Shunting Yard
Алгоритм сортировочной станции (Shunting Yard) был предложен Дейкстрой ещё в 1961 году и служит для преобразования математических выражений из привычной всем инфиксной записи (где операторы стоят между операндами, как в 1 + 2 * 3 ) в постфиксную (обратную польскую нотацию, 1 2 3 * + ), удобную для дальнейшего вычисления. Однако есть один важный момент, который почти всегда упускается или замалчивается: алгоритм предполагает, что входное выражение уже синтаксически корректно . Ни в Википедии , ни в большинстве обучающих статей вы не встретите слов о том, что выражения вроде + (1 2, 3 * 4 + ) или sin(+) должны вызывать ошибку. В лучшем случае они просто не вычисляются (что будет понятно лишь на этапе обработки в обратной польской записи), в худшем – дают бессмысленный результат. Алгоритм продолжает работать, даже если выражение изначально некорректно – и мало кто задумывается, почему это плохо. Эта статья – попытка исправить эту несправедливую ситуацию, в которой мы не только реализуем алгоритм сортировочной станции «на максималках» с поддержкой констант, переменных, функций, унарных операторов, приоритетов и ассоциативности, но и добавим полноценную проверку корректности выражения по ходу разбора.
https://habr.com/ru/articles/908062/
#алгоритм_сортировочной_станции #shunting_yard #парсер_математических_выражений #алгоритмы #синтаксический_анализ
-
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl) В этой статье рассматривается практическая реализация синтаксического анализатора, основанного на стеке состояний и lambda-выражениях. Такой подход упрощает обработку синтаксиса, делая его гибким и легко масштабируемым. В статье описана архитектура анализатора, от лексического анализа до правил обработки состояний и обработки ошибок. Обсудим, как использовать состояния для синтаксического анализа ключевых конструкций и продемонстрируем простые, но эффективные методы для управления состояниями. Эта реализация — отличный выбор для быстрого прототипирования и собственных учебных языков.
https://habr.com/ru/articles/856616/
#Аксолотль #Axolotl #язык_программирования #анализатор #синтаксический_анализ #синтаксис #shunting_yard #стек #парсер #парсеркомбинаторы
-
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl) В этой статье рассматривается практическая реализация синтаксического анализатора, основанного на стеке состояний и lambda-выражениях. Такой подход упрощает обработку синтаксиса, делая его гибким и легко масштабируемым. В статье описана архитектура анализатора, от лексического анализа до правил обработки состояний и обработки ошибок. Обсудим, как использовать состояния для синтаксического анализа ключевых конструкций и продемонстрируем простые, но эффективные методы для управления состояниями. Эта реализация — отличный выбор для быстрого прототипирования и собственных учебных языков.
https://habr.com/ru/articles/856616/
#Аксолотль #Axolotl #язык_программирования #анализатор #синтаксический_анализ #синтаксис #shunting_yard #стек #парсер #парсеркомбинаторы
-
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl)
Синтаксический анализатор на стеках и lambda-выражениях (Axolotl) В этой статье рассматривается практическая реализация синтаксического анализатора, основанного на стеке состояний и lambda-выражениях. Такой подход упрощает обработку синтаксиса, делая его гибким и легко масштабируемым. В статье описана архитектура анализатора, от лексического анализа до правил обработки состояний и обработки ошибок. Обсудим, как использовать состояния для синтаксического анализа ключевых конструкций и продемонстрируем простые, но эффективные методы для управления состояниями. Эта реализация — отличный выбор для быстрого прототипирования и собственных учебных языков.
https://habr.com/ru/articles/856616/
#Аксолотль #Axolotl #язык_программирования #анализатор #синтаксический_анализ #синтаксис #shunting_yard #стек #парсер #парсеркомбинаторы
-
Синтаксический анализатор — модифицированный Shunting Yard
Алгоритм синтаксического анализа кода на основе Shunting Yard — скажем "нет" рекурсии Преимущество модифицированного Shunting Yard над рекурсивным спуском заключается в его способности эффективно работать с более сложными синтаксическими конструкциями и грамматиками, которые не поддерживаются рекурсивным спуском. Благодаря использованию стеков для управления состояниями и операторами, алгоритм избегает проблем с глубокой рекурсией и может обрабатывать конструкции, требующие динамического изменения контекста. Это делает его более универсальным и производительным решением для построения абстрактного синтаксического дерева (AST) без ограничений на тип грамматик, характерных для рекурсивного спуска.
https://habr.com/ru/articles/844252/
#анализатор_кода #парсер #компилятор #интерпретатор #алгоритм #shunting_yard #дейкстра #ast #abstract_syntax_tree
-
Синтаксический анализатор — модифицированный Shunting Yard
Алгоритм синтаксического анализа кода на основе Shunting Yard — скажем "нет" рекурсии Преимущество модифицированного Shunting Yard над рекурсивным спуском заключается в его способности эффективно работать с более сложными синтаксическими конструкциями и грамматиками, которые не поддерживаются рекурсивным спуском. Благодаря использованию стеков для управления состояниями и операторами, алгоритм избегает проблем с глубокой рекурсией и может обрабатывать конструкции, требующие динамического изменения контекста. Это делает его более универсальным и производительным решением для построения абстрактного синтаксического дерева (AST) без ограничений на тип грамматик, характерных для рекурсивного спуска.
https://habr.com/ru/articles/844252/
#анализатор_кода #парсер #компилятор #интерпретатор #алгоритм #shunting_yard #дейкстра #ast #abstract_syntax_tree
-
Синтаксический анализатор — модифицированный Shunting Yard
Алгоритм синтаксического анализа кода на основе Shunting Yard — скажем "нет" рекурсии Преимущество модифицированного Shunting Yard над рекурсивным спуском заключается в его способности эффективно работать с более сложными синтаксическими конструкциями и грамматиками, которые не поддерживаются рекурсивным спуском. Благодаря использованию стеков для управления состояниями и операторами, алгоритм избегает проблем с глубокой рекурсией и может обрабатывать конструкции, требующие динамического изменения контекста. Это делает его более универсальным и производительным решением для построения абстрактного синтаксического дерева (AST) без ограничений на тип грамматик, характерных для рекурсивного спуска.
https://habr.com/ru/articles/844252/
#анализатор_кода #парсер #компилятор #интерпретатор #алгоритм #shunting_yard #дейкстра #ast #abstract_syntax_tree