Разбор формул в .NET - PullRequest
       167

Разбор формул в .NET

4 голосов
/ 15 апреля 2010

Я пытаюсь разобрать формулу на языке C #, например

"5*3 + 2" 
"(3*4 - 2)/5"

Возможно ли это сделать на C # или в таких скриптах, как VBScript, JavaScript (которые будут вызываться в программе c #).

Ответы [ 3 ]

4 голосов
/ 15 апреля 2010

У меня был большой опыт работы с Flee , библиотекой C #, которая оценивает выражения, подобные описанному вами. Вы можете оценивать выражения как строго типизированные операторы, поэтому, если вы хотите, например, целое число, «(1 + 2) * 5» будет в порядке, а «привет мир» - нет.

Вы даже можете подключить определенные переменные или функции. Страница примеров Flee является отличной отправной точкой.

2 голосов
/ 15 апреля 2010

Я использовал один трюк, чтобы делать подобные вещи в C #, а именно использовать функцию JScript.NET eval. Вы найдете полный код в моем ответе на этот вопрос . Он не полагается на язык сценариев, такой как VBScript или JavaScript, это чистый .NET, и используемая мной реализация генерирует сборку JScript.NET на лету из кода C #, поэтому нет необходимости смешивать языки в вашем решении.

1 голос
/ 15 апреля 2010

Я успешно использовал образец Dynamic Linq от Microsoft для динамического формулирования выражений, использующих типы в пространстве имен System.Linq.Expressions . Это очень хорошо работает для меня и позволяет мне использовать более естественный синтаксис C # вместо ActiveReports выражений по умолчанию.

...