Проблема такая:
Существует в виде string арифметическое выражение. Я его не знаю, так как задаётся оно пользователем. Нужно вычислить его значение. Переменные не встречаются (вернее, встречаются, но я с этим разобрался и преобразовал их в той переменной в их значения). Нужно вычислить значение этого выражения.
Существует ли какой-нибудь быстрый способ это сделать? Написать то такое я смогу, только вот, может уже существует что-то подобное?

Принятый ответ

prog, в JS есть функция из коробки
var value = eval("2 + 3");
Я так в свою программу PositionMeter встроил редактор формул, основанный на интерпритации JavaScript
Isstrebitel, я собирался написать статью по созданию дерева выражений и вычислением его. Но могу вот что сказать:
  • Сперва надо распарсить на токены твое выражение (Константы, Идентификаторы, Управляющие символы, Операторы)
  • Дальше надо построить дерево выражения
  • Оптимизировать дерево выражений, вынести общие части в один узел (не обязательно)
  • И потом просто рекурсивно его посчитать
И в шарпах есть возможность рантайм компиляции инлайн кода, можешь погуглить этот вариант тоже
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
24
10 лет назад
0
Какой язык то? В некоторых языках такая возможность есть из коробки, особенно в скриптовых, в некоторых можно путем несложных махинаций скомпилить выражение "на лету", опять-же библиотеки распознавания выражений есть под большую часть языков.
P.S. как по мне, то полезнее написать свое, в плане получаемого опыта.
0
24
10 лет назад
0
prog, C#.
Увлёкся описанием проблемы и забыл написать, на каком это языке.
0
24
10 лет назад
Отредактирован prog
0
Isstrebitel, по шарпам, увы, подсказать толком не смогу. В юньке вроде была возможность чуть ли не JS на лету парсить, но слышал краем уха и точно сказать не могу что, как и есть ли это на самом деле.
А так - библиотеки точно есть и на чистый шарп и на юньку, но простой парсер арифметики как по мне проще написать, чем искать в сети и настраивать.
6
29
10 лет назад
6
prog, в JS есть функция из коробки
var value = eval("2 + 3");
Я так в свою программу PositionMeter встроил редактор формул, основанный на интерпритации JavaScript
Isstrebitel, я собирался написать статью по созданию дерева выражений и вычислением его. Но могу вот что сказать:
  • Сперва надо распарсить на токены твое выражение (Константы, Идентификаторы, Управляющие символы, Операторы)
  • Дальше надо построить дерево выражения
  • Оптимизировать дерево выражений, вынести общие части в один узел (не обязательно)
  • И потом просто рекурсивно его посчитать
И в шарпах есть возможность рантайм компиляции инлайн кода, можешь погуглить этот вариант тоже
Принятый ответ
0
24
10 лет назад
0
alexprey, спасибо, так и сделаю.
0
24
10 лет назад
0
alexprey, ну парсить сырой JS в шарпах то не получится, потому я и упомянул что видел это где-то в юньке. Парсить JS без проверки на наличие инъекций это тоже не лучшая идея, кстати.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.