c# преобразование строкового выражения в логическое выражение
можно ли преобразовать строковое выражение в булево условие?
например, я получаю следующую строку:
var b = "32 < 45 && 32 > 20"
Я хотел бы создать bool
выражение из этого и вызывать его. Строковое представление также является гибким (чтобы сделать его более увлекательным), поэтому оно позволяет ||, &&, ()
.
6 ответов
Я хотел бы использовать Ирония действие .Net-язык комплект. Вы можете построить простую грамматику с иронией, а затем разобрать строку в исполняемую команду. Есть достойный пример артметической грамматики в этом учебник и Образец Грамматики Выражения, это довольно распространенный запрос;)
Я определенно предлагаю использовать правильный компилятор, а не регулярное выражение или рулонный собственный подход - он будет гораздо более расширяемым, если вы когда-либо захотите добавьте больше правил.
посмотреть бежать (быстрый облегченный оценщик выражений) на CodePlex.
Если он следует всем правилам выражения C#, то скомпилируйте его как динамический код согласно http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm
Если вы имеете дело с относительно простыми математическими выражениями, то простой реализации алгоритм шунтирования следует сделать трюк.
Я думаю, что создание переводчика для этой строки не займет слишком много времени.
http://www.industriallogic.com/xp/refactoring/implicitLanguageWithInterpreter.html
здесь вы можете найти информацию о дизайне, который может быть использован для его создания.
вы можете взглянуть на Jint (интерпретатор Javascript для .NET)http://jint.codeplex.com/