1.DIY язык программирования. Алгоритм Shunting Yard
00:00 Введение в алгоритм Shunting Yard • Алгоритм Shunting Yard преобразует математические выражения в форму, понятную компьютеру. • Это первый шаг к созданию собственного языка программирования. • Пример выражения: 1 + 2 * 4 - 3. 00:54 Порядок операций • Сначала выполняется умножение, затем сложение. • Сложение и вычитание имеют одинаковый приоритет. • Операторы принимают два аргумента. 01:37 Приоритет операторов • Операторы имеют разный приоритет: скобки, деление, умножение, сложение, вычитание. • Деление выполняется перед сложением. 02:35 Проблема для компьютеров • Компьютеры не понимают порядок операций, как люди. • Алгоритм Shunting Yard решает эту проблему. 03:23 Визуализация алгоритма • Создание визуального компьютера для демонстрации алгоритма. • Ввод выражения в компьютер. 04:00 Преобразование в обратную польскую запись • Чтение выражения слева направо. • Числовые литералы выводятся напрямую. • Операторы помещаются в стек в порядке приоритета. 05:02 Пример преобразования • Пример преобразования выражения: 1 + 2 * 4 - 3. • Удаление операторов с низким приоритетом из стека. 06:27 Обратная польская запись • Обратная польская запись устраняет двусмысленность. • Операторы принимают два аргумента из стека. 07:07 Вычисление выражения • Перенос значений в решающий стек. • Вычисление выражения: 1 + 2 * 4 - 3. • Перестановка аргументов для вычисления. 08:14 Введение в алгоритм сортировочной станции • Алгоритм сортировочной станции позволяет получить правильный ответ для исходного выражения. • Для упрощения задачи делаются предположения, которые позволяют сделать видео кратким. • Используется стандартная библиотека C++, включая неупорядоченную карту и двустороннюю очередь. 09:06 Выбор структуры данных • Двусторонняя очередь предпочтительнее стека из-за возможности итераций и удобства работы. • Определяется структура оператора для хранения приоритета и количества аргументов. • Приоритет оператора увеличивается по правилам Бентли. 10:02 Обработка входного выражения • Входное выражение сохраняется в виде строки без пробелов и недопустимых символов. • Создаются два контейнера: хранилище стека и выходной стек. • Токены представляют собой операторы или буквальные значения. 11:55 Реализация алгоритма • Числовые литералы обрабатываются как однозначные числа от 0 до 9. • Операторы проверяются на наличие на неупорядоченной карте. • Проверяется приоритет оператора в стеке перед добавлением нового оператора. 12:49 Проверка приоритета и добавление оператора • Если оператор в верхней части стека имеет более высокий приоритет, он удаляется и добавляется в выходные данные. • Цикл продолжается до тех пор, пока стек не опустеет или оператор не получит более низкий приоритет. • Новый оператор добавляется на вершину стека хранения. 14:41 Слив содержимого стека • Содержимое стека хранения сливается в выходной файл. • Проверяется правильность работы алгоритма путём вывода выражения и обратной польской нотации. 15:19 Реализация решателя • Реализуется решатель для вычисления выражения и выдачи результата. • Используется двусторонняя очередь типа double для хранения результатов вычислений. • Числовые литералы добавляются в стек решений. 17:13 Вычисление операторов • Для операторов создаётся вектор временной памяти для хранения аргументов. • Проверяется, что стек решений не пуст перед извлечением аргументов. • Выполняется вычисление оператора и результат добавляется в стек решений. 19:01 Заключение • Создан простой калькулятор, подчиняющийся порядку операций базовой арифметики. • Ограничения на вводимые токены не влияют на вычисления. 19:10 Введение в использование круглых скобок • Круглые скобки позволяют вручную задавать порядок операций. • Алгоритм остаётся прежним, но добавляется новое правило для обработки скобок. • Скобки используются как индикатор для прекращения опустошения стека. 20:00 Обработка токенов и стека • Токены обрабатываются последовательно: числовые литералы выводятся сразу, операторы помещаются в стек хранения. • Умножение имеет более высокий приоритет, чем другие операторы в стеке. • Открытые скобки помещаются в стек независимо от приоритета. 21:12 Опустошение стека и решение выражений • Закрытые скобки сигнализируют об опустошении стека до следующей открытой скобки. • Вычитание обрабатывается с учётом двух предыдущих значений в стеке. • Умножение и сложение также решаются с использованием предыдущих значений. 22:31 Пример с скобками в начале • Пример с скобками в начале выражения: сначала вычисляется выражение в скобках, затем умножение. • Обработка токенов: открытая скобка помещается в стек, закрытая скобка сигнализирует об опустошении стека. • Вычисление выражения: 1 + 2 = 3, 3 * 4 = 12, 12 * 3 = 9. 25:35 Обработка деления и умножения • Деление имеет более высокий приоритет, чем умножение. • Обработка токенов: числовые литералы выводятся, операторы помещаются в стек. • Решение выражения: 6 / 3 = 2, 1 * 2 = 2.
00:00 Введение в алгоритм Shunting Yard • Алгоритм Shunting Yard преобразует математические выражения в форму, понятную компьютеру. • Это первый шаг к созданию собственного языка программирования. • Пример выражения: 1 + 2 * 4 - 3. 00:54 Порядок операций • Сначала выполняется умножение, затем сложение. • Сложение и вычитание имеют одинаковый приоритет. • Операторы принимают два аргумента. 01:37 Приоритет операторов • Операторы имеют разный приоритет: скобки, деление, умножение, сложение, вычитание. • Деление выполняется перед сложением. 02:35 Проблема для компьютеров • Компьютеры не понимают порядок операций, как люди. • Алгоритм Shunting Yard решает эту проблему. 03:23 Визуализация алгоритма • Создание визуального компьютера для демонстрации алгоритма. • Ввод выражения в компьютер. 04:00 Преобразование в обратную польскую запись • Чтение выражения слева направо. • Числовые литералы выводятся напрямую. • Операторы помещаются в стек в порядке приоритета. 05:02 Пример преобразования • Пример преобразования выражения: 1 + 2 * 4 - 3. • Удаление операторов с низким приоритетом из стека. 06:27 Обратная польская запись • Обратная польская запись устраняет двусмысленность. • Операторы принимают два аргумента из стека. 07:07 Вычисление выражения • Перенос значений в решающий стек. • Вычисление выражения: 1 + 2 * 4 - 3. • Перестановка аргументов для вычисления. 08:14 Введение в алгоритм сортировочной станции • Алгоритм сортировочной станции позволяет получить правильный ответ для исходного выражения. • Для упрощения задачи делаются предположения, которые позволяют сделать видео кратким. • Используется стандартная библиотека C++, включая неупорядоченную карту и двустороннюю очередь. 09:06 Выбор структуры данных • Двусторонняя очередь предпочтительнее стека из-за возможности итераций и удобства работы. • Определяется структура оператора для хранения приоритета и количества аргументов. • Приоритет оператора увеличивается по правилам Бентли. 10:02 Обработка входного выражения • Входное выражение сохраняется в виде строки без пробелов и недопустимых символов. • Создаются два контейнера: хранилище стека и выходной стек. • Токены представляют собой операторы или буквальные значения. 11:55 Реализация алгоритма • Числовые литералы обрабатываются как однозначные числа от 0 до 9. • Операторы проверяются на наличие на неупорядоченной карте. • Проверяется приоритет оператора в стеке перед добавлением нового оператора. 12:49 Проверка приоритета и добавление оператора • Если оператор в верхней части стека имеет более высокий приоритет, он удаляется и добавляется в выходные данные. • Цикл продолжается до тех пор, пока стек не опустеет или оператор не получит более низкий приоритет. • Новый оператор добавляется на вершину стека хранения. 14:41 Слив содержимого стека • Содержимое стека хранения сливается в выходной файл. • Проверяется правильность работы алгоритма путём вывода выражения и обратной польской нотации. 15:19 Реализация решателя • Реализуется решатель для вычисления выражения и выдачи результата. • Используется двусторонняя очередь типа double для хранения результатов вычислений. • Числовые литералы добавляются в стек решений. 17:13 Вычисление операторов • Для операторов создаётся вектор временной памяти для хранения аргументов. • Проверяется, что стек решений не пуст перед извлечением аргументов. • Выполняется вычисление оператора и результат добавляется в стек решений. 19:01 Заключение • Создан простой калькулятор, подчиняющийся порядку операций базовой арифметики. • Ограничения на вводимые токены не влияют на вычисления. 19:10 Введение в использование круглых скобок • Круглые скобки позволяют вручную задавать порядок операций. • Алгоритм остаётся прежним, но добавляется новое правило для обработки скобок. • Скобки используются как индикатор для прекращения опустошения стека. 20:00 Обработка токенов и стека • Токены обрабатываются последовательно: числовые литералы выводятся сразу, операторы помещаются в стек хранения. • Умножение имеет более высокий приоритет, чем другие операторы в стеке. • Открытые скобки помещаются в стек независимо от приоритета. 21:12 Опустошение стека и решение выражений • Закрытые скобки сигнализируют об опустошении стека до следующей открытой скобки. • Вычитание обрабатывается с учётом двух предыдущих значений в стеке. • Умножение и сложение также решаются с использованием предыдущих значений. 22:31 Пример с скобками в начале • Пример с скобками в начале выражения: сначала вычисляется выражение в скобках, затем умножение. • Обработка токенов: открытая скобка помещается в стек, закрытая скобка сигнализирует об опустошении стека. • Вычисление выражения: 1 + 2 = 3, 3 * 4 = 12, 12 * 3 = 9. 25:35 Обработка деления и умножения • Деление имеет более высокий приоритет, чем умножение. • Обработка токенов: числовые литералы выводятся, операторы помещаются в стек. • Решение выражения: 6 / 3 = 2, 1 * 2 = 2.
