Динамический пользовательский контроль над переменными (встроенный язык?)

Я создаю часть программного обеспечения (написано на C#, будет приложением Windows), и я столкнулся с этой проблемой

У меня есть набор переменных, и мне нужно разрешить пользователю определять широкий спектр математических функций для этих переменных.

Но мои пользователи не обязательно должны иметь какие-либо предварительные знания о программировании.

Варианты, которые я рассмотрел:

  • Создать какой-то графический интерфейс для определения математических "функций". Но это очень ограничивает.
  • Реализуйте очень простой встроенный язык, который обеспечит гибкость, оставаясь при этом относительно простым для понимания. Я посмотрел на Lua, но проблема в том, что вам нужно иметь предварительные знания в программировании. Я думал о чем-то более читаемом (чем-то похожем на SQL), например, "назначить 3 для X";

Другие идеи приветствуются.

Я в основном ищу лучший способ пойти сюда, предполагая, что мои пользователи не имеют никаких знаний в программировании.

Тем не менее, обратите внимание, что это не основная функция моего программного обеспечения, поэтому я предполагаю, что если пользователь хочет / должен использовать эту функцию, он потратит время, чтобы взглянуть на руководство в течение нескольких минут и узнать, как это сделать. так, пока это не слишком сложно.

Спасибо, Малки:)

2 ответа

Решение

То, что вы хотите, это предметно-ориентированный язык. Я вижу, что вы пробовали Lua и не нашли это приемлемым - я предполагаю, что большинство готовых языков сценариев уже вышли.

В зависимости от ожидаемой сложности функции, я бы порекомендовал вам попробовать реализовать небольшой синтаксический анализатор с рекурсивным спуском, чтобы вы могли точно указать свой язык. Таким образом, вы можете реализовать что-то вроде:

assign 3 to X
show sin(X * 5)

Если это немного выходит за рамки того, что вы готовы сделать, вы можете получить некоторую помощь при разборе в библиотеке, такой как Irony; это позволит вам сосредоточиться на использовании абстрактного синтаксического дерева вместо того, чтобы какое-то время играть с токенизацией / лексингом.

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

ANTLR - отличный анализатор, если вы хотите создать свой собственный язык

Другие вопросы по тегам