k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Делаю софт для параметризации прибора по RS485. Вот заказчик возжелал, чтобы "приведение" записываемых-считываемых чисел в(из) девайса можно было пересчитывать по задаваемой ИМ матем. формуле, вплоть до задания для каждого параметра. (т.е. формул может быть много, ну, не одна или 2, а 10-100 к примеру). Все это - д.б. легко писаемое, читаемое, настраиваемое пользователем. Т.о. нужен инрерпретатор матем. формул (можно и компилятор), с "исходным" в виде текстового файла - скрипта, описывающего ф-лу. В виде кода C++, желательно, или библиотеки. --------------------------- Пока самый "прямой" вараиант решения вижу использование "всего готового" в виде Python (лучше конечно встроенный в модуль, сейчас разбираюсь с этим). Второй вариант - писание на CPP "калькулятора" со "стековым" заданием расчета. Явно "велосипед" :) Но люблю я велосипеды. Кто что может сказать, куда смотреть (из готового или написания велосипедов), кроме как "пшел-на-Гугль". Да был я там, и сейчас там. И не только там. psps . . . я наверно недоформулировал вопрос. У меня проект C++ на MS Visual Studio. Это "клиентская" программа-параметризатор. Надо чтобы он (мой код C++) начал понимать-применять в вычислениях задаваемые пользователем формулы, например y=(123*x+4.567)^2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Formula node. Labview... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexunder 4 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Если я правильно понял, требуется что-то типа интерпретатора в виде редактора кода? Если так, то лучше не на C++, а на C#. Там и готовые проекты есть с подсветкой и блэкджеком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Just now, Tanya said: Formula node. Labview... Нет, я наверно недоформулировал вопрос. У меня проект C++ на MS Visual Studio. Это "клиентская" программа-параметризатор. Надо чтобы он (мой код C++) начал понимать-применять в вычислениях задаваемые пользователем формулы, например y=(123*x+4.567)^2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба А вызвать потусторонний код никак? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 4 minutes ago, alexunder said: Если я правильно понял, требуется что-то типа интерпретатора в виде редактора кода? Если так, то лучше не на C++, а на C#. Там и готовые проекты есть с подсветкой и блэкджеком. Нет, C# не подойдет. За ссылку спасибо, посмотрю. Быстродействие тоже желательно, хотя и не очень критично. Поэтому если будет чистый С / C++ - оптимальный вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба А кто будет учить заказчика писать формулы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Boost Spirit (плюс развивается как самодостаточный проект) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Just now, Tanya said: А вызвать потусторонний код никак? Да вызвать-то "не-вопрос", можно даже через system()/Exec итп. python (эти решения я видел). Не пойдет. В этом случае встроенный (вкомпилированный в мой проект) python решает задачу. Но мне не нужна универсальность python, и соотв-но избыточность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 16 минут назад, k155la3 сказал: Второй вариант - писание на CPP "калькулятора" со "стековым" заданием расчета. Явно "велосипед" :) Но люблю я велосипеды. А что там сложного? Считаете скобки, выстраиваете операции по приоритету и считаете стеком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 4 minutes ago, Tanya said: А кто будет учить заказчика писать формулы? Ну, заказчик прекрасно "в теме". Тут главная задача - настраиваемость расчета без изменения кода самого проекта и его перекомипляции. Такой нано-бейсик для формул нада. "Командовать парадом буду я" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Я когда то давно делал что-то подобное, только сложнее: у меня в формуле могли быть ещё и переменные; и формула компилировалась для последующего многократного быстрого выполнения. И самая большая сложность там была не в разборе и компиляции формулы, а в оптимизации последующего скомпилированного кода. Оптимизацию я только частично осилил. А если без оптимизации - там всё просто было. Операции у меня в формуле поддерживались все те что есть в си + некоторые дополнительные из явы. А также поддерживались функции. Писал на си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 6 minutes ago, jcxz said: А что там сложного? Считаете скобки, выстраиваете операции по приоритету и считаете стеком. Да. Исходя из этого ("что все написано до нас") ОНО должно быть где-то уже реализовано. Например, на FORTRANE :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 2 minutes ago, jcxz said: Я когда то давно делал что-то подобное, только сложнее: у меня в формуле могли быть ещё и переменные; и формула компилировалась для последующего многократного быстрого выполнения. И самая большая сложность там была не в разборе и компиляции формулы, а в оптимизации последующего скомпилированного кода. Оптимизацию я только частично осилил. А если без оптимизации - там всё просто было. Операции у меня в формуле поддерживались все те что есть в си + некоторые дополнительные из явы. А также поддерживались функции. Писал на си. Изначально я предлагал использовать простой пересчет по стандартной ф-ле y=ax+b и задаваемыми польз-ем коэффициентами, и это устраивало. Но . . . Нет, сложных расчетов-формул не требуется. Обработка ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 2 минуты назад, k155la3 сказал: Да. Исходя из этого ("что все написано до нас") ОНО должно быть где-то уже реализовано. Например, на FORTRANE :) Мне кажется искать и разбираться в этом "готовом" будет дольше и сложнее. Первый проход по формуле - разбивка на лексемы и преобразование строковой формы в бинарный вид: распознаются числа (константы), переменные (если есть) и операции. Они записываются бинарными блоками фиксированного размера и формата. Второй проход: сортировка по скобкам. Рекурсией. Третий проход (внутри очередного уровня скобок): сортировка операций по приоритетам, разделение унарных и бинарных операций. Ну и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться