Алгоритм решения выражений?

Не могу понять как получить ответ имея строку типа:
1+5/8*6
Как расставлять приоритеты и т.д. и .тп.
  • Вопрос задан
  • 2446 просмотров
Пригласить эксперта
Ответы на вопрос 4
hezymal
@hezymal
Программист-хардкорщик
Есть такой метод: "Обратная польская нотация"
Дальше по ссылке: algolist.manual.ru/syntax/revpn.php
Ответ написан
Комментировать
Ещё можно написать синтаксический анализатор на специальном языке — ищите по словам yacc (для Си), javacc, jjtree (для Java), bison (для Си, Си++ и Java). Вот, к примеру, простенькая JJTree-грамматика, которая разбирает примерно такие выражения, как вам нужно, с поддержкой переменных, шестнадцатеричных чисел, комментариев и т. д. И всего сто строчек. Используя JavaCC+JJTree вы по файлу грамматики автоматически можете создать Java-классы, которые позволят легко превратить выражение в абстрактное синтаксическое дерево (AST). По этому дереву уже можно сделать что угодно — выполнить вычисления, скомпилировать в машинный код, перевести в любой другой язык (скажем, MathML), красиво отрендерить на экране с многоэтажными дробями и т. д. Файлы грамматик обычно гораздо проще поддерживать и расширять, чем ковыряться с рекурсивным спуском.
Ответ написан
Комментировать
Neuroware
@Neuroware
Программист в свободное от работы время
Если это не "для зачета" а реальный проект то можно подключить Api wolfram и получить полный математический пакет со всеми вытекающими плюшками.
Ответ написан
Комментировать
Alex_ME
@Alex_ME
Студент
На хабре я видел хороший цикл статей о компиляции и трансляции в целом, описано достаточно понятно, мне помогло, когда делал курсач по трансляции. В том числе, там есть про калькулятор.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы