visual net matematicas funciones evaluar evaluador c# asp.net-4.0

c# - net - evaluar funciones en visual basic



Necesito un rápido analizador de expresiones de tiempo de ejecución (5)

Necesito localizar un analizador de expresión rápido y ligero.

Idealmente, quiero pasarle una lista de pares de nombre / valor (por ejemplo, variables) y una cadena que contenga la expresión para evaluar. Todo lo que necesito de vuelta es un valor verdadero / falso.

Los tipos de expresiones deben estar en la línea de:

varA == "xyz" and varB==123

Básicamente, solo un motor lógico simple cuya expresión se proporciona en tiempo de ejecución.

ACTUALIZAR
Como mínimo, debe admitir ==,! =,>,> =, <, <=

En cuanto a la velocidad, espero que se ejecuten aproximadamente 5 expresiones por solicitud. Veremos un lugar cercano a 100 / peticiones por segundo. Nuestras páginas actuales tienden a ejecutarse en menos de 50 ms. Por lo general, solo habrá 2 o 3 variables involucradas en cualquier expresión. Sin embargo, tendré que cargar aproximadamente 30 en el analizador antes de la ejecución.

ACTUALIZACIÓN 2012/11/5
Actualización sobre el rendimiento. Implementamos nCalc hace casi 2 años. Desde entonces, hemos expandido su uso de tal manera que promediamos más de 40 expresiones que cubren más de 300 variables en comentarios posteriores. Ahora hay miles de devoluciones de publicaciones por segundo con una degradación del rendimiento absolutamente nula.

También lo hemos ampliado para incluir un puñado de funciones adicionales, de nuevo sin pérdida de rendimiento. En resumen, nCalc cumplió con todas nuestras necesidades y superó nuestras expectativas.


¿Has visto https://ncalc.codeplex.com/ y https://github.com/sheetsync/NCalc ?

Es extensible, rápido (por ejemplo, tiene su propio caché) le permite proporcionar funciones personalizadas y variables en tiempo de ejecución al manejar eventos EvaluateFunction / EvaluateParameter. Ejemplos de expresiones que puede analizar:

Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)"); e.Parameters["Pi2"] = new Expression("Pi * Pi"); e.Parameters["X"] = 10; e.EvaluateParameter += delegate(string name, ParameterArgs args) { if (name == "Pi") args.Result = 3.14; }; Debug.Assert(117.07 == e.Evaluate());

También maneja unicode y muchos tipos de datos de forma nativa. Viene con un archivo de asta si desea cambiar la gramática. También hay un tenedor que soporta MEF para cargar nuevas funciones.

También es compatible con operadores lógicos, cadenas de fecha / hora y declaraciones if.



Aprecio por completo lo tarde que es esta respuesta. Sin embargo, me gustaría incluir mi solución porque creo que puede agregar más que la respuesta aceptada de usar nCalc si alguien desea usar las expresiones en múltiples plataformas.

- Actualización -

He creado un analizador para C # con planes para implementarlo también para Java y Swift en los próximos meses. Esto significaría que puede evaluar las expresiones en multiplataformas sin la necesidad de ajustes por plataforma.

Si bien Java y Swift fueron planeados, nunca llegó a un lanzamiento completamente nuevo. En su lugar, ahora hay soporte para .NET Standard habilitando el soporte para las aplicaciones Xamarin .

- Finalizar actualización -

Expressive es la herramienta y está disponible en: GitHub o Nuget .

El sitio tiene una buena cantidad de documentación, pero para evitar la podredumbre de enlaces aquí hay un ejemplo sobre cómo usarlo:

Soporte variable

var expression = new Expression("1 * [variable]"); var result = expression.Evaluate(new Dictionary<string, object> { ["variable"] = 2);

Funciones

var expression = new Expression("sum(1,2,3,4)"); var result = expression.Evaluate();

Fue diseñado para que coincida con NCalc de la mejor manera posible, sin embargo, ha agregado soporte para cosas como una palabra clave ''nula''.


El intérprete de Hisystems admite funciones personalizadas, operadores y literales, es un código portátil puro y ligero de # C. Actualmente se ejecuta en iOS a través de MonoTouch y debe ejecutarse en cualquier otro entorno Mono, así como en Windows. Gratis para uso comercial. Disponible en GitHub en https://github.com/hisystems/Interpreter .


auto promoción aquí escribí un generador de analizador genérico para c # https://github.com/b3b00/csly puedes encontrar un ejemplo de parseras de expresión en mi github. Es posible que necesite personalizarlo para que se ajuste a sus necesidades.