Динамический пользовательский контроль над переменными (встроенный язык?)
Я создаю часть программного обеспечения (написано на C#, будет приложением Windows), и я столкнулся с этой проблемой
У меня есть набор переменных, и мне нужно разрешить пользователю определять широкий спектр математических функций для этих переменных.
Но мои пользователи не обязательно должны иметь какие-либо предварительные знания о программировании.
Варианты, которые я рассмотрел:
- Создать какой-то графический интерфейс для определения математических "функций". Но это очень ограничивает.
- Реализуйте очень простой встроенный язык, который обеспечит гибкость, оставаясь при этом относительно простым для понимания. Я посмотрел на Lua, но проблема в том, что вам нужно иметь предварительные знания в программировании. Я думал о чем-то более читаемом (чем-то похожем на SQL), например, "назначить 3 для X";
Другие идеи приветствуются.
Я в основном ищу лучший способ пойти сюда, предполагая, что мои пользователи не имеют никаких знаний в программировании.
Тем не менее, обратите внимание, что это не основная функция моего программного обеспечения, поэтому я предполагаю, что если пользователь хочет / должен использовать эту функцию, он потратит время, чтобы взглянуть на руководство в течение нескольких минут и узнать, как это сделать. так, пока это не слишком сложно.
Спасибо, Малки:)
2 ответа
То, что вы хотите, это предметно-ориентированный язык. Я вижу, что вы пробовали Lua и не нашли это приемлемым - я предполагаю, что большинство готовых языков сценариев уже вышли.
В зависимости от ожидаемой сложности функции, я бы порекомендовал вам попробовать реализовать небольшой синтаксический анализатор с рекурсивным спуском, чтобы вы могли точно указать свой язык. Таким образом, вы можете реализовать что-то вроде:
assign 3 to X
show sin(X * 5)
Если это немного выходит за рамки того, что вы готовы сделать, вы можете получить некоторую помощь при разборе в библиотеке, такой как Irony; это позволит вам сосредоточиться на использовании абстрактного синтаксического дерева вместо того, чтобы какое-то время играть с токенизацией / лексингом.
Если вы хотите, вы можете даже взглянуть на FLEE, который будет анализировать и оценивать некоторые довольно сложные выражения прямо из ворот.
ANTLR - отличный анализатор, если вы хотите создать свой собственный язык