Перейти к содержанию
    

MSVisualStudio формульный (скриптовый) интерпретатор в C++

Делаю софт для параметризации прибора по RS485.

Вот заказчик возжелал, чтобы "приведение" записываемых-считываемых чисел в(из) девайса можно было

пересчитывать по задаваемой ИМ матем. формуле, вплоть до задания для каждого параметра.

(т.е. формул может быть много, ну, не одна или 2, а 10-100 к примеру).

Все это - д.б. легко писаемое, читаемое, настраиваемое пользователем.

Т.о. нужен инрерпретатор матем. формул (можно и компилятор), с "исходным" в виде текстового файла - скрипта, описывающего ф-лу.

В виде кода C++, желательно, или библиотеки.

---------------------------

Пока самый "прямой" вараиант решения вижу использование "всего готового" в виде Python (лучше конечно встроенный в модуль, сейчас разбираюсь с этим).

Второй вариант - писание на CPP "калькулятора" со "стековым" заданием расчета. Явно "велосипед" :)  Но люблю я велосипеды.

Кто что может сказать, куда смотреть (из готового или написания велосипедов),  кроме как "пшел-на-Гугль". Да был я там, и сейчас там. И не только там.

psps

. . . я наверно недоформулировал вопрос.

У меня проект C++ на MS Visual Studio. Это "клиентская" программа-параметризатор.

Надо чтобы он (мой код C++) начал понимать-применять в вычислениях задаваемые пользователем формулы, например y=(123*x+4.567)^2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понял, требуется что-то типа интерпретатора в виде редактора кода? Если так, то лучше не на C++, а на C#. Там и готовые проекты есть с подсветкой и блэкджеком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Tanya said:

Formula node. Labview...

Нет, я наверно недоформулировал вопрос.

У меня проект C++ на MS Visual Studio. Это "клиентская" программа-параметризатор.

Надо чтобы он (мой код C++) начал понимать-применять в вычислениях задаваемые пользователем формулы, например y=(123*x+4.567)^2

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, alexunder said:

Если я правильно понял, требуется что-то типа интерпретатора в виде редактора кода? Если так, то лучше не на C++, а на C#. Там и готовые проекты есть с подсветкой и блэкджеком.

Нет, C# не подойдет. За ссылку спасибо, посмотрю.

Быстродействие тоже желательно, хотя и не очень критично. Поэтому если будет чистый С / C++  - оптимальный вариант.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Tanya said:

А вызвать потусторонний код никак?

Да вызвать-то "не-вопрос", можно даже через system()/Exec итп. python (эти решения я видел). Не пойдет.

В этом случае встроенный (вкомпилированный в мой проект) python решает задачу. Но мне не нужна универсальность python, и соотв-но избыточность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, k155la3 сказал:

Второй вариант - писание на CPP "калькулятора" со "стековым" заданием расчета. Явно "велосипед" :)  Но люблю я велосипеды.

А что там сложного? Считаете скобки, выстраиваете операции по приоритету и считаете стеком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Tanya said:

А кто будет учить заказчика писать формулы?

Ну, заказчик прекрасно "в теме". Тут главная задача - настраиваемость расчета без изменения кода самого проекта и его перекомипляции.

Такой нано-бейсик для формул нада.  "Командовать парадом буду я" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я когда то давно делал что-то подобное, только сложнее: у меня в формуле могли быть ещё и переменные; и формула компилировалась для последующего многократного быстрого выполнения. И самая большая сложность там была не в разборе и компиляции формулы, а в оптимизации последующего скомпилированного кода. Оптимизацию я только частично осилил. А если без оптимизации - там всё просто было. Операции у меня в формуле поддерживались все те что есть в си + некоторые дополнительные из явы. А также поддерживались функции.

Писал на си.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, jcxz said:

А что там сложного? Считаете скобки, выстраиваете операции по приоритету и считаете стеком.

Да. Исходя из этого ("что все написано до нас") ОНО должно быть где-то уже реализовано.  Например, на FORTRANE  :)  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, jcxz said:

Я когда то давно делал что-то подобное, только сложнее: у меня в формуле могли быть ещё и переменные; и формула компилировалась для последующего многократного быстрого выполнения. И самая большая сложность там была не в разборе и компиляции формулы, а в оптимизации последующего скомпилированного кода. Оптимизацию я только частично осилил. А если без оптимизации - там всё просто было. Операции у меня в формуле поддерживались все те что есть в си + некоторые дополнительные из явы. А также поддерживались функции.

Писал на си.

Изначально я предлагал использовать простой пересчет по стандартной ф-ле y=ax+b и задаваемыми польз-ем коэффициентами, и это устраивало. Но . . .

Нет, сложных расчетов-формул не требуется. Обработка ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, k155la3 сказал:

Да. Исходя из этого ("что все написано до нас") ОНО должно быть где-то уже реализовано.  Например, на FORTRANE  :)  

Мне кажется искать и разбираться в этом "готовом" будет дольше и сложнее.

Первый проход по формуле - разбивка на лексемы и преобразование строковой формы в бинарный вид: распознаются числа (константы), переменные (если есть) и операции. Они записываются бинарными блоками фиксированного размера и формата.

Второй проход: сортировка по скобкам. Рекурсией.

Третий проход (внутри очередного уровня скобок): сортировка операций по приоритетам, разделение унарных и бинарных операций.

Ну и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...