MAGES es el sucesor oficial de YAMP. Es un analizador e intérprete de expresiones muy simple pero potente. Puede utilizar MAGES para incluir un motor de secuencias de comandos ligero, sofisticado y fácil de personalizar en su aplicación.
Entre otras aplicaciones, MAGES se ha utilizado en PowerToys de Microsoft.
MAGES acaba de actualizarse (v3.0.0) con metadatos de objetos, compatibilidad con listas directas y sintaxis JSX.
2023 :
MAGES se actualizó (v2.0.0) con soporte para números complejos. Además, el objetivo de compilación y el tiempo de ejecución se han actualizado para aprovechar las posibilidades modernas.
2018 :
Se ha lanzado la primera versión estable. La versión actual 1.6.0 contiene un REPL mejorado. La biblioteca contiene todo lo necesario para realizar operaciones de secuencias de comandos ligeras en C#. También está disponible un artículo de CodeProject sobre la biblioteca (que también contiene algunas comparaciones de antecedentes y rendimiento).
MAGES en sí no tiene ninguna dependencia, sin embargo, las pruebas dependen de NUnit y los puntos de referencia utilizan BenchmarkDotNet. Por lo general, MAGES debe instalarse a través del código fuente del paquete NuGet. Si esto no funciona para usted, clone la fuente y cree MAGES usted mismo. Asegúrese de que se pasen todas las pruebas unitarias.
Toda la biblioteca fue diseñada para ser consumida desde aplicaciones .NET Core 3.0 (o superior)/.NET 5.0 (o superior). Esto significa que es (entre otros) compatible con Unity 2021.2 o Mono 6.4. El paquete NuGet está disponible a través del feed oficial del paquete.
En el caso más simple, está creando un nuevo motor para mantener un alcance global (para variables y funciones) e iniciar la interpretación.
var engine = new Mages . Core . Engine ( ) ;
var result = engine . Interpret ( " sin(2) * cos(pi / 4) " ) ; // 0.642970376623918
También puedes seguir adelante y crear bloques reutilizables a partir de fragmentos.
var expOne = engine . Compile ( " exp(1) " ) ;
var result = expOne ( ) ; // 2.71828182845905
O puedes interactuar con elementos creados por MAGES.
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Invoke ( new Object [ ] { 4.0 , 3.0 } ) ; // 18.0
O incluso más simple (los detalles se explican en el documento de introducción):
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Call ( 4 , 3 ) ; // 18.0
Estos son sólo algunos de los ejemplos más básicos. Puede encontrar más información en la documentación.
La documentación se proporciona en forma de documentos Markdown que se colocan en la carpeta de documentos de este repositorio. Vale la pena consultar los siguientes enlaces:
Si falta algo, no está claro o está mal, envíe un PR o presente un problema. Consulte la siguiente sección sobre contribuciones para obtener más información.
Las contribuciones en forma de implementaciones de funciones o corrección de errores son bienvenidas, pero deben realizarse de manera organizada y coherente. Las pautas de contribución deben leerse antes de iniciar cualquier trabajo.
También se pueden recibir contribuciones en forma de informes de errores y solicitudes de funciones. ¡Larga vida al desarrollo de código abierto!
Las reglas de semver son nuestro pan de cada día. En resumen esto significa:
Por lo tanto: no espere cambios importantes dentro de la misma versión principal.
Las siguientes empresas patrocinaron parte del desarrollo de MAGES.
¡Gracias por todo el apoyo y confianza en el proyecto!
La licencia MIT (MIT)
Copyright (c) 2016-2024 Florian Rappl
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.