yarn install
yarn start '2+2'
где 2+2
-> любое математическое выражение в рамках операций + - / * ( ) ^
Тесты написаны при помощи jest
yarn test
- Пока есть ещё символы для чтения:
- Читаем очередной символ.
- Если символ является открывающей скобкой, помещаем его в стек.
- Если символ является закрывающей скобкой:
До тех пор, пока верхним элементом стека не станет открывающая скобка, выталкиваем элементы из стека в выходную строку. При этом открывающая скобка удаляется из стека, но в выходную строку не добавляется. Если стек закончился раньше, чем мы встретили открывающую скобку, это означает, что в выражении либо неверно поставлен разделитель, либо не согласованы скобки.
- Если существуют разные виды скобок, появление непарной скобки также свидетельствует об ошибке. Если какие-то скобки одновременно являются функциями (например, [x] — целая часть), добавляем к выходной строке символ этой функции.
- Если символ является бинарной операцией о1, тогда:
- пока на вершине стека приоритетнее o1
- … ИЛИ операция на вершине стека левоассоциативная с приоритетом как у o1
- … выталкиваем верхний элемент стека в выходную строку;
- помещаем операцию o1 в стек.
- пока на вершине стека приоритетнее o1
- Когда входная строка закончилась, выталкиваем все символы из стека в выходную строку. В стеке должны были остаться только символы операций; если это не так, значит в выражении не согласованы скобки.
- Обработка входного символа
- Если на вход подан операнд, он помещается на вершину стека.
- Если на вход подан знак операции, то соответствующая операция выполняется над требуемым количеством значений, извлечённых из стека, взятых в порядке добавления. Результат выполненной операции кладётся на вершину стека.
- Если входной набор символов обработан не полностью, перейти к шагу 1.
- После полной обработки входного набора символов результат вычисления выражения лежит на вершине стека.