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/