LINUX.ORG.RU

исполнение математических выражений (eval)

 ,


0

1

Пишу программу на Qt 5.4+, заказчику потребовалась функция чтобы в файле настроек можно было текстом прописывать математические действия над некоторыми данными. Выражения достаточно сложные, но действия простые: сложения вычитания деление, плюс надо группировать действия скобками. Переменная одна, остальное константы (это может быть важной деталью).

Как бы вы решили такую задачку? Свой велик-костыль? Или выполнить через shell? Проблема в том что программа кроссплатформенна, в моем случае нельзя просто вызвать системный python и радоваться жизни. Требуется что-то мелкое легковесное...

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

калькулятор это конечно мега-задача..на Qt видимо нерешаемая и в туториалах неописанная :-) QSA видать тоже сцуко неработает

короче - пиши код и не выделывайся

MKuznetsov ★★★★★
()

Если на будущее ничего не изменится, будет одна переменная - можно написать свой костыль, он прост как 3 копейки (когда то лаба на погромировании была такая). Если лень или опасения что в будущем переделывать придется - QQmlEngine::evaluate, или дергать питон через буст.

anonymous
()
Ответ на: комментарий от anonymous

Хз, раз спрашивает, значит надо? Кидай ссылку, пропустил наверное.

QJSEngine

видимо это

arturpub ★★
()
Последнее исправление: arturpub (всего исправлений: 1)

Странно, что никто не упомянул стандартные методы трансляции

Или лексический @ синтаксический @ семантический анализы уже не жи есть?

Northsoft ★★
()
Ответ на: комментарий от EXL

т.е. мне выбирать QJSEngine и не париться? Судя по этому:

QJSEngine myEngine;
QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })");
QJSValueList args;
args << 1 << 2;
QJSValue threeAgain = fun.call(QJSValue(), args);
это то что мне надо. Я начинаю еще больше любить Qt!

I-Love-Microsoft ★★★★★
() автор топика

Не можешь вызывать системный питон - вызывай свою Lua и не выделывайся. Lua закатать даже в hello, world можно без проблем.

anonymous
()

Если переменная одна пусть приводит в виду k*x+b и пишет в конфиг коэффициенты k и b.

anonymous
()
Ответ на: комментарий от anonymous

Или даже в общем случае коэффициенты полинома

a[n]*x^n + a[n-1]*x(n-1) + ... + a[0] + a[-1]/x ...

anonymous
()
Ответ на: комментарий от anonymous

Если переменная одна пусть приводит в виду k*x+b и пишет в конфиг коэффициенты k и b.

Нет, это было раньше так. Теперь формула может меняться между двумя и более вариантами. Но я уже QJSEngine решил юзать. Решение темы найдено! Может было бы что-то легче чем QJSEngine, та же Lua возможно, но я решил уже что будет QJSEngine.

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Ящитаю, обладателя пяти звёзд украсит факт прочтения Гриса

«Грис Д. — Конструирование компиляторов»

Northsoft ★★
()
Ответ на: комментарий от d_Artagnan

Да, наше поколение нацелено на быстрое а потому эффективное решение задач, а не на академический интерес ;)

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.