Динамический пользовательский контроль над переменными (встроенный язык?) - PullRequest
1 голос
/ 26 октября 2010

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 26 октября 2010

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

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

assign 3 to X
show sin(X * 5)

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

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

2 голосов
/ 26 октября 2010

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

...